From patchwork Fri Apr 1 09:24:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wu, Tong1" X-Patchwork-Id: 35126 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c05:b0:7a:e998:b410 with SMTP id bw5csp532904pzb; Fri, 1 Apr 2022 02:25:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyEyo1wR2HQAM03YIX4d3g4Q8Wx0s5NTzrPKH3A6OTX2lzfDx3Md+I9kxyBuBhSRHNpxpOR X-Received: by 2002:aa7:d58e:0:b0:419:c121:ea33 with SMTP id r14-20020aa7d58e000000b00419c121ea33mr19952551edq.256.1648805119502; Fri, 01 Apr 2022 02:25:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648805119; cv=none; d=google.com; s=arc-20160816; b=0b9GTreJZUncVN5RWHN0yWKkt/nrB5Q6aa5y7nIJpdPc6pvxCDVCHVsSARME9bj9ZO cWpDoZtSeOrU8MFVFK0YrGSiOmaTyKl73/VhRtJLzUWTMUi/oFj9x44Igfs6a8ht38s0 lwOpKWre2LI4BWPoumqTB0WxQgUSU3PWEXeEu76RmQxBQheQPHdRwohQaskeuy3sWg6i tjX0fid5NXa6TM5TQlyXu0W41IdVWnbgu9n01tsKga4gI5xhlcaG/rd1wz8QWoQqW+w9 6QXw09chl9gM7yTxspuXUQ7Ksy/JleDCMN80KyFRWBm6hEvmPa8bB2i7azDrsiXuSOC5 UY/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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:delivered-to; bh=1b+NWxiknHkV4EQKqaMZ2uTfzCfk/yYZc+iSyqcE048=; b=h1G5MGlpvdc8JdHxhuNpFFDXT6Q0y/pEUAF1orQoIKiWRFP1c7VIVQFhWMF0fqgptp JTP7t+fZyzwVbA/w97v6lc9iCzWlO7FVRXCHXD/A8FeSXxxRNeRbYxpWJ6gAvTZ6ERYm Ay6jEOruoHtzvZdGgguC4ZsqTw3ky5AFWjQwUyr9Us8ZA7Zp/AXQQrRyu8jkAafsa0RS EDeniFvCEyk/chcys5VAU+dxosGT73IJbNxEveEu6UjV7GsNWZL9PW2/2UwxpmWQ0Oh1 nMxJP5QOkwZsEDszZNTMawgXuMDdvUBDMpE9hAKjgauO+yZdwRMfvHed5sou51crIqxG Zexw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=Kqid6OU1; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y4-20020aa7ccc4000000b0041ba70d1386si1307411edt.532.2022.04.01.02.25.19; Fri, 01 Apr 2022 02:25:19 -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=@intel.com header.s=Intel header.b=Kqid6OU1; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 93E4668B235; Fri, 1 Apr 2022 12:25:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4CD9768B07F for ; Fri, 1 Apr 2022 12:25:10 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1648805115; x=1680341115; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=n3Hy4Q6vrTtSzZg9zl4UbmuHFD6OAR4tCLOJWr+8O4s=; b=Kqid6OU1yXUfq5Eq5u0oI08wBepLxiVk7aIW39ehDKUpOH6kA3Kxvo3T RRkHpNl2cjY8iQeDTbtwbWhpn3HqyEQzT6iC09S4A9fnWFsSW/cu6OLS3 tXKdvBSUSTngbqrnXo/1wAyczcABo8PAGDxXGKxfUBDGPn5kl68tTI3Hc 1hO4+Ix8eVdq8hqlQq3mtQ5PhY7QL8M1hk5qxukz9vo2x0JJVsW8K4UA8 b+vI7xFdmODsb2lE4BQDIEvBkIR/HCtCC34l2/OQZTI7I4jlqtasGgEK0 2DtNzX+Id3AwQYzQKwhoP5Iw91XCJBeuq58RkwXcpRUYiLUxbaGG/SgRB w==; X-IronPort-AV: E=McAfee;i="6200,9189,10303"; a="323261240" X-IronPort-AV: E=Sophos;i="5.90,226,1643702400"; d="scan'208";a="323261240" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Apr 2022 02:25:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,226,1643702400"; d="scan'208";a="567328726" Received: from desktop-qn7n0nf.sh.intel.com (HELO localhost.localdomain) ([10.239.160.39]) by orsmga008.jf.intel.com with ESMTP; 01 Apr 2022 02:25:07 -0700 From: Tong Wu To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Apr 2022 17:24:14 +0800 Message-Id: <20220401092416.1018-1-tong1.wu@intel.com> X-Mailer: git-send-email 2.35.1.windows.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] avutil/hwcontext_d3d11va: add a format check for staging texture 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 Cc: Tong Wu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: vb/9nS/imjiE The texDesc.Format needs to be filled in with a corresponding format. I add a format check to initialize the format in case sometimes the ctx->internal->priv is not initialized, such as during the hwmap process. For example, for sample command line: ffmpeg.exe -hwaccel qsv -c:v h264_qsv -i input.264 -vf "hwmap=derive_device=d3d11va:extra_hw_frames=16,format=d3d11,hwdownload,format=nv12" -f rawvideo -y ./output.yuv When deriving from qsv, the ctx->internal->priv remains uninitialized, causing CreateTexture2D failure. Note: this fix only solves this particular issue and does not make the sample command line work immediately. See the other patches in the patchset which fix this qsv->d3d11va command line. Signed-off-by: Tong Wu --- libavutil/hwcontext_d3d11va.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/libavutil/hwcontext_d3d11va.c b/libavutil/hwcontext_d3d11va.c index 8ab96bad25..f69fb3fc9c 100644 --- a/libavutil/hwcontext_d3d11va.c +++ b/libavutil/hwcontext_d3d11va.c @@ -344,6 +344,8 @@ static int d3d11va_create_staging_texture(AVHWFramesContext *ctx) AVD3D11VADeviceContext *device_hwctx = ctx->device_ctx->hwctx; D3D11VAFramesContext *s = ctx->internal->priv; HRESULT hr; + int i; + D3D11_TEXTURE2D_DESC texDesc = { .Width = ctx->width, .Height = ctx->height, @@ -355,6 +357,20 @@ static int d3d11va_create_staging_texture(AVHWFramesContext *ctx) .CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE, }; + if (!texDesc.Format) { + for (i = 0; i < FF_ARRAY_ELEMS(supported_formats); i++) { + if (ctx->sw_format == supported_formats[i].pix_fmt) { + texDesc.Format = supported_formats[i].d3d_format; + break; + } + } + if (i == FF_ARRAY_ELEMS(supported_formats)) { + av_log(ctx, AV_LOG_ERROR, "Unsupported pixel format: %s\n", + av_get_pix_fmt_name(ctx->sw_format)); + return AVERROR(EINVAL); + } + } + hr = ID3D11Device_CreateTexture2D(device_hwctx->device, &texDesc, NULL, &s->staging_texture); if (FAILED(hr)) { av_log(ctx, AV_LOG_ERROR, "Could not create the staging texture (%lx)\n", (long)hr); From patchwork Fri Apr 1 09:24:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wu, Tong1" X-Patchwork-Id: 35127 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c05:b0:7a:e998:b410 with SMTP id bw5csp532948pzb; Fri, 1 Apr 2022 02:25:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyCy86zplyzJkQRBInclwSL2COgZ0K+59KPJ77reREZCFzu1jVDbUd2PkqR0LlYiQSMi2jM X-Received: by 2002:a17:907:1c1c:b0:6e4:e488:4e76 with SMTP id nc28-20020a1709071c1c00b006e4e4884e76mr202552ejc.93.1648805128783; Fri, 01 Apr 2022 02:25:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648805128; cv=none; d=google.com; s=arc-20160816; b=LvPWJTH3ipXsFy6o5etasJyjgzGdYLyKVYoVfwT45+ED3K0z9B791cgXAJ8x1FRIuq cK5cfvbmcJy3quS1OZ0K5E/kIipNGRKZfK5nLs6PC3GVuKaIHGebTXxntXa/FbKcOeVd kLpqf91HL9a14vtS2u3Ryl+VmdjiUNhobVoTCRyrIC6gAu5P61+pZ3Mi5iV7/pBj34oc QB9a5fqfETsYh1/ndRhTrkPj7Afdj57HtYufavcDuOvAQ40f/F7kpPvppwqL9tX3cmIm CHfvkOfljA/sJPuFQBcLTNTLAQsh4Vv9DlU8UpJGI7H08lA3w7u6KXCmmzPRejLLa+GT 9/Rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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:delivered-to; bh=tjnP/lJ6sfmMndgEwfq1kclWDwVub5MpEzvKrUSsaWU=; b=QRnR80LTj4VsRKhoFQiK1dg5hzUmdv1cQC0hYd18AdGucPyNbnKMMyzVOrJNTpY8FB uh367gpfiqDI2gJoBf2XfM2L4c7wvqbRMK7nQBmkkW45bUASHKOwJ/Gbgdq21jHClxLL zob35LbwBSbdJev8hmIpm17JkET+Bf5x4hj5/XSBIAvW4QLx22gzt2s1np9EwPc2u0bK I5brNuT5cf9ibKMbaJdlo01yyFzFS0qJ3jHOIUk1N19Gv9d4p8GRyNUFW15TDSRSCyhK KJx2DIFtN/uqhZGoM/33TqEV0PtwGwzOTqkk+lej/Pth+3VfJ5/8PyPw/vcz5HvNmpXH 6jlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=LUO+0SCW; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c18-20020aa7d612000000b00418c2b5bedbsi1213068edr.445.2022.04.01.02.25.28; Fri, 01 Apr 2022 02:25:28 -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=@intel.com header.s=Intel header.b=LUO+0SCW; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 77D8E68B1FB; Fri, 1 Apr 2022 12:25:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 02A3868B1FB for ; Fri, 1 Apr 2022 12:25:13 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1648805119; x=1680341119; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=y6ynxT6GUgbYYzqFDK6tfemPWko2HFzRRfOypMa3S2A=; b=LUO+0SCWcKfWH1+PBTkfJKqUsYX8DII76Y3tCcKV2m/LyPb0yntsx6kG YurygEG3zbB2tyXuxJfBLaM6rW8Rhax7Psnlovcy80YB9unH64Wt6nmh5 NveZMpcj/YW1yvl9iqlCfqnE1i/8YJmYnaV5aPYKkusUfpaI5DS1Wga66 SxfVqEnrcG9OjR9BkTmZlUEIIkL60TlQA4ditPBNMkmR4jJjFZ/H9ruTR G9JjBsc+ua74GXkrJPPilBCDgNL1RTSv5aX21L8FJR405Y/R6CaQJVqVl T79BSR3e/U2E/T86dHZ//YpxkU1tsC9/QHht41KO/6B/014+IzD8PcClg g==; X-IronPort-AV: E=McAfee;i="6200,9189,10303"; a="323261244" X-IronPort-AV: E=Sophos;i="5.90,226,1643702400"; d="scan'208";a="323261244" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Apr 2022 02:25:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,226,1643702400"; d="scan'208";a="567328782" Received: from desktop-qn7n0nf.sh.intel.com (HELO localhost.localdomain) ([10.239.160.39]) by orsmga008.jf.intel.com with ESMTP; 01 Apr 2022 02:25:11 -0700 From: Tong Wu To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Apr 2022 17:24:15 +0800 Message-Id: <20220401092416.1018-2-tong1.wu@intel.com> X-Mailer: git-send-email 2.35.1.windows.2 In-Reply-To: <20220401092416.1018-1-tong1.wu@intel.com> References: <20220401092416.1018-1-tong1.wu@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] avutil/hwcontext_d3d11va: fix the uninitialized texture bindflag 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 Cc: Tong Wu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: KeQIm+P48Kuy When uploading rawvideos using d3d11va hardware framecontext, the bindflag is not initialized and will cause creating texture failure. Now fix it, assign it the value of D3D11_BIND_RENDER_TARGET. Signed-off-by: Tong Wu --- libavutil/hwcontext_d3d11va.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libavutil/hwcontext_d3d11va.c b/libavutil/hwcontext_d3d11va.c index f69fb3fc9c..0ec0e07d3a 100644 --- a/libavutil/hwcontext_d3d11va.c +++ b/libavutil/hwcontext_d3d11va.c @@ -254,6 +254,11 @@ static int d3d11va_frames_init(AVHWFramesContext *ctx) return AVERROR(EINVAL); } + if (!hwctx->BindFlags) { + av_log(ctx, AV_LOG_DEBUG, "Add render target bindflag for texture\n"); + hwctx->BindFlags = D3D11_BIND_RENDER_TARGET; + } + texDesc = (D3D11_TEXTURE2D_DESC){ .Width = ctx->width, .Height = ctx->height, From patchwork Fri Apr 1 09:24:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wu, Tong1" X-Patchwork-Id: 35128 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c05:b0:7a:e998:b410 with SMTP id bw5csp533010pzb; Fri, 1 Apr 2022 02:25:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJymtAfUqnWVxASQ1T49ODB69U5G+rwdaBbxQUR/yg2qy2HulDf4x5YLatzxz8qN1LfQDgRj X-Received: by 2002:a05:6402:d72:b0:419:938d:f4ce with SMTP id ec50-20020a0564020d7200b00419938df4cemr20549303edb.166.1648805138711; Fri, 01 Apr 2022 02:25:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648805138; cv=none; d=google.com; s=arc-20160816; b=bWsO0wr/M5jmvOmZj8IGuMlRDgn59bVIgWI3gu1yvMosETgmr7LgrYiPYBr5DHAU8h DlR4GAX8L8Pbp10xeWYXonH6HSMpeN4gnGh7f7+ST1DlUAFsh4vlIRJzqFci93ILmAyG Um6gZM2GnjYi/Z9WvTBilOMVlm7K7jtcWYkt5EIfsLqNou5Wad5qX7Q7U8nUs+8ILru1 yqqVmj7uvTHGw/35iG7dja1mCL25Md+2Lzu4o0APJ4vqM/PhXaDJIx3q+dxdRzBYwNPE xWbWtQ4fMtUmXZOKZLkMl2kytW9xY/BrjM1f73FD4Bdxzrv2cE64ShB9/q01affp0lG0 ePcg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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:delivered-to; bh=D6lfWKK6bzkQTef3rpFbAG7Ge3xe5mW/6Uaok+8nv0c=; b=eBTYtCP1tZvKnzBEuCUQuDiuV1ioMJN4KEmyQGQYwzq0SposXRnpN5mor5m/7hHgIs nmE2BxqYqiC7ifweincqcEZnn9nKlu6h5bqQZfpuHfEQOwYTUWjEiXTXTPA/DEwVndkd g30PHG5/9SZm6mP+oW30Ae9wWkicc9pKg781enaaKCcN7nNaLZaQspFx7OMHxa88PDW0 hfPYj3IgXouSTHOzMWqMW9Hj7FVElUHevuNVBh5FkKp3N+CmPZ7z8Mf0AzcOTTaJnp/d CsbXYEHmdrynWaAp/a6DtUerJihgnwpuVU8+0cys5GCtJrKQLWZpWTXRzwmV/DxsYxPj vLyA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=G8oO1WBi; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id z22-20020a1709060f1600b006df76385f35si1139723eji.981.2022.04.01.02.25.38; Fri, 01 Apr 2022 02:25:38 -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=@intel.com header.s=Intel header.b=G8oO1WBi; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 71EC568B265; Fri, 1 Apr 2022 12:25:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3AEC468B250 for ; Fri, 1 Apr 2022 12:25:16 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1648805121; x=1680341121; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=c09yOcI0eAGA7LGyzaOR8dIu3yP1DpngyrMaXmjEA+Y=; b=G8oO1WBicUZW+lfpRIopWgwHpNxtzULq6JWp9ydPdNR1jZDmTWO4xp2I oBrW3foZVha1mj/otQpuE6Rbq2ZeHN5PsfOuwJdS1OWCQky8qqXkqxhry 1M7Ga5yJ24F8gAWiHTzQdOS6n5f8361Wl6u3aZgF9kvhCV5IveE9MkTjr 6R35rsfKpT3c4vPNOlSqY02wiUrbHtbzPIR2kn4UoJGZzVxVBGVx6dF+V ZuNlad29fYoS4BpytKROMXSJCLv/LBZalAzChfjKCFnyq1Flb3tYv9B05 aEFjLQYroKIndDaZ2WnzsEK4CN2yq+39TTb1QTpeOKpouZWLTC8xLsDK1 g==; X-IronPort-AV: E=McAfee;i="6200,9189,10303"; a="323261247" X-IronPort-AV: E=Sophos;i="5.90,226,1643702400"; d="scan'208";a="323261247" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Apr 2022 02:25:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,226,1643702400"; d="scan'208";a="567328812" Received: from desktop-qn7n0nf.sh.intel.com (HELO localhost.localdomain) ([10.239.160.39]) by orsmga008.jf.intel.com with ESMTP; 01 Apr 2022 02:25:14 -0700 From: Tong Wu To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Apr 2022 17:24:16 +0800 Message-Id: <20220401092416.1018-3-tong1.wu@intel.com> X-Mailer: git-send-email 2.35.1.windows.2 In-Reply-To: <20220401092416.1018-1-tong1.wu@intel.com> References: <20220401092416.1018-1-tong1.wu@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] avutil/hwcontext_qsv: fix D3D11VA<->qsv hwmap errors 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 Cc: Tong Wu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1RJhdsRcVa2x For hwmap between qsv and d3d11va, The mfxHDLPair information should be put into texture_infos when deriving from qsv context. Moreover, when uploading from rawvideo, the ways that the textures are created are different, bindflag assertions are needed to make sure the right textures are derived during the process. Now after this fix, d3d_dec->qsv_vpp->qsv_enc, d3d_dec->qsv_vpp->qsv_download->yuv, yuv->d3d_upload->qsv_vpp->qsv->download->yuv, qsv_dec->qsv_vpp->d3d_download->yuv can all work properly. For d3d_dec->qsv_vpp->qsv_enc, one sample command line: ffmpeg.exe -hwaccel qsv -c:v h264_qsv -i input.264 -vf "hwmap=derive_device=d3d11va,format=d3d11,hwmap=derive_device=qsv,format=qsv" -c:v h264_qsv -y ./output.264 Signed-off-by: Tong Wu --- libavutil/hwcontext_qsv.c | 48 ++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index 95f8071abe..e6a7ac3ef0 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -806,12 +806,23 @@ static int qsv_frames_derive_from(AVHWFramesContext *dst_ctx, #if CONFIG_D3D11VA case AV_HWDEVICE_TYPE_D3D11VA: { + dst_ctx->initial_pool_size = src_ctx->initial_pool_size; AVD3D11VAFramesContext *dst_hwctx = dst_ctx->hwctx; - mfxHDLPair *pair = (mfxHDLPair*)src_hwctx->surfaces[i].Data.MemId; - dst_hwctx->texture = (ID3D11Texture2D*)pair->first; + dst_hwctx->texture_infos = av_calloc(src_hwctx->nb_surfaces, + sizeof(*dst_hwctx->texture_infos)); if (src_hwctx->frame_type & MFX_MEMTYPE_SHARED_RESOURCE) dst_hwctx->MiscFlags = D3D11_RESOURCE_MISC_SHARED; dst_hwctx->BindFlags = qsv_get_d3d11va_bind_flags(src_hwctx->frame_type); + for (i = 0; i < src_hwctx->nb_surfaces; i++) { + mfxHDLPair* pair = (mfxHDLPair*)src_hwctx->surfaces[i].Data.MemId; + dst_hwctx->texture_infos[i].texture = (ID3D11Texture2D*)pair->first; + if (dst_hwctx->BindFlags & D3D11_BIND_RENDER_TARGET) { + dst_hwctx->texture_infos[i].index = 0; + } + else { + dst_hwctx->texture_infos[i].index = (intptr_t)pair->second; + } + } } break; #endif @@ -900,9 +911,16 @@ static int qsv_map_from(AVHWFramesContext *ctx, dst->height = src->height; if (child_frames_ctx->device_ctx->type == AV_HWDEVICE_TYPE_D3D11VA) { +#if CONFIG_D3D11VA + AVD3D11VAFramesContext* child_frames_hwctx = child_frames_ctx->hwctx; mfxHDLPair *pair = (mfxHDLPair*)surf->Data.MemId; dst->data[0] = pair->first; - dst->data[1] = pair->second; + if (child_frames_hwctx->BindFlags & D3D11_BIND_RENDER_TARGET) { + dst->data[1] = 0; + } else { + dst->data[1] = pair->second; + } +#endif } else { dst->data[3] = child_data; } @@ -930,9 +948,16 @@ static int qsv_map_from(AVHWFramesContext *ctx, dummy->height = src->height; if (child_frames_ctx->device_ctx->type == AV_HWDEVICE_TYPE_D3D11VA) { +#if CONFIG_D3D11VA + AVD3D11VAFramesContext* child_frames_hwctx = child_frames_ctx->hwctx; mfxHDLPair *pair = (mfxHDLPair*)surf->Data.MemId; dummy->data[0] = pair->first; - dummy->data[1] = pair->second; + if (child_frames_hwctx->BindFlags & D3D11_BIND_RENDER_TARGET) { + dst->data[1] = 0; + } else { + dst->data[1] = pair->second; + } +#endif } else { dummy->data[3] = child_data; } @@ -1287,6 +1312,10 @@ static int qsv_frames_derive_to(AVHWFramesContext *dst_ctx, return AVERROR(ENOSYS); } + s->child_frames_ref = av_buffer_ref(dst_ctx->internal->source_frames); + if (!s->child_frames_ref) { + return AVERROR(ENOMEM); + } dst_hwctx->surfaces = s->surfaces_internal; return 0; @@ -1314,10 +1343,13 @@ static int qsv_map_to(AVHWFramesContext *dst_ctx, case AV_PIX_FMT_D3D11: { mfxHDLPair *pair = (mfxHDLPair*)hwctx->surfaces[i].Data.MemId; - if (pair->first == src->data[0] - && pair->second == src->data[1]) { - index = i; - break; + if (pair->first == src->data[0]) { + if (hwctx->frame_type & MFX_MEMTYPE_VIDEO_MEMORY_DECODER_TARGET + && pair->second == src->data[1] + || hwctx->frame_type & MFX_MEMTYPE_VIDEO_MEMORY_PROCESSOR_TARGET) { + index = i; + break; + } } } #endif