|
@@ -279,11 +279,14 @@ static const struct {
|
|
|
const char *match_string;
|
|
const char *match_string;
|
|
|
unsigned int quirks;
|
|
unsigned int quirks;
|
|
|
} vaapi_driver_quirks_table[] = {
|
|
} 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)",
|
|
"Intel i965 (Quick Sync)",
|
|
|
"i965",
|
|
"i965",
|
|
|
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS,
|
|
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS,
|
|
|
},
|
|
},
|
|
|
|
|
+#endif
|
|
|
{
|
|
{
|
|
|
"Intel iHD",
|
|
"Intel iHD",
|
|
|
"ubit",
|
|
"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) {
|
|
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 {
|
|
} else {
|
|
|
// Detect the driver in use and set quirk flags if necessary.
|
|
// Detect the driver in use and set quirk flags if necessary.
|
|
|
- vendor_string = vaQueryVendorString(hwctx->display);
|
|
|
|
|
hwctx->driver_quirks = 0;
|
|
hwctx->driver_quirks = 0;
|
|
|
if (vendor_string) {
|
|
if (vendor_string) {
|
|
|
for (i = 0; i < FF_ARRAY_ELEMS(vaapi_driver_quirks_table); i++) {
|
|
for (i = 0; i < FF_ARRAY_ELEMS(vaapi_driver_quirks_table); i++) {
|
|
|
if (strstr(vendor_string,
|
|
if (strstr(vendor_string,
|
|
|
vaapi_driver_quirks_table[i].match_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 |=
|
|
hwctx->driver_quirks |=
|
|
|
vaapi_driver_quirks_table[i].quirks;
|
|
vaapi_driver_quirks_table[i].quirks;
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
if (!(i < FF_ARRAY_ELEMS(vaapi_driver_quirks_table))) {
|
|
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");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|