Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function
@ 2023-12-03  0:27 Marton Balint
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
                   ` (6 more replies)
  0 siblings, 7 replies; 45+ messages in thread
From: Marton Balint @ 2023-12-03  0:27 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 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;
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 2/7] avutil/tests/imgutils: add tests for av_image_fill_black()
  2023-12-03  0:27 [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Marton Balint
@ 2023-12-03  0:27 ` Marton Balint
  2023-12-03 23:47   ` Stefano Sabatini
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats Marton Balint
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-03  0:27 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 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; y<UINT_MAX; y+= y/2 + 1) {
@@ -69,15 +104,22 @@ int main(void)
     }
     printf("\n");
 
-    while (desc = av_pix_fmt_desc_next(desc)) {
-        int w = 64, h = 48;
-        enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(desc);
+    for (int i = 0; i < 2; i++) {
+        printf(i ? "\nblack tests\n" : "basic tests\n");
+        for (const AVPixFmtDescriptor *desc = NULL; desc = av_pix_fmt_desc_next(desc);) {
+            int w = 64, h = 48;
+            enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(desc);
 
-        if (desc->flags & 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
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats
  2023-12-03  0:27 [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Marton Balint
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
@ 2023-12-03  0:27 ` Marton Balint
  2023-12-04  0:23   ` Stefano Sabatini
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() Marton Balint
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-03  0:27 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

- 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 <cus@passwd.hu>
---
 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
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black()
  2023-12-03  0:27 [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Marton Balint
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats Marton Balint
@ 2023-12-03  0:27 ` Marton Balint
  2023-12-04  0:52   ` Stefano Sabatini
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 5/7] avutil/imgutils: factorize a fill color function Marton Balint
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-03  0:27 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 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
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 5/7] avutil/imgutils: factorize a fill color function
  2023-12-03  0:27 [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Marton Balint
                   ` (2 preceding siblings ...)
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() Marton Balint
@ 2023-12-03  0:27 ` Marton Balint
  2023-12-04  1:04   ` Stefano Sabatini
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-03  0:27 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

