From patchwork Fri Apr 14 14:39:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sil Vilerino X-Patchwork-Id: 41177 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4645:b0:e3:3194:9d20 with SMTP id eb5csp553510pzb; Fri, 14 Apr 2023 07:39:36 -0700 (PDT) X-Google-Smtp-Source: AKy350ay0gWCFNEL5xGhP9U7yLcGqt7eSxhLxQDNC/Tj58WiceteqWEN4DoN46QfmoQZ/DLizb2n X-Received: by 2002:aa7:de04:0:b0:504:9b63:4756 with SMTP id h4-20020aa7de04000000b005049b634756mr6704520edv.18.1681483176634; Fri, 14 Apr 2023 07:39:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681483176; cv=none; d=google.com; s=arc-20160816; b=W3iwI/FaN+LjIImBgb1UJEylobm+1mEXIPdFR1BX6LoGZI67ohfY1syKNWGt0oKLAy oxLePAHOJtdfSYnPr8nsEHJljcyr57fjyyiUd37XibeKMxB70BP/BzNHryHr1OKr8k9o tYp15bbBtjEzDfjb+3IzNJGTrhILDiJSTLeXpcWeubltebJC8511sKHCYmQnzyVUPSwa lSSymGOWY0NZo55SZ/EBIw+Yp3tCHuFXzvr/aM4IvNtp7lPAQOFuxV6L9A0t127d0kbj mdl8gID7XWa3WzkH8FTVyAfaOCKms6cKQ5kjc3I5XQJth43jjadMIxakDiGW1xzWR8z2 xJpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:dkim-filter:delivered-to; bh=JKPefzexanUXCUCpvZ+at8C7QSbjA52XGtP9hQ5qCgE=; b=AdDU9nkxfwjsFDGp4XVibDYiyC9cMQqTsoRQhgK7MSVQmX4OJSTN6vPqS/FuqzlREq GsOlof6F5zUrdxFskjqdcIt1okn2e2yA+1DxXGvIzdo54BFYmVadVAbWpa8xEq/7zto/ d8Z0wciJju4lyNa1iuHMNwjLUDtZyfNVC+gS8/rf2DrQ+ozYOFtGvN8zEJP7djp+F+4T zLoaevRcLwlqKZiLGPPn7G7QOARmjuTbKCQN5DQdBdxg2kNlPo8T99Udze2rqwI1IOp6 +r0UAF1bEa+c45N9sqssTWbpzVSEKT91YrbFJpwUHY/A92YMdYon2XwOB000ORoUw6aH GfNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linux.microsoft.com header.s=default header.b=U3RIUB9w; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a19-20020aa7d753000000b0050477cb61ecsi4584473eds.82.2023.04.14.07.39.35; Fri, 14 Apr 2023 07:39:36 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linux.microsoft.com header.s=default header.b=U3RIUB9w; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9ACE168BEAB; Fri, 14 Apr 2023 17:39:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 31A2B68A7E3 for ; Fri, 14 Apr 2023 17:39:15 +0300 (EEST) Received: from gem-name-lb-02.localdomain (pool-108-28-73-40.washdc.fios.verizon.net [108.28.73.40]) by linux.microsoft.com (Postfix) with ESMTPSA id AA9F32179277 for ; Fri, 14 Apr 2023 07:39:13 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com AA9F32179277 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1681483153; bh=X1inxrN2yaQHCYSN26yY1oNpCwGWwUmrf3S5DFLkXgA=; h=From:To:Subject:Date:From; b=U3RIUB9w8ZnR8njY9W3EvSWl0YCfCZ61zwkYk1eounAqQdA75l+uDoYivPwiwNO0G ePfkcYGwLmTTCxoRzB8sfPu0m24q/RrBW7mSezUR4WNHArMdbIDGFB4BUvjk0M1I6L 7jRVnCIjL5v6+GtsSIfq00lQ4XLIA2KQ1WNmvlXE= From: Sil Vilerino To: ffmpeg-devel@ffmpeg.org Date: Fri, 14 Apr 2023 10:39:04 -0400 Message-Id: <20230414143906.1582-1-sivileri@linux.microsoft.com> X-Mailer: git-send-email 2.39.2.vfs.0.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 1/3] lavu/hwcontext_vaapi: Add Windows/VAAPI support with vaGetDisplayWin32 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: HIPcM8KXgZGu From: Sil Vilerino Libva 2.17+ adds a new libva-win32 node and Mesa 22.3 adds a VAAPI driver based on Direct3D 12 for Windows. Both of them are available at: https://www.nuget.org/packages/Microsoft.Direct3D.VideoAccelerationCompatibilityPack Initial review at https://github.com/intel-media-ci/ffmpeg/pull/619/ Signed-off-by: Sil Vilerino Reviewed-by: Dmitry Rogozhkin Reviewed-by: Wu, Tong1 --- Changelog | 1 + configure | 27 ++++++++++++- libavutil/hwcontext_vaapi.c | 78 ++++++++++++++++++++++++++++++++++++- libavutil/tests/hwdevice.c | 2 +- 4 files changed, 103 insertions(+), 5 deletions(-) diff --git a/Changelog b/Changelog index a40f32c23f..4ae8a4fe20 100644 --- a/Changelog +++ b/Changelog @@ -3,6 +3,7 @@ releases are sorted from youngest to oldest. version : - libaribcaption decoder +- Extend VAAPI support for libva-win32 on Windows version 6.0: - Radiance HDR image support diff --git a/configure b/configure index 033db7442d..2a45b11aa4 100755 --- a/configure +++ b/configure @@ -2316,6 +2316,7 @@ SYSTEM_LIBRARIES=" bcrypt vaapi_drm vaapi_x11 + vaapi_win32 vdpau_x11 " @@ -3826,7 +3827,7 @@ swscale_suggest="libm stdatomic" avcodec_extralibs="pthreads_extralibs iconv_extralibs dxva2_extralibs lcms2_extralibs" avfilter_extralibs="pthreads_extralibs" -avutil_extralibs="d3d11va_extralibs mediacodec_extralibs nanosleep_extralibs pthreads_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vdpau_x11_extralibs" +avutil_extralibs="d3d11va_extralibs mediacodec_extralibs nanosleep_extralibs pthreads_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vaapi_win32_extralibs vdpau_x11_extralibs" # programs ffmpeg_deps="avcodec avfilter avformat threads" @@ -6947,6 +6948,21 @@ test_cpp < +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#error desktop, not uwp +#else +// WINAPI_FAMILY_APP, WINAPI_FAMILY_PHONE_APP => UWP +#endif +#else +#error no family set +#endif +EOF + # mediafoundation requires linking directly to mfplat if building for uwp target enabled uwp && mediafoundation_extralibs="-lmfplat -lmfuuid -lole32 -lstrmiids" || mediafoundation_extralibs="-lmfuuid -lole32 -lstrmiids" @@ -6957,7 +6973,14 @@ enabled vaapi && check_pkg_config vaapi "libva >= 0.35.0" "va/va.h" vaInitialize if enabled vaapi; then - check_pkg_config vaapi_drm "libva-drm" "va/va_drm.h" vaGetDisplayDRM + case $target_os in + mingw32*|mingw64*|win32|win64) + check_pkg_config vaapi_win32 "libva-win32" "va/va_win32.h" vaGetDisplayWin32 + ;; + *) + check_pkg_config vaapi_drm "libva-drm" "va/va_drm.h" vaGetDisplayDRM + ;; + esac if enabled xlib_x11; then check_pkg_config vaapi_x11 "libva-x11" "va/va_x11.h" vaGetDisplay diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c index 90c2c191d9..6c3a227ddd 100644 --- a/libavutil/hwcontext_vaapi.c +++ b/libavutil/hwcontext_vaapi.c @@ -18,6 +18,15 @@ #include "config.h" +#if HAVE_VAAPI_WIN32 +# include +#define COBJMACROS +# include +# include +# include "compat/w32dlfcn.h" +# include +typedef HRESULT (WINAPI *PFN_CREATE_DXGI_FACTORY)(REFIID riid, void **ppFactory); +#endif #if HAVE_VAAPI_X11 # include #endif @@ -1663,7 +1672,7 @@ static int vaapi_device_create(AVHWDeviceContext *ctx, const char *device, VAAPIDevicePriv *priv; VADisplay display = NULL; const AVDictionaryEntry *ent; - int try_drm, try_x11, try_all; + int try_drm, try_x11, try_win32, try_all; priv = av_mallocz(sizeof(*priv)); if (!priv) @@ -1676,11 +1685,13 @@ static int vaapi_device_create(AVHWDeviceContext *ctx, const char *device, ent = av_dict_get(opts, "connection_type", NULL, 0); if (ent) { - try_all = try_drm = try_x11 = 0; + try_all = try_drm = try_x11 = try_win32 = 0; if (!strcmp(ent->value, "drm")) { try_drm = 1; } else if (!strcmp(ent->value, "x11")) { try_x11 = 1; + } else if (!strcmp(ent->value, "win32")) { + try_win32 = 1; } else { av_log(ctx, AV_LOG_ERROR, "Invalid connection type %s.\n", ent->value); @@ -1690,6 +1701,7 @@ static int vaapi_device_create(AVHWDeviceContext *ctx, const char *device, try_all = 1; try_drm = HAVE_VAAPI_DRM; try_x11 = HAVE_VAAPI_X11; + try_win32 = HAVE_VAAPI_WIN32; } #if HAVE_VAAPI_DRM @@ -1797,6 +1809,68 @@ static int vaapi_device_create(AVHWDeviceContext *ctx, const char *device, } #endif +#if HAVE_VAAPI_WIN32 + if (!display && try_win32) { + // Try to create a display from the specified device, if any. + if (!device) { + display = vaGetDisplayWin32(NULL); + } else { + IDXGIFactory2 *pDXGIFactory = NULL; + IDXGIAdapter *pAdapter = NULL; +#if !HAVE_UWP + HANDLE dxgi = dlopen("dxgi.dll", 0); + if (!dxgi) { + av_log(ctx, AV_LOG_ERROR, "Failed to load dxgi.dll\n"); + return AVERROR_UNKNOWN; + } + PFN_CREATE_DXGI_FACTORY pfnCreateDXGIFactory = + (PFN_CREATE_DXGI_FACTORY)dlsym(dxgi, "CreateDXGIFactory"); + if (!pfnCreateDXGIFactory) { + av_log(ctx, AV_LOG_ERROR, "CreateDXGIFactory load failed\n"); + dlclose(dxgi); + return AVERROR_UNKNOWN; + } +#else + // In UWP (which lacks LoadLibrary), CreateDXGIFactory isn't + // available, only CreateDXGIFactory1 + PFN_CREATE_DXGI_FACTORY pfnCreateDXGIFactory = + (PFN_CREATE_DXGI_FACTORY)CreateDXGIFactory1; +#endif + if (SUCCEEDED(pfnCreateDXGIFactory(&IID_IDXGIFactory2, + (void **)&pDXGIFactory))) { + int adapter = atoi(device); + if (SUCCEEDED(IDXGIFactory2_EnumAdapters(pDXGIFactory, + adapter, + &pAdapter))) { + DXGI_ADAPTER_DESC desc; + if (SUCCEEDED(IDXGIAdapter2_GetDesc(pAdapter, &desc))) { + av_log(ctx, AV_LOG_INFO, + "Using device %04x:%04x (%ls) - LUID %lu %ld.\n", + desc.VendorId, desc.DeviceId, desc.Description, + desc.AdapterLuid.LowPart, + desc.AdapterLuid.HighPart); + display = vaGetDisplayWin32(&desc.AdapterLuid); + } + IDXGIAdapter_Release(pAdapter); + } + IDXGIFactory2_Release(pDXGIFactory); + } +#if !HAVE_UWP + dlclose(dxgi); +#endif + } + + if (!display) { + av_log(ctx, AV_LOG_ERROR, "Cannot open a VA display " + "from Win32 display.\n"); + return AVERROR_UNKNOWN; + } + + av_log(ctx, AV_LOG_VERBOSE, "Opened VA display via " + "Win32 display.\n"); + } +#endif + if (!display) { if (device) av_log(ctx, AV_LOG_ERROR, "No VA display found for " diff --git a/libavutil/tests/hwdevice.c b/libavutil/tests/hwdevice.c index 7eb355c988..c57586613a 100644 --- a/libavutil/tests/hwdevice.c +++ b/libavutil/tests/hwdevice.c @@ -140,7 +140,7 @@ static const struct { { AV_HWDEVICE_TYPE_OPENCL, { "0.0", "0.1", "1.0", "1.1" } }, { AV_HWDEVICE_TYPE_VAAPI, - { "/dev/dri/renderD128", "/dev/dri/renderD129", ":0" } }, + { "/dev/dri/renderD128", "/dev/dri/renderD129", ":0", "0", "1" } }, }; static int test_device_type(enum AVHWDeviceType type) From patchwork Fri Apr 14 14:39:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sil Vilerino X-Patchwork-Id: 41176 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4645:b0:e3:3194:9d20 with SMTP id eb5csp553400pzb; Fri, 14 Apr 2023 07:39:27 -0700 (PDT) X-Google-Smtp-Source: AKy350ZudzZwuXKmsPkJ2K6SCbSuRCdhZBVclDwr6r84ZYct0HW7jIEr3+UDzFIJnju269HqKUqD X-Received: by 2002:a17:906:7f98:b0:93b:b8f3:225d with SMTP id f24-20020a1709067f9800b0093bb8f3225dmr6382884ejr.15.1681483166909; Fri, 14 Apr 2023 07:39:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681483166; cv=none; d=google.com; s=arc-20160816; b=BFWWXHYF4o5A36WLn3k8mOO0U3vGorxBwkHxG6PdQYxc5gUTgK/qt1BxOa652SEiUR zBQq3FlYxkmLIWzFiGTzNm48sUS3ebHYZZ23tpzS2wJU9HKpxa1Mut/IOpbA60QeXX6f VYMzbrkdhSOnXU0phtsXEu+vyCeBRNMdqqZHEP3b72X28xNp4sXqhJ0WGTCygCPVVuHY jH8joZAPlohamI6TrHdcvves37frFbiYuCXCZXGyKGZbiYMZmi/NqPd2gom/xUoC86E5 pPwjUkvwcNjUtVg7ksHfGq0WQqgp992C+qc+ioJoiH1rk44rhiqGpIPZWWNfKpAi4p3c EHNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:dkim-filter:delivered-to; bh=lmy8m3kTwobMmOZwRckXatsA3rFsgnJy7xXE/xwx1Pc=; b=MQ12bQxdtIUgm+wdswilsVhhw69qXNJW8v+izbaxA7klintk/AwQm+Km0ohXPuHS1L cRbqkKuJkOMnRZbhxjwtezvqtkQxNLlToIbQS/ffFqoA0JOn1yAKyZxXdJ7RByh2geoe EK0bouJrvTjdz2yQG2IhGCpSv2Bd1qRSBKVYlmXNpGWxDi8AozvSRKECq1xQGsadtsar K+2wH1Ir2dfgsZ0E0izkwARjMemSAY12NX4ypC0kPotJ82MZatWNsFthufO2HNrKtNhy 4Fd3+j5qpSX/TWvgXv5cSmwH9ubYxBpRr/gcjNnEhS911yvUGuTZNA5tlprh7JoMTKUd 3JPQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linux.microsoft.com header.s=default header.b=qghc9h8W; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id wl3-20020a170907310300b0094a62d3be83si4417838ejb.416.2023.04.14.07.39.26; Fri, 14 Apr 2023 07:39:26 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linux.microsoft.com header.s=default header.b=qghc9h8W; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 89FF568BE1B; Fri, 14 Apr 2023 17:39:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 354D368BE2D for ; Fri, 14 Apr 2023 17:39:15 +0300 (EEST) Received: from gem-name-lb-02.localdomain (pool-108-28-73-40.washdc.fios.verizon.net [108.28.73.40]) by linux.microsoft.com (Postfix) with ESMTPSA id 1A853217A941 for ; Fri, 14 Apr 2023 07:39:14 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 1A853217A941 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1681483154; bh=/dpbgcAuyegejR5D5MPy/KlrSYjQa9ZTOMbN8opX20I=; h=From:To:Subject:Date:In-Reply-To:References:From; b=qghc9h8WhMl5DZu7rXbQiFODPqvA7ccYypQIjGSbc4vHUNnprmps/L03hWH6/+e81 /g5fJRAUA/C5RAO+QemvwSGDfo6YBTTCP1n/pZi48FmJ5IzNdVRPh9xpEl8kJnZN2r Qq16Lm/nS9VShEGyopVchhRajouhyjih4eWQK2EM= From: Sil Vilerino To: ffmpeg-devel@ffmpeg.org Date: Fri, 14 Apr 2023 10:39:05 -0400 Message-Id: <20230414143906.1582-2-sivileri@linux.microsoft.com> X-Mailer: git-send-email 2.39.2.vfs.0.0 In-Reply-To: <20230414143906.1582-1-sivileri@linux.microsoft.com> References: <20230414143906.1582-1-sivileri@linux.microsoft.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 2/3] fftools/ffmpeg_opt: Document VAAPI -device usage for DirectX Adapter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: QacqRF2v8l5O From: Sil Vilerino Initial review at https://github.com/intel-media-ci/ffmpeg/pull/619/ Signed-off-by: Sil Vilerino Reviewed-by: Dmitry Rogozhkin Reviewed-by: Wu, Tong1 --- doc/ffmpeg.texi | 5 +++-- fftools/ffmpeg_opt.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi index cb8aa13df2..34c413355e 100644 --- a/doc/ffmpeg.texi +++ b/doc/ffmpeg.texi @@ -1169,9 +1169,10 @@ Choose the first device and use the primary device context. @var{device} is the number of the Direct3D 11 display adapter. @item vaapi -@var{device} is either an X11 display name or a DRM render node. +@var{device} is either an X11 display name, a DRM render node or a DirectX adapter index. If not specified, it will attempt to open the default X11 display (@emph{$DISPLAY}) -and then the first DRM render node (@emph{/dev/dri/renderD128}). +and then the first DRM render node (@emph{/dev/dri/renderD128}), or the default +DirectX adapter on Windows. @item vdpau @var{device} is an X11 display name. diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index aa9aa0e9b4..f811d38b9c 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1767,7 +1767,7 @@ const OptionDef options[] = { #if CONFIG_VAAPI { "vaapi_device", HAS_ARG | OPT_EXPERT, { .func_arg = opt_vaapi_device }, - "set VAAPI hardware device (DRM path or X11 display name)", "device" }, + "set VAAPI hardware device (DirectX adapter index, DRM path or X11 display name)", "device" }, #endif #if CONFIG_QSV From patchwork Fri Apr 14 14:39:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sil Vilerino X-Patchwork-Id: 41178 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4645:b0:e3:3194:9d20 with SMTP id eb5csp553602pzb; Fri, 14 Apr 2023 07:39:46 -0700 (PDT) X-Google-Smtp-Source: AKy350ZI1M3DyVAjq8RUtie57jHdzS3F3Mv1m3mCGBf8XT7uRqvHUeWC4mW9dqa23xWLJ4jiVg4T X-Received: by 2002:a17:906:614:b0:92b:e1ff:be30 with SMTP id s20-20020a170906061400b0092be1ffbe30mr5932079ejb.4.1681483185775; Fri, 14 Apr 2023 07:39:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681483185; cv=none; d=google.com; s=arc-20160816; b=ye6bwYfAkk7S4IiY2a+JEImPO0a/Zc/h+tl7UAtoXS06iWOFsdQX8ECwSnQ84MoC4Z GQQzqJnEFQtId94MFSuAK/e9aGy9p7mo13zXqmxZ+iYPpKFfLqiw7JeSiX3v0aNUtBV0 1pjJlliFRXqAMrzJl9F0h4qf9rRQuVkIA+D2xSd/6jT0OHvIRAhtYJICbUeObhXaNLHT rl2wMbYnRinpuZpuFiA4TZkiLG2lOdqZfXko6UqNWJ3/ho735OT8iqRTXRUxYEY3QOtH R/Ykd8LDa22nzd126h2++OkJgwRqM14jBfwrMciM2z3i7zStBrNE5WQX7NNJRg3zbj/c Y/TQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:dkim-filter:delivered-to; bh=M3aZFHOgwD/i4Rr2GkFJYAOH/Dtdwl/LdPTlIesBnQo=; b=DyYzwt/tUYkkoU7hEN+zhUGoX4yA0dOKcKeKM0TFhF2CiQCEK4dy1B9We8vz0wMgNm 8eamJxqyMsF6OqWnaNdLNapTkpnuVzb2YS7qwP3yh90HyIGG6ZUn05J2u46bm3YHM+UG N5gzgkDr2fbk53o+QlW+KTGOYrrXhuuyVExpW+fScw+QXIrVDU9OpVwL0iLVsJnLUptw T3SeO4ZoRMiyP5QlypFXvqQX2juvF3EpN8+SlT468zAS8rHZbYkol5LLoBgUS/qJqHvP ECMY0Gd8pHMkNlxNllSpSoCXmhCsHJCYA8vZRCjKgcHZCFqNEYBWnF2gKoVQnlZeyxTy bt1w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linux.microsoft.com header.s=default header.b=ja4XkVhm; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id az7-20020a170907904700b0094ec085f9b1si3311785ejc.996.2023.04.14.07.39.44; Fri, 14 Apr 2023 07:39:45 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linux.microsoft.com header.s=default header.b=ja4XkVhm; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A57FF68BEB2; Fri, 14 Apr 2023 17:39:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 96C9A68BE88 for ; Fri, 14 Apr 2023 17:39:15 +0300 (EEST) Received: from gem-name-lb-02.localdomain (pool-108-28-73-40.washdc.fios.verizon.net [108.28.73.40]) by linux.microsoft.com (Postfix) with ESMTPSA id 87D49217A943 for ; Fri, 14 Apr 2023 07:39:14 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 87D49217A943 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1681483154; bh=0zar9uJcIfYDZZsBOkVxFBo4193VjjFsoMsyCUNnVVU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ja4XkVhmio3ss63UaT2/isyF97DzuKDoPJkaSX91skEPTVuWwsclzss1jkTbhoycF pmRNUYpNRmYvIAjNuoScWfxX3czWAVSm1wz114XwTxrFw0qZKBa/nR2g7dn9AmMgWZ 9MkM4L+OVP/ZLsKlkYU9lrHY1Gp3gHdFaUstqhU8= From: Sil Vilerino To: ffmpeg-devel@ffmpeg.org Date: Fri, 14 Apr 2023 10:39:06 -0400 Message-Id: <20230414143906.1582-3-sivileri@linux.microsoft.com> X-Mailer: git-send-email 2.39.2.vfs.0.0 In-Reply-To: <20230414143906.1582-1-sivileri@linux.microsoft.com> References: <20230414143906.1582-1-sivileri@linux.microsoft.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 3/3] lavu/hwcontext_qsv: Update after adding support for VAAPI on Windows X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: hZAoj4aiKvrU From: Sil Vilerino - qsv_internal.h: Remove unnecessary include va_drm.h - qsv_internal.h: Enable AVCODEC_QSV_LINUX_SESSION_HANDLE on Linux/VA only - hwcontext_qsv.c: Do not allow child_device_type VAAPI for Windows until support is added, keep D3D11/DXVA2 as more prioritary defaults. Initial review at https://github.com/intel-media-ci/ffmpeg/pull/619/ Signed-off-by: Sil Vilerino Reviewed-by: Dmitry Rogozhkin Reviewed-by: Wu, Tong1 --- libavcodec/qsv_internal.h | 5 ++--- libavutil/hwcontext_qsv.c | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/libavcodec/qsv_internal.h b/libavcodec/qsv_internal.h index 5119ef4dff..c2d301b4a2 100644 --- a/libavcodec/qsv_internal.h +++ b/libavcodec/qsv_internal.h @@ -23,9 +23,9 @@ #include "config.h" -#if CONFIG_VAAPI +#if CONFIG_VAAPI && !defined(_WIN32) // Do not enable for libva-win32 on Windows #define AVCODEC_QSV_LINUX_SESSION_HANDLE -#endif //CONFIG_VAAPI +#endif //CONFIG_VAAPI && !defined(_WIN32) #ifdef AVCODEC_QSV_LINUX_SESSION_HANDLE #include @@ -35,7 +35,6 @@ #endif #include #include -#include #include "libavutil/hwcontext_vaapi.h" #endif diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index 6780428875..4ed4242ddf 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -2126,8 +2126,6 @@ static int qsv_device_create(AVHWDeviceContext *ctx, const char *device, "\"%s\".\n", e->value); return AVERROR(EINVAL); } - } else if (CONFIG_VAAPI) { - child_device_type = AV_HWDEVICE_TYPE_VAAPI; #if QSV_ONEVPL } else if (CONFIG_D3D11VA) { // Use D3D11 by default if d3d11va is enabled av_log(ctx, AV_LOG_VERBOSE, @@ -2147,11 +2145,23 @@ static int qsv_device_create(AVHWDeviceContext *ctx, const char *device, } else if (CONFIG_D3D11VA) { child_device_type = AV_HWDEVICE_TYPE_D3D11VA; #endif + } else if (CONFIG_VAAPI) { + child_device_type = AV_HWDEVICE_TYPE_VAAPI; } else { av_log(ctx, AV_LOG_ERROR, "No supported child device type is enabled\n"); return AVERROR(ENOSYS); } +#if CONFIG_VAAPI && defined(_WIN32) + /* AV_HWDEVICE_TYPE_VAAPI on Windows/Libva-win32 not supported */ + /* Reject user specified child_device_type or CONFIG_VAAPI on Windows */ + if (child_device_type == AV_HWDEVICE_TYPE_VAAPI) { + av_log(ctx, AV_LOG_ERROR, "VAAPI child device type not supported for oneVPL on Windows" + "\"%s\".\n", e->value); + return AVERROR(EINVAL); + } +#endif + child_device_opts = NULL; switch (child_device_type) { #if CONFIG_VAAPI