1

我在 opencl 工作,从 Directx 获取媒体表面

  /* Working on NV12 surfaces, associate the shared buffer with the kernel object*/
  p->memobj[0] = clCreateFromDX9MediaSurfaceINTEL(p->context, CL_MEM_READ_ONLY, input_D3D_surf, input_D3D_surf_hdl, 0, &error);
  p->memobj[1] = clCreateFromDX9MediaSurfaceINTEL(p->context, CL_MEM_READ_ONLY, input_D3D_surf, input_D3D_surf_hdl, 1, &error);
  p->memobj[2] = clCreateFromDX9MediaSurfaceINTEL(p->context, CL_MEM_READ_ONLY, input_D3D_surf, input_D3D_surf_hdl, 0, &error);
  p->memobj[3] = clCreateFromDX9MediaSurfaceINTEL(p->context, CL_MEM_READ_ONLY, input_D3D_surf, input_D3D_surf_hdl, 1, &error);
  cl_mem surfaces[4];
  surfaces[0] = p->memobj[0];
  surfaces[1] = p->memobj[1];
  surfaces[2] = p->memobj[2];
  surfaces[3] = p->memobj[3];

  error = clEnqueueAcquireDX9ObjectsINTEL(p->command_queue, 4, surfaces, 0, NULL, NULL);

媒体表面具有如下和此处指定的 NV12 格式

MAKEFOURCC(?N?,?V?,?1?,?2?),Plane0    CL_R         CL_UNORM_INT8
MAKEFOURCC(?N?,?V?,?1?,?2?),Plane1    CL_RG        CL_UNORM_INT8

我想将opencl对象的平面0(表示表面[0]和表面[2])的图像格式更改为CL_RGBA。有什么办法可以做到这一点吗?

4

1 回答 1

1

您可以使用英特尔 OpenCL SDK 从 NV12 转换为 RGBA。(https://software.intel.com/en-us/intel-opencl

示例代码在这里。( https://github.com/ChiahungTai/OpenCL-playgorund/tree/master/intel/ResourceSharing/DXVASurfaceSharing )

于 2016-02-12T02:43:03.177 回答