In preparation for making it public.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 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);
+}
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 6/7] avutil/imgutils: add new function av_image_fill_color()
  2023-12-03  0:27 [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Marton Balint
                   ` (3 preceding siblings ...)
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 5/7] avutil/imgutils: factorize a fill color function Marton Balint
@ 2023-12-03  0:27 ` Marton Balint
  2023-12-04  1:07   ` Stefano Sabatini
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
  2023-12-03 21:31 ` [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Stefano Sabatini
  6 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-03  0:27 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 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, \
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-03  0:27 [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Marton Balint
                   ` (4 preceding siblings ...)
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
@ 2023-12-03  0:27 ` Marton Balint
  2023-12-03 21:31 ` [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Stefano Sabatini
  6 siblings, 0 replies; 45+ messages in thread
From: Marton Balint @ 2023-12-03  0:27 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 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, \
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function
  2023-12-03  0:27 [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Marton Balint
                   ` (5 preceding siblings ...)
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
@ 2023-12-03 21:31 ` Stefano Sabatini
  2023-12-06  8:22   ` [FFmpeg-devel] [PATCH v2 " Marton Balint
  6 siblings, 1 reply; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-03 21:31 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Sunday 2023-12-03 01:27:20 +0100, Marton Balint wrote:
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  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) {

better be descriptive and follow the usual VERB_OBJECT convention,
this might be:
static inst check_image_fill(...)

[...]

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/7] avutil/tests/imgutils: add tests for av_image_fill_black()
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
@ 2023-12-03 23:47   ` Stefano Sabatini
  0 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-03 23:47 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Sunday 2023-12-03 01:27:21 +0100, Marton Balint wrote:
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  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)

nit: check_image_fill_black ?

> +{
> +    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;

nit: maybe we could store and return ret to give more information

> +    total_size = av_image_alloc(data, linesizes, w, h, pix_fmt, 4);
> +    if (total_size < 0) {
> +        printf("alloc failure");
> +        return -1;

ditto

> +    }
> +    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);

nit: crc?

> +            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; y<UINT_MAX; y+= y/2 + 1) {
> @@ -69,15 +104,22 @@ int main(void)
>      }
>      printf("\n");
>  
> -    while (desc = av_pix_fmt_desc_next(desc)) {
> -        int w = 64, h = 48;
> -        enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(desc);
> +    for (int i = 0; i < 2; i++) {
> +        printf(i ? "\nblack tests\n" : "basic tests\n");
> +        for (const AVPixFmtDescriptor *desc = NULL; desc = av_pix_fmt_desc_next(desc);) {
> +            int w = 64, h = 48;
> +            enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(desc);
>  
> -        if (desc->flags & 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");
> +        }
>      }

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats Marton Balint
@ 2023-12-04  0:23   ` Stefano Sabatini
  0 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-04  0:23 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Sunday 2023-12-03 01:27:22 +0100, Marton Balint wrote:
> - 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 <cus@passwd.hu>
> ---
>  libavutil/imgutils.c    | 49 +++++++++++++++--------------------------
>  tests/ref/fate/imgutils | 14 ++++++------
>  2 files changed, 25 insertions(+), 38 deletions(-)

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black()
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() Marton Balint
@ 2023-12-04  0:52   ` Stefano Sabatini
  0 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-04  0:52 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Sunday 2023-12-03 01:27:23 +0100, Marton Balint wrote:
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  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);

nit+: this might be merged in the if (fltp) branch below for clarity
and to avoid a branch

> +            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)

nit: use () to group the right hand part of the or, or this might
confuse the human reader

>                  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);
>      }
>  

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 5/7] avutil/imgutils: factorize a fill color function
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 5/7] avutil/imgutils: factorize a fill color function Marton Balint
@ 2023-12-04  1:04   ` Stefano Sabatini
  0 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-04  1:04 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Sunday 2023-12-03 01:27:24 +0100, Marton Balint wrote:
> In preparation for making it public.
> 
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  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;

might be renamed in this context, color (color_component)?

[...]

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 6/7] avutil/imgutils: add new function av_image_fill_color()
  2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
@ 2023-12-04  1:07   ` Stefano Sabatini
  0 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-04  1:07 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Sunday 2023-12-03 01:27:25 +0100, Marton Balint wrote:
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  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

imguils typo

> +  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

was filled

> + */
> +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);

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH v2 1/7] avutil/tests/imgutils: factorize basic tests to new function
  2023-12-03 21:31 ` [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Stefano Sabatini
@ 2023-12-06  8:22   ` Marton Balint
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
                       ` (6 more replies)
  0 siblings, 7 replies; 45+ messages in thread
From: Marton Balint @ 2023-12-06  8:22 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 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..1e2bb3fa01 100644
--- a/libavutil/tests/imgutils.c
+++ b/libavutil/tests/imgutils.c
@@ -19,6 +19,41 @@
 #include "libavutil/imgutils.c"
 
 #undef printf
+static int check_image_fill(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);
+        check_image_fill(pix_fmt, w, h);
+        printf("\n");
     }
 
     return 0;
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH v2 2/7] avutil/tests/imgutils: add tests for av_image_fill_black()
  2023-12-06  8:22   ` [FFmpeg-devel] [PATCH v2 " Marton Balint
@ 2023-12-06  8:22     ` Marton Balint
  2023-12-06 22:46       ` Stefano Sabatini
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats Marton Balint
                       ` (5 subsequent siblings)
  6 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-06  8:22 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavutil/tests/imgutils.c |  61 +++++++++--
 tests/ref/fate/imgutils    | 217 +++++++++++++++++++++++++++++++++++++
 2 files changed, 269 insertions(+), 9 deletions(-)

diff --git a/libavutil/tests/imgutils.c b/libavutil/tests/imgutils.c
index 1e2bb3fa01..582a358157 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 check_image_fill(enum AVPixelFormat pix_fmt, int w, int h) {
@@ -55,9 +56,44 @@ static int check_image_fill(enum AVPixelFormat pix_fmt, int w, int h) {
     return 0;
 }
 
+static int check_image_fill_black(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];
+
+    ret = av_image_fill_linesizes(linesizes, pix_fmt, w);
+    if (ret < 0)
+        return ret;
+    total_size = av_image_alloc(data, linesizes, w, h, pix_fmt, 4);
+    if (total_size < 0) {
+        printf("alloc failure");
+        return total_size;
+    }
+    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 *crc = av_crc_get_table(AV_CRC_32_IEEE_LE);
+            printf("0x%08"PRIx32, av_crc(crc, 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; y<UINT_MAX; y+= y/2 + 1) {
@@ -69,15 +105,22 @@ int main(void)
     }
     printf("\n");
 
-    while (desc = av_pix_fmt_desc_next(desc)) {
-        int w = 64, h = 48;
-        enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(desc);
+    for (int i = 0; i < 2; i++) {
+        printf(i ? "\nimage_fill_black tests\n" : "image_fill tests\n");
+        for (const AVPixFmtDescriptor *desc = NULL; desc = av_pix_fmt_desc_next(desc);) {
+            int w = 64, h = 48;
+            enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(desc);
 
-        if (desc->flags & AV_PIX_FMT_FLAG_HWACCEL)
-            continue;
-        printf("%-16s", desc->name);
-        check_image_fill(pix_fmt, w, h);
-        printf("\n");
+            if (desc->flags & AV_PIX_FMT_FLAG_HWACCEL)
+                continue;
+
+            printf("%-16s", desc->name);
+            if (i == 0)
+                check_image_fill(pix_fmt, w, h);
+            else
+                check_image_fill_black(desc, pix_fmt, w, h);
+            printf("\n");
+        }
     }
 
     return 0;
diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils
index f166cb67fb..f12bef3fb5 100644
--- a/tests/ref/fate/imgutils
+++ b/tests/ref/fate/imgutils
@@ -54,6 +54,7 @@
 0000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000
 
+image_fill 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
+
+image_fill_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
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH v2 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats
  2023-12-06  8:22   ` [FFmpeg-devel] [PATCH v2 " Marton Balint
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
@ 2023-12-06  8:22     ` Marton Balint
  2023-12-06 22:47       ` Stefano Sabatini
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() Marton Balint
                       ` (4 subsequent siblings)
  6 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-06  8:22 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

- 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 <cus@passwd.hu>
---
 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 f12bef3fb5..c31bc38d77 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
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH v2 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black()
  2023-12-06  8:22   ` [FFmpeg-devel] [PATCH v2 " Marton Balint
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats Marton Balint
@ 2023-12-06  8:22     ` Marton Balint
  2023-12-06 22:48       ` Stefano Sabatini
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 5/7] avutil/imgutils: factorize a fill color function Marton Balint
                       ` (3 subsequent siblings)
  6 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-06  8:22 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavutil/imgutils.c    | 33 +++++++++++++++++++++++----------
 tests/ref/fate/imgutils | 24 ++++++++++++------------
 2 files changed, 35 insertions(+), 22 deletions(-)

diff --git a/libavutil/imgutils.c b/libavutil/imgutils.c
index 5e401139c8..67119b0870 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,27 @@ 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) {
+                if (comp.depth != 16 && comp.depth != 32)
+                    return AVERROR(EINVAL);
+                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 +664,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 c31bc38d77..fb2ed6d158 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
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH v2 5/7] avutil/imgutils: factorize a fill color function
  2023-12-06  8:22   ` [FFmpeg-devel] [PATCH v2 " Marton Balint
                       ` (2 preceding siblings ...)
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() Marton Balint
@ 2023-12-06  8:22     ` Marton Balint
  2023-12-06 22:52       ` Stefano Sabatini
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
                       ` (2 subsequent siblings)
  6 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-06  8:22 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

In preparation for making it public.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavutil/imgutils.c | 103 +++++++++++++++++++++++++++----------------
 1 file changed, 64 insertions(+), 39 deletions(-)

diff --git a/libavutil/imgutils.c b/libavutil/imgutils.c
index 67119b0870..278e30ee0f 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,35 +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) {
-                if (comp.depth != 16 && comp.depth != 32)
-                    return AVERROR(EINVAL);
-                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];
@@ -690,3 +656,62 @@ 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 colors[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 color = 0;
+
+        if (comp.depth > 32)
+            return AVERROR(EINVAL);
+
+        if (pix_fmt == AV_PIX_FMT_MONOWHITE) {
+            color = 1;
+        } else if (c + 1 == desc->nb_components && alpha) {
+            // (Assume even limited YUV uses full range alpha.)
+            if (fltp) {
+                if (comp.depth != 16 && comp.depth != 32)
+                    return AVERROR(EINVAL);
+                color = (comp.depth == 16 ? 0x3C00 : 0x3F800000); // 1.0
+             } else {
+                color = (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)
+                color = (comp.depth == 16 ? 0x3000 : 0x3D800000); // 0.0625
+            else
+                color = 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)
+                color = (comp.depth == 16 ? 0x3800 : 0x3F000000); // 0.5
+            else
+                color = 128 << (comp.depth - 8);
+        }
+
+        colors[c] = color;
+    }
+
+    return image_fill_color(dst_data, dst_linesize, pix_fmt, colors, width, height);
+}
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH v2 6/7] avutil/imgutils: add new function av_image_fill_color()
  2023-12-06  8:22   ` [FFmpeg-devel] [PATCH v2 " Marton Balint
                       ` (3 preceding siblings ...)
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 5/7] avutil/imgutils: factorize a fill color function Marton Balint
@ 2023-12-06  8:22     ` Marton Balint
  2023-12-06 22:53       ` Stefano Sabatini
  2023-12-07 16:15       ` Anton Khirnov
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
  2023-12-06 22:43     ` [FFmpeg-devel] [PATCH v2 1/7] avutil/tests/imgutils: factorize basic tests to new function Stefano Sabatini
  6 siblings, 2 replies; 45+ messages in thread
From: Marton Balint @ 2023-12-06  8:22 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 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..416e2bec5e 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 - imgutils.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 278e30ee0f..e1eefcdd70 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)
 {
@@ -713,5 +713,5 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz
         colors[c] = color;
     }
 
-    return image_fill_color(dst_data, dst_linesize, pix_fmt, colors, width, height);
+    return av_image_fill_color(dst_data, dst_linesize, pix_fmt, colors, width, height);
 }
diff --git a/libavutil/imgutils.h b/libavutil/imgutils.h
index fa3bb101b1..6e744b0cac 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 filled, 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, \
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-06  8:22   ` [FFmpeg-devel] [PATCH v2 " Marton Balint
                       ` (4 preceding siblings ...)
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
@ 2023-12-06  8:22     ` Marton Balint
  2023-12-06 22:57       ` Stefano Sabatini
                         ` (3 more replies)
  2023-12-06 22:43     ` [FFmpeg-devel] [PATCH v2 1/7] avutil/tests/imgutils: factorize basic tests to new function Stefano Sabatini
  6 siblings, 4 replies; 45+ messages in thread
From: Marton Balint @ 2023-12-06  8:22 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 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 416e2bec5e..f839504a64 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 - imgutils.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..23ff4cddf8 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|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, \
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 1/7] avutil/tests/imgutils: factorize basic tests to new function
  2023-12-06  8:22   ` [FFmpeg-devel] [PATCH v2 " Marton Balint
                       ` (5 preceding siblings ...)
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
@ 2023-12-06 22:43     ` Stefano Sabatini
  6 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-06 22:43 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Wednesday 2023-12-06 09:22:14 +0100, Marton Balint wrote:
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  libavutil/tests/imgutils.c | 68 ++++++++++++++++++++++----------------
>  1 file changed, 39 insertions(+), 29 deletions(-)

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 2/7] avutil/tests/imgutils: add tests for av_image_fill_black()
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
@ 2023-12-06 22:46       ` Stefano Sabatini
  0 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-06 22:46 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Wednesday 2023-12-06 09:22:15 +0100, Marton Balint wrote:
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  libavutil/tests/imgutils.c |  61 +++++++++--
>  tests/ref/fate/imgutils    | 217 +++++++++++++++++++++++++++++++++++++
>  2 files changed, 269 insertions(+), 9 deletions(-)

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats Marton Balint
@ 2023-12-06 22:47       ` Stefano Sabatini
  0 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-06 22:47 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Wednesday 2023-12-06 09:22:16 +0100, Marton Balint wrote:
> - 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 <cus@passwd.hu>
> ---
>  libavutil/imgutils.c    | 49 +++++++++++++++--------------------------
>  tests/ref/fate/imgutils | 14 ++++++------
>  2 files changed, 25 insertions(+), 38 deletions(-)

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black()
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() Marton Balint
@ 2023-12-06 22:48       ` Stefano Sabatini
  0 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-06 22:48 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Wednesday 2023-12-06 09:22:17 +0100, Marton Balint wrote:
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  libavutil/imgutils.c    | 33 +++++++++++++++++++++++----------
>  tests/ref/fate/imgutils | 24 ++++++++++++------------
>  2 files changed, 35 insertions(+), 22 deletions(-)

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 5/7] avutil/imgutils: factorize a fill color function
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 5/7] avutil/imgutils: factorize a fill color function Marton Balint
@ 2023-12-06 22:52       ` Stefano Sabatini
  0 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-06 22:52 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Wednesday 2023-12-06 09:22:18 +0100, Marton Balint wrote:
> In preparation for making it public.
> 
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  libavutil/imgutils.c | 103 +++++++++++++++++++++++++++----------------
>  1 file changed, 64 insertions(+), 39 deletions(-)

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 6/7] avutil/imgutils: add new function av_image_fill_color()
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
@ 2023-12-06 22:53       ` Stefano Sabatini
  2023-12-07 16:15       ` Anton Khirnov
  1 sibling, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-06 22:53 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Wednesday 2023-12-06 09:22:19 +0100, Marton Balint wrote:
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  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..416e2bec5e 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 - imgutils.h
> +  Add av_image_fill_color()

nit++: add missing dot?

[...]

LGTM otherwise (no need to send another patch).
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
@ 2023-12-06 22:57       ` Stefano Sabatini
  2023-12-07  1:44       ` Ronald S. Bultje
                         ` (2 subsequent siblings)
  3 siblings, 0 replies; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-06 22:57 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Wednesday 2023-12-06 09:22:20 +0100, Marton Balint wrote:
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  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(-)

LGTM but I'll let someone with more familiarity of the lavc internals
comment on this.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
  2023-12-06 22:57       ` Stefano Sabatini
@ 2023-12-07  1:44       ` Ronald S. Bultje
  2023-12-07 16:19         ` Anton Khirnov
  2023-12-07  2:37       ` Vittorio Giovara
  2023-12-07 16:30       ` Anton Khirnov
  3 siblings, 1 reply; 45+ messages in thread
From: Ronald S. Bultje @ 2023-12-07  1:44 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

Hi,

On Wed, Dec 6, 2023 at 3:23 AM Marton Balint <cus@passwd.hu> wrote:

> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  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 416e2bec5e..f839504a64 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 - imgutils.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.
>

No comment on the patch itself, but wouldn't our users (and the C standard
itself) consider it a security issue to return stale (or worse:
uninitialized) data while pretending that it's safe to access?

I thought touching uninitialized data was UB.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
  2023-12-06 22:57       ` Stefano Sabatini
  2023-12-07  1:44       ` Ronald S. Bultje
@ 2023-12-07  2:37       ` Vittorio Giovara
  2023-12-07 16:30       ` Anton Khirnov
  3 siblings, 0 replies; 45+ messages in thread
From: Vittorio Giovara @ 2023-12-07  2:37 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On Wed, Dec 6, 2023 at 3:23 AM Marton Balint <cus@passwd.hu> wrote:

> 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);
>

I think it's be safer to add a return check here
-- 
Vittorio
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 6/7] avutil/imgutils: add new function av_image_fill_color()
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
  2023-12-06 22:53       ` Stefano Sabatini
@ 2023-12-07 16:15       ` Anton Khirnov
  2023-12-09 19:25         ` [FFmpeg-devel] [PATCH v3 " Marton Balint
  1 sibling, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2023-12-07 16:15 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

Quoting Marton Balint (2023-12-06 09:22:19)
> +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);

Might want to add a flags argument for future extensions.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-07  1:44       ` Ronald S. Bultje
@ 2023-12-07 16:19         ` Anton Khirnov
  2023-12-07 22:47           ` Marton Balint
  0 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2023-12-07 16:19 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

Quoting Ronald S. Bultje (2023-12-07 02:44:36)
> Hi,
> 
> On Wed, Dec 6, 2023 at 3:23 AM Marton Balint <cus@passwd.hu> wrote:
> 
> > Signed-off-by: Marton Balint <cus@passwd.hu>
> > ---
> >  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 416e2bec5e..f839504a64 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 - imgutils.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.
> >
> 
> No comment on the patch itself, but wouldn't our users (and the C standard
> itself) consider it a security issue to return stale

