From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTPS id A50574D023
	for <ffmpegdev@gitmailbox.com>; Sun, 16 Mar 2025 20:56:42 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1B47568D940;
	Sun, 16 Mar 2025 22:56:38 +0200 (EET)
Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com
 [209.85.216.41])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1B89B68D591
 for <ffmpeg-devel@ffmpeg.org>; Sun, 16 Mar 2025 22:56:32 +0200 (EET)
Received: by mail-pj1-f41.google.com with SMTP id
 98e67ed59e1d1-300f92661fcso1745579a91.3
 for <ffmpeg-devel@ffmpeg.org>; Sun, 16 Mar 2025 13:56:32 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1742158589; x=1742763389; darn=ffmpeg.org;
 h=content-transfer-encoding:mime-version:message-id:date:subject:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=4worid5/LiVVhYOS1hmdDxoYEM8vjf2A7BazX/vLJc8=;
 b=fJ14AEUb57jvyJhVc93rIav2tuu4fQuPAGR8IMTxqUKrEgnQjssKRYeyshf9+shGwO
 Qa6cDPc4P/fDGizwvuChvj1jralIkcqHpq7UqjY5aOBkMH8mYrp9blwEU0gCHsY5Ljxh
 /atS92aMoy7fUVdYj/SogWrjCdlRY7/8QofPZOqHa/UKY6p9mTq1IDomDktE98Oe/3w0
 5iLrqzrVYFn+oySAkGJFpPYodx3+g8mIRztMAb71VcftQuE/EzhEmizv+tyx51H6ptiD
 d+YZBZcyfQOQzFYLVFMyO+izbjK9Dh7pm1PD8eMYeGKaBJFG3LwLhE7ySdhA26Q1WDNP
 ntoQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1742158589; x=1742763389;
 h=content-transfer-encoding:mime-version:message-id:date:subject:to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=4worid5/LiVVhYOS1hmdDxoYEM8vjf2A7BazX/vLJc8=;
 b=tHyypxDo90paUjOFnhfQUh7O0mwlKhAp1TwnonxLCNc3gXJnzf5vXOvomVWDJCo1uq
 dnGYXsRtFNzJ+mj4MfKF7oHyxKjRlBBNRRjNISOQqpbjSHiZoNdL7xwpHHio9CySAgYw
 fGG+qjT9rW8YMO7zpmsLqT9gLS/mOgCAlIVONACtQX4ALYCloI/53be0X5OcsVxcP2NV
 SpVaQQjYI7X1XXfj0+mkcuzNW8XYwhcWac3QtTa5AsKJhfWivJi3qAygb/9Bum9Z4owa
 4oQVmduDtqgelnMpz5H/n0IzvxvJ4t9SiJ326MBo4DOf+YOM7bGkVvJVvWc/loB8r+SK
 7dhw==
X-Gm-Message-State: AOJu0Yz14ymbtQWpC79whTXYBTKjvlOzCywVxu/Vagogo2l5nXcpLC9T
 Y9nbat0XHGURboIw7NhWHf3JZ8GKOiUz4I7OfEubVUzOf/ZPSsRNpYuyJg==
X-Gm-Gg: ASbGncsSf4oXW1EVuInuX9qzc9w6J2C1BjQ2/s6QnegLtr4oKfyWweU/Q3rW7yqvE3z
 mskFHodTVdYC35dlZBiac/c+a5kPUMZ01UH051iilWxFpi/YMHw9oNyYUXB8tYbhPfsCrQnqldi
 35Boym37QCO3C11vqPMjjQVQTVXleNEAB4tvlXXsD8sTOZvWhZ+rwev1UTvIzPO+sifsOyNqQ8q
 f4tcl0GiluslSG70NrxlcHZk7hweXNqLL770aLrWJJy4bPt3ua3+S9ISzVoYSmtl9Q+u4IctH9/
 um3Mn8LtlwD1RKoyaTtPyZXCl/V3w+d67XzYXsnxVwTlHX8V9YWLC250JMiR
X-Google-Smtp-Source: AGHT+IFEhiyBjcY7sc8xVE25e65Mf9xyErqW+UOywtPkImHE3l59gxzBHG1X69maA0E5g++NQ1G9wg==
X-Received: by 2002:a17:90b:4c4a:b0:2ff:5a9d:9390 with SMTP id
 98e67ed59e1d1-30151c999d1mr12546552a91.8.1742158588870; 
 Sun, 16 Mar 2025 13:56:28 -0700 (PDT)
Received: from localhost.localdomain ([2800:2121:b040:c:e90b:1e6c:4204:7ac9])
 by smtp.gmail.com with ESMTPSA id
 98e67ed59e1d1-301539d40a1sm5170084a91.1.2025.03.16.13.56.25
 for <ffmpeg-devel@ffmpeg.org>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sun, 16 Mar 2025 13:56:27 -0700 (PDT)
From: James Almer <jamrial@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Date: Sun, 16 Mar 2025 17:56:08 -0300
Message-ID: <20250316205609.58465-1-jamrial@gmail.com>
X-Mailer: git-send-email 2.48.1
MIME-Version: 1.0
Subject: [FFmpeg-devel] [PATCH 1/2] swscale/input: add support for NV20
X-BeenThere: ffmpeg-devel@ffmpeg.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250316205609.58465-1-jamrial@gmail.com/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libswscale/format.c |  2 ++
 libswscale/input.c  | 37 +++++++++++++++++++++++++++----------
 2 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/libswscale/format.c b/libswscale/format.c
