From patchwork Tue Aug 16 04:36:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philip Langdale X-Patchwork-Id: 37302 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3d0d:b0:8d:a68e:8a0e with SMTP id y13csp1652131pzi; Mon, 15 Aug 2022 21:37:36 -0700 (PDT) X-Google-Smtp-Source: AA6agR5ChSzpj1N/A8d+lN8C7MgBpzwvEND71q5D37e+pOPU+CwoDCYHQS5jSUUweBmKguIhkRLM X-Received: by 2002:a17:907:781a:b0:730:ccea:7c29 with SMTP id la26-20020a170907781a00b00730ccea7c29mr12323099ejc.85.1660624656070; Mon, 15 Aug 2022 21:37:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660624656; cv=none; d=google.com; s=arc-20160816; b=pA5hz+nm1KmYGIYHG+xMOZ3YRkCPxy1+Z9/kDRN5/09Z6Cq6LZE0zoEWlt8gsP6YcF P8ctpxrkp3eQledU3+LUQvSCNPsH+INhQ/8C4pIzOPrp7RAaGaO4bTtgZgetqIzckP1x GexdIvZ8OI8Z2ngylRIltc8CfxYf+s988VAlwplR8rQxKxtAICL47P7Vg4cWdvqAh8hD q8MphG+lrhoQ9JiwplUlHToydXo0NpnH1G6lXSO+2r8Eu4HotGLRzoYG62hGrqyCaCQz qmBMurfjcBoDl863xQEYeEyoCM43cXIZ9+rYqFDWHG4NNliLGdZLujCrHCk6nzmfrNNP LzGw== 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=yY/ZXL9Ixmarh0HWPDlw1X5939PWXaSbUThmQa/uQls=; b=Bwh3id26xiIuJspZyqd/5zsvxxvqD7Dnc0vJNYScQnbIRVhnIBxTB2imEMYRYJP2mG YnUIb+sK+wphx5mGKEGtSJoqTwanLgom4/sO5zGftrFoArk4JNUtyzGRufjSMRM5vFI6 /5mBYGqlw+2fuEB6aRmmXEzNc8oTc+IpRkev0sjudk1bf0NuTafNMxvFUOkCCo51YRgl DZFAe3GZL+pJQ8RWpY3iaVwZVWDdanG9vHjG/iOl21KiNV4a1gmf+Saj2NTnfmBsXW25 mLEAvgc/0BU4LGGxEyC4Ng+oXSi3HE3pV1lU38yc2NEge6f2SBY5U1iJgV3KEntKcfSi 5r1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@overt.org header.s=mail header.b=R+gXFZhF; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=overt.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f6-20020a056402354600b0043e564e423csi10071929edd.19.2022.08.15.21.37.35; Mon, 15 Aug 2022 21:37: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=@overt.org header.s=mail header.b=R+gXFZhF; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=overt.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2E6EE68B8E7; Tue, 16 Aug 2022 07:37:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.overt.org (mail.overt.org [157.230.92.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4FF5268B895 for ; Tue, 16 Aug 2022 07:37:00 +0300 (EEST) Received: from authenticated-user (mail.overt.org [157.230.92.47]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by mail.overt.org (Postfix) with ESMTPSA id 0F08A3F89A; Mon, 15 Aug 2022 23:36:58 -0500 (CDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=overt.org; s=mail; t=1660624619; bh=zsiOw2hLGQIr0D9TL12Yf7ITFALbk6oYvIflGPRxky8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=R+gXFZhF/cVOK0qaFwqtnyx/2V8Ovggg5vyumcU6m6l4q9KWHIb1nxxrM4GFYUE5z bO/JFAubOzjySWhyRYgtueFlqHJ4Lta6HhV+yXd27FpdwQ+M4EUmMkAsM15mlrixaH XiHav1lrpkTFav082wJJo2KObDB363s2O3hep0NmRWWMjixaJuY7FtpOxG0X/Js2pF WDxbhEga1WT/wVuIO/bLXkc5DlH3um7FtQQdFU510G7+rKc5XfkKaACr0jJFNnHg14 m6qgMYcAVRLp3iH5kSDw9CC417ZLe3z9ap9dhX0UuRnV0pqYwt7HDDBfHRXz6YCaQG DlZoPzTiiDOTg== From: Philip Langdale To: ffmpeg-devel@ffmpeg.org Date: Mon, 15 Aug 2022 21:36:41 -0700 Message-Id: <20220816043641.41521-4-philipl@overt.org> In-Reply-To: <20220816043641.41521-1-philipl@overt.org> References: <20220816043641.41521-1-philipl@overt.org> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] lavu/hwcontext_[vaapi|vulkan]: support mapping VUYA, P012, and Y412 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: Philip Langdale Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ++OQo7BpBIoo These two of the Microsoft formats used by Intel VAAPI are sufficiently conventional that we can add simple mappings for them in the hwcontexts to enable back and forth mapping so that Vulkan filters can be used with vaapi decoding/encoding of these formats. Note that as with P010, we have to map to full 16bit Vulkan formats and so technically lose some information with P012 and Y412. The most significant consequence of this is that when mapping form Vulkan back to VAAPI, the underlying DRM format will actually be Y416 and so we need a mapping entry for it, even though we haven't added that as a pixel format. Signed-off-by: Philip Langdale --- libavutil/hwcontext_vaapi.c | 21 +++++++++++++++------ libavutil/hwcontext_vulkan.c | 10 ++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c index c3e79907fd..15fea62a34 100644 --- a/libavutil/hwcontext_vaapi.c +++ b/libavutil/hwcontext_vaapi.c @@ -122,8 +122,8 @@ static const VAAPIFormatDescriptor vaapi_format_map[] = { #ifdef VA_FOURCC_Y210 MAP(Y210, YUV422_10, Y210, 0), #endif -#ifdef VA_FOURCC_Y216 - MAP(Y216, YUV422_12, Y216, 0), +#ifdef VA_FOURCC_Y212 + MAP(Y212, YUV422_12, Y212, 0), #endif MAP(411P, YUV411, YUV411P, 0), MAP(422V, YUV422, YUV440P, 0), @@ -133,8 +133,8 @@ static const VAAPIFormatDescriptor vaapi_format_map[] = { #ifdef VA_FOURCC_P010 MAP(P010, YUV420_10BPP, P010, 0), #endif -#ifdef VA_FOURCC_P016 - MAP(P016, YUV420_12, P016, 0), +#ifdef VA_FOURCC_P012 + MAP(P012, YUV420_12, P012, 0), #endif MAP(BGRA, RGB32, BGRA, 0), MAP(BGRX, RGB32, BGR0, 0), @@ -152,8 +152,8 @@ static const VAAPIFormatDescriptor vaapi_format_map[] = { #ifdef VA_FOURCC_Y410 MAP(Y410, YUV444_10, Y410, 0), #endif -#ifdef VA_FOURCC_Y416 - MAP(Y416, YUV444_12, Y416, 0), +#ifdef VA_FOURCC_Y412 + MAP(Y412, YUV444_12, Y412, 0), #endif }; #undef MAP @@ -1010,6 +1010,9 @@ static const struct { DRM_MAP(NV12, 1, DRM_FORMAT_NV12), #if defined(VA_FOURCC_P010) && defined(DRM_FORMAT_R16) DRM_MAP(P010, 2, DRM_FORMAT_R16, DRM_FORMAT_RG1616), +#endif +#if defined(VA_FOURCC_P012) && defined(DRM_FORMAT_R16) + DRM_MAP(P012, 2, DRM_FORMAT_R16, DRM_FORMAT_RG1616), #endif DRM_MAP(BGRA, 1, DRM_FORMAT_ARGB8888), DRM_MAP(BGRX, 1, DRM_FORMAT_XRGB8888), @@ -1021,6 +1024,12 @@ static const struct { #endif DRM_MAP(ARGB, 1, DRM_FORMAT_BGRA8888), DRM_MAP(XRGB, 1, DRM_FORMAT_BGRX8888), +#ifdef VA_FOURCC_AYUV + DRM_MAP(AYUV, 1, DRM_FORMAT_AYUV), +#endif +#ifdef VA_FOURCC_Y412 + DRM_MAP(Y412, 1, DRM_FORMAT_Y412), +#endif }; #undef DRM_MAP diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 237caa4bc0..62db2633fa 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -173,6 +173,7 @@ static const struct { { AV_PIX_FMT_NV12, { VK_FORMAT_R8_UNORM, VK_FORMAT_R8G8_UNORM } }, { AV_PIX_FMT_NV21, { VK_FORMAT_R8_UNORM, VK_FORMAT_R8G8_UNORM } }, { AV_PIX_FMT_P010, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16G16_UNORM } }, + { AV_PIX_FMT_P012, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16G16_UNORM } }, { AV_PIX_FMT_P016, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16G16_UNORM } }, { AV_PIX_FMT_NV16, { VK_FORMAT_R8_UNORM, VK_FORMAT_R8G8_UNORM } }, @@ -210,6 +211,9 @@ static const struct { { AV_PIX_FMT_YUVA444P12, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, { AV_PIX_FMT_YUVA444P16, { VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_UNORM } }, + { AV_PIX_FMT_VUYA, { VK_FORMAT_R8G8B8A8_UNORM } }, + { AV_PIX_FMT_Y412, { VK_FORMAT_R16G16B16A16_UNORM } }, + { AV_PIX_FMT_BGRA, { VK_FORMAT_B8G8R8A8_UNORM } }, { AV_PIX_FMT_RGBA, { VK_FORMAT_R8G8B8A8_UNORM } }, { AV_PIX_FMT_RGB24, { VK_FORMAT_R8G8B8_UNORM } }, @@ -2629,6 +2633,12 @@ static const struct { { DRM_FORMAT_XRGB8888, VK_FORMAT_B8G8R8A8_UNORM }, { DRM_FORMAT_ABGR8888, VK_FORMAT_R8G8B8A8_UNORM }, { DRM_FORMAT_XBGR8888, VK_FORMAT_R8G8B8A8_UNORM }, + + { DRM_FORMAT_AYUV, VK_FORMAT_R8G8B8A8_UNORM }, + { DRM_FORMAT_Y412, VK_FORMAT_R16G16B16A16_UNORM }, + // As we had to map Y412 to a 16bit Vulkan format, reverse mapping will + // end up yielding Y416 as the DRM format, so we need to recognise it. + { DRM_FORMAT_Y416, VK_FORMAT_R16G16B16A16_UNORM }, }; static inline VkFormat drm_to_vulkan_fmt(uint32_t drm_fourcc)