|
|
@@ -279,11 +279,14 @@ static const struct { |
|
|
|
const char *match_string; |
|
|
|
unsigned int quirks; |
|
|
|
} vaapi_driver_quirks_table[] = { |
|
|
|
#if !VA_CHECK_VERSION(1, 0, 0) |
|
|
|
// The i965 driver did not conform before version 2.0. |
|
|
|
{ |
|
|
|
"Intel i965 (Quick Sync)", |
|
|
|
"i965", |
|
|
|
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS, |
|
|
|
}, |
|
|
|
#endif |
|
|
|
{ |
|
|
|
"Intel iHD", |
|
|
|
"ubit", |
|
|
@@ -344,29 +347,37 @@ static int vaapi_device_init(AVHWDeviceContext *hwdev) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
vendor_string = vaQueryVendorString(hwctx->display); |
|
|
|
if (vendor_string) |
|
|
|
av_log(hwdev, AV_LOG_VERBOSE, "VAAPI driver: %s.\n", vendor_string); |
|
|
|
|
|
|
|
if (hwctx->driver_quirks & AV_VAAPI_DRIVER_QUIRK_USER_SET) { |
|
|
|
av_log(hwdev, AV_LOG_VERBOSE, "Not detecting driver: " |
|
|
|
"quirks set by user.\n"); |
|
|
|
av_log(hwdev, AV_LOG_VERBOSE, "Using quirks set by user (%#x).\n", |
|
|
|
hwctx->driver_quirks); |
|
|
|
} else { |
|
|
|
// Detect the driver in use and set quirk flags if necessary. |
|
|
|
vendor_string = vaQueryVendorString(hwctx->display); |
|
|
|
hwctx->driver_quirks = 0; |
|
|
|
if (vendor_string) { |
|
|
|
for (i = 0; i < FF_ARRAY_ELEMS(vaapi_driver_quirks_table); i++) { |
|
|
|
if (strstr(vendor_string, |
|
|
|
vaapi_driver_quirks_table[i].match_string)) { |
|
|
|
av_log(hwdev, AV_LOG_VERBOSE, "Matched \"%s\" as known " |
|
|
|
"driver \"%s\".\n", vendor_string, |
|
|
|
vaapi_driver_quirks_table[i].friendly_name); |
|
|
|
av_log(hwdev, AV_LOG_VERBOSE, "Matched driver string " |
|
|
|
"as known nonstandard driver \"%s\", setting " |
|
|
|
"quirks (%#x).\n", |
|
|
|
vaapi_driver_quirks_table[i].friendly_name, |
|
|
|
vaapi_driver_quirks_table[i].quirks); |
|
|
|
hwctx->driver_quirks |= |
|
|
|
vaapi_driver_quirks_table[i].quirks; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (!(i < FF_ARRAY_ELEMS(vaapi_driver_quirks_table))) { |
|
|
|
av_log(hwdev, AV_LOG_VERBOSE, "Unknown driver \"%s\", " |
|
|
|
"assuming standard behaviour.\n", vendor_string); |
|
|
|
av_log(hwdev, AV_LOG_VERBOSE, "Driver not found in known " |
|
|
|
"nonstandard list, using standard behaviour.\n"); |
|
|
|
} |
|
|
|
} else { |
|
|
|
av_log(hwdev, AV_LOG_VERBOSE, "Driver has no vendor string, " |
|
|
|
"assuming standard behaviour.\n"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|