From patchwork Sun Dec 3 00:27:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 44872 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a301:b0:181:818d:5e7f with SMTP id x1csp1994802pzk; Sat, 2 Dec 2023 16:27:45 -0800 (PST) X-Google-Smtp-Source: AGHT+IGnAZQsQuKQkQxJ1Jv0/SwQ5JqdTWRcNuEVKugg2oXEcQUB3MlCts8oGLr9teWGCq92LRHY X-Received: by 2002:a05:600c:a43:b0:40b:5e21:cc35 with SMTP id c3-20020a05600c0a4300b0040b5e21cc35mr1284396wmq.96.1701563265271; Sat, 02 Dec 2023 16:27:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701563265; cv=none; d=google.com; s=arc-20160816; b=WBStq7QUzOOPEU2iEHMDZJnZTAe2UK+xEhKhGLK6xDIlhcmnP1SbRNMgC1VZ0808C5 Se18pfbNliKuSClZ++SxoyssGln/9EPGOtXBPvn8y48L/EmTemNhIkMaXxtXXPnY29Yd Y5L2wFWROlAHzFvLw/Ok9dVAMHLo05NiMtyILvIxI3meyXy7F0TMWtIyS65n4poBolUb rMLO6Nc6PsjAFiLN0CoHC59RnTJ+Fd/a0UQWwo4W+9bK1AhTG361VQxYGZhdmhpGZJtc NbA0seDNiYnT5F4lIkkuRZ3+WNJzo6c3QNEzEH9Jumuu+pLVXcMiTdmuPlXrJ8gAXjJz NCZA== 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 :delivered-to; bh=ycK9h7Xn3sDC7bDXPIjGt1hTJ6ilOD70Bbhw3AfjV9E=; fh=s+G8Ss4JbeMFkWPSp2LmIH/LXFyBlALRiww1j3FPjHY=; b=laU6c47crIRuSwGIq6y5B6CrWicZGSmU7AqkIuwK50drcJSyPHg7OusAf5+WMyLmW1 L493Bw7FvMOIzakVJedVaV3K+r6Rosr9k8aK+x/IXxOZFKnBX3+SO9cPvzlq5OL1Quz+ aeVtmLNJqe7VxiFKtr2GAoGRmyNC9n9N5elFKxFsWfVc88ZBDrEAXarkHFa63Evhixpw aIHvW2OhsFNx1f3asarRA06+vSnWPWvJMfQUw6gm4SrqVsEqU1UkZYRNTnynHM1vMJXA RyHWvnDKM81haio4Dt8fZztU64DEf31Dk/VlR3QDyLSegU+EPistH7cencjKMaBovpWn mYow== ARC-Authentication-Results: i=1; mx.google.com; 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 k17-20020a1709061c1100b00a0cc61b4f35si2967616ejg.820.2023.12.02.16.27.44; Sat, 02 Dec 2023 16:27:45 -0800 (PST) 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; 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 4D1AB68CCFB; Sun, 3 Dec 2023 02:27:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4A4D768C44F for ; Sun, 3 Dec 2023 02:27:35 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 7A42DE98DB; Sun, 3 Dec 2023 01:27:34 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zUYX0Olexg_l; Sun, 3 Dec 2023 01:27:32 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 9E1C5E98D4; Sun, 3 Dec 2023 01:27:32 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Dec 2023 01:27:20 +0100 Message-Id: <20231203002726.29683-1-cus@passwd.hu> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function 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: Marton Balint Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: d+HnUaVqe/UH Signed-off-by: Marton Balint --- libavutil/tests/imgutils.c | 68 ++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/libavutil/tests/imgutils.c b/libavutil/tests/imgutils.c index 748bd6c9d2..f3a433ac4a 100644 --- a/libavutil/tests/imgutils.c +++ b/libavutil/tests/imgutils.c @@ -19,6 +19,41 @@ #include "libavutil/imgutils.c" #undef printf +static int basic_tests(enum AVPixelFormat pix_fmt, int w, int h) { + uint8_t *data[4]; + size_t sizes[4]; + ptrdiff_t linesizes1[4], offsets[3] = { 0 }; + int i, total_size, linesizes[4]; + + if (av_image_fill_linesizes(linesizes, pix_fmt, w) < 0) + return -1; + for (i = 0; i < 4; i++) + linesizes1[i] = linesizes[i]; + if (av_image_fill_plane_sizes(sizes, pix_fmt, h, linesizes1) < 0) + return -1; + total_size = av_image_fill_pointers(data, pix_fmt, h, (void *)1, linesizes); + if (total_size < 0) + return -1; + for (i = 0; i < 4 && data[i]; i++); + printf("planes: %d", i); + // Test the output of av_image_fill_linesizes() + printf(", linesizes:"); + for (i = 0; i < 4; i++) + printf(" %3d", linesizes[i]); + // Test the output of av_image_fill_plane_sizes() + printf(", plane_sizes:"); + for (i = 0; i < 4; i++) + printf(" %5"SIZE_SPECIFIER, sizes[i]); + // Test the output of av_image_fill_pointers() + for (i = 0; i < 3 && data[i + 1]; i++) + offsets[i] = data[i + 1] - data[i]; + printf(", plane_offsets:"); + for (i = 0; i < 3; i++) + printf(" %5"PTRDIFF_SPECIFIER, offsets[i]); + printf(", total_size: %d", total_size); + + return 0; +} int main(void) { @@ -35,39 +70,14 @@ int main(void) printf("\n"); while (desc = av_pix_fmt_desc_next(desc)) { - uint8_t *data[4]; - size_t sizes[4]; - ptrdiff_t linesizes1[4], offsets[3] = { 0 }; - int i, total_size, w = 64, h = 48, linesizes[4]; + int w = 64, h = 48; enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(desc); - if (av_image_fill_linesizes(linesizes, pix_fmt, w) < 0) - continue; - for (i = 0; i < 4; i++) - linesizes1[i] = linesizes[i]; - if (av_image_fill_plane_sizes(sizes, pix_fmt, h, linesizes1) < 0) - continue; - total_size = av_image_fill_pointers(data, pix_fmt, h, (void *)1, linesizes); - if (total_size < 0) + if (desc->flags & AV_PIX_FMT_FLAG_HWACCEL) continue; printf("%-16s", desc->name); - for (i = 0; i < 4 && data[i]; i++); - printf("planes: %d", i); - // Test the output of av_image_fill_linesizes() - printf(", linesizes:"); - for (i = 0; i < 4; i++) - printf(" %3d", linesizes[i]); - // Test the output of av_image_fill_plane_sizes() - printf(", plane_sizes:"); - for (i = 0; i < 4; i++) - printf(" %5"SIZE_SPECIFIER, sizes[i]); - // Test the output of av_image_fill_pointers() - for (i = 0; i < 3 && data[i + 1]; i++) - offsets[i] = data[i + 1] - data[i]; - printf(", plane_offsets:"); - for (i = 0; i < 3; i++) - printf(" %5"PTRDIFF_SPECIFIER, offsets[i]); - printf(", total_size: %d\n", total_size); + basic_tests(pix_fmt, w, h); + printf("\n"); } return 0; From patchwork Sun Dec 3 00:27:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 44873 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a301:b0:181:818d:5e7f with SMTP id x1csp1994850pzk; Sat, 2 Dec 2023 16:27:56 -0800 (PST) X-Google-Smtp-Source: AGHT+IFTsR6ndusd5qBy8LxKdekfMIVeHOYX9Y1/4HGkDtMga+k7L4JDCOUPf12wx6PgXyE1nJnP X-Received: by 2002:a17:906:28d:b0:a00:76b1:7d9a with SMTP id 13-20020a170906028d00b00a0076b17d9amr3568048ejf.38.1701563276108; Sat, 02 Dec 2023 16:27:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701563276; cv=none; d=google.com; s=arc-20160816; b=HBQtlKxTGkMI5U4KgxI3a/TRM2c1q0tuuN9hvZQBefwotkRXgxfWIm0A8c055VDQ4X h0jP++FNELNf7QTJ2Zn4h68mgoBE2Vz3UBpqR3t97BTErB4eHxl6NjvSGQnEza6lzfMU +f6Umr08kdh5FT8+Yb+MWgomZ2AIr7cwfG3ztShd3lqXPDw7lUfcjhmn5BwiJo/vprJ9 bBNUBaUkB7t3qEZXodqLecRQqLCgqVei0gbOznLbqUZtniFYOiZbZ+SR0zrpi0pyGPhA x/3XRNNY4aKjz66i+Ja0DfnVXLmDqiJZmdsZvFEfIcPQ+ZXcsgVoYw2/5al70DrzenY8 Tx5w== 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:delivered-to; bh=t45+7Knb7UMwCnR1adaIYUr5k/BRLmk9yMMg/sZh04w=; fh=s+G8Ss4JbeMFkWPSp2LmIH/LXFyBlALRiww1j3FPjHY=; b=lZNobhpk0NlcyVq+xdW2kqo03RSXfy82XZB8LDGL+ffunGuFqwxQPqqIKkm5NCHCOi E319nuRHXDczviE1k9nam0tzmHAdsG5HzyL4K/MkRlmO9C1rO1trFRjGjhWyI6cM9baY cGYb4CyYWQlc5Utn+JPQcIEzuOcx0Q4mz73OU3Bwz5fHxyIxUB0aPQa78KnSlVhhvt9h 0Be3jS0k2QSck9fTaaGAO5+fNmHC8DOF720+PtPEi75AnX+Ty2zIf9HeKzOxDt/AVcF7 kz1S7Ln8F38Hw1P3W3VAQpfB0yEwTPHgWPX2PZnosm5u9ZvUV0YjbiixuEhb1NbRBdol PUKA== ARC-Authentication-Results: i=1; mx.google.com; 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 j21-20020a170906279500b009fdec2adb0asi3074262ejc.563.2023.12.02.16.27.55; Sat, 02 Dec 2023 16:27:56 -0800 (PST) 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; 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 7035E68CD4E; Sun, 3 Dec 2023 02:27:44 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9E06D68C44F for ; Sun, 3 Dec 2023 02:27:38 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 6FD62E98F9; Sun, 3 Dec 2023 01:27:38 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id coUhPhTGJqZh; Sun, 3 Dec 2023 01:27:35 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 6D71DE98D4; Sun, 3 Dec 2023 01:27:35 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Dec 2023 01:27:21 +0100 Message-Id: <20231203002726.29683-2-cus@passwd.hu> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20231203002726.29683-1-cus@passwd.hu> References: <20231203002726.29683-1-cus@passwd.hu> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() 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: Marton Balint Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1dsOUKUFT171 Signed-off-by: Marton Balint --- libavutil/tests/imgutils.c | 60 ++++++++-- tests/ref/fate/imgutils | 217 +++++++++++++++++++++++++++++++++++++ 2 files changed, 268 insertions(+), 9 deletions(-) diff --git a/libavutil/tests/imgutils.c b/libavutil/tests/imgutils.c index f3a433ac4a..500d24fdb8 100644 --- a/libavutil/tests/imgutils.c +++ b/libavutil/tests/imgutils.c @@ -17,6 +17,7 @@ */ #include "libavutil/imgutils.c" +#include "libavutil/crc.h" #undef printf static int basic_tests(enum AVPixelFormat pix_fmt, int w, int h) { @@ -55,9 +56,43 @@ static int basic_tests(enum AVPixelFormat pix_fmt, int w, int h) { return 0; } +static int black_tests(const AVPixFmtDescriptor *desc, enum AVPixelFormat pix_fmt, int w, int h) +{ + uint8_t *data[4]; + ptrdiff_t linesizes1[4]; + int ret, total_size, linesizes[4]; + + if (av_image_fill_linesizes(linesizes, pix_fmt, w) < 0) + return -1; + total_size = av_image_alloc(data, linesizes, w, h, pix_fmt, 4); + if (total_size < 0) { + printf("alloc failure"); + return -1; + } + printf("total_size: %6d", total_size); + if (desc->flags & AV_PIX_FMT_FLAG_PAL) + total_size -= 256 * 4; + // Make it non-black by default... + memset(data[0], 0xA3, total_size); + for (int i = 0; i < 4; i++) + linesizes1[i] = linesizes[i]; + for (enum AVColorRange range = 0; range < AVCOL_RANGE_NB; range++) { + ret = av_image_fill_black(data, linesizes1, pix_fmt, range, w, h); + printf(", black_%s_crc: ", av_color_range_name(range)); + if (ret < 0) { + printf("----------"); + } else { + const AVCRC *ctx = av_crc_get_table(AV_CRC_32_IEEE_LE); + printf("0x%08"PRIx32, av_crc(ctx, 0, data[0], total_size)); + } + } + av_freep(&data[0]); + + return 0; +} + int main(void) { - const AVPixFmtDescriptor *desc = NULL; int64_t x, y; for (y = -1; yflags & AV_PIX_FMT_FLAG_HWACCEL) - continue; - printf("%-16s", desc->name); - basic_tests(pix_fmt, w, h); - printf("\n"); + if (desc->flags & AV_PIX_FMT_FLAG_HWACCEL) + continue; + + printf("%-16s", desc->name); + if (i == 0) + basic_tests(pix_fmt, w, h); + else + black_tests(desc, pix_fmt, w, h); + printf("\n"); + } } return 0; diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils index f166cb67fb..1a2aaa86c6 100644 --- a/tests/ref/fate/imgutils +++ b/tests/ref/fate/imgutils @@ -54,6 +54,7 @@ 0000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000 +basic tests yuv420p planes: 3, linesizes: 64 32 32 0, plane_sizes: 3072 768 768 0, plane_offsets: 3072 768 0, total_size: 4608 yuyv422 planes: 1, linesizes: 128 0 0 0, plane_sizes: 6144 0 0 0, plane_offsets: 0 0 0, total_size: 6144 rgb24 planes: 1, linesizes: 192 0 0 0, plane_sizes: 9216 0 0 0, plane_offsets: 0 0 0, total_size: 9216 @@ -268,3 +269,219 @@ p412be planes: 2, linesizes: 128 256 0 0, plane_sizes: 6144 12288 p412le planes: 2, linesizes: 128 256 0 0, plane_sizes: 6144 12288 0 0, plane_offsets: 6144 0 0, total_size: 18432 gbrap14be planes: 4, linesizes: 128 128 128 128, plane_sizes: 6144 6144 6144 6144, plane_offsets: 6144 6144 6144, total_size: 24576 gbrap14le planes: 4, linesizes: 128 128 128 128, plane_sizes: 6144 6144 6144 6144, plane_offsets: 6144 6144 6144, total_size: 24576 + +black tests +yuv420p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af +yuyv422 total_size: 6144, black_unknown_crc: 0xcb089fb0, black_tv_crc: 0xcb089fb0, black_pc_crc: 0xc9dc3ddf +rgb24 total_size: 9216, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr24 total_size: 9216, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +yuv422p total_size: 6144, black_unknown_crc: 0x71fcc79c, black_tv_crc: 0x71fcc79c, black_pc_crc: 0xa9fa0192 +yuv444p total_size: 9216, black_unknown_crc: 0x1c302b58, black_tv_crc: 0x1c302b58, black_pc_crc: 0xdf792ea7 +yuv410p total_size: 3456, black_unknown_crc: 0x09f3e4b0, black_tv_crc: 0x09f3e4b0, black_pc_crc: 0xe4f4e553 +yuv411p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af +gray total_size: 3072, black_unknown_crc: 0x63e301a2, black_tv_crc: 0x63e301a2, black_pc_crc: 0x00000000 +monow total_size: 384, black_unknown_crc: 0x1ba3e150, black_tv_crc: 0x1ba3e150, black_pc_crc: 0x1ba3e150 +monob total_size: 384, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +pal8 total_size: 4096, black_unknown_crc: 0x63e301a2, black_tv_crc: 0x63e301a2, black_pc_crc: 0x00000000 +yuvj420p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af +yuvj422p total_size: 6144, black_unknown_crc: 0x71fcc79c, black_tv_crc: 0x71fcc79c, black_pc_crc: 0xa9fa0192 +yuvj444p total_size: 9216, black_unknown_crc: 0x1c302b58, black_tv_crc: 0x1c302b58, black_pc_crc: 0xdf792ea7 +uyvy422 total_size: 6144, black_unknown_crc: 0xaf9476bb, black_tv_crc: 0xaf9476bb, black_pc_crc: 0x16a51378 +uyyvyy411 total_size: 4608, black_unknown_crc: 0x6f8b7288, black_tv_crc: 0x6f8b7288, black_pc_crc: 0x9f9c5552 +bgr8 total_size: 3072, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr4 total_size: 1536, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr4_byte total_size: 3072, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgb8 total_size: 3072, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgb4 total_size: 1536, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgb4_byte total_size: 3072, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +nv12 total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af +nv21 total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af +argb total_size: 12288, black_unknown_crc: 0x97f3518e, black_tv_crc: 0x97f3518e, black_pc_crc: 0x97f3518e +rgba total_size: 12288, black_unknown_crc: 0xf15ae524, black_tv_crc: 0xf15ae524, black_pc_crc: 0xf15ae524 +abgr total_size: 12288, black_unknown_crc: 0x97f3518e, black_tv_crc: 0x97f3518e, black_pc_crc: 0x97f3518e +bgra total_size: 12288, black_unknown_crc: 0xf15ae524, black_tv_crc: 0xf15ae524, black_pc_crc: 0xf15ae524 +gray16be total_size: 6144, black_unknown_crc: 0x02d4a26f, black_tv_crc: 0x02d4a26f, black_pc_crc: 0x00000000 +gray16le total_size: 6144, black_unknown_crc: 0xb93165c3, black_tv_crc: 0xb93165c3, black_pc_crc: 0x00000000 +yuv440p total_size: 6144, black_unknown_crc: 0x71fcc79c, black_tv_crc: 0x71fcc79c, black_pc_crc: 0xa9fa0192 +yuvj440p total_size: 6144, black_unknown_crc: 0x71fcc79c, black_tv_crc: 0x71fcc79c, black_pc_crc: 0xa9fa0192 +yuva420p total_size: 7680, black_unknown_crc: 0x0bcc140f, black_tv_crc: 0x0bcc140f, black_pc_crc: 0xa724ab23 +rgb48be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgb48le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgb565be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgb565le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgb555be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgb555le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr565be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr565le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr555be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr555le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +yuv420p16le total_size: 9216, black_unknown_crc: 0xfff85b60, black_tv_crc: 0xfff85b60, black_pc_crc: 0xc03cff93 +yuv420p16be total_size: 9216, black_unknown_crc: 0x4d4d9903, black_tv_crc: 0x4d4d9903, black_pc_crc: 0x69c6fe01 +yuv422p16le total_size: 12288, black_unknown_crc: 0x6582d6cf, black_tv_crc: 0x6582d6cf, black_pc_crc: 0xc9dc3ddf +yuv422p16be total_size: 12288, black_unknown_crc: 0x0bbe5df7, black_tv_crc: 0x0bbe5df7, black_pc_crc: 0x16a51378 +yuv444p16le total_size: 18432, black_unknown_crc: 0x4028ac30, black_tv_crc: 0x4028ac30, black_pc_crc: 0xab7c7698 +yuv444p16be total_size: 18432, black_unknown_crc: 0x26991800, black_tv_crc: 0x26991800, black_pc_crc: 0xfe7f6700 +rgb444le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgb444be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr444le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr444be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +ya8 total_size: 6144, black_unknown_crc: 0xcb089fb0, black_tv_crc: 0xcb089fb0, black_pc_crc: 0xc9dc3ddf +bgr48be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr48le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +yuv420p9be total_size: 9216, black_unknown_crc: 0x9154a536, black_tv_crc: 0x9154a536, black_pc_crc: 0xeeddecd0 +yuv420p9le total_size: 9216, black_unknown_crc: 0x9a9b3206, black_tv_crc: 0x9a9b3206, black_pc_crc: 0xd38dfc02 +yuv420p10be total_size: 9216, black_unknown_crc: 0xf9d84c2d, black_tv_crc: 0xf9d84c2d, black_pc_crc: 0x06cadfe1 +yuv420p10le total_size: 9216, black_unknown_crc: 0xee47624d, black_tv_crc: 0xee47624d, black_pc_crc: 0x7c6afe45 +yuv422p10be total_size: 12288, black_unknown_crc: 0x7cb8d0b6, black_tv_crc: 0x7cb8d0b6, black_pc_crc: 0xa0507635 +yuv422p10le total_size: 12288, black_unknown_crc: 0x2ef977dc, black_tv_crc: 0x2ef977dc, black_pc_crc: 0x5a944de0 +yuv444p9be total_size: 18432, black_unknown_crc: 0x0c244ddf, black_tv_crc: 0x0c244ddf, black_pc_crc: 0x01fcfece +yuv444p9le total_size: 18432, black_unknown_crc: 0x4d323000, black_tv_crc: 0x4d323000, black_pc_crc: 0x278fc841 +yuv444p10be total_size: 18432, black_unknown_crc: 0x18489bbe, black_tv_crc: 0x18489bbe, black_pc_crc: 0x03f9fd9c +yuv444p10le total_size: 18432, black_unknown_crc: 0x9a646000, black_tv_crc: 0x9a646000, black_pc_crc: 0x4f1f9082 +yuv422p9be total_size: 12288, black_unknown_crc: 0x3e5c685b, black_tv_crc: 0x3e5c685b, black_pc_crc: 0xbd90b83a +yuv422p9le total_size: 12288, black_unknown_crc: 0x177cbbee, black_tv_crc: 0x177cbbee, black_pc_crc: 0x2d4a26f0 +gbrp total_size: 9216, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrp9be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrp9le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrp10be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrp10le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrp16be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrp16le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +yuva422p total_size: 9216, black_unknown_crc: 0x6fa9db98, black_tv_crc: 0x6fa9db98, black_pc_crc: 0xace0de67 +yuva444p total_size: 12288, black_unknown_crc: 0x72114eba, black_tv_crc: 0x72114eba, black_pc_crc: 0x001deeda +yuva420p9be total_size: 15360, black_unknown_crc: 0x47717974, black_tv_crc: 0x47717974, black_pc_crc: 0xf485b36d +yuva420p9le total_size: 15360, black_unknown_crc: 0xe23950ad, black_tv_crc: 0xe23950ad, black_pc_crc: 0x86e10ca7 +yuva422p9be total_size: 18432, black_unknown_crc: 0x2f5a84da, black_tv_crc: 0x2f5a84da, black_pc_crc: 0x228237cb +yuva422p9le total_size: 18432, black_unknown_crc: 0x3d7bba46, black_tv_crc: 0x3d7bba46, black_pc_crc: 0x57c64207 +yuva444p9be total_size: 24576, black_unknown_crc: 0x12aed20d, black_tv_crc: 0x12aed20d, black_pc_crc: 0x2f0c503b +yuva444p9le total_size: 24576, black_unknown_crc: 0x7b4cbb96, black_tv_crc: 0x7b4cbb96, black_pc_crc: 0xb4cb8c8d +yuva420p10be total_size: 15360, black_unknown_crc: 0x56f111dd, black_tv_crc: 0x56f111dd, black_pc_crc: 0xea6983ae +yuva420p10le total_size: 15360, black_unknown_crc: 0xa2931f21, black_tv_crc: 0xa2931f21, black_pc_crc: 0x6b23a735 +yuva422p10be total_size: 18432, black_unknown_crc: 0x86a6ea81, black_tv_crc: 0x86a6ea81, black_pc_crc: 0x9d178ca3 +yuva422p10le total_size: 18432, black_unknown_crc: 0xc767ccb6, black_tv_crc: 0xc767ccb6, black_pc_crc: 0x121c3c34 +yuva444p10be total_size: 24576, black_unknown_crc: 0xfd4e472f, black_tv_crc: 0xfd4e472f, black_pc_crc: 0x860b4343 +yuva444p10le total_size: 24576, black_unknown_crc: 0x4b09cf16, black_tv_crc: 0x4b09cf16, black_pc_crc: 0x0f76a761 +yuva420p16be total_size: 15360, black_unknown_crc: 0xe112be6e, black_tv_crc: 0xe112be6e, black_pc_crc: 0xd37e906b +yuva420p16le total_size: 15360, black_unknown_crc: 0xcbc146fa, black_tv_crc: 0xcbc146fa, black_pc_crc: 0x7f83a0d6 +yuva422p16be total_size: 18432, black_unknown_crc: 0x630b483b, black_tv_crc: 0x630b483b, black_pc_crc: 0xbbed373b +yuva422p16le total_size: 18432, black_unknown_crc: 0xdac3d2ac, black_tv_crc: 0xdac3d2ac, black_pc_crc: 0x31970804 +yuva444p16be total_size: 24576, black_unknown_crc: 0x4010c8d3, black_tv_crc: 0x4010c8d3, black_pc_crc: 0xca6bd07e +yuva444p16le total_size: 24576, black_unknown_crc: 0x1824855b, black_tv_crc: 0x1824855b, black_pc_crc: 0x06f5c440 +xyz12le total_size: 18432, black_unknown_crc: 0x24c4432b, black_tv_crc: 0x24c4432b, black_pc_crc: 0xfe5a7889 +xyz12be total_size: 18432, black_unknown_crc: 0xac983d03, black_tv_crc: 0xac983d03, black_pc_crc: 0x949a61fc +nv16 total_size: 6144, black_unknown_crc: 0x71fcc79c, black_tv_crc: 0x71fcc79c, black_pc_crc: 0xa9fa0192 +nv20le total_size: 12288, black_unknown_crc: 0x2ef977dc, black_tv_crc: 0x2ef977dc, black_pc_crc: 0x5a944de0 +nv20be total_size: 12288, black_unknown_crc: 0x7cb8d0b6, black_tv_crc: 0x7cb8d0b6, black_pc_crc: 0xa0507635 +rgba64be total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_crc: 0x0ab5caf6, black_pc_crc: 0x0ab5caf6 +rgba64le total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_crc: 0x0ab5caf6, black_pc_crc: 0x0ab5caf6 +bgra64be total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_crc: 0x0ab5caf6, black_pc_crc: 0x0ab5caf6 +bgra64le total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_crc: 0x0ab5caf6, black_pc_crc: 0x0ab5caf6 +yvyu422 total_size: 6144, black_unknown_crc: 0xcb089fb0, black_tv_crc: 0xcb089fb0, black_pc_crc: 0xc9dc3ddf +ya16be total_size: 12288, black_unknown_crc: 0x5483d935, black_tv_crc: 0x5483d935, black_pc_crc: 0x06397bf3 +ya16le total_size: 12288, black_unknown_crc: 0x5d8e1cf6, black_tv_crc: 0x5d8e1cf6, black_pc_crc: 0x8fceec45 +gbrap total_size: 12288, black_unknown_crc: 0xda63f152, black_tv_crc: 0xda63f152, black_pc_crc: 0xda63f152 +gbrap16be total_size: 24576, black_unknown_crc: 0x53374343, black_tv_crc: 0x53374343, black_pc_crc: 0x53374343 +gbrap16le total_size: 24576, black_unknown_crc: 0x53374343, black_tv_crc: 0x53374343, black_pc_crc: 0x53374343 +0rgb total_size: 12288, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgb0 total_size: 12288, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +0bgr total_size: 12288, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bgr0 total_size: 12288, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +yuv420p12be total_size: 9216, black_unknown_crc: 0x220de93c, black_tv_crc: 0x220de93c, black_pc_crc: 0x1b2b7f84 +yuv420p12le total_size: 9216, black_unknown_crc: 0x0fff85b6, black_tv_crc: 0x0fff85b6, black_pc_crc: 0x2adaff55 +yuv420p14be total_size: 9216, black_unknown_crc: 0x8837a4f0, black_tv_crc: 0x8837a4f0, black_pc_crc: 0x6cadfe10 +yuv420p14le total_size: 9216, black_unknown_crc: 0x3ffe16d8, black_tv_crc: 0x3ffe16d8, black_pc_crc: 0xab6bfd54 +yuv422p12be total_size: 12288, black_unknown_crc: 0x50be94e3, black_tv_crc: 0x50be94e3, black_pc_crc: 0xecd2d217 +yuv422p12le total_size: 12288, black_unknown_crc: 0xbbe5df70, black_tv_crc: 0xbbe5df70, black_pc_crc: 0xb12031c1 +yuv422p14be total_size: 12288, black_unknown_crc: 0x998b55cd, black_tv_crc: 0x998b55cd, black_pc_crc: 0x05a944de +yuv422p14le total_size: 12288, black_unknown_crc: 0x82047703, black_tv_crc: 0x82047703, black_pc_crc: 0xa913cdc7 +yuv444p12be total_size: 18432, black_unknown_crc: 0x02699180, black_tv_crc: 0x02699180, black_pc_crc: 0x0fe7f670 +yuv444p12le total_size: 18432, black_unknown_crc: 0x04028ac3, black_tv_crc: 0x04028ac3, black_pc_crc: 0xe70f4449 +yuv444p14be total_size: 18432, black_unknown_crc: 0x09a64600, black_tv_crc: 0x09a64600, black_pc_crc: 0x3f9fd9c0 +yuv444p14le total_size: 18432, black_unknown_crc: 0x100a2b0c, black_tv_crc: 0x100a2b0c, black_pc_crc: 0x2adf1da6 +gbrp12be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrp12le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrp14be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrp14le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +yuvj411p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af +bayer_bggr8 total_size: 3072, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_rggb8 total_size: 3072, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_gbrg8 total_size: 3072, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_grbg8 total_size: 3072, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_bggr16le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_bggr16be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_rggb16le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_rggb16be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_gbrg16le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_gbrg16be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_grbg16le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +bayer_grbg16be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +yuv440p10le total_size: 12288, black_unknown_crc: 0x2ef977dc, black_tv_crc: 0x2ef977dc, black_pc_crc: 0x5a944de0 +yuv440p10be total_size: 12288, black_unknown_crc: 0x7cb8d0b6, black_tv_crc: 0x7cb8d0b6, black_pc_crc: 0xa0507635 +yuv440p12le total_size: 12288, black_unknown_crc: 0xbbe5df70, black_tv_crc: 0xbbe5df70, black_pc_crc: 0xb12031c1 +yuv440p12be total_size: 12288, black_unknown_crc: 0x50be94e3, black_tv_crc: 0x50be94e3, black_pc_crc: 0xecd2d217 +ayuv64le total_size: 24576, black_unknown_crc: 0xcb441ee4, black_tv_crc: 0xcb441ee4, black_pc_crc: 0x48ba1e8d +ayuv64be total_size: 24576, black_unknown_crc: 0xe0be064e, black_tv_crc: 0xe0be064e, black_pc_crc: 0xd45321b2 +p010le total_size: 9216, black_unknown_crc: 0xfff85b60, black_tv_crc: 0xfff85b60, black_pc_crc: 0xc03cff93 +p010be total_size: 9216, black_unknown_crc: 0x4d4d9903, black_tv_crc: 0x4d4d9903, black_pc_crc: 0x69c6fe01 +gbrap12be total_size: 24576, black_unknown_crc: 0x49bd3f36, black_tv_crc: 0x49bd3f36, black_pc_crc: 0x49bd3f36 +gbrap12le total_size: 24576, black_unknown_crc: 0x039f4b57, black_tv_crc: 0x039f4b57, black_pc_crc: 0x039f4b57 +gbrap10be total_size: 24576, black_unknown_crc: 0x3ebe070a, black_tv_crc: 0x3ebe070a, black_pc_crc: 0x3ebe070a +gbrap10le total_size: 24576, black_unknown_crc: 0x0797e156, black_tv_crc: 0x0797e156, black_pc_crc: 0x0797e156 +gray12be total_size: 6144, black_unknown_crc: 0xbd90b83a, black_tv_crc: 0xbd90b83a, black_pc_crc: 0x00000000 +gray12le total_size: 6144, black_unknown_crc: 0x2d4a26f0, black_tv_crc: 0x2d4a26f0, black_pc_crc: 0x00000000 +gray10be total_size: 6144, black_unknown_crc: 0x89569dcf, black_tv_crc: 0x89569dcf, black_pc_crc: 0x00000000 +gray10le total_size: 6144, black_unknown_crc: 0x0b5289bc, black_tv_crc: 0x0b5289bc, black_pc_crc: 0x00000000 +p016le total_size: 9216, black_unknown_crc: 0xfff85b60, black_tv_crc: 0xfff85b60, black_pc_crc: 0xc03cff93 +p016be total_size: 9216, black_unknown_crc: 0x4d4d9903, black_tv_crc: 0x4d4d9903, black_pc_crc: 0x69c6fe01 +gray9be total_size: 6144, black_unknown_crc: 0xa913cdc7, black_tv_crc: 0xa913cdc7, black_pc_crc: 0x00000000 +gray9le total_size: 6144, black_unknown_crc: 0x05a944de, black_tv_crc: 0x05a944de, black_pc_crc: 0x00000000 +gbrpf32be total_size: 36864, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +gbrpf32le total_size: 36864, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +gbrapf32be total_size: 49152, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +gbrapf32le total_size: 49152, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +gray14be total_size: 6144, black_unknown_crc: 0x9bd1ea2b, black_tv_crc: 0x9bd1ea2b, black_pc_crc: 0x00000000 +gray14le total_size: 6144, black_unknown_crc: 0xb5289bc0, black_tv_crc: 0xb5289bc0, black_pc_crc: 0x00000000 +grayf32be total_size: 12288, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +grayf32le total_size: 12288, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +yuva422p12be total_size: 18432, black_unknown_crc: 0xa7067ca1, black_tv_crc: 0xa7067ca1, black_pc_crc: 0xaa881b51 +yuva422p12le total_size: 18432, black_unknown_crc: 0xb6bdf055, black_tv_crc: 0xb6bdf055, black_pc_crc: 0x55b03edf +yuva444p12be total_size: 24576, black_unknown_crc: 0x488f478f, black_tv_crc: 0x488f478f, black_pc_crc: 0xc6fb24d1 +yuva444p12le total_size: 24576, black_unknown_crc: 0xea96f416, black_tv_crc: 0xea96f416, black_pc_crc: 0x201a538b +nv24 total_size: 9216, black_unknown_crc: 0x1c302b58, black_tv_crc: 0x1c302b58, black_pc_crc: 0xdf792ea7 +nv42 total_size: 9216, black_unknown_crc: 0x1c302b58, black_tv_crc: 0x1c302b58, black_pc_crc: 0xdf792ea7 +y210be total_size: 12288, black_unknown_crc: 0x5483d935, black_tv_crc: 0x5483d935, black_pc_crc: 0x06397bf3 +y210le total_size: 12288, black_unknown_crc: 0x5d8e1cf6, black_tv_crc: 0x5d8e1cf6, black_pc_crc: 0x8fceec45 +x2rgb10le total_size: 12288, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +x2rgb10be total_size: 12288, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +x2bgr10le total_size: 12288, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +x2bgr10be total_size: 12288, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +p210be total_size: 12288, black_unknown_crc: 0x0bbe5df7, black_tv_crc: 0x0bbe5df7, black_pc_crc: 0x16a51378 +p210le total_size: 12288, black_unknown_crc: 0x6582d6cf, black_tv_crc: 0x6582d6cf, black_pc_crc: 0xc9dc3ddf +p410be total_size: 18432, black_unknown_crc: 0x26991800, black_tv_crc: 0x26991800, black_pc_crc: 0xfe7f6700 +p410le total_size: 18432, black_unknown_crc: 0x4028ac30, black_tv_crc: 0x4028ac30, black_pc_crc: 0xab7c7698 +p216be total_size: 12288, black_unknown_crc: 0x0bbe5df7, black_tv_crc: 0x0bbe5df7, black_pc_crc: 0x16a51378 +p216le total_size: 12288, black_unknown_crc: 0x6582d6cf, black_tv_crc: 0x6582d6cf, black_pc_crc: 0xc9dc3ddf +p416be total_size: 18432, black_unknown_crc: 0x26991800, black_tv_crc: 0x26991800, black_pc_crc: 0xfe7f6700 +p416le total_size: 18432, black_unknown_crc: 0x4028ac30, black_tv_crc: 0x4028ac30, black_pc_crc: 0xab7c7698 +vuya total_size: 12288, black_unknown_crc: 0x60db2d2c, black_tv_crc: 0x60db2d2c, black_pc_crc: 0x2dae630a +rgbaf16be total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_crc: 0x0ab5caf6, black_pc_crc: 0x0ab5caf6 +rgbaf16le total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_crc: 0x0ab5caf6, black_pc_crc: 0x0ab5caf6 +vuyx total_size: 12288, black_unknown_crc: 0x9181c808, black_tv_crc: 0x9181c808, black_pc_crc: 0xdcf4862e +p012le total_size: 9216, black_unknown_crc: 0xfff85b60, black_tv_crc: 0xfff85b60, black_pc_crc: 0xc03cff93 +p012be total_size: 9216, black_unknown_crc: 0x4d4d9903, black_tv_crc: 0x4d4d9903, black_pc_crc: 0x69c6fe01 +y212be total_size: 12288, black_unknown_crc: 0x5483d935, black_tv_crc: 0x5483d935, black_pc_crc: 0x06397bf3 +y212le total_size: 12288, black_unknown_crc: 0x5d8e1cf6, black_tv_crc: 0x5d8e1cf6, black_pc_crc: 0x8fceec45 +xv30be total_size: 12288, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +xv30le total_size: 12288, black_unknown_crc: 0x4bb0b075, black_tv_crc: 0x4bb0b075, black_pc_crc: 0x02d585cf +xv36be total_size: 24576, black_unknown_crc: 0x6ba828bd, black_tv_crc: 0x6ba828bd, black_pc_crc: 0x5f450f41 +xv36le total_size: 24576, black_unknown_crc: 0xc3794950, black_tv_crc: 0xc3794950, black_pc_crc: 0x40874939 +rgbf32be total_size: 36864, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +rgbf32le total_size: 36864, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +rgbaf32be total_size: 49152, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +rgbaf32le total_size: 49152, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +p212be total_size: 12288, black_unknown_crc: 0x0bbe5df7, black_tv_crc: 0x0bbe5df7, black_pc_crc: 0x16a51378 +p212le total_size: 12288, black_unknown_crc: 0x6582d6cf, black_tv_crc: 0x6582d6cf, black_pc_crc: 0xc9dc3ddf +p412be total_size: 18432, black_unknown_crc: 0x26991800, black_tv_crc: 0x26991800, black_pc_crc: 0xfe7f6700 +p412le total_size: 18432, black_unknown_crc: 0x4028ac30, black_tv_crc: 0x4028ac30, black_pc_crc: 0xab7c7698 +gbrap14be total_size: 24576, black_unknown_crc: 0x4ec0d987, black_tv_crc: 0x4ec0d987, black_pc_crc: 0x4ec0d987 +gbrap14le total_size: 24576, black_unknown_crc: 0x13bde353, black_tv_crc: 0x13bde353, black_pc_crc: 0x13bde353 From patchwork Sun Dec 3 00:27:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 44874 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a301:b0:181:818d:5e7f with SMTP id x1csp1994881pzk; Sat, 2 Dec 2023 16:28:05 -0800 (PST) X-Google-Smtp-Source: AGHT+IFbUdU4CdNZONMC/0T7ZA0FjkgjcJJMraJEeYNTX5U5UqSxFoNvlvUSkQcgd8ZoFRe31zJ1 X-Received: by 2002:a2e:9a87:0:b0:2c9:efa1:aa5f with SMTP id p7-20020a2e9a87000000b002c9efa1aa5fmr269025lji.74.1701563285557; Sat, 02 Dec 2023 16:28:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701563285; cv=none; d=google.com; s=arc-20160816; b=i3YZ3SlozrfZ1qkZUqaasCid4yUR02slM2kbZzmg9DjrP1mtOnKof1h82n+QhMz1AF bTsgJsE2w80yH/vxKCmFlyeD63/E704xKZUYVvbRr3tmFsFEneQcK5SBCqJMpk1nZsrE t9Qp9J1OvSzEJveQFFXPF67mf3TIhzAJsjrPxjWitgj62wl+xwyXISCldHVV8GrAm1yl RlaubMjX/OBViOa+ck/1Xqt1g29cFyMveKAbjQMs0X7PHzCP0Qsu+h/S2IbZh3s76PUu /zF7CnxeanPeqDuwNsOgx6oBnjRRUHVqXnHjOtdjqOc0KD8zrgmX483TWikYH28tFWVL gFzw== 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:delivered-to; bh=AucHmkIwDwTQljy+3pACMuXYKE7jhKZxsmn6xluMFJE=; fh=s+G8Ss4JbeMFkWPSp2LmIH/LXFyBlALRiww1j3FPjHY=; b=d16BWRDZzoXCbr4/7e2nIWv96lWzrbYFqrBJyasmOpkNw/Hg+C4b5GfceDsbwRN8EI tIN5mvjHt+51/tEzKYiWh1g97VkA2NFL0ELVaTwnztkOYxs3Uh6B4bxWxSgHus5YYFFp l24/OYvjgUxmBwqD+KYw122F6fH1H74u9tWUOD07/C166UhO1EtvM1++ZNa5gl63u8Rl ZvQsV6lJn592OnZM7KXsy7RA+6/E86PNu7RLQ4Z1XtGlWbZqpmwWqhdxKQcCZYEwhke7 V+tZXlGoTu8rWWZCW9u/TCVUJNUSsr3+XpXXxkQjvZkBVzxAnJTWIe7k9+ETXzhphiCl jUhw== ARC-Authentication-Results: i=1; mx.google.com; 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 n26-20020a170906841a00b009fce5456af5si3093303ejx.587.2023.12.02.16.28.05; Sat, 02 Dec 2023 16:28:05 -0800 (PST) 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; 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 F348168CD8E; Sun, 3 Dec 2023 02:27:46 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 502A168CD8E for ; Sun, 3 Dec 2023 02:27:40 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 372E4E98D4; Sun, 3 Dec 2023 01:27:40 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id PT1hM8LbB6_5; Sun, 3 Dec 2023 01:27:38 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id E4F49E9901; Sun, 3 Dec 2023 01:27:37 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Dec 2023 01:27:22 +0100 Message-Id: <20231203002726.29683-3-cus@passwd.hu> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20231203002726.29683-1-cus@passwd.hu> References: <20231203002726.29683-1-cus@passwd.hu> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats 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: Marton Balint Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 9BaZLv8ggwqx - Fixes YA formats, because previous code always assumed alpha as the 4th component. - Fixes PAL format (as long as 0 is black, as in a systematic palette), because previous code assumed it as limited Y. - Fixes XYZ format because it does not need nonzero chroma components - Fixes xv30be as the bitstream mode got merged to the non-bitstream mode. Signed-off-by: Marton Balint --- libavutil/imgutils.c | 49 +++++++++++++++-------------------------- tests/ref/fate/imgutils | 14 ++++++------ 2 files changed, 25 insertions(+), 38 deletions(-) diff --git a/libavutil/imgutils.c b/libavutil/imgutils.c index da3812698e..5e401139c8 100644 --- a/libavutil/imgutils.c +++ b/libavutil/imgutils.c @@ -590,35 +590,18 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz uint8_t clear_block[4][MAX_BLOCK_SIZE] = {{0}}; // clear padding with 0 int clear_block_size[4] = {0}; ptrdiff_t plane_line_bytes[4] = {0}; - int rgb, limited; + int rgb, xyz, pal, limited, alpha, bitstream; int plane, c; if (!desc || nb_planes < 1 || nb_planes > 4 || desc->flags & AV_PIX_FMT_FLAG_HWACCEL) return AVERROR(EINVAL); rgb = !!(desc->flags & AV_PIX_FMT_FLAG_RGB); - limited = !rgb && range != AVCOL_RANGE_JPEG; - - if (desc->flags & AV_PIX_FMT_FLAG_BITSTREAM) { - ptrdiff_t bytewidth = av_image_get_linesize(pix_fmt, width, 0); - uint8_t *data; - int mono = pix_fmt == AV_PIX_FMT_MONOWHITE || pix_fmt == AV_PIX_FMT_MONOBLACK; - int fill = pix_fmt == AV_PIX_FMT_MONOWHITE ? 0xFF : 0; - if (nb_planes != 1 || !(rgb || mono) || bytewidth < 1) - return AVERROR(EINVAL); - - if (!dst_data) - return 0; - - data = dst_data[0]; - - // (Bitstream + alpha will be handled incorrectly - it'll remain transparent.) - for (;height > 0; height--) { - memset(data, fill, bytewidth); - data += dst_linesize[0]; - } - return 0; - } + xyz = !!(desc->flags & AV_PIX_FMT_FLAG_XYZ); + pal = !!(desc->flags & AV_PIX_FMT_FLAG_PAL); + limited = !rgb && !xyz && !pal && range != AVCOL_RANGE_JPEG; + alpha = !pal && !!(desc->flags & AV_PIX_FMT_FLAG_ALPHA); + bitstream = !!(desc->flags & AV_PIX_FMT_FLAG_BITSTREAM); for (c = 0; c < desc->nb_components; c++) { const AVComponentDescriptor comp = desc->comp[c]; @@ -635,7 +618,7 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz for (c = 0; c < desc->nb_components; c++) { const AVComponentDescriptor comp = desc->comp[c]; // (Multiple pixels happen e.g. with AV_PIX_FMT_UYVY422.) - int w = clear_block_size[comp.plane] / comp.step; + int w = (bitstream ? 8 : 1) * clear_block_size[comp.plane] / comp.step; uint8_t *c_data[4]; const int c_linesize[4] = {0}; uint16_t src_array[MAX_BLOCK_SIZE]; @@ -644,18 +627,22 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz if (comp.depth > 16) return AVERROR(EINVAL); - if (!rgb && comp.depth < 8) - return AVERROR(EINVAL); if (w < 1) return AVERROR(EINVAL); - if (c == 0 && limited) { - src = 16 << (comp.depth - 8); - } else if ((c == 1 || c == 2) && !rgb) { - src = 128 << (comp.depth - 8); - } else if (c == 3) { + if (pix_fmt == AV_PIX_FMT_MONOWHITE) { + src = 1; + } else if (c + 1 == desc->nb_components && alpha) { // (Assume even limited YUV uses full range alpha.) src = (1 << comp.depth) - 1; + } else if (c == 0 && limited && comp.depth > 1) { + if (comp.depth < 8) + return AVERROR(EINVAL); + src = 16 << (comp.depth - 8); + } else if ((c == 1 || c == 2) && !rgb && !xyz) { + if (comp.depth < 8) + return AVERROR(EINVAL); + src = 128 << (comp.depth - 8); } for (x = 0; x < w; x++) diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils index 1a2aaa86c6..79ef5cdfc0 100644 --- a/tests/ref/fate/imgutils +++ b/tests/ref/fate/imgutils @@ -282,7 +282,7 @@ yuv411p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_cr gray total_size: 3072, black_unknown_crc: 0x63e301a2, black_tv_crc: 0x63e301a2, black_pc_crc: 0x00000000 monow total_size: 384, black_unknown_crc: 0x1ba3e150, black_tv_crc: 0x1ba3e150, black_pc_crc: 0x1ba3e150 monob total_size: 384, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 -pal8 total_size: 4096, black_unknown_crc: 0x63e301a2, black_tv_crc: 0x63e301a2, black_pc_crc: 0x00000000 +pal8 total_size: 4096, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 yuvj420p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af yuvj422p total_size: 6144, black_unknown_crc: 0x71fcc79c, black_tv_crc: 0x71fcc79c, black_pc_crc: 0xa9fa0192 yuvj444p total_size: 9216, black_unknown_crc: 0x1c302b58, black_tv_crc: 0x1c302b58, black_pc_crc: 0xdf792ea7 @@ -325,7 +325,7 @@ rgb444le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_cr rgb444be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 bgr444le total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 bgr444be total_size: 6144, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 -ya8 total_size: 6144, black_unknown_crc: 0xcb089fb0, black_tv_crc: 0xcb089fb0, black_pc_crc: 0xc9dc3ddf +ya8 total_size: 6144, black_unknown_crc: 0x21aa6b6a, black_tv_crc: 0x21aa6b6a, black_pc_crc: 0x237ec905 bgr48be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 bgr48le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 yuv420p9be total_size: 9216, black_unknown_crc: 0x9154a536, black_tv_crc: 0x9154a536, black_pc_crc: 0xeeddecd0 @@ -367,8 +367,8 @@ yuva422p16be total_size: 18432, black_unknown_crc: 0x630b483b, black_tv_cr yuva422p16le total_size: 18432, black_unknown_crc: 0xdac3d2ac, black_tv_crc: 0xdac3d2ac, black_pc_crc: 0x31970804 yuva444p16be total_size: 24576, black_unknown_crc: 0x4010c8d3, black_tv_crc: 0x4010c8d3, black_pc_crc: 0xca6bd07e yuva444p16le total_size: 24576, black_unknown_crc: 0x1824855b, black_tv_crc: 0x1824855b, black_pc_crc: 0x06f5c440 -xyz12le total_size: 18432, black_unknown_crc: 0x24c4432b, black_tv_crc: 0x24c4432b, black_pc_crc: 0xfe5a7889 -xyz12be total_size: 18432, black_unknown_crc: 0xac983d03, black_tv_crc: 0xac983d03, black_pc_crc: 0x949a61fc +xyz12le total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +xyz12be total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 nv16 total_size: 6144, black_unknown_crc: 0x71fcc79c, black_tv_crc: 0x71fcc79c, black_pc_crc: 0xa9fa0192 nv20le total_size: 12288, black_unknown_crc: 0x2ef977dc, black_tv_crc: 0x2ef977dc, black_pc_crc: 0x5a944de0 nv20be total_size: 12288, black_unknown_crc: 0x7cb8d0b6, black_tv_crc: 0x7cb8d0b6, black_pc_crc: 0xa0507635 @@ -377,8 +377,8 @@ rgba64le total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_cr bgra64be total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_crc: 0x0ab5caf6, black_pc_crc: 0x0ab5caf6 bgra64le total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_crc: 0x0ab5caf6, black_pc_crc: 0x0ab5caf6 yvyu422 total_size: 6144, black_unknown_crc: 0xcb089fb0, black_tv_crc: 0xcb089fb0, black_pc_crc: 0xc9dc3ddf -ya16be total_size: 12288, black_unknown_crc: 0x5483d935, black_tv_crc: 0x5483d935, black_pc_crc: 0x06397bf3 -ya16le total_size: 12288, black_unknown_crc: 0x5d8e1cf6, black_tv_crc: 0x5d8e1cf6, black_pc_crc: 0x8fceec45 +ya16be total_size: 12288, black_unknown_crc: 0x9f12f9d6, black_tv_crc: 0x9f12f9d6, black_pc_crc: 0xcda85b10 +ya16le total_size: 12288, black_unknown_crc: 0x1fe8aba3, black_tv_crc: 0x1fe8aba3, black_pc_crc: 0xcda85b10 gbrap total_size: 12288, black_unknown_crc: 0xda63f152, black_tv_crc: 0xda63f152, black_pc_crc: 0xda63f152 gbrap16be total_size: 24576, black_unknown_crc: 0x53374343, black_tv_crc: 0x53374343, black_pc_crc: 0x53374343 gbrap16le total_size: 24576, black_unknown_crc: 0x53374343, black_tv_crc: 0x53374343, black_pc_crc: 0x53374343 @@ -471,7 +471,7 @@ p012le total_size: 9216, black_unknown_crc: 0xfff85b60, black_tv_cr p012be total_size: 9216, black_unknown_crc: 0x4d4d9903, black_tv_crc: 0x4d4d9903, black_pc_crc: 0x69c6fe01 y212be total_size: 12288, black_unknown_crc: 0x5483d935, black_tv_crc: 0x5483d935, black_pc_crc: 0x06397bf3 y212le total_size: 12288, black_unknown_crc: 0x5d8e1cf6, black_tv_crc: 0x5d8e1cf6, black_pc_crc: 0x8fceec45 -xv30be total_size: 12288, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +xv30be total_size: 12288, black_unknown_crc: 0x1c42115f, black_tv_crc: 0x1c42115f, black_pc_crc: 0x37bf2ef8 xv30le total_size: 12288, black_unknown_crc: 0x4bb0b075, black_tv_crc: 0x4bb0b075, black_pc_crc: 0x02d585cf xv36be total_size: 24576, black_unknown_crc: 0x6ba828bd, black_tv_crc: 0x6ba828bd, black_pc_crc: 0x5f450f41 xv36le total_size: 24576, black_unknown_crc: 0xc3794950, black_tv_crc: 0xc3794950, black_pc_crc: 0x40874939 From patchwork Sun Dec 3 00:27:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 44875 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a301:b0:181:818d:5e7f with SMTP id x1csp1994938pzk; Sat, 2 Dec 2023 16:28:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IHm+kAceP3NupIQ1XVZtaZ8aGyND5DiKRkzFd+0XllZqWcytkXCK6kGOFSeWAntMXZgQUrk X-Received: by 2002:a17:906:103:b0:a17:d879:7f06 with SMTP id 3-20020a170906010300b00a17d8797f06mr3770515eje.4.1701563296097; Sat, 02 Dec 2023 16:28:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701563296; cv=none; d=google.com; s=arc-20160816; b=fDdII8s22nXce/zqBesj33Z6kipClZWIRfBknFtFnYFz7iHr3tCnsRVhIDdrtVCu/q 7xoNHIMCdfkm3xQOuvRA/XYgOpN+cMYcnVlHpJwA3ZRh58IjSF2HVMVPDJpnG5KVFFGe +B1JoNyDsYSTI4yFhJbh5IR3GyKo4ujPUyHfRBNTwR5qYsCT0nEykNORWClmZ2FZ5TSU GP3cOINKPUX/1O7KiV6jg9D9e1uKrs+KqMTV3klbJ+WBN1lVacTzqvVkaEt3u4quijc2 A6nrsz3w+4A/Mbzdk9JyWljARftxudB//cFy8iUKtonqLm0KQNkApdXYARQom2ucyxrp +zew== 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:delivered-to; bh=sSbRbDztbA7W4RIn0EwbkVA6IIQmWKNo/XoSR1dZnPs=; fh=s+G8Ss4JbeMFkWPSp2LmIH/LXFyBlALRiww1j3FPjHY=; b=eJoYeod8U0lHIj3FgMCcYT8wSGVeZItC1o+kg2dAT8W6F0CfzxMI+y8UtvALDRpAdQ 88hCyBUUXKjHEJjuYmXG+jClxvW0kc27ZIksO9IQ2HmHo1Ri+0rcrcSXFKMacwDSJNUk K+VrDXefB4C4P+YZSXGwQWWNBgX8Sj1dAcmDAycb8gbMBxdbUfWqFrHgDlJjfcdHxkDF b6v/HZ/M8/rKa4BrDWddgqR2/fVpN9e5YMwS5hFMV5ZcI7NgemePJJk1eTCRxdQ9CDi6 RXWnBM15esc5L8+IHiy36EoILleLEsnC0DVcoaa918W5kGbKvO2OEUujSL+eXyQ/Gz+N fF1g== ARC-Authentication-Results: i=1; mx.google.com; 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 ay5-20020a170906d28500b00a18792a0444si3195062ejb.855.2023.12.02.16.28.15; Sat, 02 Dec 2023 16:28:16 -0800 (PST) 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; 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 1224068CCDE; Sun, 3 Dec 2023 02:27:49 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DCA8C68CCDE for ; Sun, 3 Dec 2023 02:27:42 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id BA623E98DB; Sun, 3 Dec 2023 01:27:42 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id x_PoRRgltu-J; Sun, 3 Dec 2023 01:27:40 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id BF359E992D; Sun, 3 Dec 2023 01:27:40 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Dec 2023 01:27:23 +0100 Message-Id: <20231203002726.29683-4-cus@passwd.hu> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20231203002726.29683-1-cus@passwd.hu> References: <20231203002726.29683-1-cus@passwd.hu> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() 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: Marton Balint Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: SxXuXSaHg1Ze Signed-off-by: Marton Balint --- libavutil/imgutils.c | 32 ++++++++++++++++++++++---------- tests/ref/fate/imgutils | 24 ++++++++++++------------ 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/libavutil/imgutils.c b/libavutil/imgutils.c index 5e401139c8..26bb2f2c6f 100644 --- a/libavutil/imgutils.c +++ b/libavutil/imgutils.c @@ -590,7 +590,7 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz uint8_t clear_block[4][MAX_BLOCK_SIZE] = {{0}}; // clear padding with 0 int clear_block_size[4] = {0}; ptrdiff_t plane_line_bytes[4] = {0}; - int rgb, xyz, pal, limited, alpha, bitstream; + int rgb, xyz, pal, limited, alpha, bitstream, fltp; int plane, c; if (!desc || nb_planes < 1 || nb_planes > 4 || desc->flags & AV_PIX_FMT_FLAG_HWACCEL) @@ -602,6 +602,7 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz limited = !rgb && !xyz && !pal && range != AVCOL_RANGE_JPEG; alpha = !pal && !!(desc->flags & AV_PIX_FMT_FLAG_ALPHA); bitstream = !!(desc->flags & AV_PIX_FMT_FLAG_BITSTREAM); + fltp = !!(desc->flags & AV_PIX_FMT_FLAG_FLOAT); for (c = 0; c < desc->nb_components; c++) { const AVComponentDescriptor comp = desc->comp[c]; @@ -621,11 +622,11 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz int w = (bitstream ? 8 : 1) * clear_block_size[comp.plane] / comp.step; uint8_t *c_data[4]; const int c_linesize[4] = {0}; - uint16_t src_array[MAX_BLOCK_SIZE]; - uint16_t src = 0; + uint32_t src_array[MAX_BLOCK_SIZE]; + uint32_t src = 0; int x; - if (comp.depth > 16) + if (comp.depth > 32) return AVERROR(EINVAL); if (w < 1) return AVERROR(EINVAL); @@ -634,15 +635,26 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz src = 1; } else if (c + 1 == desc->nb_components && alpha) { // (Assume even limited YUV uses full range alpha.) - src = (1 << comp.depth) - 1; + if (fltp && comp.depth != 16 && comp.depth != 32) + return AVERROR(EINVAL); + if (fltp) + src = (comp.depth == 16 ? 0x3C00 : 0x3F800000); // 1.0 + else + src = (comp.depth == 32 ? 0 : (1 << comp.depth)) - 1; } else if (c == 0 && limited && comp.depth > 1) { - if (comp.depth < 8) + if (comp.depth < 8 || fltp && comp.depth != 16 && comp.depth != 32) return AVERROR(EINVAL); - src = 16 << (comp.depth - 8); + if (fltp) + src = (comp.depth == 16 ? 0x3000 : 0x3D800000); // 0.0625 + else + src = 16 << (comp.depth - 8); } else if ((c == 1 || c == 2) && !rgb && !xyz) { - if (comp.depth < 8) + if (comp.depth < 8 || fltp && comp.depth != 16 && comp.depth != 32) return AVERROR(EINVAL); - src = 128 << (comp.depth - 8); + if (fltp) + src = (comp.depth == 16 ? 0x3800 : 0x3F000000); // 0.5 + else + src = 128 << (comp.depth - 8); } for (x = 0; x < w; x++) @@ -651,7 +663,7 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz for (x = 0; x < 4; x++) c_data[x] = &clear_block[x][0]; - av_write_image_line(src_array, c_data, c_linesize, desc, 0, 0, c, w); + av_write_image_line2(src_array, c_data, c_linesize, desc, 0, 0, c, w, 4); } for (plane = 0; plane < nb_planes; plane++) { diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils index 79ef5cdfc0..b589c49473 100644 --- a/tests/ref/fate/imgutils +++ b/tests/ref/fate/imgutils @@ -435,14 +435,14 @@ p016le total_size: 9216, black_unknown_crc: 0xfff85b60, black_tv_cr p016be total_size: 9216, black_unknown_crc: 0x4d4d9903, black_tv_crc: 0x4d4d9903, black_pc_crc: 0x69c6fe01 gray9be total_size: 6144, black_unknown_crc: 0xa913cdc7, black_tv_crc: 0xa913cdc7, black_pc_crc: 0x00000000 gray9le total_size: 6144, black_unknown_crc: 0x05a944de, black_tv_crc: 0x05a944de, black_pc_crc: 0x00000000 -gbrpf32be total_size: 36864, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- -gbrpf32le total_size: 36864, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- -gbrapf32be total_size: 49152, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- -gbrapf32le total_size: 49152, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +gbrpf32be total_size: 36864, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrpf32le total_size: 36864, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +gbrapf32be total_size: 49152, black_unknown_crc: 0xda9c5af9, black_tv_crc: 0xda9c5af9, black_pc_crc: 0xda9c5af9 +gbrapf32le total_size: 49152, black_unknown_crc: 0xd2f28790, black_tv_crc: 0xd2f28790, black_pc_crc: 0xd2f28790 gray14be total_size: 6144, black_unknown_crc: 0x9bd1ea2b, black_tv_crc: 0x9bd1ea2b, black_pc_crc: 0x00000000 gray14le total_size: 6144, black_unknown_crc: 0xb5289bc0, black_tv_crc: 0xb5289bc0, black_pc_crc: 0x00000000 -grayf32be total_size: 12288, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- -grayf32le total_size: 12288, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +grayf32be total_size: 12288, black_unknown_crc: 0x4bafcc11, black_tv_crc: 0x4bafcc11, black_pc_crc: 0x00000000 +grayf32le total_size: 12288, black_unknown_crc: 0xca17685c, black_tv_crc: 0xca17685c, black_pc_crc: 0x00000000 yuva422p12be total_size: 18432, black_unknown_crc: 0xa7067ca1, black_tv_crc: 0xa7067ca1, black_pc_crc: 0xaa881b51 yuva422p12le total_size: 18432, black_unknown_crc: 0xb6bdf055, black_tv_crc: 0xb6bdf055, black_pc_crc: 0x55b03edf yuva444p12be total_size: 24576, black_unknown_crc: 0x488f478f, black_tv_crc: 0x488f478f, black_pc_crc: 0xc6fb24d1 @@ -464,8 +464,8 @@ p216le total_size: 12288, black_unknown_crc: 0x6582d6cf, black_tv_cr p416be total_size: 18432, black_unknown_crc: 0x26991800, black_tv_crc: 0x26991800, black_pc_crc: 0xfe7f6700 p416le total_size: 18432, black_unknown_crc: 0x4028ac30, black_tv_crc: 0x4028ac30, black_pc_crc: 0xab7c7698 vuya total_size: 12288, black_unknown_crc: 0x60db2d2c, black_tv_crc: 0x60db2d2c, black_pc_crc: 0x2dae630a -rgbaf16be total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_crc: 0x0ab5caf6, black_pc_crc: 0x0ab5caf6 -rgbaf16le total_size: 24576, black_unknown_crc: 0x0ab5caf6, black_tv_crc: 0x0ab5caf6, black_pc_crc: 0x0ab5caf6 +rgbaf16be total_size: 24576, black_unknown_crc: 0x76fd69af, black_tv_crc: 0x76fd69af, black_pc_crc: 0x76fd69af +rgbaf16le total_size: 24576, black_unknown_crc: 0x21283f40, black_tv_crc: 0x21283f40, black_pc_crc: 0x21283f40 vuyx total_size: 12288, black_unknown_crc: 0x9181c808, black_tv_crc: 0x9181c808, black_pc_crc: 0xdcf4862e p012le total_size: 9216, black_unknown_crc: 0xfff85b60, black_tv_crc: 0xfff85b60, black_pc_crc: 0xc03cff93 p012be total_size: 9216, black_unknown_crc: 0x4d4d9903, black_tv_crc: 0x4d4d9903, black_pc_crc: 0x69c6fe01 @@ -475,10 +475,10 @@ xv30be total_size: 12288, black_unknown_crc: 0x1c42115f, black_tv_cr xv30le total_size: 12288, black_unknown_crc: 0x4bb0b075, black_tv_crc: 0x4bb0b075, black_pc_crc: 0x02d585cf xv36be total_size: 24576, black_unknown_crc: 0x6ba828bd, black_tv_crc: 0x6ba828bd, black_pc_crc: 0x5f450f41 xv36le total_size: 24576, black_unknown_crc: 0xc3794950, black_tv_crc: 0xc3794950, black_pc_crc: 0x40874939 -rgbf32be total_size: 36864, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- -rgbf32le total_size: 36864, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- -rgbaf32be total_size: 49152, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- -rgbaf32le total_size: 49152, black_unknown_crc: ----------, black_tv_crc: ----------, black_pc_crc: ---------- +rgbf32be total_size: 36864, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgbf32le total_size: 36864, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 +rgbaf32be total_size: 49152, black_unknown_crc: 0x5eae6680, black_tv_crc: 0x5eae6680, black_pc_crc: 0x5eae6680 +rgbaf32le total_size: 49152, black_unknown_crc: 0x11d73f6d, black_tv_crc: 0x11d73f6d, black_pc_crc: 0x11d73f6d p212be total_size: 12288, black_unknown_crc: 0x0bbe5df7, black_tv_crc: 0x0bbe5df7, black_pc_crc: 0x16a51378 p212le total_size: 12288, black_unknown_crc: 0x6582d6cf, black_tv_crc: 0x6582d6cf, black_pc_crc: 0xc9dc3ddf p412be total_size: 18432, black_unknown_crc: 0x26991800, black_tv_crc: 0x26991800, black_pc_crc: 0xfe7f6700 From patchwork Sun Dec 3 00:27:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 44876 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a301:b0:181:818d:5e7f with SMTP id x1csp1994983pzk; Sat, 2 Dec 2023 16:28:26 -0800 (PST) X-Google-Smtp-Source: AGHT+IHKdexCRpb8PkL7QRP+7dEbrlhsqraIrHcgO0hJ95DhMqOIWzamcTYREe/fa0sCBPQ/y7ax X-Received: by 2002:a50:9e24:0:b0:54c:6453:1d71 with SMTP id z33-20020a509e24000000b0054c64531d71mr3286382ede.3.1701563306046; Sat, 02 Dec 2023 16:28:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701563306; cv=none; d=google.com; s=arc-20160816; b=SrBRtmpQdt2AntmzkTlkOkEdIiFvam1k+V32gbcV6eHjJjnLcJ/NYMlRgKfVrMmQ65 hE8DJMBcf4NGU6+/xvdWi57k5ag7WUs2NazGidOhrHkiUA3Mgsm0gaG6kmXwgb53Sz11 0uj9ixYHztd3pSHV5ArvZxNV4ihmaj8zNdrBxrmedagyE1/9P/dlFoSerBotiM9xOoJb IBoaxD3HA0IykLmnS+8COVrpZMtkBqyQLmN5wdMGweTPLAZ5ltKAJ5GU5HsZiGo0quds jsgN9KVI0Ln4fzF2ybjxXI+HIGmmoL7rww1pQjpRJQNaOpg+I2day+Pch4FbFs00pISM XMVQ== 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:delivered-to; bh=4FMQpunPbwg1F3IxfjeBH3BTA5am5hdteXyBKss5Huo=; fh=s+G8Ss4JbeMFkWPSp2LmIH/LXFyBlALRiww1j3FPjHY=; b=HULguCBoOSL8zeW3vWTU4CzG0wzem3xnDQlKiWyuFXGQu0SbaChzrxhqzKmdFBS9+X wi4+CiggOZ7Q/dKRDXdXux4XC1eu1ByBr+voU6ctF4Nwmt+2xF5xvlzhpOdPQmgAHb6K 0vBpAf+bqKlt2YsZwC4QW65db44xCUv+PRC2aRHTuWEtGOrXmnhImiMKFZdq3C6lmBgC 5o7vsHFN8VvjZvb/53ZfTl7xj2otKXI9iBsuzD3nnpIfyh5MPfEDCuUVBx0d+b3IHDIw p0mDAUL9EdiHfyYhhb/zc95UZJnykJKIOx04FhE5EtCc9QXs6T6EcrwFlBSpyKfMoFSA tEqQ== ARC-Authentication-Results: i=1; mx.google.com; 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 x2-20020a05640226c200b0054c5ac29a68si1973405edd.114.2023.12.02.16.28.25; Sat, 02 Dec 2023 16:28:26 -0800 (PST) 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; 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 420BA68CDE8; Sun, 3 Dec 2023 02:27:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 66D3868CDE8 for ; Sun, 3 Dec 2023 02:27:46 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 51D69E98D4; Sun, 3 Dec 2023 01:27:46 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6a3l6umlzhEf; Sun, 3 Dec 2023 01:27:44 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 7D0D9E98F9; Sun, 3 Dec 2023 01:27:44 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Dec 2023 01:27:24 +0100 Message-Id: <20231203002726.29683-5-cus@passwd.hu> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20231203002726.29683-1-cus@passwd.hu> References: <20231203002726.29683-1-cus@passwd.hu> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/7] avutil/imgutils: factorize a fill color function 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: Marton Balint Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: h6dYDMGjItTR In preparation for making it public. Signed-off-by: Marton Balint --- libavutil/imgutils.c | 101 +++++++++++++++++++++++++++---------------- 1 file changed, 63 insertions(+), 38 deletions(-) diff --git a/libavutil/imgutils.c b/libavutil/imgutils.c index 26bb2f2c6f..959e6850ac 100644 --- a/libavutil/imgutils.c +++ b/libavutil/imgutils.c @@ -579,30 +579,24 @@ static void memset_bytes(uint8_t *dst, size_t dst_size, uint8_t *clear, // if it's a subsampled packed format). #define MAX_BLOCK_SIZE 32 -int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesize[4], - enum AVPixelFormat pix_fmt, enum AVColorRange range, +static int image_fill_color(uint8_t * const dst_data[4], const ptrdiff_t dst_linesize[4], + enum AVPixelFormat pix_fmt, const uint32_t color[4], int width, int height) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); int nb_planes = av_pix_fmt_count_planes(pix_fmt); - // A pixel or a group of pixels on each plane, with a value that represents black. + // A pixel or a group of pixels on each plane, with a value that represents the color. // Consider e.g. AV_PIX_FMT_UYVY422 for non-trivial cases. uint8_t clear_block[4][MAX_BLOCK_SIZE] = {{0}}; // clear padding with 0 int clear_block_size[4] = {0}; ptrdiff_t plane_line_bytes[4] = {0}; - int rgb, xyz, pal, limited, alpha, bitstream, fltp; + int bitstream; int plane, c; if (!desc || nb_planes < 1 || nb_planes > 4 || desc->flags & AV_PIX_FMT_FLAG_HWACCEL) return AVERROR(EINVAL); - rgb = !!(desc->flags & AV_PIX_FMT_FLAG_RGB); - xyz = !!(desc->flags & AV_PIX_FMT_FLAG_XYZ); - pal = !!(desc->flags & AV_PIX_FMT_FLAG_PAL); - limited = !rgb && !xyz && !pal && range != AVCOL_RANGE_JPEG; - alpha = !pal && !!(desc->flags & AV_PIX_FMT_FLAG_ALPHA); bitstream = !!(desc->flags & AV_PIX_FMT_FLAG_BITSTREAM); - fltp = !!(desc->flags & AV_PIX_FMT_FLAG_FLOAT); for (c = 0; c < desc->nb_components; c++) { const AVComponentDescriptor comp = desc->comp[c]; @@ -623,7 +617,6 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz uint8_t *c_data[4]; const int c_linesize[4] = {0}; uint32_t src_array[MAX_BLOCK_SIZE]; - uint32_t src = 0; int x; if (comp.depth > 32) @@ -631,34 +624,8 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz if (w < 1) return AVERROR(EINVAL); - if (pix_fmt == AV_PIX_FMT_MONOWHITE) { - src = 1; - } else if (c + 1 == desc->nb_components && alpha) { - // (Assume even limited YUV uses full range alpha.) - if (fltp && comp.depth != 16 && comp.depth != 32) - return AVERROR(EINVAL); - if (fltp) - src = (comp.depth == 16 ? 0x3C00 : 0x3F800000); // 1.0 - else - src = (comp.depth == 32 ? 0 : (1 << comp.depth)) - 1; - } else if (c == 0 && limited && comp.depth > 1) { - if (comp.depth < 8 || fltp && comp.depth != 16 && comp.depth != 32) - return AVERROR(EINVAL); - if (fltp) - src = (comp.depth == 16 ? 0x3000 : 0x3D800000); // 0.0625 - else - src = 16 << (comp.depth - 8); - } else if ((c == 1 || c == 2) && !rgb && !xyz) { - if (comp.depth < 8 || fltp && comp.depth != 16 && comp.depth != 32) - return AVERROR(EINVAL); - if (fltp) - src = (comp.depth == 16 ? 0x3800 : 0x3F000000); // 0.5 - else - src = 128 << (comp.depth - 8); - } - for (x = 0; x < w; x++) - src_array[x] = src; + src_array[x] = color[c]; for (x = 0; x < 4; x++) c_data[x] = &clear_block[x][0]; @@ -689,3 +656,61 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz return 0; } + +int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesize[4], + enum AVPixelFormat pix_fmt, enum AVColorRange range, + int width, int height) +{ + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); + int nb_planes = av_pix_fmt_count_planes(pix_fmt); + int rgb, xyz, pal, limited, alpha, fltp; + uint32_t color[4] = {0}; + + if (!desc || nb_planes < 1 || nb_planes > 4 || desc->flags & AV_PIX_FMT_FLAG_HWACCEL) + return AVERROR(EINVAL); + + rgb = !!(desc->flags & AV_PIX_FMT_FLAG_RGB); + xyz = !!(desc->flags & AV_PIX_FMT_FLAG_XYZ); + pal = !!(desc->flags & AV_PIX_FMT_FLAG_PAL); + limited = !rgb && !xyz && !pal && range != AVCOL_RANGE_JPEG; + alpha = !pal && !!(desc->flags & AV_PIX_FMT_FLAG_ALPHA); + fltp = !!(desc->flags & AV_PIX_FMT_FLAG_FLOAT); + + for (int c = 0; c < desc->nb_components; c++) { + const AVComponentDescriptor comp = desc->comp[c]; + uint32_t src = 0; + + if (comp.depth > 32) + return AVERROR(EINVAL); + + if (pix_fmt == AV_PIX_FMT_MONOWHITE) { + src = 1; + } else if (c + 1 == desc->nb_components && alpha) { + // (Assume even limited YUV uses full range alpha.) + if (fltp && comp.depth != 16 && comp.depth != 32) + return AVERROR(EINVAL); + if (fltp) + src = (comp.depth == 16 ? 0x3C00 : 0x3F800000); // 1.0 + else + src = (comp.depth == 32 ? 0 : (1 << comp.depth)) - 1; + } else if (c == 0 && limited && comp.depth > 1) { + if (comp.depth < 8 || fltp && comp.depth != 16 && comp.depth != 32) + return AVERROR(EINVAL); + if (fltp) + src = (comp.depth == 16 ? 0x3000 : 0x3D800000); // 0.0625 + else + src = 16 << (comp.depth - 8); + } else if ((c == 1 || c == 2) && !rgb && !xyz) { + if (comp.depth < 8 || fltp && comp.depth != 16 && comp.depth != 32) + return AVERROR(EINVAL); + if (fltp) + src = (comp.depth == 16 ? 0x3800 : 0x3F000000); // 0.5 + else + src = 128 << (comp.depth - 8); + } + + color[c] = src; + } + + return image_fill_color(dst_data, dst_linesize, pix_fmt, color, width, height); +} From patchwork Sun Dec 3 00:27:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 44877 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a301:b0:181:818d:5e7f with SMTP id x1csp1995022pzk; Sat, 2 Dec 2023 16:28:35 -0800 (PST) X-Google-Smtp-Source: AGHT+IFAEB/jPzy+DFu4YzQCezYI6DT4GiqFQsV27I7u1Kungrf3JAILFjEukRlM4937cxAqQdli X-Received: by 2002:a2e:7809:0:b0:2c9:dae6:4443 with SMTP id t9-20020a2e7809000000b002c9dae64443mr1029667ljc.197.1701563314744; Sat, 02 Dec 2023 16:28:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701563314; cv=none; d=google.com; s=arc-20160816; b=xOlNgYX8+5yEDBKSPHDZ832+z3QaXuODeXSgM95xTvW1x/fwJcyGOnhr02D75TcLfw aXEWvR+r8bmEopf5V4VhV9UqCnbZy8PU682gXJ9VWAwbMRVBnHCowazYylrthhZP5bSy HJ3aYS7wcKWQcvD0RQ+3DDdEwBbWl3SBoOHGxCIoIG7kK0ejS/T7BIO/SYNykE2Bclrb wrONyRzRrAvhb+W3RYIAKJsyfD9lSgsxNGy0Lw2fNh93LiP5KSwkPXAXRaqAAPGoCbZA hCmd8/XuiZ/kSnnTA4wIuXMpNeLuPuBYIKiaxv9oVE3PpPq8Csxmbia0mg0dBxvOdhHj hazg== 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:delivered-to; bh=9+JtrLXIKzl0CxYyLI8A6QNG3D+OEXtRSWHpHQcJ4nM=; fh=s+G8Ss4JbeMFkWPSp2LmIH/LXFyBlALRiww1j3FPjHY=; b=C0i5jJZLITDNnNtv/EGNyzvSWJgjLam8GLpnq75c23gehXoZxd1A+JYvllSRJBiBpb Y79iB/onT3/nhgvkBPMDjaAU2Al7FGMyieYsqNXXYupKWuXSHiIkFipoA7TAgVZH7jN5 /NnNUz6xxIkNCiWXxwAcSG4drMO5ye5cAF9Qnkinbtswn1SEoOPIhMVigHtiDe7ov1f5 3pnOFmUKufDTCbD0jA/nv0poHeTP7m2Xk6kJuORQWwf6+LuiF9sIDxsA9T6GcXQ4TE7V K7EdRv9VfZWsFELjKJm9GrYDRHrEBSspeiiYgiY5ZBzu779qymdXhm0+0EncgYlJeqR2 RNXg== ARC-Authentication-Results: i=1; mx.google.com; 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 k17-20020a170906055100b00a0221d48467si3154035eja.477.2023.12.02.16.28.34; Sat, 02 Dec 2023 16:28:34 -0800 (PST) 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; 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 6DDAA68CECE; Sun, 3 Dec 2023 02:27:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B9BB668CE49 for ; Sun, 3 Dec 2023 02:27:48 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 9C909E98DB; Sun, 3 Dec 2023 01:27:48 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0fVeDlwpd0L1; Sun, 3 Dec 2023 01:27:47 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id E034CE98F9; Sun, 3 Dec 2023 01:27:46 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Dec 2023 01:27:25 +0100 Message-Id: <20231203002726.29683-6-cus@passwd.hu> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20231203002726.29683-1-cus@passwd.hu> References: <20231203002726.29683-1-cus@passwd.hu> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] avutil/imgutils: add new function av_image_fill_color() 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: Marton Balint Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: V0MsVWnkkuCx Signed-off-by: Marton Balint --- doc/APIchanges | 3 +++ libavutil/imgutils.c | 4 ++-- libavutil/imgutils.h | 30 ++++++++++++++++++++++++++++++ libavutil/version.h | 2 +- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 4a2dc1c44f..b6ac8e08e2 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 API changes, most recent first: +2023-12-xx - xxxxxxxxxxx - lavu 58.33.100 - imguils.h + Add av_image_fill_color() + 2023-11-08 - b82957a66a7 - lavu 58.32.100 - channel_layout.h Add AV_CH_LAYOUT_7POINT2POINT3 and AV_CHANNEL_LAYOUT_7POINT2POINT3. Add AV_CH_LAYOUT_9POINT1POINT4_BACK and AV_CHANNEL_LAYOUT_9POINT1POINT4_BACK. diff --git a/libavutil/imgutils.c b/libavutil/imgutils.c index 959e6850ac..c09848a317 100644 --- a/libavutil/imgutils.c +++ b/libavutil/imgutils.c @@ -579,7 +579,7 @@ static void memset_bytes(uint8_t *dst, size_t dst_size, uint8_t *clear, // if it's a subsampled packed format). #define MAX_BLOCK_SIZE 32 -static int image_fill_color(uint8_t * const dst_data[4], const ptrdiff_t dst_linesize[4], +int av_image_fill_color(uint8_t * const dst_data[4], const ptrdiff_t dst_linesize[4], enum AVPixelFormat pix_fmt, const uint32_t color[4], int width, int height) { @@ -712,5 +712,5 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz color[c] = src; } - return image_fill_color(dst_data, dst_linesize, pix_fmt, color, width, height); + return av_image_fill_color(dst_data, dst_linesize, pix_fmt, color, width, height); } diff --git a/libavutil/imgutils.h b/libavutil/imgutils.h index fa3bb101b1..e047b3a693 100644 --- a/libavutil/imgutils.h +++ b/libavutil/imgutils.h @@ -339,6 +339,36 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz enum AVPixelFormat pix_fmt, enum AVColorRange range, int width, int height); +/** + * Overwrite the image data with a color. This is suitable for filling a + * sub-rectangle of an image, meaning the padding between the right most pixel + * and the left most pixel on the next line will not be overwritten. For some + * formats, the image size might be rounded up due to inherent alignment. + * + * If the pixel format has alpha, it is also replaced. Color component values + * are interpreted as native integers (or intfloats) regardless of actual pixel + * format endianness. + * + * This can return an error if the pixel format is not supported. Normally, all + * non-hwaccel pixel formats should be supported. + * + * Passing NULL for dst_data is allowed. Then the function returns whether the + * operation would have succeeded. (It can return an error if the pix_fmt is + * not supported.) + * + * @param dst_data data pointers to destination image + * @param dst_linesize linesizes for the destination image + * @param pix_fmt the pixel format of the image + * @param color the color components to be used for the fill + * @param width the width of the image in pixels + * @param height the height of the image in pixels + * @return 0 if the image data was cleared, a negative AVERROR code otherwise + */ +int av_image_fill_color(uint8_t * const dst_data[4], const ptrdiff_t dst_linesize[4], + enum AVPixelFormat pix_fmt, const uint32_t color[4], + int width, int height); + + /** * @} */ diff --git a/libavutil/version.h b/libavutil/version.h index c5fa7c3692..0684996bf2 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 58 -#define LIBAVUTIL_VERSION_MINOR 32 +#define LIBAVUTIL_VERSION_MINOR 33 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From patchwork Sun Dec 3 00:27:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 44878 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a301:b0:181:818d:5e7f with SMTP id x1csp1995081pzk; Sat, 2 Dec 2023 16:28:44 -0800 (PST) X-Google-Smtp-Source: AGHT+IHjg6uWZmVGOOwKuWAtSfeK1Ydj0qeLQi+WunBj3E+fQVu2mNl75SqLTxHCJNcZ1KAz4ibn X-Received: by 2002:a17:906:1cc1:b0:a19:a1ba:da6c with SMTP id i1-20020a1709061cc100b00a19a1bada6cmr1982756ejh.147.1701563323733; Sat, 02 Dec 2023 16:28:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701563323; cv=none; d=google.com; s=arc-20160816; b=T5bxTvGNBaAL/p8qJLlFkvFNU3jWNGeMade281t10bv2bK1EmUOqQRwePiHLHhOn0d tUttw1+Zrd3oGeVGeM1eniSwnkYxeZIBJIC3VZvFAvjzPU+IyQtYBYFLaYGuqBzRVlxD 2zK741gRkV/fv4sbFzIipk8dameMkHMtW+U7x8bFyAgKB2M7/Jd4qjO0hTBZBdxzGsqi scLkXW9CYZpybUUVTEsCR+YDWt9bun3iAotTwsgIdMYZ6MDsaHUz06x6qWUGXnI0TQo3 WYIvIRwwxU7IzQXqudYGfiOrDDt4MLIcLS+dnEfXGNzedGgTlpPlCzQ1NdeXeVOhUqNL nfDQ== 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:delivered-to; bh=CnKmSHpynnNvLy4w54xfRJGGRdiyiGy8gHlZwM225ac=; fh=s+G8Ss4JbeMFkWPSp2LmIH/LXFyBlALRiww1j3FPjHY=; b=CnJ2IIPln01NpBXIYxy5+EdgKLuqHmMJPJX/oTUC42/GuxoOugxC9b1JSpe2rY+LVh xKAS0SPf6Kif7N2vwWynSMCoHuG0If4CjviqS2zZOexChxg6pX0C8YdECaWEcD8UoErI wWoXL5L1+bUA1sUcSNcas24WnGpfX1bTUPyq6RoAkVh9iDVWB68PatatbwMUdnX4gsoV xpQ4N6zebMHz3OgXu5SYaIz6aAF1Xz2/vRhVtb0q+7BTRdqRNK1Hb14Rre/ay86WWpZ6 XendsiLMtkNouuvpYDrPuCm5bgFBptpkQM9CWUl1eTSc+db43YlV6/7aC3yS8NC/fKqb IPlg== ARC-Authentication-Results: i=1; mx.google.com; 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 s23-20020a1709062ed700b00a1738683372si3168217eji.7.2023.12.02.16.28.43; Sat, 02 Dec 2023 16:28:43 -0800 (PST) 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; 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 5785C68CEB1; Sun, 3 Dec 2023 02:27:57 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9402E68CE36 for ; Sun, 3 Dec 2023 02:27:50 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 76E4AE98F9; Sun, 3 Dec 2023 01:27:50 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id nbyvgZbwpruB; Sun, 3 Dec 2023 01:27:49 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 01D4DE9904; Sun, 3 Dec 2023 01:27:48 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Dec 2023 01:27:26 +0100 Message-Id: <20231203002726.29683-7-cus@passwd.hu> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20231203002726.29683-1-cus@passwd.hu> References: <20231203002726.29683-1-cus@passwd.hu> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/7] avcodec: add AV_CODEC_FLAG_CLEAR 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: Marton Balint Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 9XDoJUMu4F8/ Signed-off-by: Marton Balint --- doc/APIchanges | 3 +++ doc/codecs.texi | 14 ++++++++++++++ libavcodec/avcodec.h | 4 ++++ libavcodec/decode.c | 6 ++++++ libavcodec/options_table.h | 1 + libavcodec/version.h | 2 +- 6 files changed, 29 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index b6ac8e08e2..e411aa0d91 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 API changes, most recent first: +2023-12-xx - xxxxxxxxxxx - lavc 60.36.100 - avcodec.h + Add AV_CODEC_FLAG_CLEAR. + 2023-12-xx - xxxxxxxxxxx - lavu 58.33.100 - imguils.h Add av_image_fill_color() diff --git a/doc/codecs.texi b/doc/codecs.texi index 5b950b4560..0504a535f2 100644 --- a/doc/codecs.texi +++ b/doc/codecs.texi @@ -76,6 +76,20 @@ Apply interlaced motion estimation. Use closed gop. @item output_corrupt Output even potentially corrupted frames. +@item clear +Clear the contents of the video buffer before decoding the next picture to it. + +Usually if only a part of a picture is affected by a decode error then the +decoder (if it implements error concealment) tries to hide it by interpolating +pixels from neighbouring areas or in some cases from the previous frame. Even +without error concealment it is quite likely that the affected area will +contain pixels from an earlier frame, due to frame pooling. + +For quality checking this might not be desirable, because it makes the errors +less noticable. By using this flag, and combining it with disabled error +concealment (@code{-ec 0}) it is possible to ensure that no leftover data from +an earlier frame is presented in areas affected by decode errors. + @end table @item time_base @var{rational number} diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 7fb44e28f4..97848e942f 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -312,6 +312,10 @@ typedef struct RcOverride{ * loop filter. */ #define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) +/** + * Clear frame buffer contents before decoding. + */ +#define AV_CODEC_FLAG_CLEAR (1 << 12) /** * Only decode/encode grayscale. */ diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 2cfb3fcf97..f9b18a2c35 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -1675,6 +1675,12 @@ FF_ENABLE_DEPRECATION_WARNINGS validate_avframe_allocation(avctx, frame); + if (avctx->flags & AV_CODEC_FLAG_CLEAR && avctx->codec_type == AVMEDIA_TYPE_VIDEO) { + uint32_t color[4] = {0}; + ptrdiff_t linesize[4] = {frame->linesize[0], frame->linesize[1], frame->linesize[2], frame->linesize[3]}; + av_image_fill_color(frame->data, linesize, frame->format, color, frame->width, frame->height); + } + ret = ff_attach_decode_data(frame); if (ret < 0) goto fail; diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index ee243d9894..46a7d41c18 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -62,6 +62,7 @@ static const AVOption avcodec_options[] = { {"frame_duration", "use frame durations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_FRAME_DURATION}, .unit = "flags"}, {"pass1", "use internal 2-pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"}, {"pass2", "use internal 2-pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"}, +{"clear", "clear frames before decoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_CLEAR }, INT_MIN, INT_MAX, V|E|D, "flags"}, {"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, "flags"}, {"psnr", "error[?] variables will be set during encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PSNR }, INT_MIN, INT_MAX, V|E, "flags"}, {"ildct", "use interlaced DCT", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_DCT }, INT_MIN, INT_MAX, V|E, "flags"}, diff --git a/libavcodec/version.h b/libavcodec/version.h index 1008fead27..34b059a8a9 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 35 +#define LIBAVCODEC_VERSION_MINOR 36 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \