|
|
|
@@ -1206,6 +1206,7 @@ static int qsv_device_create(AVHWDeviceContext *ctx, const char *device, |
|
|
|
QSVDevicePriv *priv; |
|
|
|
enum AVHWDeviceType child_device_type; |
|
|
|
AVHWDeviceContext *child_device; |
|
|
|
AVDictionary *child_device_opts; |
|
|
|
AVDictionaryEntry *e; |
|
|
|
|
|
|
|
mfxIMPL impl; |
|
|
|
@@ -1220,9 +1221,17 @@ static int qsv_device_create(AVHWDeviceContext *ctx, const char *device, |
|
|
|
|
|
|
|
e = av_dict_get(opts, "child_device", NULL, 0); |
|
|
|
|
|
|
|
if (CONFIG_VAAPI) |
|
|
|
child_device_opts = NULL; |
|
|
|
if (CONFIG_VAAPI) { |
|
|
|
child_device_type = AV_HWDEVICE_TYPE_VAAPI; |
|
|
|
else if (CONFIG_DXVA2) |
|
|
|
// libmfx does not actually implement VAAPI properly, rather it |
|
|
|
// depends on the specific behaviour of a matching iHD driver when |
|
|
|
// used on recent Intel hardware. Set options to the VAAPI device |
|
|
|
// creation so that we should pick a usable setup by default if |
|
|
|
// possible, even when multiple devices and drivers are available. |
|
|
|
av_dict_set(&child_device_opts, "kernel_driver", "i915", 0); |
|
|
|
av_dict_set(&child_device_opts, "driver", "iHD", 0); |
|
|
|
} else if (CONFIG_DXVA2) |
|
|
|
child_device_type = AV_HWDEVICE_TYPE_DXVA2; |
|
|
|
else { |
|
|
|
av_log(ctx, AV_LOG_ERROR, "No supported child device type is enabled\n"); |
|
|
|
@@ -1230,7 +1239,7 @@ static int qsv_device_create(AVHWDeviceContext *ctx, const char *device, |
|
|
|
} |
|
|
|
|
|
|
|
ret = av_hwdevice_ctx_create(&priv->child_device_ctx, child_device_type, |
|
|
|
e ? e->value : NULL, NULL, 0); |
|
|
|
e ? e->value : NULL, child_device_opts, 0); |
|
|
|
if (ret < 0) |
|
|
|
return ret; |
|
|
|
|
|
|
|
|