I don't see the security issue in returning previously-returned frame
data.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
                         ` (2 preceding siblings ...)
  2023-12-07  2:37       ` Vittorio Giovara
@ 2023-12-07 16:30       ` Anton Khirnov
  2023-12-07 23:11         ` Marton Balint
  3 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2023-12-07 16:30 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

Quoting Marton Balint (2023-12-06 09:22:20)
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  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 416e2bec5e..f839504a64 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.

I'm not a huge fan of calling it just 'clear'. How about something more
descriptive like 'wipe_frames'.
> +
>  2023-12-xx - xxxxxxxxxxx - lavu 58.33.100 - imgutils.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.

Clear the contents of each frame buffer after it is allocated with
AVCodecContext.get_buffer2() and before anything is decoded into it.

Note that this may have a significant performance cost.

> + */
> +#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);

Should this check for errors?

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-07 16:19         ` Anton Khirnov
@ 2023-12-07 22:47           ` Marton Balint
  2023-12-08  5:12             ` Rémi Denis-Courmont
  0 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-07 22:47 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



On Thu, 7 Dec 2023, Anton Khirnov wrote:

> Quoting Ronald S. Bultje (2023-12-07 02:44:36)
>> Hi,
>> 
>> On Wed, Dec 6, 2023 at 3:23 AM Marton Balint <cus@passwd.hu> wrote:
>> 
>> > Signed-off-by: Marton Balint <cus@passwd.hu>
>> > ---
>> >  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 416e2bec5e..f839504a64 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 - imgutils.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.
>> >
>> 
>> No comment on the patch itself, but wouldn't our users (and the C standard
>> itself) consider it a security issue to return stale
>
> I don't see the security issue in returning previously-returned frame
> data.

I guess what Ronald means that it is possible that the decoder frame 
pool allocates data in heap previously containing sensitive data, 
and that might never get overwritten in case of faulty input before 
passing it to the user.

The simple fix for that is to clear frame pool buffers on creation?

I am not sure if it is actually UB to read uninitialzied data from the 
heap though.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-07 16:30       ` Anton Khirnov
@ 2023-12-07 23:11         ` Marton Balint
  2023-12-11 20:49           ` Mark Thompson
  2023-12-12 11:23           ` Anton Khirnov
  0 siblings, 2 replies; 45+ messages in thread
From: Marton Balint @ 2023-12-07 23:11 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



On Thu, 7 Dec 2023, Anton Khirnov wrote:

> Quoting Marton Balint (2023-12-06 09:22:20)
>> Signed-off-by: Marton Balint <cus@passwd.hu>
>> ---
>>  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 416e2bec5e..f839504a64 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.
>
> I'm not a huge fan of calling it just 'clear'. How about something more
> descriptive like 'wipe_frames'.

Wipe reminds me of the wipe effect. How about 'predecode_clear'?

>> +
>>  2023-12-xx - xxxxxxxxxxx - lavu 58.33.100 - imgutils.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.
>
> Clear the contents of each frame buffer after it is allocated with
> AVCodecContext.get_buffer2() and before anything is decoded into it.
>
> Note that this may have a significant performance cost.

ok.

>
>> + */
>> +#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);
>
> Should this check for errors?

Lack of error checking is intentional. av_image_fill_color might not 
support all pixel formats, definitely not support hwaccel formats. It 
might make sense to warn the user once, but I don't think propagating the 
error back is needed here.

I primarily thought of this as a QC feature (even thought about making the 
color fill green by default to make it more noticeable (YUV green happens 
to be 0,0,0), but for that I'd need similar checks for colorspaces to 
what I have for fill_black())...

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-07 22:47           ` Marton Balint
@ 2023-12-08  5:12             ` Rémi Denis-Courmont
  0 siblings, 0 replies; 45+ messages in thread
From: Rémi Denis-Courmont @ 2023-12-08  5:12 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Hi,

Le 8 décembre 2023 00:47:13 GMT+02:00, Marton Balint <cus@passwd.hu> a écrit :
>
>
>On Thu, 7 Dec 2023, Anton Khirnov wrote:
>
>> Quoting Ronald S. Bultje (2023-12-07 02:44:36)
>>> Hi,
>>> 
>>> On Wed, Dec 6, 2023 at 3:23 AM Marton Balint <cus@passwd.hu> wrote:
>>> 
>>> > Signed-off-by: Marton Balint <cus@passwd.hu>
>>> > ---
>>> >  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 416e2bec5e..f839504a64 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 - imgutils.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.
>>> >
>>> 
>>> No comment on the patch itself, but wouldn't our users (and the C standard
>>> itself) consider it a security issue to return stale
>> 
>> I don't see the security issue in returning previously-returned frame
>> data.
>
>I guess what Ronald means that it is possible that the decoder frame pool allocates data in heap previously containing sensitive data, and that might never get overwritten in case of faulty input before passing it to the user.
>
>The simple fix for that is to clear frame pool buffers on creation?
>
>I am not sure if it is actually UB to read uninitialzied data from the heap though.

Reading uninitialised data is UB if the type representation is not surjective (e.g. bool, and potentially compound types with padding). Of course there are all sorts of other problems that could indirectly cause UB such as implicitly assuming that an integer fits a certain range and triggering an undefined overflow otherwise.

>
>Regards,
>Marton
>_______________________________________________
>ffmpeg-devel mailing list
>ffmpeg-devel@ffmpeg.org
>https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>To unsubscribe, visit link above, or email
>ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH v3 6/7] avutil/imgutils: add new function av_image_fill_color()
  2023-12-07 16:15       ` Anton Khirnov