index c3ef499438..fd0269a23e 100644
--- a/libswscale/format.c
+++ b/libswscale/format.c
@@ -226,6 +226,8 @@ static const FormatEntry format_entries[] = {
     [AV_PIX_FMT_Y216LE]         = { 1, 1 },
     [AV_PIX_FMT_X2RGB10LE]      = { 1, 1 },
     [AV_PIX_FMT_X2BGR10LE]      = { 1, 1 },
+    [AV_PIX_FMT_NV20BE]         = { 1, 0 },
+    [AV_PIX_FMT_NV20LE]         = { 1, 0 },
     [AV_PIX_FMT_P210BE]         = { 1, 1 },
     [AV_PIX_FMT_P210LE]         = { 1, 1 },
     [AV_PIX_FMT_P212BE]         = { 1, 1 },
diff --git a/libswscale/input.c b/libswscale/input.c
index cab8de6d3f..aa3cfebc87 100644
--- a/libswscale/input.c
+++ b/libswscale/input.c
@@ -945,8 +945,9 @@ static void nv21ToUV_c(uint8_t *dstU, uint8_t *dstV,
     nvXXtoUV_c(dstV, dstU, src1, width);
 }
 
-#define p01x_uv_wrapper(bits, shift) \
-    static void p0 ## bits ## LEToUV_c(uint8_t *dstU, uint8_t *dstV,     \
+#define p01x_uv_wrapper(fmt, shift) \
+    static void fmt ## LEToUV ## _c(uint8_t *dstU,                       \
+                                       uint8_t *dstV,                    \
                                        const uint8_t *unused0,           \
                                        const uint8_t *src1,              \
                                        const uint8_t *src2, int width,   \
@@ -959,7 +960,8 @@ static void nv21ToUV_c(uint8_t *dstU, uint8_t *dstV,
         }                                                                \
     }                                                                    \
                                                                          \
-    static void p0 ## bits ## BEToUV_c(uint8_t *dstU, uint8_t *dstV,     \
+    static void fmt ## BEToUV ## _c(uint8_t *dstU,                       \
+                                       uint8_t *dstV,                    \
                                        const uint8_t *unused0,           \
                                        const uint8_t *src1,              \
                                        const uint8_t *src2, int width,   \
@@ -972,8 +974,9 @@ static void nv21ToUV_c(uint8_t *dstU, uint8_t *dstV,
         }                                                                \
     }
 
-#define p01x_wrapper(bits, shift) \
-    static void p0 ## bits ## LEToY_c(uint8_t *dst, const uint8_t *src,  \
+#define p01x_wrapper(fmt, shift) \
+    static void fmt ## LEToY ## _c(uint8_t *dst,                         \
+                                      const uint8_t *src,                \
                                       const uint8_t *unused1,            \
                                       const uint8_t *unused2, int width, \
                                       uint32_t *unused, void *opq)       \
@@ -984,7 +987,8 @@ static void nv21ToUV_c(uint8_t *dstU, uint8_t *dstV,
         }                                                                \
     }                                                                    \
                                                                          \
-    static void p0 ## bits ## BEToY_c(uint8_t *dst, const uint8_t *src,  \
+    static void fmt ## BEToY ## _c(uint8_t *dst,                         \
+                                      const uint8_t *src,                \
                                       const uint8_t *unused1,            \
                                       const uint8_t *unused2, int width, \
                                       uint32_t *unused, void *opq)       \
@@ -994,11 +998,12 @@ static void nv21ToUV_c(uint8_t *dstU, uint8_t *dstV,
             AV_WN16(dst + i * 2, AV_RB16(src + i * 2) >> shift);         \
         }                                                                \
     }                                                                    \
-    p01x_uv_wrapper(bits, shift)
+    p01x_uv_wrapper(fmt, shift)
 
-p01x_wrapper(10, 6)
-p01x_wrapper(12, 4)
-p01x_uv_wrapper(16, 0)
+p01x_wrapper(nv20, 0)
+p01x_wrapper(p010, 6)
+p01x_wrapper(p012, 4)
+p01x_uv_wrapper(p016, 0)
 
 static void bgr24ToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2,
                        int width, uint32_t *rgb2yuv, void *opq)
@@ -1910,11 +1915,17 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c,
     case AV_PIX_FMT_XV48BE:
         *chrToYV12 = read_xv48be_UV_c;
         break;
+    case AV_PIX_FMT_NV20LE:
+        *chrToYV12 = nv20LEToUV_c;
+        break;
     case AV_PIX_FMT_P010LE:
     case AV_PIX_FMT_P210LE:
     case AV_PIX_FMT_P410LE:
         *chrToYV12 = p010LEToUV_c;
         break;
+    case AV_PIX_FMT_NV20BE:
+        *chrToYV12 = nv20BEToUV_c;
+        break;
     case AV_PIX_FMT_P010BE:
     case AV_PIX_FMT_P210BE:
     case AV_PIX_FMT_P410BE:
@@ -2468,11 +2479,17 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c,
     case AV_PIX_FMT_BGRA64LE:
         *lumToYV12 = bgr64LEToY_c;
         break;
+    case AV_PIX_FMT_NV20LE:
+        *lumToYV12 = nv20LEToY_c;
+        break;
     case AV_PIX_FMT_P010LE:
     case AV_PIX_FMT_P210LE:
     case AV_PIX_FMT_P410LE:
         *lumToYV12 = p010LEToY_c;
         break;
+    case AV_PIX_FMT_NV20BE:
+        *lumToYV12 = nv20BEToY_c;
+        break;
     case AV_PIX_FMT_P010BE:
     case AV_PIX_FMT_P210BE:
     case AV_PIX_FMT_P410BE:
-- 
2.48.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".