I've developed a pipeline as shown below:
HEVC Decoder --> YUV1 --> openCL Filter --> YUV2 --> HEVC Encoder
Here openCL Filter is not a plugin for QSV, its a separate module. YUV1 and YUV2 frames reside in DX surface.
For openCL filter, if I don't memcpy the frame surface and pass the same surface pointer to the openCL Filter, the output YUV2 gets corrupted. Whereas if i memcpy the YUV1 surface to a unsigned char buffer then apply filter and again memcpy back the result to YUV2 surface the application works but performance is degraded drastically.
Can someone please clarify:
1. Why passing the pointer YUV1->data.y to openCL Filter doesn't work?
2. Is there any work around to remove memcpys?
P.S.: The application is developed in C.
Could you please take a look at this tutorial https://software.intel.com/en-us/articles/sharing-surfaces-between-opencl-and-directx-11-on-intel-processor-graphics and make sure that you apply all the recommendations there.