1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-10 06:10:52 +02:00

tests/swscale: allow choosing specific flags and dither mode

So I can quickly iterate on the new swscale code.
This commit is contained in:
Niklas Haas
2025-03-04 14:12:10 +01:00
parent 35c091f4b7
commit 0e2742a693

View File

@@ -47,6 +47,8 @@ struct options {
int threads;
int iters;
int bench;
int flags;
int dither;
};
struct mode {
@@ -54,15 +56,15 @@ struct mode {
SwsDither dither;
};
const struct mode modes[] = {
{ SWS_FAST_BILINEAR },
{ SWS_BILINEAR },
{ SWS_BICUBIC },
{ SWS_X | SWS_BITEXACT },
{ SWS_POINT },
{ SWS_AREA | SWS_ACCURATE_RND },
{ SWS_BICUBIC | SWS_FULL_CHR_H_INT | SWS_FULL_CHR_H_INP },
{0}, // test defaults
const SwsFlags flags[] = {
SWS_FAST_BILINEAR,
SWS_BILINEAR,
SWS_BICUBIC,
SWS_X | SWS_BITEXACT,
SWS_POINT,
SWS_AREA | SWS_ACCURATE_RND,
SWS_BICUBIC | SWS_FULL_CHR_H_INT | SWS_FULL_CHR_H_INP,
0, // test defaults
};
static FFSFC64 prng_state;
@@ -277,13 +279,21 @@ static int run_self_tests(const AVFrame *ref, struct options opts)
continue;
for (int h = 0; h < FF_ARRAY_ELEMS(dst_h); h++)
for (int w = 0; w < FF_ARRAY_ELEMS(dst_w); w++)
for (int m = 0; m < FF_ARRAY_ELEMS(modes); m++) {
for (int f = 0; f < FF_ARRAY_ELEMS(flags); f++) {
struct mode mode = {
.flags = opts.flags >= 0 ? opts.flags : flags[f],
.dither = opts.dither >= 0 ? opts.dither : SWS_DITHER_AUTO,
};
if (ff_sfc64_get(&prng_state) > UINT64_MAX * opts.prob)
continue;
if (run_test(src_fmt, dst_fmt, dst_w[w], dst_h[h],
modes[m], opts, ref, NULL) < 0)
mode, opts, ref, NULL) < 0)
return -1;
if (opts.flags >= 0)
break;
}
}
}
@@ -344,6 +354,8 @@ int main(int argc, char **argv)
.threads = 1,
.iters = 1,
.prob = 1.0,
.flags = -1,
.dither = -1,
};
AVFrame *rgb = NULL, *ref = NULL;
@@ -368,6 +380,10 @@ int main(int argc, char **argv)
" Only test the specified source pixel format\n"
" -bench <iters>\n"
" Run benchmarks with the specified number of iterations. This mode also increases the size of the test images\n"
" -flags <flags>\n"
" Test with a specific combination of flags\n"
" -dither <mode>\n"
" Test with a specific dither mode\n"
" -threads <threads>\n"
" Use the specified number of threads\n"
" -cpuflags <cpuflags>\n"
@@ -409,6 +425,10 @@ int main(int argc, char **argv)
opts.iters = FFMAX(opts.iters, 1);
opts.w = 1920;
opts.h = 1080;
} else if (!strcmp(argv[i], "-flags")) {
opts.flags = strtol(argv[i + 1], NULL, 0);
} else if (!strcmp(argv[i], "-dither")) {
opts.dither = atoi(argv[i + 1]);
} else if (!strcmp(argv[i], "-threads")) {
opts.threads = atoi(argv[i + 1]);
} else if (!strcmp(argv[i], "-p")) {