[FFmpeg-devel] [PATCH 2/7] avutil/tests/imgutils: add tests for av_image_fill_black()

Stefano Sabatini stefasab at gmail.com
Mon Dec 4 01:47:17 EET 2023


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


More information about the ffmpeg-devel mailing list