| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -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"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |