From patchwork Tue Aug 16 05:02:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philip Langdale X-Patchwork-Id: 37306 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3d0d:b0:8d:a68e:8a0e with SMTP id y13csp1660003pzi; Mon, 15 Aug 2022 22:03:38 -0700 (PDT) X-Google-Smtp-Source: AA6agR5hTqrE0NMfmxqZNYz1NBGBRHOnfmamAgq3Yof5K3pBT7GCK1oLCDYp3vq8Kchh4ga45Rba X-Received: by 2002:a17:906:5a5a:b0:730:ba28:292c with SMTP id my26-20020a1709065a5a00b00730ba28292cmr12142889ejc.312.1660626218273; Mon, 15 Aug 2022 22:03:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660626218; cv=none; d=google.com; s=arc-20160816; b=kGZgGMoCOR2CxCx/xWwk4SUSohITBWrvMn6urgkal8fXbt6C/r5rAKUYiTj1crl9dB S25Lh4yEzZhS170bO/1BhOVFPwZ6MKB/ytkXj3DTdbPvMZVryHd32Ye0o0eciNA904ed 8T4TAN9SFyw7pioqoGmffuDcZwLhpmDe9msKkz+wo8QsHu1vD5l0Ds2aPd/gglCVRmx/ aj0AgIh+KcJmkIJ3/+aq1AJY1VePOnz5xPSNQowroj3do3/H/acyL926gVylWGRK2Pod GdHmb272g/R83VH+2dQnu9MLn36TYTgez2czyywTaQbW12dRCcLAL8MwxCrLE7SDjDJ5 FRUg== 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=n5whyEliXPEZ6jsQDRYdH6wylOvrAVG/SgYFc9sa7T0=; b=FIPxjNzCscaevqbVPvme/T2qwm7R3SHwg27yaw6pEovFuLajR3lEiFdTmVMgETz5f5 pJburEiRQdkBr2M0lh8rWDxcNS0no6ETOjCZnuKlEfXL5nILGnuKPRXx90A5wEAt6FGT MT+iX6Aj97vhT4jrun+qvHs/UKFSAo0uqt4njPEMrcIGxH1UTeXQirw28iAT32JgxTXt 5T8JTp6Q+oUY/oDjGLNT2xbl6aljFfKWRMcD+8ldT50F40fvizhFchjeAL9eJE4lhmXv UZVDDZLe5Zvhprj5svMZ+t+2wdhTFiKn5bROFLjoe0E3yG1PFQyUbGnBFmGr2jJ9LZCJ khhw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@overt.org header.s=mail header.b=jNY4NKY+; 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 j8-20020aa7c408000000b0043defd3bd70si8445751edq.329.2022.08.15.22.03.37; Mon, 15 Aug 2022 22:03: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=@overt.org header.s=mail header.b=jNY4NKY+; 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 32A4E68B96C; Tue, 16 Aug 2022 08:03:15 +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 6242668B6B9 for ; Tue, 16 Aug 2022 08:03:06 +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 150373F89A; Tue, 16 Aug 2022 00:03:05 -0500 (CDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=overt.org; s=mail; t=1660626185; bh=9VDyuZdBvWCQgru0tFwo5FjKCYaie53OVhhgkOoV0pg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jNY4NKY+z9rxClvuS+C7V5hEQHAZ2smt0SA4KfdwQDgHuX/wunLcsS6PGJb0xArx0 OZujzOE5jru7NYpY436hX1phxpZlaSz0R+RwzaGFEfW9E8fDB4LeJnUz2SlsSi4ObS fylDCUZuTZ6ifQ41h966SrDowfPsX0EtjfLlL5GvFarT39ot8P1uUVTmwQ0ucl/UVj ruO8Yw5q2Q+YTym1PSut1m7EaHlPoSJhdEB8epML0NiJHbDNERdyERt7SqwePOh7RG uTEG7wtwwxgXmSdGbr3q3c4Stvv89COuWf/jiQxf8UbU8mXrvCRe5D05aWN+i3uZLK ddciyZG1nR5JQ== From: Philip Langdale To: ffmpeg-devel@ffmpeg.org Date: Mon, 15 Aug 2022 22:02:56 -0700 Message-Id: <20220816050256.32149-4-philipl@overt.org> In-Reply-To: <20220816050256.32149-1-philipl@overt.org> References: <20220816050256.32149-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: GLn+Qbmy5eai 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 | 9 +++++++++ libavutil/hwcontext_vulkan.c | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c index 6c057aa5fd..15fea62a34 100644 --- a/libavutil/hwcontext_vaapi.c +++ b/libavutil/hwcontext_vaapi.c @@ -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)