From patchwork Mon Oct 21 19:57:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: martin schitter X-Patchwork-Id: 52431 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:143:b0:48e:c0f8:d0de with SMTP id h3csp2920851vqi; Mon, 21 Oct 2024 13:18:13 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXkYVVft+DUL0HnmCoZ1smSHiGgTA+3Ui+T2WFI+DQjnLu+V9KGkCXPOdMSBwtXxkxZKOFmxsHgLhUxpN2MU6NQ@gmail.com X-Google-Smtp-Source: AGHT+IF1kRVM9eRgU0b8mdyJE12xWJeKDvhddaWD0kgEz0aDjxVC7q1BcZh19QZiixP5N+5gqIWP X-Received: by 2002:a05:6402:42c2:b0:5cb:6158:cae9 with SMTP id 4fb4d7f45d1cf-5cb7fcd8dbamr115711a12.6.1729541893035; Mon, 21 Oct 2024 13:18:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729541893; cv=none; d=google.com; s=arc-20240605; b=VSITUuh0yMXbW456fJQmvvmGk4JAXSyge3SYLXlpZUb9Xst/rLfw9af2NkMt6kThvJ VvaXA1/m7Yp/FvBk7slLJpiVQrWfJAdXo6in5085+JpvwUMAQ8siVEUhNdawyWzb+a/f igSplloW72wp9067Cwqb6wUSlWaIE9PxjTnt1YYzzQyHjZeW5QVYnm2G1wXgeu1lZZ4f 8e51WRbPjfSnNdfEJa3wc3hNJQ/ZTGMBvxmSXWFrhtpJWexlwKTr/75Y54eDWKigyEVR UcYkG+YrTSb0K83pxxjAfBUbM7los+WrMB8UjA+URA0kjwaxRdkZy3eccnuhmk36SOoD xwyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=ydLui7ls2QX/8BGs+fivucRx7yfgM5qLESziLbes8xM=; fh=igg3JDwkSkAbPTwY6V0OsEq0RUkG4DKWC8fVJg4GhMY=; b=j7kWUkmo1eOvXe4gaWY+W1dH+Ymx985VMzmy/iJlhpKC162FUO8CYI9RBpDy8UM5GP 2Vl8yJOb/z2m9G6rCCHAqiMpScA3fi192u/r7ODXTYBkR6bF4P94yoIVM3krTqOMSwIy Ys9qDi6iMBdmQdD6YQNMpK0jMdGKaNKRU4AZmmVhl4iMBkvC6rbqyf5aDIv1uigN3lhM Z+TE41Z/8x4gPxLRpiuyJAmVmCxh4/k9kLbmJfudekrikjLdZ6Pbl9zhbM1mR6l8HfLS W9u0XL/MrbXY9e79NpuLPAOi/z+Wf5RzCZyU9Ts0trgH7vD2gRxrcnfQEc8XzcuIJWOl XFMA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@mur.at header.s=dkim2 header.b="c66f/1hN"; 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=mur.at Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5cb66c7e69asi3100988a12.481.2024.10.21.13.18.12; Mon, 21 Oct 2024 13:18:13 -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=@mur.at header.s=dkim2 header.b="c66f/1hN"; 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=mur.at Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 29DAB68DDDA; Mon, 21 Oct 2024 23:18:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from efeu.mur.at (efeu.mur.at [89.106.208.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DE17468DB94 for ; Mon, 21 Oct 2024 23:18:00 +0300 (EEST) Received: from localhost.localdomain (lan1.raspi.ma39.ffgraz.net [10.12.1.243]) by efeu.mur.at (Postfix) with ESMTPSA id 68417462DE; Mon, 21 Oct 2024 22:18:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=mur.at; s=dkim2; t=1729541880; bh=pqpXYs+ioHxYkI2BAlDR+fr1OsfQ9fOuUX1syGJZLSY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c66f/1hNqmP5OxrhWHj16g4JFLtGs3P7Iq1M1kKkeq9m5Oipf2+lct0Lcco+oP8ZS yKP26QIkpvETcHDv6uY6HionrJLjjmI+9jJE7RUFsWM/AqPIFjATi3QZgMHLw/5mWv D3FfT/bWdbDjM0wNgulj9gQYsjm1Sa/I5lE7EXXxKNoK172bliDYbNY9Cj3ALfMhj1 QBlsklZPn+YpFZV+r+BRHAdPCjWrG8UFzsHWo09acyhnRN9KGK6qDUnm28m9rcDXjD 0wDG/DaEpu8YAsPlj/dE5e2rGBzHJ9k53XtFEGQrIAsQz7LEqn17E1bHFF/0s1breg tYOxGT8hhkHTWEo8sbQSmYsCbIQT4V8sEIC+RN61WkI8FbtaOn3QNxPs8ZCgm/rJ5a lgGsNmaE/0XX4iuucu0f73MEaWuy7xnvN7veICuaZzaI5OgRJyM+9ndx9V/yLu3Qao mdef5oNR3GETzaQLAAjTb3Xjr7m+s44Igf8P3Uxyve+ceFYimI1 From: Martin Schitter To: ffmpeg-devel@ffmpeg.org Date: Mon, 21 Oct 2024 21:57:14 +0200 Message-ID: <20241021195721.892544-3-ms+git@mur.at> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20241021195721.892544-2-ms+git@mur.at> References: <20241021195721.892544-2-ms+git@mur.at> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v12 1/9] avutil/swscale: add PIX_FMT_YUV444 and input support 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: Martin Schitter Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: FFaJcSzqFk31 --- libavutil/pixdesc.c | 11 +++++++++++ libavutil/pixfmt.h | 2 ++ libswscale/input.c | 22 ++++++++++++++++++++++ libswscale/utils.c | 1 + tests/ref/fate/imgutils | 2 ++ tests/ref/fate/sws-pixdesc-query | 2 ++ 6 files changed, 40 insertions(+) diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c index e15105e..c6a9b85 100644 --- a/libavutil/pixdesc.c +++ b/libavutil/pixdesc.c @@ -346,6 +346,17 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { }, .flags = AV_PIX_FMT_FLAG_PLANAR, }, + [AV_PIX_FMT_YUV444] = { + .name = "yuv444", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 3, 0, 0, 8 }, /* Y */ + { 0, 3, 1, 0, 8 }, /* U */ + { 0, 3, 2, 0, 8 }, /* V */ + }, + }, [AV_PIX_FMT_YUV444P] = { .name = "yuv444p", .nb_components = 3, diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index 0dc4abc..0c7f909 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -457,6 +457,8 @@ enum AVPixelFormat { AV_PIX_FMT_RGB96BE, ///< packed RGBA 32:32:32, 96bpp, RGBRGB..., big-endian AV_PIX_FMT_RGB96LE, ///< packed RGBA 32:32:32, 96bpp, RGBRGB..., little-endian + AV_PIX_FMT_YUV444, ///< packed YUV 4:4:4, 24bpp (1 Cr & Cb sample per 1x1 Y), YUVYUV... + AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions }; diff --git a/libswscale/input.c b/libswscale/input.c index bb5e31a..79376b9 100644 --- a/libswscale/input.c +++ b/libswscale/input.c @@ -771,6 +771,22 @@ static void read_uyva_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, } } +static void yuv444ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, + uint32_t *unused2, void *opq) +{ + for (int i = 0; i < width; i++) + dst[i] = src[i * 3]; +} + +static void yuv444ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, + const uint8_t *unused1, int width, uint32_t *unused2, void *opq) +{ + for (int i = 0; i < width; i++) { + dstU[i] = src[i * 3 + 1]; + dstV[i] = src[i * 3 + 2]; + } +} + static void vyuToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq) { @@ -1562,6 +1578,9 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c, case AV_PIX_FMT_VYU444: *chrToYV12 = vyuToUV_c; break; + case AV_PIX_FMT_YUV444: + *chrToYV12 = yuv444ToUV_c; + break; case AV_PIX_FMT_NV12: case AV_PIX_FMT_NV16: case AV_PIX_FMT_NV24: @@ -2164,6 +2183,9 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c, case AV_PIX_FMT_VYU444: *lumToYV12 = vyuToY_c; break; + case AV_PIX_FMT_YUV444: + *lumToYV12 = yuv444ToY_c; + break; case AV_PIX_FMT_BGR24: *lumToYV12 = bgr24ToY_c; break; diff --git a/libswscale/utils.c b/libswscale/utils.c index 9b23df4..36d9738 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -73,6 +73,7 @@ static const FormatEntry format_entries[] = { [AV_PIX_FMT_BGR24] = { 1, 1 }, [AV_PIX_FMT_YUV422P] = { 1, 1 }, [AV_PIX_FMT_YUV444P] = { 1, 1 }, + [AV_PIX_FMT_YUV444] = { 1, 0 }, [AV_PIX_FMT_YUV410P] = { 1, 1 }, [AV_PIX_FMT_YUV411P] = { 1, 1 }, [AV_PIX_FMT_GRAY8] = { 1, 1 }, diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils index 8639baa..62a52be 100644 --- a/tests/ref/fate/imgutils +++ b/tests/ref/fate/imgutils @@ -280,6 +280,7 @@ rgba128be planes: 1, linesizes: 1024 0 0 0, plane_sizes: 49152 0 rgba128le planes: 1, linesizes: 1024 0 0 0, plane_sizes: 49152 0 0 0, plane_offsets: 0 0 0, total_size: 49152 rgb96be planes: 1, linesizes: 768 0 0 0, plane_sizes: 36864 0 0 0, plane_offsets: 0 0 0, total_size: 36864 rgb96le planes: 1, linesizes: 768 0 0 0, plane_sizes: 36864 0 0 0, plane_offsets: 0 0 0, total_size: 36864 +yuv444 planes: 1, linesizes: 192 0 0 0, plane_sizes: 9216 0 0 0, plane_offsets: 0 0 0, total_size: 9216 image_fill_black tests yuv420p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af @@ -507,3 +508,4 @@ rgba128be total_size: 49152, black_unknown_crc: 0x59ef499b, black_tv_cr rgba128le total_size: 49152, black_unknown_crc: 0x59ef499b, black_tv_crc: 0x59ef499b, black_pc_crc: 0x59ef499b rgb96be total_size: 36864, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 rgb96le total_size: 36864, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +yuv444 total_size: 9216, black_unknown_crc: 0x32a4be0b, black_tv_crc: 0x32a4be0b, black_pc_crc: 0x07501edb diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query index aa2edcf..6e80565 100644 --- a/tests/ref/fate/sws-pixdesc-query +++ b/tests/ref/fate/sws-pixdesc-query @@ -304,6 +304,7 @@ isYUV: yuv440p10le yuv440p12be yuv440p12le + yuv444 yuv444p yuv444p10be yuv444p10le @@ -879,6 +880,7 @@ Packed: ya16be ya16le ya8 + yuv444 yuyv422 yvyu422