19 #define CL_USE_DEPRECATED_OPENCL_1_2_APIS 
   34 #if HAVE_OPENCL_VAAPI_BEIGNET 
   37 #include <va/va_drmcommon.h> 
   38 #include <CL/cl_intel.h> 
   42 #if HAVE_OPENCL_DRM_BEIGNET 
   44 #include <CL/cl_intel.h> 
   48 #if HAVE_OPENCL_VAAPI_INTEL_MEDIA 
   50 #include <mfx/mfxstructures.h> 
   53 #include <CL/cl_va_api_media_sharing_intel.h> 
   59 #include <CL/cl_dx9_media_sharing.h> 
   65 #include <CL/cl_d3d11.h> 
   69 #if HAVE_OPENCL_DRM_ARM 
   70 #include <CL/cl_ext.h> 
   71 #include <drm_fourcc.h> 
   87 #if HAVE_OPENCL_DRM_BEIGNET 
   88     int beignet_drm_mapping_usable;
 
   89     clCreateImageFromFdINTEL_fn clCreateImageFromFdINTEL;
 
   92 #if HAVE_OPENCL_VAAPI_INTEL_MEDIA 
   93     int qsv_mapping_usable;
 
   94     clCreateFromVA_APIMediaSurfaceINTEL_fn
 
   95         clCreateFromVA_APIMediaSurfaceINTEL;
 
   96     clEnqueueAcquireVA_APIMediaSurfacesINTEL_fn
 
   97         clEnqueueAcquireVA_APIMediaSurfacesINTEL;
 
   98     clEnqueueReleaseVA_APIMediaSurfacesINTEL_fn
 
   99         clEnqueueReleaseVA_APIMediaSurfacesINTEL;
 
  102 #if HAVE_OPENCL_DXVA2 
  103     int dxva2_mapping_usable;
 
  104     cl_dx9_media_adapter_type_khr dx9_media_adapter_type;
 
  106     clCreateFromDX9MediaSurfaceKHR_fn
 
  107         clCreateFromDX9MediaSurfaceKHR;
 
  108     clEnqueueAcquireDX9MediaSurfacesKHR_fn
 
  109         clEnqueueAcquireDX9MediaSurfacesKHR;
 
  110     clEnqueueReleaseDX9MediaSurfacesKHR_fn
 
  111         clEnqueueReleaseDX9MediaSurfacesKHR;
 
  114 #if HAVE_OPENCL_D3D11 
  115     int d3d11_mapping_usable;
 
  116     clCreateFromD3D11Texture2DKHR_fn
 
  117         clCreateFromD3D11Texture2DKHR;
 
  118     clEnqueueAcquireD3D11ObjectsKHR_fn
 
  119         clEnqueueAcquireD3D11ObjectsKHR;
 
  120     clEnqueueReleaseD3D11ObjectsKHR_fn
 
  121         clEnqueueReleaseD3D11ObjectsKHR;
 
  124 #if HAVE_OPENCL_DRM_ARM 
  125     int drm_arm_mapping_usable;
 
  136 #if HAVE_OPENCL_DXVA2 || HAVE_OPENCL_D3D11 
  140     int                   nb_mapped_frames;
 
  147                                               const void *private_info,
 
  160     cle = clReleaseContext(hwctx->
context);
 
  161     if (cle != CL_SUCCESS) {
 
  163                "context: %d.\n", cle);
 
  171     { 
"platform_profile",    CL_PLATFORM_PROFILE    },
 
  172     { 
"platform_version",    CL_PLATFORM_VERSION    },
 
  173     { 
"platform_name",       CL_PLATFORM_NAME       },
 
  174     { 
"platform_vendor",     CL_PLATFORM_VENDOR     },
 
  175     { 
"platform_extensions", CL_PLATFORM_EXTENSIONS },
 
  182     { 
"device_name",         CL_DEVICE_NAME         },
 
  183     { 
"device_vendor",       CL_DEVICE_VENDOR       },
 
  184     { 
"driver_version",      CL_DRIVER_VERSION      },
 
  185     { 
"device_version",      CL_DEVICE_VERSION      },
 
  186     { 
"device_profile",      CL_DEVICE_PROFILE      },
 
  187     { 
"device_extensions",   CL_DEVICE_EXTENSIONS   },
 
  194     { 
"cpu",         CL_DEVICE_TYPE_CPU         },
 
  195     { 
"gpu",         CL_DEVICE_TYPE_GPU         },
 
  196     { 
"accelerator", CL_DEVICE_TYPE_ACCELERATOR },
 
  197     { 
"custom",      CL_DEVICE_TYPE_CUSTOM      },
 
  198     { 
"default",     CL_DEVICE_TYPE_DEFAULT     },
 
  199     { 
"all",         CL_DEVICE_TYPE_ALL         },
 
  203                                         cl_platform_info 
key)
 
  208     cle = clGetPlatformInfo(platform_id, 
key, 0, 
NULL, &
size);
 
  209     if (cle != CL_SUCCESS)
 
  215     if (cle != CL_SUCCESS) {
 
  229     cle = clGetDeviceInfo(device_id, 
key, 0, 
NULL, &
size);
 
  230     if (cle != CL_SUCCESS)
 
  236     if (cle != CL_SUCCESS) {
 
  250                                      CL_PLATFORM_EXTENSIONS);
 
  263                                    CL_DEVICE_EXTENSIONS);
 
  278                "%s found as platform extension.\n", 
name);
 
  284                "%s found as device extension.\n", 
name);
 
  292                                       cl_uint *nb_platforms,
 
  293                                       cl_platform_id **platforms,
 
  298     cle = clGetPlatformIDs(0, 
NULL, nb_platforms);
 
  299     if (cle != CL_SUCCESS) {
 
  301                "OpenCL platforms: %d.\n", cle);
 
  311     cle = clGetPlatformIDs(*nb_platforms, *platforms, 
NULL);
 
  312     if (cle != CL_SUCCESS) {
 
  314                "platforms: %d.\n", cle);
 
  323                                   cl_platform_id platform_id,
 
  324                                   const char *platform_name,
 
  342                    "of platform \"%s\".\n",
 
  358                                     cl_platform_id platform_id,
 
  359                                     const char *platform_name,
 
  361                                     cl_device_id **devices,
 
  366     cle = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_ALL,
 
  367                          0, 
NULL, nb_devices);
 
  368     if (cle == CL_DEVICE_NOT_FOUND) {
 
  370                "on platform \"%s\".\n", platform_name);
 
  373     } 
else if (cle != CL_SUCCESS) {
 
  375                "on platform \"%s\": %d.\n", platform_name, cle);
 
  379            "platform \"%s\".\n", *nb_devices, platform_name);
 
  385     cle = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_ALL,
 
  386                          *nb_devices, *devices, 
NULL);
 
  387     if (cle != CL_SUCCESS) {
 
  389                "on platform \"%s\": %d.\n", platform_name, cle);
 
  398                                 cl_device_id device_id,
 
  399                                 const char *device_name,
 
  409         cl_device_type match_type = 0, device_type;
 
  424         cle = clGetDeviceInfo(device_id, CL_DEVICE_TYPE,
 
  425                               sizeof(device_type), &device_type, 
NULL);
 
  426         if (cle != CL_SUCCESS) {
 
  428                    "of device \"%s\".\n", device_name);
 
  432         if (!(device_type & match_type)) {
 
  448                    "of device \"%s\".\n",
 
  468                                cl_uint *nb_platforms,
 
  469                                cl_platform_id **platforms,
 
  472                                cl_platform_id platform_id,
 
  473                                const char *platform_name,
 
  476                                cl_platform_id platform_id,
 
  477                                const char *platform_name,
 
  479                                cl_device_id **devices,
 
  482                                cl_device_id device_id,
 
  483                                const char *device_name,
 
  489                                          cl_context_properties *props)
 
  491     cl_uint      nb_platforms;
 
  492     cl_platform_id *platforms = 
NULL;
 
  493     cl_platform_id  platform_id;
 
  495     cl_device_id   *devices = 
NULL;
 
  498     cl_context_properties default_props[3];
 
  499     char *platform_name_src = 
NULL,
 
  500          *device_name_src   = 
NULL;
 
  501     int err, found, p, 
d;
 
  512     for (p = 0; p < nb_platforms; p++) {
 
  513         const char *platform_name;
 
  522         if (platform_name_src)
 
  523             platform_name = platform_name_src;
 
  525             platform_name = 
"Unknown Platform";
 
  538                                           &nb_devices, &devices,
 
  543         for (
d = 0; 
d < nb_devices; 
d++) {
 
  544             const char *device_name;
 
  554                 device_name = device_name_src;
 
  556                 device_name = 
"Unknown Device";
 
  569                    platform_name, device_name);
 
  572             platform_id      = platforms[p];
 
  591         props = default_props;
 
  592         default_props[0] = CL_CONTEXT_PLATFORM;
 
  593         default_props[1] = (intptr_t)platform_id;
 
  594         default_props[2] = 0;
 
  596         if (props[0] == CL_CONTEXT_PLATFORM && props[1] == 0)
 
  597             props[1] = (intptr_t)platform_id;
 
  631     if (device && device[0]) {
 
  633         int d = -1, p = -1, 
ret;
 
  634         if (device[0] == 
'.')
 
  635             ret = sscanf(device, 
".%d", &
d);
 
  637             ret = sscanf(device, 
"%d.%d", &p, &
d);
 
  640                    "index specification \"%s\".\n", device);
 
  661         if (cle != CL_SUCCESS) {
 
  663                    "command queue: %d.\n", cle);
 
  673                    "command queue: %d.\n", cle);
 
  678     cle = clGetDeviceInfo(hwctx->
device_id, CL_DEVICE_PLATFORM,
 
  681     if (cle != CL_SUCCESS) {
 
  683                "platform containing the device.\n");
 
  687 #define CL_FUNC(name, desc) do {                                \ 
  690         priv->name = clGetExtensionFunctionAddressForPlatform(  \ 
  691             priv->platform_id, #name);                          \ 
  693             av_log(hwdev, AV_LOG_VERBOSE,                       \ 
  694                    desc " function not found (%s).\n", #name);  \ 
  697             av_log(hwdev, AV_LOG_VERBOSE,                       \ 
  698                    desc " function found (%s).\n", #name);      \ 
  702 #if HAVE_OPENCL_DRM_BEIGNET 
  706         CL_FUNC(clCreateImageFromFdINTEL,
 
  707                 "Beignet DRM to OpenCL image mapping");
 
  711                    "mapping not usable.\n");
 
  712             priv->beignet_drm_mapping_usable = 0;
 
  714             priv->beignet_drm_mapping_usable = 1;
 
  719 #if HAVE_OPENCL_VAAPI_INTEL_MEDIA 
  722         cl_context_properties *props = 
NULL;
 
  723         VADisplay va_display;
 
  724         const char *va_ext = 
"cl_intel_va_api_media_sharing";
 
  729                    "required for QSV to OpenCL mapping.\n", va_ext);
 
  733         cle = clGetContextInfo(hwctx->
context, CL_CONTEXT_PROPERTIES,
 
  734                                0, 
NULL, &props_size);
 
  735         if (cle != CL_SUCCESS) {
 
  737                    "properties: %d.\n", cle);
 
  740         if (props_size == 0) {
 
  742                    "enabled on context creation to use QSV to " 
  743                    "OpenCL mapping.\n");
 
  751         cle = clGetContextInfo(hwctx->
context, CL_CONTEXT_PROPERTIES,
 
  752                                props_size, props, 
NULL);
 
  753         if (cle != CL_SUCCESS) {
 
  755                    "properties: %d.\n", cle);
 
  760         for (
i = 0; 
i < (props_size / 
sizeof(*props) - 1); 
i++) {
 
  761             if (props[
i] == CL_CONTEXT_VA_API_DISPLAY_INTEL) {
 
  762                 va_display = (VADisplay)(intptr_t)props[
i+1];
 
  768                    "enabled on context creation to use QSV to " 
  769                    "OpenCL mapping.\n");
 
  772         if (!vaDisplayIsValid(va_display)) {
 
  774                    "required on context creation to use QSV to " 
  775                    "OpenCL mapping.\n");
 
  779         CL_FUNC(clCreateFromVA_APIMediaSurfaceINTEL,
 
  780                 "Intel QSV to OpenCL mapping");
 
  781         CL_FUNC(clEnqueueAcquireVA_APIMediaSurfacesINTEL,
 
  782                 "Intel QSV in OpenCL acquire");
 
  783         CL_FUNC(clEnqueueReleaseVA_APIMediaSurfacesINTEL,
 
  784                 "Intel QSV in OpenCL release");
 
  790             priv->qsv_mapping_usable = 0;
 
  792             priv->qsv_mapping_usable = 1;
 
  798 #if HAVE_OPENCL_DXVA2 
  802         CL_FUNC(clCreateFromDX9MediaSurfaceKHR,
 
  803                 "DXVA2 to OpenCL mapping");
 
  804         CL_FUNC(clEnqueueAcquireDX9MediaSurfacesKHR,
 
  805                 "DXVA2 in OpenCL acquire");
 
  806         CL_FUNC(clEnqueueReleaseDX9MediaSurfacesKHR,
 
  807                 "DXVA2 in OpenCL release");
 
  812             priv->dxva2_mapping_usable = 0;
 
  814             priv->dx9_media_adapter_type = CL_ADAPTER_D3D9EX_KHR;
 
  815             priv->dxva2_mapping_usable = 1;
 
  820 #if HAVE_OPENCL_D3D11 
  822         const char *d3d11_ext = 
"cl_khr_d3d11_sharing";
 
  823         const char *nv12_ext  = 
"cl_intel_d3d11_nv12_media_sharing";
 
  828                    "required for D3D11 to OpenCL mapping.\n", d3d11_ext);
 
  832                    "required for D3D11 to OpenCL mapping.\n", nv12_ext);
 
  836         CL_FUNC(clCreateFromD3D11Texture2DKHR,
 
  837                 "D3D11 to OpenCL mapping");
 
  838         CL_FUNC(clEnqueueAcquireD3D11ObjectsKHR,
 
  839                 "D3D11 in OpenCL acquire");
 
  840         CL_FUNC(clEnqueueReleaseD3D11ObjectsKHR,
 
  841                 "D3D11 in OpenCL release");
 
  846             priv->d3d11_mapping_usable = 0;
 
  848             priv->d3d11_mapping_usable = 1;
 
  853 #if HAVE_OPENCL_DRM_ARM 
  855         const char *drm_arm_ext = 
"cl_arm_import_memory";
 
  856         const char *image_ext   = 
"cl_khr_image2d_from_buffer";
 
  861                    "required for DRM to OpenCL mapping on ARM.\n",
 
  867                    "required for DRM to OpenCL mapping on ARM.\n",
 
  877             priv->drm_arm_mapping_usable = 0;
 
  879             priv->drm_arm_mapping_usable = 1;
 
  896         if (cle != CL_SUCCESS) {
 
  898                    "command queue reference: %d.\n", cle);
 
  904 #if HAVE_OPENCL_VAAPI_INTEL_MEDIA 
  906                                                     cl_platform_id platform_id,
 
  907                                                     const char *platform_name,
 
  913     if (!clGetExtensionFunctionAddressForPlatform(platform_id,
 
  914             "clGetDeviceIDsFromVA_APIMediaAdapterINTEL")) {
 
  916                "VAAPI device enumeration function.\n", platform_name);
 
  924                                                       cl_platform_id platform_id,
 
  925                                                       const char *platform_name,
 
  927                                                       cl_device_id **devices,
 
  930     VADisplay va_display = 
context;
 
  931     clGetDeviceIDsFromVA_APIMediaAdapterINTEL_fn
 
  932         clGetDeviceIDsFromVA_APIMediaAdapterINTEL;
 
  935     clGetDeviceIDsFromVA_APIMediaAdapterINTEL =
 
  936         clGetExtensionFunctionAddressForPlatform(platform_id,
 
  937             "clGetDeviceIDsFromVA_APIMediaAdapterINTEL");
 
  938     if (!clGetDeviceIDsFromVA_APIMediaAdapterINTEL) {
 
  940                "clGetDeviceIDsFromVA_APIMediaAdapterINTEL().\n");
 
  944     cle = clGetDeviceIDsFromVA_APIMediaAdapterINTEL(
 
  945         platform_id, CL_VA_API_DISPLAY_INTEL, va_display,
 
  946         CL_PREFERRED_DEVICES_FOR_VA_API_INTEL, 0, 
NULL, nb_devices);
 
  947     if (cle == CL_DEVICE_NOT_FOUND) {
 
  949                "on platform \"%s\".\n", platform_name);
 
  952     } 
else if (cle != CL_SUCCESS) {
 
  954                "on platform \"%s\": %d.\n", platform_name, cle);
 
  962     cle = clGetDeviceIDsFromVA_APIMediaAdapterINTEL(
 
  963         platform_id, CL_VA_API_DISPLAY_INTEL, va_display,
 
  964         CL_PREFERRED_DEVICES_FOR_VA_API_INTEL, *nb_devices, *devices, 
NULL);
 
  965     if (cle != CL_SUCCESS) {
 
  967                "devices on platform \"%s\": %d.\n", platform_name, cle);
 
  976                                                   cl_device_id device_id,
 
  977                                                   const char *device_name,
 
  980     const char *va_ext = 
"cl_intel_va_api_media_sharing";
 
  986                "%s extension.\n", device_name, va_ext);
 
  992 #if HAVE_OPENCL_DXVA2 
  994                                         cl_platform_id platform_id,
 
  995                                         const char *platform_name,
 
  998     const char *dx9_ext = 
"cl_khr_dx9_media_sharing";
 
 1004                "%s extension.\n", platform_name, dx9_ext);
 
 1010                                           cl_platform_id platform_id,
 
 1011                                           const char *platform_name,
 
 1012                                           cl_uint *nb_devices,
 
 1013                                           cl_device_id **devices,
 
 1016     IDirect3DDevice9 *device = 
context;
 
 1017     clGetDeviceIDsFromDX9MediaAdapterKHR_fn
 
 1018         clGetDeviceIDsFromDX9MediaAdapterKHR;
 
 1019     cl_dx9_media_adapter_type_khr media_adapter_type = CL_ADAPTER_D3D9EX_KHR;
 
 1022     clGetDeviceIDsFromDX9MediaAdapterKHR =
 
 1023         clGetExtensionFunctionAddressForPlatform(platform_id,
 
 1024             "clGetDeviceIDsFromDX9MediaAdapterKHR");
 
 1025     if (!clGetDeviceIDsFromDX9MediaAdapterKHR) {
 
 1027                "clGetDeviceIDsFromDX9MediaAdapterKHR().\n");
 
 1031     cle = clGetDeviceIDsFromDX9MediaAdapterKHR(
 
 1032         platform_id, 1, &media_adapter_type, (
void**)&device,
 
 1033         CL_PREFERRED_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR,
 
 1034         0, 
NULL, nb_devices);
 
 1035     if (cle == CL_DEVICE_NOT_FOUND) {
 
 1037                "on platform \"%s\".\n", platform_name);
 
 1040     } 
else if (cle != CL_SUCCESS) {
 
 1042                "on platform \"%s\": %d.\n", platform_name, cle);
 
 1050     cle = clGetDeviceIDsFromDX9MediaAdapterKHR(
 
 1051         platform_id, 1, &media_adapter_type, (
void**)&device,
 
 1052         CL_PREFERRED_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR,
 
 1053         *nb_devices, *devices, 
NULL);
 
 1054     if (cle != CL_SUCCESS) {
 
 1056                "devices on platform \"%s\": %d.\n", platform_name, cle);
 
 1065 #if HAVE_OPENCL_D3D11 
 1067                                         cl_platform_id platform_id,
 
 1068                                         const char *platform_name,
 
 1071     const char *d3d11_ext = 
"cl_khr_d3d11_sharing";
 
 1077                "%s extension.\n", platform_name, d3d11_ext);
 
 1083                                           cl_platform_id platform_id,
 
 1084                                           const char *platform_name,
 
 1085                                           cl_uint *nb_devices,
 
 1086                                           cl_device_id **devices,
 
 1090     clGetDeviceIDsFromD3D11KHR_fn clGetDeviceIDsFromD3D11KHR;
 
 1093     clGetDeviceIDsFromD3D11KHR =
 
 1094         clGetExtensionFunctionAddressForPlatform(platform_id,
 
 1095             "clGetDeviceIDsFromD3D11KHR");
 
 1096     if (!clGetDeviceIDsFromD3D11KHR) {
 
 1098                "clGetDeviceIDsFromD3D11KHR().\n");
 
 1102     cle = clGetDeviceIDsFromD3D11KHR(platform_id,
 
 1103                                      CL_D3D11_DEVICE_KHR, device,
 
 1104                                      CL_PREFERRED_DEVICES_FOR_D3D11_KHR,
 
 1105                                      0, 
NULL, nb_devices);
 
 1106     if (cle == CL_DEVICE_NOT_FOUND) {
 
 1108                "on platform \"%s\".\n", platform_name);
 
 1111     } 
else if (cle != CL_SUCCESS) {
 
 1113                "on platform \"%s\": %d.\n", platform_name, cle);
 
 1121     cle = clGetDeviceIDsFromD3D11KHR(platform_id,
 
 1122                                      CL_D3D11_DEVICE_KHR, device,
 
 1123                                      CL_PREFERRED_DEVICES_FOR_D3D11_KHR,
 
 1124                                      *nb_devices, *devices, 
NULL);
 
 1125     if (cle != CL_SUCCESS) {
 
 1127                "devices on platform \"%s\": %d.\n", platform_name, cle);
 
 1136 #if HAVE_OPENCL_DXVA2 || HAVE_OPENCL_D3D11 
 1138                                     cl_device_id device_id,
 
 1139                                     const char *device_name,
 
 1142     cl_device_type device_type;
 
 1145     cle = clGetDeviceInfo(device_id, CL_DEVICE_TYPE,
 
 1146                           sizeof(device_type), &device_type, 
NULL);
 
 1147     if (cle != CL_SUCCESS) {
 
 1149                "of device \"%s\".\n", device_name);
 
 1152     if (!(device_type & CL_DEVICE_TYPE_GPU)) {
 
 1162 #if HAVE_OPENCL_DRM_ARM 
 1164                                           cl_platform_id platform_id,
 
 1165                                           const char *platform_name,
 
 1168     const char *drm_arm_ext = 
"cl_arm_import_memory";
 
 1174                "%s extension.\n", platform_name, drm_arm_ext);
 
 1180                                         cl_device_id device_id,
 
 1181                                         const char *device_name,
 
 1184     const char *drm_arm_ext = 
"cl_arm_import_memory";
 
 1190                "%s extension.\n", device_name, drm_arm_ext);
 
 1201     switch (src_ctx->
type) {
 
 1203 #if HAVE_OPENCL_DRM_BEIGNET 
 1212             err = 
av_dict_set(&selector_opts, 
"platform_vendor", 
"Intel", 0);
 
 1214                 err = 
av_dict_set(&selector_opts, 
"platform_version", 
"beignet", 0);
 
 1219                     .context             = selector_opts,
 
 1223                     .filter_device       = 
NULL,
 
 1232 #if HAVE_OPENCL_VAAPI_INTEL_MEDIA 
 1239             cl_context_properties props[7] = {
 
 1240                 CL_CONTEXT_PLATFORM,
 
 1242                 CL_CONTEXT_VA_API_DISPLAY_INTEL,
 
 1244                 CL_CONTEXT_INTEROP_USER_SYNC,
 
 1251                 .context             = src_hwctx->
display,
 
 1253                 .filter_platform     = &opencl_filter_intel_media_vaapi_platform,
 
 1254                 .enumerate_devices   = &opencl_enumerate_intel_media_vaapi_devices,
 
 1255                 .filter_device       = &opencl_filter_intel_media_vaapi_device,
 
 1263 #if HAVE_OPENCL_DXVA2 
 1267             IDirect3DDevice9 *device;
 
 1268             HANDLE device_handle;
 
 1271             hr = IDirect3DDeviceManager9_OpenDeviceHandle(src_hwctx->
devmgr,
 
 1275                        "for Direct3D9 device: %lx.\n", (
unsigned long)hr);
 
 1280             hr = IDirect3DDeviceManager9_LockDevice(src_hwctx->
devmgr,
 
 1283             if (SUCCEEDED(hr)) {
 
 1284                 cl_context_properties props[5] = {
 
 1285                     CL_CONTEXT_PLATFORM,
 
 1287                     CL_CONTEXT_ADAPTER_D3D9EX_KHR,
 
 1296                     .filter_platform     = &opencl_filter_dxva2_platform,
 
 1297                     .enumerate_devices   = &opencl_enumerate_dxva2_devices,
 
 1298                     .filter_device       = &opencl_filter_gpu_device,
 
 1303                 IDirect3DDeviceManager9_UnlockDevice(src_hwctx->
devmgr,
 
 1304                                                      device_handle, FALSE);
 
 1307                        "for Direct3D9 device: %lx.\n", (
unsigned long)hr);
 
 1311             IDirect3DDeviceManager9_CloseDeviceHandle(src_hwctx->
devmgr,
 
 1317 #if HAVE_OPENCL_D3D11 
 1321             cl_context_properties props[5] = {
 
 1322                 CL_CONTEXT_PLATFORM,
 
 1324                 CL_CONTEXT_D3D11_DEVICE_KHR,
 
 1325                 (intptr_t)src_hwctx->
device,
 
 1331                 .context             = src_hwctx->
device,
 
 1333                 .filter_platform     = &opencl_filter_d3d11_platform,
 
 1334                 .enumerate_devices   = &opencl_enumerate_d3d11_devices,
 
 1335                 .filter_device       = &opencl_filter_gpu_device,
 
 1343 #if HAVE_OPENCL_DRM_ARM 
 1351                 .filter_platform     = &opencl_filter_drm_arm_platform,
 
 1353                 .filter_device       = &opencl_filter_drm_arm_device,
 
 1371                                    cl_image_format *image_format,
 
 1372                                    cl_image_desc *image_desc)
 
 1391     wsub = 1 << 
desc->log2_chroma_w;
 
 1397     for (
c = 0; 
c < 
desc->nb_components; 
c++) {
 
 1399         if (
comp->plane != plane)
 
 1402         if (
comp->step != 1 && 
comp->step != 2 &&
 
 1403             comp->step != 4 && 
comp->step != 8)
 
 1407         if (
comp->shift + 
comp->depth != 8 &&
 
 1411         if (depth && 
comp->depth != depth)
 
 1415         if (
comp->depth > 8 &&
 
 1423         depth = 
comp->depth;
 
 1424         order = order * 10 + 
comp->offset / ((depth + 7) / 8) + 1;
 
 1427                  c == 
desc->nb_components - 1);
 
 1433     memset(image_format, 0, 
sizeof(*image_format));
 
 1434     memset(image_desc,   0, 
sizeof(*image_desc));
 
 1435     image_desc->image_type = CL_MEM_OBJECT_IMAGE2D;
 
 1437     if (plane == 0 || 
alpha) {
 
 1438         image_desc->image_width     = 
width;
 
 1439         image_desc->image_height    = 
height;
 
 1440         image_desc->image_row_pitch = 
step * 
width;
 
 1442         image_desc->image_width     = 
width  / wsub;
 
 1444         image_desc->image_row_pitch = 
step * 
width / wsub;
 
 1448         image_format->image_channel_data_type = CL_UNORM_INT8;
 
 1451             image_format->image_channel_data_type = CL_UNORM_INT16;
 
 1456 #define CHANNEL_ORDER(order, type) \ 
 1457     case order: image_format->image_channel_order = type; break; 
 1470 #undef CHANNEL_ORDER 
 1476                                          const void *hwconfig,
 
 1480     cl_uint nb_image_formats;
 
 1481     cl_image_format *image_formats = 
NULL;
 
 1484     int err, pix_fmts_found;
 
 1485     size_t max_width, max_height;
 
 1487     cle = clGetDeviceInfo(hwctx->
device_id, CL_DEVICE_IMAGE2D_MAX_WIDTH,
 
 1488                           sizeof(max_width), &max_width, 
NULL);
 
 1489     if (cle != CL_SUCCESS) {
 
 1491                "supported image width: %d.\n", cle);
 
 1495     cle = clGetDeviceInfo(hwctx->
device_id, CL_DEVICE_IMAGE2D_MAX_HEIGHT,
 
 1496                           sizeof(max_height), &max_height, 
NULL);
 
 1497     if (cle != CL_SUCCESS) {
 
 1499                "supported image height: %d.\n", cle);
 
 1506     cle = clGetSupportedImageFormats(hwctx->
context,
 
 1508                                      CL_MEM_OBJECT_IMAGE2D,
 
 1509                                      0, 
NULL, &nb_image_formats);
 
 1510     if (cle != CL_SUCCESS) {
 
 1512                "image formats: %d.\n", cle);
 
 1516     if (nb_image_formats == 0) {
 
 1518                "driver (zero supported image formats).\n");
 
 1525     if (!image_formats) {
 
 1530     cle = clGetSupportedImageFormats(hwctx->
context,
 
 1532                                      CL_MEM_OBJECT_IMAGE2D,
 
 1534                                      image_formats, 
NULL);
 
 1535     if (cle != CL_SUCCESS) {
 
 1537                "image formats: %d.\n", cle);
 
 1544         cl_image_format image_format;
 
 1545         cl_image_desc   image_desc;
 
 1548         for (plane = 0;; plane++) {
 
 1555             for (
i = 0; 
i < nb_image_formats; 
i++) {
 
 1556                 if (image_formats[
i].image_channel_order ==
 
 1557                     image_format.image_channel_order &&
 
 1558                     image_formats[
i].image_channel_data_type ==
 
 1559                     image_format.image_channel_data_type)
 
 1562             if (
i == nb_image_formats) {
 
 1609     for (p = 0; p < 
desc->nb_planes; p++) {
 
 1610         cle = clReleaseMemObject(
desc->planes[p]);
 
 1611         if (cle != CL_SUCCESS) {
 
 1627     cl_image_format image_format;
 
 1628     cl_image_desc   image_desc;
 
 1639                                       &image_format, &image_desc);
 
 1647         image_desc.image_row_pitch = 0;
 
 1649         image = clCreateImage(hwctx->
context, CL_MEM_READ_WRITE,
 
 1650                               &image_format, &image_desc, 
NULL, &cle);
 
 1653                    "plane %d: %d.\n", p, cle);
 
 1657         desc->planes[p] = image;
 
 1660     desc->nb_planes = p;
 
 1670     for (p = 0; 
desc->planes[p]; p++)
 
 1671         clReleaseMemObject(
desc->planes[p]);
 
 1686     if (cle != CL_SUCCESS) {
 
 1688                "command queue: %d.\n", cle);
 
 1713 #if HAVE_OPENCL_DXVA2 || HAVE_OPENCL_D3D11 
 1715     for (
i = 0; 
i < priv->nb_mapped_frames; 
i++) {
 
 1717         for (p = 0; p < 
desc->nb_planes; p++) {
 
 1718             cle = clReleaseMemObject(
desc->planes[p]);
 
 1719             if (cle != CL_SUCCESS) {
 
 1721                        "frame object (frame %d plane %d): %d.\n",
 
 1731         if (cle != CL_SUCCESS) {
 
 1733                    "command queue: %d.\n", cle);
 
 1750     for (p = 0; p < 
desc->nb_planes; p++)
 
 1751         frame->data[p] = (uint8_t*)
desc->planes[p];
 
 1778                               cl_event *events, 
int nb_events)
 
 1783     cle = clWaitForEvents(nb_events, events);
 
 1784     if (cle != CL_SUCCESS) {
 
 1786                "completion: %d.\n", cle);
 
 1790     for (
i = 0; 
i < nb_events; 
i++) {
 
 1791         cle = clReleaseEvent(events[
i]);
 
 1792         if (cle != CL_SUCCESS) {
 
 1794                    "event: %d.\n", cle);
 
 1805     cl_image_format image_format;
 
 1806     cl_image_desc image_desc;
 
 1808     size_t origin[3] = { 0, 0, 0 };
 
 1819                                       &image_format, &image_desc);
 
 1826         if (!dst->
data[p]) {
 
 1828                    "destination frame for transfer.\n", p);
 
 1833         region[0] = image_desc.image_width;
 
 1834         region[1] = image_desc.image_height;
 
 1838                                  (cl_mem)
src->data[p],
 
 1839                                  CL_FALSE, origin, region,
 
 1842                                  0, 
NULL, &events[p]);
 
 1843         if (cle != CL_SUCCESS) {
 
 1845                    "OpenCL image plane %d: %d.\n", p, cle);
 
 1860     cl_image_format image_format;
 
 1861     cl_image_desc image_desc;
 
 1863     size_t origin[3] = { 0, 0, 0 };
 
 1874                                       &image_format, &image_desc);
 
 1881         if (!
src->data[p]) {
 
 1883                    "source frame for transfer.\n", p);
 
 1888         region[0] = image_desc.image_width;
 
 1889         region[1] = image_desc.image_height;
 
 1893                                   (cl_mem)dst->
data[p],
 
 1894                                   CL_FALSE, origin, region,
 
 1895                                   src->linesize[p], 0,
 
 1897                                   0, 
NULL, &events[p]);
 
 1898         if (cle != CL_SUCCESS) {
 
 1900                    "OpenCL image plane %d: %d.\n", p, cle);
 
 1928         if (!
map->address[p])
 
 1934                                       0, 
NULL, &events[e]);
 
 1935         if (cle != CL_SUCCESS) {
 
 1937                    "image plane %d: %d.\n", p, cle);
 
 1951     cl_map_flags map_flags;
 
 1952     cl_image_format image_format;
 
 1953     cl_image_desc image_desc;
 
 1956     size_t origin[3] = { 0, 0, 0 };
 
 1968         map_flags = CL_MAP_WRITE_INVALIDATE_REGION;
 
 1972             map_flags |= CL_MAP_READ;
 
 1974             map_flags |= CL_MAP_WRITE;
 
 1984                                       &image_format, &image_desc);
 
 1990         region[0] = image_desc.image_width;
 
 1991         region[1] = image_desc.image_height;
 
 1996                               (cl_mem)
src->data[p],
 
 1997                               CL_FALSE, map_flags, origin, region,
 
 2000         if (!
map->address[p]) {
 
 2002                    "image plane %d: %d.\n", p, cle);
 
 2007         dst->
data[p] = 
map->address[p];
 
 2010                p, 
src->data[p], dst->
data[p]);
 
 2029         if (!
map->address[p])
 
 2032                                 (cl_mem)
src->data[p],
 
 2034                                 0, 
NULL, &events[p]);
 
 2042 #if HAVE_OPENCL_DRM_BEIGNET 
 2044 typedef struct DRMBeignetToOpenCLMapping {
 
 2049 } DRMBeignetToOpenCLMapping;
 
 2054     DRMBeignetToOpenCLMapping *mapping = hwmap->
priv;
 
 2058     for (
i = 0; 
i < mapping->frame.nb_planes; 
i++) {
 
 2059         cle = clReleaseMemObject(mapping->frame.planes[
i]);
 
 2060         if (cle != CL_SUCCESS) {
 
 2062                    "of plane %d of DRM frame: %d.\n", 
i, cle);
 
 2075     DRMBeignetToOpenCLMapping *mapping;
 
 2087     for (
i = 0; 
i < 
desc->nb_layers; 
i++) {
 
 2089         for (j = 0; j < layer->
nb_planes; j++) {
 
 2094             cl_import_image_info_intel image_info = {
 
 2096                 .size      = 
object->size,
 
 2097                 .type      = CL_MEM_OBJECT_IMAGE2D,
 
 2099                 .row_pitch = plane->
pitch,
 
 2101             cl_image_desc image_desc;
 
 2109                        "plane %d is not representable in OpenCL: %d.\n",
 
 2113             image_info.width  = image_desc.image_width;
 
 2114             image_info.height = image_desc.image_height;
 
 2116             mapping->frame.planes[p] =
 
 2117                 priv->clCreateImageFromFdINTEL(hwctx->
context,
 
 2119             if (!mapping->frame.planes[p]) {
 
 2121                        "from layer %d plane %d of DRM frame: %d.\n",
 
 2127             dst->
data[p] = (uint8_t*)mapping->frame.planes[p];
 
 2128             mapping->frame.nb_planes = ++p;
 
 2133                                 &opencl_unmap_from_drm_beignet,
 
 2144     for (p = 0; p < mapping->frame.nb_planes; p++) {
 
 2145         if (mapping->frame.planes[p])
 
 2146             clReleaseMemObject(mapping->frame.planes[p]);
 
 2152 #if HAVE_OPENCL_VAAPI_BEIGNET 
 2171     err = opencl_map_from_drm_beignet(dst_fc, dst, 
tmp, 
flags);
 
 2189         return CL_MEM_READ_WRITE;
 
 2191         return CL_MEM_READ_ONLY;
 
 2193         return CL_MEM_WRITE_ONLY;
 
 2198 #if HAVE_OPENCL_VAAPI_INTEL_MEDIA 
 2212     cle = device_priv->clEnqueueReleaseVA_APIMediaSurfacesINTEL(
 
 2215     if (cle != CL_SUCCESS) {
 
 2217                "handles: %d.\n", cle);
 
 2222     for (p = 0; p < 
desc->nb_planes; p++) {
 
 2223         cle = clReleaseMemObject(
desc->planes[p]);
 
 2224         if (cle != CL_SUCCESS) {
 
 2226                    "image of plane %d of QSV/VAAPI surface: %d\n",
 
 2243     VASurfaceID va_surface;
 
 2244     cl_mem_flags cl_flags;
 
 2251         mfxFrameSurface1 *mfx_surface = (mfxFrameSurface1*)
src->data[3];
 
 2252         va_surface = *(VASurfaceID*)mfx_surface->Data.MemId;
 
 2256         va_surface = (VASurfaceID)(uintptr_t)
src->data[3];
 
 2266            "OpenCL.\n", va_surface);
 
 2274     desc->nb_planes = 2;
 
 2276     for (p = 0; p < 
desc->nb_planes; p++) {
 
 2278             device_priv->clCreateFromVA_APIMediaSurfaceINTEL(
 
 2279                 dst_dev->context, cl_flags, &va_surface, p, &cle);
 
 2280         if (!
desc->planes[p]) {
 
 2282                    "image from plane %d of QSV/VAAPI surface " 
 2283                    "%#x: %d.\n", p, va_surface, cle);
 
 2288         dst->
data[p] = (uint8_t*)
desc->planes[p];
 
 2291     cle = device_priv->clEnqueueAcquireVA_APIMediaSurfacesINTEL(
 
 2294     if (cle != CL_SUCCESS) {
 
 2296                "handles: %d.\n", cle);
 
 2306                                 &opencl_unmap_from_qsv, 
desc);
 
 2316     for (p = 0; p < 
desc->nb_planes; p++)
 
 2317         if (
desc->planes[p])
 
 2318             clReleaseMemObject(
desc->planes[p]);
 
 2325 #if HAVE_OPENCL_DXVA2 
 2338     cle = device_priv->clEnqueueReleaseDX9MediaSurfacesKHR(
 
 2341     if (cle != CL_SUCCESS) {
 
 2343                "handle: %d.\n", cle);
 
 2364            "OpenCL.\n", 
src->data[3]);
 
 2366     for (
i = 0; 
i < src_hwctx->nb_surfaces; 
i++) {
 
 2367         if (src_hwctx->surfaces[
i] == (IDirect3DSurface9*)
src->data[3])
 
 2370     if (
i >= src_hwctx->nb_surfaces) {
 
 2372                "is not in the mapped frames context.\n");
 
 2376     desc = &frames_priv->mapped_frames[
i];
 
 2378     cle = device_priv->clEnqueueAcquireDX9MediaSurfacesKHR(
 
 2381     if (cle != CL_SUCCESS) {
 
 2383                "handle: %d.\n", cle);
 
 2391     for (
i = 0; 
i < 
desc->nb_planes; 
i++)
 
 2395                                 &opencl_unmap_from_dxva2, 
desc);
 
 2405     cle = device_priv->clEnqueueReleaseDX9MediaSurfacesKHR(
 
 2408     if (cle == CL_SUCCESS)
 
 2420     cl_mem_flags cl_flags;
 
 2422     int err, 
i, p, nb_planes;
 
 2426                "for DXVA2 to OpenCL mapping.\n");
 
 2433                "for DXVA2 to OpenCL mapping.\n");
 
 2441     frames_priv->nb_mapped_frames = src_hwctx->
nb_surfaces;
 
 2443     frames_priv->mapped_frames =
 
 2444         av_calloc(frames_priv->nb_mapped_frames,
 
 2445                   sizeof(*frames_priv->mapped_frames));
 
 2446     if (!frames_priv->mapped_frames)
 
 2449     for (
i = 0; 
i < frames_priv->nb_mapped_frames; 
i++) {
 
 2451         cl_dx9_surface_info_khr surface_info = {
 
 2453             .shared_handle = 
NULL,
 
 2455         desc->nb_planes = nb_planes;
 
 2456         for (p = 0; p < nb_planes; p++) {
 
 2458                 device_priv->clCreateFromDX9MediaSurfaceKHR(
 
 2460                     device_priv->dx9_media_adapter_type,
 
 2461                     &surface_info, p, &cle);
 
 2462             if (!
desc->planes[p]) {
 
 2464                        "image from plane %d of DXVA2 surface %d: %d.\n",
 
 2475     for (
i = 0; 
i < frames_priv->nb_mapped_frames; 
i++) {
 
 2477         for (p = 0; p < 
desc->nb_planes; p++) {
 
 2478             if (
desc->planes[p])
 
 2479                 clReleaseMemObject(
desc->planes[p]);
 
 2482     av_freep(&frames_priv->mapped_frames);
 
 2483     frames_priv->nb_mapped_frames = 0;
 
 2489 #if HAVE_OPENCL_D3D11 
 2500     cle = device_priv->clEnqueueReleaseD3D11ObjectsKHR(
 
 2503     if (cle != CL_SUCCESS) {
 
 2505                "handle: %d.\n", cle);
 
 2522     if (
index >= frames_priv->nb_mapped_frames) {
 
 2524                "mapping: %d >= %d.\n", 
index, frames_priv->nb_mapped_frames);
 
 2531     desc = &frames_priv->mapped_frames[
index];
 
 2533     cle = device_priv->clEnqueueAcquireD3D11ObjectsKHR(
 
 2536     if (cle != CL_SUCCESS) {
 
 2538                "handle: %d.\n", cle);
 
 2546     for (
i = 0; 
i < 
desc->nb_planes; 
i++)
 
 2550                                 &opencl_unmap_from_d3d11, 
desc);
 
 2560     cle = device_priv->clEnqueueReleaseD3D11ObjectsKHR(
 
 2563     if (cle == CL_SUCCESS)
 
 2575     cl_mem_flags cl_flags;
 
 2577     int err, 
i, p, nb_planes;
 
 2581                "for D3D11 to OpenCL mapping.\n");
 
 2588                "for D3D11 to OpenCL mapping.\n");
 
 2598     frames_priv->mapped_frames =
 
 2599         av_calloc(frames_priv->nb_mapped_frames,
 
 2600                   sizeof(*frames_priv->mapped_frames));
 
 2601     if (!frames_priv->mapped_frames)
 
 2604     for (
i = 0; 
i < frames_priv->nb_mapped_frames; 
i++) {
 
 2606         desc->nb_planes = nb_planes;
 
 2607         for (p = 0; p < nb_planes; p++) {
 
 2608             UINT subresource = 2 * 
i + p;
 
 2611                 device_priv->clCreateFromD3D11Texture2DKHR(
 
 2614             if (!
desc->planes[p]) {
 
 2616                        "image from plane %d of D3D texture " 
 2617                        "index %d (subresource %u): %d.\n",
 
 2618                        p, 
i, (
unsigned int)subresource, cle);
 
 2628     for (
i = 0; 
i < frames_priv->nb_mapped_frames; 
i++) {
 
 2630         for (p = 0; p < 
desc->nb_planes; p++) {
 
 2631             if (
desc->planes[p])
 
 2632                 clReleaseMemObject(
desc->planes[p]);
 
 2635     av_freep(&frames_priv->mapped_frames);
 
 2636     frames_priv->nb_mapped_frames = 0;
 
 2642 #if HAVE_OPENCL_DRM_ARM 
 2644 typedef struct DRMARMtoOpenCLMapping {
 
 2649 } DRMARMtoOpenCLMapping;
 
 2654     DRMARMtoOpenCLMapping *mapping = hwmap->
priv;
 
 2657     for (
i = 0; 
i < mapping->nb_planes; 
i++)
 
 2658         clReleaseMemObject(mapping->plane_images[
i]);
 
 2660     for (
i = 0; 
i < mapping->nb_objects; 
i++)
 
 2661         clReleaseMemObject(mapping->object_buffers[
i]);
 
 2673     DRMARMtoOpenCLMapping *mapping = 
NULL;
 
 2674     cl_mem_flags cl_flags;
 
 2675     const cl_import_properties_arm props[3] = {
 
 2676         CL_IMPORT_TYPE_ARM, CL_IMPORT_TYPE_DMA_BUF_ARM, 0,
 
 2691     mapping->nb_objects = 
desc->nb_objects;
 
 2692     for (
i = 0; 
i < 
desc->nb_objects; 
i++) {
 
 2693         int fd = 
desc->objects[
i].fd;
 
 2697         if (
desc->objects[
i].format_modifier) {
 
 2699                    "nonzero format modifier %"PRId64
", result may not " 
 2700                    "be as expected.\n", 
i, fd,
 
 2701                    desc->objects[
i].format_modifier);
 
 2704         mapping->object_buffers[
i] =
 
 2705             clImportMemoryARM(dst_dev->
context, cl_flags, props,
 
 2706                               &fd, 
desc->objects[
i].size, &cle);
 
 2707         if (!mapping->object_buffers[
i]) {
 
 2709                    "from object %d (fd %d, size %"SIZE_SPECIFIER") of DRM frame: %d.\n",
 
 2710                    i, fd, 
desc->objects[
i].size, cle);
 
 2716     mapping->nb_planes = 0;
 
 2717     for (
i = 0; 
i < 
desc->nb_layers; 
i++) {
 
 2720         for (j = 0; j < layer->
nb_planes; j++) {
 
 2722             cl_mem plane_buffer;
 
 2723             cl_image_format image_format;
 
 2724             cl_image_desc   image_desc;
 
 2725             cl_buffer_region region;
 
 2726             int p = mapping->nb_planes;
 
 2730                                           &image_format, &image_desc);
 
 2733                        "layer %d plane %d): %d.\n", p, 
i, j, err);
 
 2737             region.origin = plane->
offset;
 
 2738             region.size   = image_desc.image_row_pitch *
 
 2739                             image_desc.image_height;
 
 2742                 clCreateSubBuffer(mapping->object_buffers[plane->
object_index],
 
 2744                                   CL_BUFFER_CREATE_TYPE_REGION,
 
 2746             if (!plane_buffer) {
 
 2748                        "for plane %d: %d.\n", p, cle);
 
 2753             image_desc.buffer = plane_buffer;
 
 2755             mapping->plane_images[p] =
 
 2756                 clCreateImage(dst_dev->
context, cl_flags,
 
 2757                               &image_format, &image_desc, 
NULL, &cle);
 
 2761             clReleaseMemObject(plane_buffer);
 
 2763             if (!mapping->plane_images[p]) {
 
 2765                        "for plane %d: %d.\n", p, cle);
 
 2770             ++mapping->nb_planes;
 
 2774     for (
i = 0; 
i < mapping->nb_planes; 
i++)
 
 2775         dst->
data[
i] = (uint8_t*)mapping->plane_images[
i];
 
 2778                                 &opencl_unmap_from_drm_arm, mapping);
 
 2788     for (
i = 0; 
i < mapping->nb_planes; 
i++) {
 
 2789         clReleaseMemObject(mapping->plane_images[
i]);
 
 2791     for (
i = 0; 
i < mapping->nb_objects; 
i++) {
 
 2792         if (mapping->object_buffers[
i])
 
 2793             clReleaseMemObject(mapping->object_buffers[
i]);
 
 2815     switch (
src->format) {
 
 2816 #if HAVE_OPENCL_DRM_BEIGNET 
 2818         if (priv->beignet_drm_mapping_usable)
 
 2819             return opencl_map_from_drm_beignet(hwfc, dst, 
src, 
flags);
 
 2821 #if HAVE_OPENCL_VAAPI_BEIGNET 
 2823         if (priv->beignet_drm_mapping_usable)
 
 2824             return opencl_map_from_vaapi(hwfc, dst, 
src, 
flags);
 
 2826 #if HAVE_OPENCL_VAAPI_INTEL_MEDIA 
 2829         if (priv->qsv_mapping_usable)
 
 2830             return opencl_map_from_qsv(hwfc, dst, 
src, 
flags);
 
 2832 #if HAVE_OPENCL_DXVA2 
 2834         if (priv->dxva2_mapping_usable)
 
 2835             return opencl_map_from_dxva2(hwfc, dst, 
src, 
flags);
 
 2837 #if HAVE_OPENCL_D3D11 
 2839         if (priv->d3d11_mapping_usable)
 
 2840             return opencl_map_from_d3d11(hwfc, dst, 
src, 
flags);
 
 2842 #if HAVE_OPENCL_DRM_ARM 
 2844         if (priv->drm_arm_mapping_usable)
 
 2845             return opencl_map_from_drm_arm(hwfc, dst, 
src, 
flags);
 
 2856 #if HAVE_OPENCL_DRM_BEIGNET 
 2858         if (!priv->beignet_drm_mapping_usable)
 
 2862 #if HAVE_OPENCL_VAAPI_BEIGNET 
 2864         if (!priv->beignet_drm_mapping_usable)
 
 2868 #if HAVE_OPENCL_VAAPI_INTEL_MEDIA 
 2871         if (!priv->qsv_mapping_usable)
 
 2875 #if HAVE_OPENCL_DXVA2 
 2877         if (!priv->dxva2_mapping_usable)
 
 2881             err = opencl_frames_derive_from_dxva2(dst_fc, src_fc, 
flags);
 
 2887 #if HAVE_OPENCL_D3D11 
 2889         if (!priv->d3d11_mapping_usable)
 
 2893             err = opencl_frames_derive_from_d3d11(dst_fc, src_fc, 
flags);
 
 2899 #if HAVE_OPENCL_DRM_ARM 
 2901         if (!priv->drm_arm_mapping_usable)