@ 2023-12-09 19:25         ` Marton Balint
  2023-12-11 23:05           ` Stefano Sabatini
  0 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-09 19:25 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

v3: added flags argument.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 doc/APIchanges       |  3 +++
 libavutil/imgutils.c |  6 +++---
 libavutil/imgutils.h | 31 +++++++++++++++++++++++++++++++
 libavutil/version.h  |  2 +-
 4 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 4a2dc1c44f..2b0326165e 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 - imgutils.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 278e30ee0f..aae40ba59a 100644
--- a/libavutil/imgutils.c
+++ b/libavutil/imgutils.c
@@ -579,9 +579,9 @@ 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)
+                        int width, int height, int flags)
 {
     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
     int nb_planes = av_pix_fmt_count_planes(pix_fmt);
@@ -713,5 +713,5 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz
         colors[c] = color;
     }
 
-    return image_fill_color(dst_data, dst_linesize, pix_fmt, colors, width, height);
+    return av_image_fill_color(dst_data, dst_linesize, pix_fmt, colors, width, height, 0);
 }
diff --git a/libavutil/imgutils.h b/libavutil/imgutils.h
index fa3bb101b1..a29ed46a39 100644
--- a/libavutil/imgutils.h
+++ b/libavutil/imgutils.h
@@ -339,6 +339,37 @@ 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
+ * @param flags         currently unused
+ * @return 0 if the image data was filled, 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, int flags);
+
+
 /**
  * @}
  */
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, \
-- 
2.35.3

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-07 23:11         ` Marton Balint
@ 2023-12-11 20:49           ` Mark Thompson
  2023-12-12 11:23           ` Anton Khirnov
  1 sibling, 0 replies; 45+ messages in thread
From: Mark Thompson @ 2023-12-11 20:49 UTC (permalink / raw)
  To: ffmpeg-devel

On 07/12/2023 23:11, Marton Balint wrote:
> On Thu, 7 Dec 2023, Anton Khirnov wrote:
>> Quoting Marton Balint (2023-12-06 09:22:20)
>>> Signed-off-by: Marton Balint <cus@passwd.hu>
>>> ---
>>>  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 416e2bec5e..f839504a64 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.
>>
>> I'm not a huge fan of calling it just 'clear'. How about something more
>> descriptive like 'wipe_frames'.
> 
> Wipe reminds me of the wipe effect. How about 'predecode_clear'?
> 
>>> +
>>>  2023-12-xx - xxxxxxxxxxx - lavu 58.33.100 - imgutils.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.
>>
>> Clear the contents of each frame buffer after it is allocated with
>> AVCodecContext.get_buffer2() and before anything is decoded into it.
>>
>> Note that this may have a significant performance cost.
> 
> ok.
> 
>>
>>> + */
>>> +#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);
>>
>> Should this check for errors?
> 
> Lack of error checking is intentional. av_image_fill_color might not support all pixel formats, definitely not support hwaccel formats. It might make sense to warn the user once, but I don't think propagating the error back is needed here.

I don't think I agree with this?  Even if you say it isn't, it still looks like a privacy and security feature and so people may treat it as such.

Consider a transcoding application with user-supplied ingest - without something like this, a malformed input from the user could leak random previously-deallocated memory, which could contain anything (frames from other users, private keys, etc.).

So, if the user has explicitly requested that frames are cleared then IMO it should either clear them or fail.

(I do think the feature is a good idea.  Supporting hardware formats there is probably straightforward in at least some cases if useful.)

Thanks,

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v3 6/7] avutil/imgutils: add new function av_image_fill_color()
  2023-12-09 19:25         ` [FFmpeg-devel] [PATCH v3 " Marton Balint
@ 2023-12-11 23:05           ` Stefano Sabatini
  2023-12-12 18:45             ` Marton Balint
  0 siblings, 1 reply; 45+ messages in thread
From: Stefano Sabatini @ 2023-12-11 23:05 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Marton Balint

On date Saturday 2023-12-09 20:25:07 +0100, Marton Balint wrote:
> v3: added flags argument.
> 
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  doc/APIchanges       |  3 +++
>  libavutil/imgutils.c |  6 +++---
>  libavutil/imgutils.h | 31 +++++++++++++++++++++++++++++++
>  libavutil/version.h  |  2 +-
>  4 files changed, 38 insertions(+), 4 deletions(-)
> 
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 4a2dc1c44f..2b0326165e 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 - imgutils.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 278e30ee0f..aae40ba59a 100644
> --- a/libavutil/imgutils.c
> +++ b/libavutil/imgutils.c
> @@ -579,9 +579,9 @@ 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)
> +                        int width, int height, int flags)
>  {
>      const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
>      int nb_planes = av_pix_fmt_count_planes(pix_fmt);
> @@ -713,5 +713,5 @@ int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesiz
>          colors[c] = color;
>      }
>  
> -    return image_fill_color(dst_data, dst_linesize, pix_fmt, colors, width, height);
> +    return av_image_fill_color(dst_data, dst_linesize, pix_fmt, colors, width, height, 0);
>  }
> diff --git a/libavutil/imgutils.h b/libavutil/imgutils.h
> index fa3bb101b1..a29ed46a39 100644
> --- a/libavutil/imgutils.h
> +++ b/libavutil/imgutils.h
> @@ -339,6 +339,37 @@ 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
> + * @param flags         currently unused
> + * @return 0 if the image data was filled, 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, int flags);

