mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-11 17:55:21 +00:00
Make swscale-test take in input the name of the input and the output
format. Make swscale-test only perform the test from the input to the output format rather than perform all. Also implement swscale-test-all.sh, for performing all the tests. Improve flexibility of the swscale-test tool, this way is simpler to perform only a subset of tests. Originally committed as revision 30825 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
This commit is contained in:
parent
ce7c717900
commit
3fec44c640
11
libswscale/swscale-test-all.sh
Normal file
11
libswscale/swscale-test-all.sh
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
FFMPEG=../ffmpeg
|
||||||
|
|
||||||
|
input_pix_fmts=$($FFMPEG -pix_fmts | sed -ne '9,$p' | grep '^I' | cut -d" " -f2)
|
||||||
|
output_pix_fmts=$($FFMPEG -pix_fmts | sed -ne '9,$p' | grep '^.O' | cut -d" " -f2)
|
||||||
|
|
||||||
|
for input_pix_fmt in $input_pix_fmts; do
|
||||||
|
for output_pix_fmt in $output_pix_fmts; do
|
||||||
|
swscale-test $input_pix_fmt $output_pix_fmt
|
||||||
|
done
|
||||||
|
done
|
@ -25,9 +25,12 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#undef HAVE_AV_CONFIG_H
|
#undef HAVE_AV_CONFIG_H
|
||||||
|
|
||||||
|
#include "libavutil/log.h"
|
||||||
#include "libavutil/mem.h"
|
#include "libavutil/mem.h"
|
||||||
#include "libavutil/avutil.h"
|
#include "libavutil/avutil.h"
|
||||||
#include "libavutil/lfg.h"
|
#include "libavutil/lfg.h"
|
||||||
|
#include "libavutil/pixdesc.h"
|
||||||
#include "swscale.h"
|
#include "swscale.h"
|
||||||
|
|
||||||
/* HACK Duplicated from swscale_internal.h.
|
/* HACK Duplicated from swscale_internal.h.
|
||||||
@ -186,27 +189,16 @@ end:
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h)
|
static void selfTest(uint8_t *ref[4], int refStride[4], enum PixelFormat srcFormat, enum PixelFormat dstFormat, int w, int h)
|
||||||
{
|
{
|
||||||
const int flags[] = { SWS_FAST_BILINEAR,
|
const int flags[] = { SWS_FAST_BILINEAR,
|
||||||
SWS_BILINEAR, SWS_BICUBIC,
|
SWS_BILINEAR, SWS_BICUBIC,
|
||||||
SWS_X , SWS_POINT , SWS_AREA, 0 };
|
SWS_X , SWS_POINT , SWS_AREA, 0 };
|
||||||
const int srcW = w;
|
const int srcW = w;
|
||||||
const int srcH = h;
|
const int srcH = h;
|
||||||
|
int i, j, k, res = 0;
|
||||||
const int dstW[] = { srcW - srcW/3, srcW, srcW + srcW/3, 0 };
|
const int dstW[] = { srcW - srcW/3, srcW, srcW + srcW/3, 0 };
|
||||||
const int dstH[] = { srcH - srcH/3, srcH, srcH + srcH/3, 0 };
|
const int dstH[] = { srcH - srcH/3, srcH, srcH + srcH/3, 0 };
|
||||||
enum PixelFormat srcFormat, dstFormat;
|
|
||||||
|
|
||||||
for (srcFormat = 0; srcFormat < PIX_FMT_NB; srcFormat++) {
|
|
||||||
if (!sws_isSupportedInput(srcFormat) || !sws_isSupportedOutput(srcFormat))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
for (dstFormat = 0; dstFormat < PIX_FMT_NB; dstFormat++) {
|
|
||||||
int i, j, k;
|
|
||||||
int res = 0;
|
|
||||||
|
|
||||||
if (!sws_isSupportedInput(dstFormat) || !sws_isSupportedOutput(dstFormat))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
printf("%s -> %s\n",
|
printf("%s -> %s\n",
|
||||||
sws_format_name(srcFormat),
|
sws_format_name(srcFormat),
|
||||||
@ -217,9 +209,7 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h)
|
|||||||
for (j = 0; dstH[j] && !res; j++)
|
for (j = 0; dstH[j] && !res; j++)
|
||||||
for (k = 0; flags[k] && !res; k++)
|
for (k = 0; flags[k] && !res; k++)
|
||||||
res = doTest(ref, refStride, w, h, srcFormat, dstFormat,
|
res = doTest(ref, refStride, w, h, srcFormat, dstFormat,
|
||||||
srcW, srcH, dstW[i], dstH[j], flags[k]);
|
srcW, srcH, dstW[i], dstH[j], flags[k]|SWS_PRINT_INFO);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define W 96
|
#define W 96
|
||||||
@ -235,12 +225,28 @@ int main(int argc, char **argv)
|
|||||||
int stride[4]={W, W, W, W};
|
int stride[4]={W, W, W, W};
|
||||||
int x, y;
|
int x, y;
|
||||||
struct SwsContext *sws;
|
struct SwsContext *sws;
|
||||||
|
enum PixelFormat srcFmt, dstFmt;
|
||||||
AVLFG rand;
|
AVLFG rand;
|
||||||
|
|
||||||
|
av_log_set_level(AV_LOG_INFO);
|
||||||
|
|
||||||
|
if (argc < 3) {
|
||||||
|
fprintf(stderr, "Usage: swscale-test SRC_PIX_FMT DST_PIX_FMT\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ((srcFmt = av_get_pix_fmt(argv[1])) == PIX_FMT_NONE) {
|
||||||
|
fprintf(stderr, "Unknown pixel input format name: '%s'\n", argv[1]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ((dstFmt = av_get_pix_fmt(argv[2])) == PIX_FMT_NONE) {
|
||||||
|
fprintf(stderr, "Unknown pixel output format name: '%s'\n", argv[2]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
if (!rgb_data || !data)
|
if (!rgb_data || !data)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUVA420P, SWS_BILINEAR, NULL, NULL, NULL);
|
sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUVA420P,
|
||||||
|
SWS_BILINEAR|SWS_PRINT_INFO, NULL, NULL, NULL);
|
||||||
|
|
||||||
av_lfg_init(&rand, 1);
|
av_lfg_init(&rand, 1);
|
||||||
|
|
||||||
@ -253,7 +259,7 @@ int main(int argc, char **argv)
|
|||||||
sws_freeContext(sws);
|
sws_freeContext(sws);
|
||||||
av_free(rgb_data);
|
av_free(rgb_data);
|
||||||
|
|
||||||
selfTest(src, stride, W, H);
|
selfTest(src, stride, srcFmt, dstFmt, W, H);
|
||||||
av_free(data);
|
av_free(data);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user