[FFmpeg-devel] [PATCH v7 09/10] qsv: use a new method to create mfx session when using oneVPL
Hendrik Leppkes
h.leppkes at gmail.com
Fri Mar 11 10:35:10 EET 2022
On Fri, Mar 11, 2022 at 9:18 AM Xiang, Haihao
<haihao.xiang-at-intel.com at ffmpeg.org> wrote:
> diff --git a/libavutil/hwcontext_d3d11va.c b/libavutil/hwcontext_d3d11va.c
> index 8ab96bad25..e0e820f164 100644
> --- a/libavutil/hwcontext_d3d11va.c
> +++ b/libavutil/hwcontext_d3d11va.c
> @@ -525,6 +525,13 @@ static void d3d11va_device_uninit(AVHWDeviceContext *hwdev)
> }
> }
>
> +static void d3d11va_device_free(AVHWDeviceContext *ctx)
> +{
> + AVD3D11VADeviceContext *hwctx = ctx->hwctx;
> +
> + av_free(hwctx->device_name);
> +}
> +
> static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device,
> AVDictionary *opts, int flags)
> {
> @@ -537,6 +544,8 @@ static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device,
> int is_debug = !!av_dict_get(opts, "debug", NULL, 0);
> int ret;
>
> + ctx->free = d3d11va_device_free;
> +
> // (On UWP we can't check this.)
> #if !HAVE_UWP
> if (!LoadLibrary("d3d11_1sdklayers.dll"))
> @@ -561,6 +570,10 @@ static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device,
> if (FAILED(IDXGIFactory2_EnumAdapters(pDXGIFactory, adapter, &pAdapter)))
> pAdapter = NULL;
> IDXGIFactory2_Release(pDXGIFactory);
> +
> + device_hwctx->device_name = av_strdup(device);
> + if (!device_hwctx->device_name)
> + return AVERROR(ENOMEM);
> }
> }
>
> diff --git a/libavutil/hwcontext_d3d11va.h b/libavutil/hwcontext_d3d11va.h
> index 77d2d72f1b..41a315b9e6 100644
> --- a/libavutil/hwcontext_d3d11va.h
> +++ b/libavutil/hwcontext_d3d11va.h
> @@ -94,6 +94,11 @@ typedef struct AVD3D11VADeviceContext {
> void (*lock)(void *lock_ctx);
> void (*unlock)(void *lock_ctx);
> void *lock_ctx;
> +
> + /**
> + * The string for the used adapter
> + */
> + char *device_name;
> } AVD3D11VADeviceContext;
>
> /**
> diff --git a/libavutil/hwcontext_dxva2.c b/libavutil/hwcontext_dxva2.c
> index 53d00fa815..6967357093 100644
> --- a/libavutil/hwcontext_dxva2.c
> +++ b/libavutil/hwcontext_dxva2.c
> @@ -431,6 +431,7 @@ static void dxva2_device_free(AVHWDeviceContext *ctx)
> dlclose(priv->dxva2lib);
>
> av_freep(&ctx->user_opaque);
> + av_free(hwctx->device_name);
> }
>
> static int dxva2_device_create9(AVHWDeviceContext *ctx, UINT adapter)
> @@ -571,6 +572,13 @@ static int dxva2_device_create(AVHWDeviceContext *ctx, const char *device,
> return AVERROR_UNKNOWN;
> }
>
> + if (device) {
> + hwctx->device_name = av_strdup(device);
> +
> + if (!hwctx->device_name)
> + return AVERROR(ENOMEM);
> + }
> +
> return 0;
> }
>
> diff --git a/libavutil/hwcontext_dxva2.h b/libavutil/hwcontext_dxva2.h
> index e1b79bc0de..253ddbed51 100644
> --- a/libavutil/hwcontext_dxva2.h
> +++ b/libavutil/hwcontext_dxva2.h
> @@ -38,6 +38,10 @@
> */
> typedef struct AVDXVA2DeviceContext {
> IDirect3DDeviceManager9 *devmgr;
> + /**
> + * The string for the used adapter
> + */
> + char *device_name;
> } AVDXVA2DeviceContext;
>
> /**
Why are these device names required? I would think deriving a child
device would use the actual device, eg. ID3D11Device or
IDirect3DDeviceManager9 (and whatever for VAAPI), and not some string
(that may or may not even be set).
It feels quite a bit icky to store these in the context just for qsv
to do... what with?
- Hendrik
More information about the ffmpeg-devel
mailing list