> +
> +

ni+++: drop the duplicated empty line

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-07 23:11         ` Marton Balint
  2023-12-11 20:49           ` Mark Thompson
@ 2023-12-12 11:23           ` Anton Khirnov
  2023-12-12 18:37             ` Marton Balint
  2023-12-12 22:18             ` Michael Niedermayer
  1 sibling, 2 replies; 45+ messages in thread
From: Anton Khirnov @ 2023-12-12 11:23 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting Marton Balint (2023-12-08 00:11:21)
> Wipe reminds me of the wipe effect. How about 'predecode_clear'?

Fine with me I guess.

> >
> >> + */
> >> +#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);
> >
> > Should this check for errors?
> 
> Lack of error checking is intentional. av_image_fill_color might not 
> support all pixel formats, definitely not support hwaccel formats. It 
> might make sense to warn the user once, but I don't think propagating the 
> error back is needed here.
> 
> I primarily thought of this as a QC feature (even thought about making the 
> color fill green by default to make it more noticeable (YUV green happens 
> to be 0,0,0), but for that I'd need similar checks for colorspaces to 
> what I have for fill_black())...

As Mark said, I expect people to want to use it as a security feature.
So either it should work reliably, or it should be made very clear that
it's for debugging only.

For non-hwaccel pixel formats, you can fall back on memsetting the
buffer to 0.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-12 11:23           ` Anton Khirnov
@ 2023-12-12 18:37             ` Marton Balint
  2023-12-13  8:59               ` Anton Khirnov
  2023-12-12 22:18             ` Michael Niedermayer
  1 sibling, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-12 18:37 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



On Tue, 12 Dec 2023, Anton Khirnov wrote:

> Quoting Marton Balint (2023-12-08 00:11:21)
>> Wipe reminds me of the wipe effect. How about 'predecode_clear'?
>
> Fine with me I guess.
>
>>>
>>>> + */
>>>> +#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);
>>>
>>> Should this check for errors?
>>
>> Lack of error checking is intentional. av_image_fill_color might not
>> support all pixel formats, definitely not support hwaccel formats. It
>> might make sense to warn the user once, but I don't think propagating the
>> error back is needed here.
>>
>> I primarily thought of this as a QC feature (even thought about making the
>> color fill green by default to make it more noticeable (YUV green happens
>> to be 0,0,0), but for that I'd need similar checks for colorspaces to
>> what I have for fill_black())...
>
> As Mark said, I expect people to want to use it as a security feature.
> So either it should work reliably, or it should be made very clear that
> it's for debugging only.
>
> For non-hwaccel pixel formats, you can fall back on memsetting the
> buffer to 0.

IMHO for security you don't need to clear every frame, only new ones in 
the buffer pool. Considering that it only affects the first few 
frames, we might want to do that unconditionally, and not based on a 
flag. And it is better to do this on the buffer level (because you might 
not overwrite some bytes because of alignment with a color fill).

So for this flag, I'd rather make it clear it is not security-related, and 
also that it has performance impact.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v3 6/7] avutil/imgutils: add new function av_image_fill_color()
  2023-12-11 23:05           ` Stefano Sabatini
