On 20/07/2022 09:40, Xiang, Haihao wrote:
From: Haihao Xiang <[email protected]>

In oneVPL, MFXLoad() and MFXCreateSession() are required to create a
workable mfx session[1]

Add config filters for D3D9/D3D11 session (galinart)

The default device is changed to d3d11va for oneVPL when both d3d11va
and dxva2 are enabled on Microsoft Windows

This is in preparation for oneVPL support

[1] 
https://spec.oneapi.io/versions/latest/elements/oneVPL/source/programming_guide/VPL_prg_session.html#onevpl-dispatcher

Co-authored-by: galinart <[email protected]>
Signed-off-by: galinart <[email protected]>
Signed-off-by: Haihao Xiang <[email protected]>
---
  libavutil/hwcontext_qsv.c | 531 +++++++++++++++++++++++++++++++++++---
  1 file changed, 493 insertions(+), 38 deletions(-)

diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
index 21a2a805f8..90b7988dec 100644
--- a/libavutil/hwcontext_qsv.c
+++ b/libavutil/hwcontext_qsv.c
...
+
+static int qsv_va_update_config(void *ctx, mfxHDL handle, mfxConfig cfg)
+{
+#if CONFIG_VAAPI
+#if VA_CHECK_VERSION(1, 5, 0)
+#define LOCAL_VADISPLAYPCIID VADisplayPCIID
+#else
+#define LOCAL_VADISPLAYPCIID 21
+#endif

This seems to be handling the case where you built the driver against a newer 
version of libva containing the field but then downgraded it before building 
ffmpeg?  Who are you expecting to do that?

+    mfxStatus sts;
+    VADisplay dpy = handle;
+    VAStatus vas;
+    VADisplayAttribute attr = {
+        .type = LOCAL_VADISPLAYPCIID
+    };
+    mfxVariant impl_value;
+
+    vas = vaGetDisplayAttributes(dpy, &attr, 1);
+    if (vas == VA_STATUS_SUCCESS && attr.flags != 
VA_DISPLAY_ATTRIB_NOT_SUPPORTED) {
+        impl_value.Type = MFX_VARIANT_TYPE_U16;
+        impl_value.Data.U16 = (attr.value & 0xFFFF);
+        sts = MFXSetConfigFilterProperty(cfg,
+                                         (const mfxU8 
*)"mfxExtendedDeviceId.DeviceID", impl_value);
+        if (sts != MFX_ERR_NONE) {
+            av_log(ctx, AV_LOG_ERROR, "Error adding a MFX configuration"
+                   "DeviceID property: %d.\n", sts);
+            goto fail;
+        }
+    } else {
+        av_log(ctx, AV_LOG_ERROR, "Failed to get device id from the driver. Please 
"
+               "consider to upgrade the driver to support VA-API 1.5.0. \n");
+        goto fail;
+    }

The use of the PCI ID doesn't make sense to me here?

A PCI ID tells you the type of the device, not which device it was - given that 
the normal use-case for multiple devices in servers generally has lots of 
idential ones this does not seem helpful.

+
+    return 0;
+
+fail:
+#endif
+    return AVERROR_UNKNOWN;
+}
+
...

- Mark
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Reply via email to