[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