@ 2023-12-12 18:45             ` Marton Balint
  0 siblings, 0 replies; 45+ messages in thread
From: Marton Balint @ 2023-12-12 18:45 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



On Tue, 12 Dec 2023, Stefano Sabatini wrote:

> On date Saturday 2023-12-09 20:25:07 +0100, Marton Balint wrote:
>> v3: added flags argument.
>>
>> Signed-off-by: Marton Balint <cus@passwd.hu>
>> ---
>>  doc/APIchanges       |  3 +++
>>  libavutil/imgutils.c |  6 +++---
>>  libavutil/imgutils.h | 31 +++++++++++++++++++++++++++++++
>>  libavutil/version.h  |  2 +-
>>  4 files changed, 38 insertions(+), 4 deletions(-)
>>

[...]

>> +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, int flags);
>
>> +
>> +
>
> ni+++: drop the duplicated empty line
>

Ok, will apply patches 1-6 with that fixed.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-12 11:23           ` Anton Khirnov
  2023-12-12 18:37             ` Marton Balint
@ 2023-12-12 22:18             ` Michael Niedermayer
  1 sibling, 0 replies; 45+ messages in thread
From: Michael Niedermayer @ 2023-12-12 22:18 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 2814 bytes --]

On Tue, Dec 12, 2023 at 12:23:38PM +0100, Anton Khirnov wrote:
> Quoting Marton Balint (2023-12-08 00:11:21)
> > Wipe reminds me of the wipe effect. How about 'predecode_clear'?
> 
> Fine with me I guess.
> 
> > >
> > >> + */
> > >> +#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);
> > >
> > > Should this check for errors?
> > 
> > Lack of error checking is intentional. av_image_fill_color might not 
> > support all pixel formats, definitely not support hwaccel formats. It 
> > might make sense to warn the user once, but I don't think propagating the 
> > error back is needed here.
> > 
> > I primarily thought of this as a QC feature (even thought about making the 
> > color fill green by default to make it more noticeable (YUV green happens 
> > to be 0,0,0), but for that I'd need similar checks for colorspaces to 
> > what I have for fill_black())...
> 
> As Mark said, I expect people to want to use it as a security feature.
> So either it should work reliably, or it should be made very clear that
> it's for debugging only.
> 
> For non-hwaccel pixel formats, you can fall back on memsetting the
> buffer to 0.

