Mar 18, 2024, 08:27 by haihao.xiang-at-intel....@ffmpeg.org: > From: Haihao Xiang <haihao.xi...@intel.com> > > Otherwise the derived device and the source device might have different > PCI ID in a multiple-device system. > > Signed-off-by: Haihao Xiang <haihao.xi...@intel.com> > --- > libavutil/hwcontext_vulkan.c | 30 +++++++++++++++++++++++------- > 1 file changed, 23 insertions(+), 7 deletions(-) > > diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c > index 855f099e26..91b9f96ccf 100644 > --- a/libavutil/hwcontext_vulkan.c > +++ b/libavutil/hwcontext_vulkan.c > @@ -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; >
LGTM Thanks _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".