Изменение формата изображения полученной поверхности Directx в opencl
Я работаю в 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
Я хочу изменить формат изображения плоскости 0 (означает поверхность [0] и поверхность [2]) объекта opencl на CL_RGBA. Есть ли способ, которым я могу это сделать?
1 ответ
Вы можете конвертировать из NV12 в RGBA, используя Intel OpenCL SDK. ( https://software.intel.com/en-us/intel-opencl)
Пример кода здесь. ( https://github.com/ChiahungTai/OpenCL-playgorund/tree/master/intel/ResourceSharing/DXVASurfaceSharing)