@ -1597,15 +1597,31 @@ static int vulkan_device_derive(AVHWDeviceContext *ctx,
# if CONFIG_VAAPI
case AV_HWDEVICE_TYPE_VAAPI : {
AVVAAPIDeviceContext * src_hwctx = src_ctx - > hwctx ;
VADisplay dpy = src_hwctx - > display ;
# if VA_CHECK_VERSION(1, 15, 0)
VAStatus vas ;
VADisplayAttribute attr = {
. type = VADisplayPCIID ,
} ;
# endif
const char * vendor ;
const char * vendor = vaQueryVendorString ( src_hwctx - > display ) ;
if ( ! vendor ) {
av_log ( ctx , AV_LOG_ERROR , " Unable to get device info from VAAPI! \n " ) ;
return AVERROR_EXTERNAL ;
}
# if VA_CHECK_VERSION(1, 15, 0)
vas = vaGetDisplayAttributes ( dpy , & attr , 1 ) ;
if ( vas = = VA_STATUS_SUCCESS & & attr . flags ! = VA_DISPLAY_ATTRIB_NOT_SUPPORTED )
dev_select . pci_device = ( attr . value & 0xFFFF ) ;
# endif
if ( ! dev_select . pci_device ) {
vendor = vaQueryVendorString ( dpy ) ;
if ( ! vendor ) {
av_log ( ctx , AV_LOG_ERROR , " Unable to get device info from VAAPI! \n " ) ;
return AVERROR_EXTERNAL ;
}
if ( strstr ( vendor , " AMD " ) )
dev_select . vendor_id = 0x1002 ;
if ( strstr ( vendor , " AMD " ) )
dev_select . vendor_id = 0x1002 ;
}
return vulkan_device_create_internal ( ctx , & dev_select , 0 , opts , flags ) ;
}