For security, there may be other less vissible things that should be cleared too
for example B frames in some codecs can use motion vectors from surrounding frames.

Also the correct thing is to apply error concealment to replace all parts which
have not been filled in. Not to leave them uninitialized.
Not only does that preserve privacy it also produces much better looking frames
We have error concealment code, it should be used.

Not arguing against this feature here. Just saying for security/privacy it has
a price as it needs to be done before we know if a frame is damaged, while error
concealment is done only on actually damaged frames
Of course you may want to do both to be really "sure" ...

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Nations do behave wisely once they have exhausted all other alternatives. 
-- Abba Eban

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-12 18:37             ` Marton Balint
@ 2023-12-13  8:59               ` Anton Khirnov
  2023-12-13 17:09                 ` Marton Balint
  0 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2023-12-13  8:59 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting Marton Balint (2023-12-12 19:37:57)
> 
> 
> On Tue, 12 Dec 2023, Anton Khirnov wrote:
> 
> > Quoting Marton Balint (2023-12-08 00:11:21)
> >> Wipe reminds me of the wipe effect. How about 'predecode_clear'?
> >
> > Fine with me I guess.
> >
> >>>
> >>>> + */
> >>>> +#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);
> >>>
> >>> Should this check for errors?
> >>
> >> Lack of error checking is intentional. av_image_fill_color might not
> >> support all pixel formats, definitely not support hwaccel formats. It
> >> might make sense to warn the user once, but I don't think propagating the
> >> error back is needed here.
> >>
> >> I primarily thought of this as a QC feature (even thought about making the
> >> color fill green by default to make it more noticeable (YUV green happens
> >> to be 0,0,0), but for that I'd need similar checks for colorspaces to
> >> what I have for fill_black())...
> >
> > As Mark said, I expect people to want to use it as a security feature.
> > So either it should work reliably, or it should be made very clear that
> > it's for debugging only.
> >
> > For non-hwaccel pixel formats, you can fall back on memsetting the
> > buffer to 0.
> 
> IMHO for security you don't need to clear every frame, only new ones in 
> the buffer pool. Considering that it only affects the first few 
> frames, we might want to do that unconditionally, and not based on a 
> flag. And it is better to do this on the buffer level (because you might 
> not overwrite some bytes because of alignment with a color fill).
> 
> So for this flag, I'd rather make it clear it is not security-related, and 
> also that it has performance impact.

So then maybe make a FF_EC flag?

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-13  8:59               ` Anton Khirnov
@ 2023-12-13 17:09                 ` Marton Balint
  2023-12-14  8:03                   ` Anton Khirnov
  0 siblings, 1 reply; 45+ messages in thread
From: Marton Balint @ 2023-12-13 17:09 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



On Wed, 13 Dec 2023, Anton Khirnov wrote:

> Quoting Marton Balint (2023-12-12 19:37:57)
>>
>>
>> On Tue, 12 Dec 2023, Anton Khirnov wrote:
>>
>>> Quoting Marton Balint (2023-12-08 00:11:21)
>>>> Wipe reminds me of the wipe effect. How about 'predecode_clear'?
>>>
>>> Fine with me I guess.
>>>
>>>>>
>>>>>> + */
>>>>>> +#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);
>>>>>
>>>>> Should this check for errors?
>>>>
>>>> Lack of error checking is intentional. av_image_fill_color might not
>>>> support all pixel formats, definitely not support hwaccel formats. It
>>>> might make sense to warn the user once, but I don't think propagating the
>>>> error back is needed here.
>>>>
>>>> I primarily thought of this as a QC feature (even thought about making the
>>>> color fill green by default to make it more noticeable (YUV green happens
>>>> to be 0,0,0), but for that I'd need similar checks for colorspaces to
>>>> what I have for fill_black())...
>>>
>>> As Mark said, I expect people to want to use it as a security feature.
>>> So either it should work reliably, or it should be made very clear that
>>> it's for debugging only.
>>>
>>> For non-hwaccel pixel formats, you can fall back on memsetting the
>>> buffer to 0.
>>
>> IMHO for security you don't need to clear every frame, only new ones in
>> the buffer pool. Considering that it only affects the first few
>> frames, we might want to do that unconditionally, and not based on a
>> flag. And it is better to do this on the buffer level (because you might
>> not overwrite some bytes because of alignment with a color fill).
>>
>> So for this flag, I'd rather make it clear it is not security-related, and
>> also that it has performance impact.
>
> So then maybe make a FF_EC flag?

I thought about using that, but there are plenty of error concealment 
code which only checks if avctx->error_concealment is nonzero or zero, and 
not specific EC flags. So unless that is fixed (which might break existing 
behaviour) one cannot introduce a new EC flag and disable error 
concealment at the same time...

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
  2023-12-13 17:09                 ` Marton Balint
@ 2023-12-14  8:03                   ` Anton Khirnov
  0 siblings, 0 replies; 45+ messages in thread
From: Anton Khirnov @ 2023-12-14  8:03 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting Marton Balint (2023-12-13 18:09:45)
> On Wed, 13 Dec 2023, Anton Khirnov wrote:
> > Quoting Marton Balint (2023-12-12 19:37:57)
> >>
> >> So for this flag, I'd rather make it clear it is not security-related, and
> >> also that it has performance impact.
> >
> > So then maybe make a FF_EC flag?
> 
> I thought about using that, but there are plenty of error concealment 
> code which only checks if avctx->error_concealment is nonzero or zero, and 
> not specific EC flags. So unless that is fixed (which might break existing 
> behaviour) one cannot introduce a new EC flag and disable error 
> concealment at the same time...

If you don't feel like fixing all the places that do such checks, you
could instead
* add a flag in DecodeContext
* in ff_decode_preinit(), map your new FF_EC_PREDECODE_CLEAR to the
  internal flag
* clear FF_EC_PREDECODE_CLEAR in AVCodecContext

That should avoid breaking any existing behavior.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

end of thread, other threads:[~2023-12-14  8:03 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-03  0:27 [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Marton Balint
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
2023-12-03 23:47   ` Stefano Sabatini
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats Marton Balint
2023-12-04  0:23   ` Stefano Sabatini
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() Marton Balint
2023-12-04  0:52   ` Stefano Sabatini
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 5/7] avutil/imgutils: factorize a fill color function Marton Balint
2023-12-04  1:04   ` Stefano Sabatini
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
2023-12-04  1:07   ` Stefano Sabatini
2023-12-03  0:27 ` [FFmpeg-devel] [PATCH 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
2023-12-03 21:31 ` [FFmpeg-devel] [PATCH 1/7] avutil/tests/imgutils: factorize basic tests to new function Stefano Sabatini
2023-12-06  8:22   ` [FFmpeg-devel] [PATCH v2 " Marton Balint
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 2/7] avutil/tests/imgutils: add tests for av_image_fill_black() Marton Balint
2023-12-06 22:46       ` Stefano Sabatini
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 3/7] avutil/imgutils: fix av_image_fill_black() for some pixel formats Marton Balint
2023-12-06 22:47       ` Stefano Sabatini
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 4/7] avutil/imgutils: add support for 32bit pixel format for av_image_fill_black() Marton Balint
2023-12-06 22:48       ` Stefano Sabatini
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 5/7] avutil/imgutils: factorize a fill color function Marton Balint
2023-12-06 22:52       ` Stefano Sabatini
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 6/7] avutil/imgutils: add new function av_image_fill_color() Marton Balint
2023-12-06 22:53       ` Stefano Sabatini
2023-12-07 16:15       ` Anton Khirnov
2023-12-09 19:25         ` [FFmpeg-devel] [PATCH v3 " Marton Balint
2023-12-11 23:05           ` Stefano Sabatini
2023-12-12 18:45             ` Marton Balint
2023-12-06  8:22     ` [FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR Marton Balint
2023-12-06 22:57       ` Stefano Sabatini
2023-12-07  1:44       ` Ronald S. Bultje
2023-12-07 16:19         ` Anton Khirnov
2023-12-07 22:47           ` Marton Balint
2023-12-08  5:12             ` Rémi Denis-Courmont
2023-12-07  2:37       ` Vittorio Giovara
2023-12-07 16:30       ` Anton Khirnov
2023-12-07 23:11         ` Marton Balint
2023-12-11 20:49           ` Mark Thompson
2023-12-12 11:23           ` Anton Khirnov
2023-12-12 18:37             ` Marton Balint
2023-12-13  8:59               ` Anton Khirnov
2023-12-13 17:09                 ` Marton Balint
2023-12-14  8:03                   ` Anton Khirnov
2023-12-12 22:18             ` Michael Niedermayer
2023-12-06 22:43     ` [FFmpeg-devel] [PATCH v2 1/7] avutil/tests/imgutils: factorize basic tests to new function Stefano Sabatini

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git