在 opencl 中更改 Directx 获取表面的图像格式
Posted
技术标签:
【中文标题】在 opencl 中更改 Directx 获取表面的图像格式【英文标题】:Changing image format of a Directx acquired surface in opencl 【发布时间】:2015-08-20 07:12:48 【问题描述】:我在 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 格式和here
MAKEFOURCC(?N?,?V?,?1?,?2?),Plane0 CL_R CL_UNORM_INT8
MAKEFOURCC(?N?,?V?,?1?,?2?),Plane1 CL_RG CL_UNORM_INT8
我想将opencl对象的平面0(表示surface[0]和surface[2])的图像格式更改为CL_RGBA,有什么办法可以做到吗?
【问题讨论】:
【参考方案1】:您可以使用英特尔 OpenCL SDK 从 NV12 转换为 RGBA。 (https://software.intel.com/en-us/intel-opencl)
示例代码在这里。 (https://github.com/ChiahungTai/OpenCL-playgorund/tree/master/intel/ResourceSharing/DXVASurfaceSharing)
【讨论】:
以上是关于在 opencl 中更改 Directx 获取表面的图像格式的主要内容,如果未能解决你的问题,请参考以下文章
DirectX11 With Windows SDK--25 法线贴图
在 ffplay 中获得绿屏:使用 Live555 通过 RTP 流将桌面(DirectX 表面)流式传输为 H264 视频
nvidia/cuda 公开源中的devel和runtime有啥区别