From a2a9a53d3f3cf5eaf08e54239e9b07fbf3d8a47c Mon Sep 17 00:00:00 2001 From: stefano Date: Thu, 4 Mar 2010 00:31:10 +0000 Subject: 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. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30825 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libswscale/swscale-test-all.sh | 11 +++++++++++ libswscale/swscale-test.c | 42 ++++++++++++++++++++++++------------------ 2 files changed, 35 insertions(+), 18 deletions(-) create mode 100644 libswscale/swscale-test-all.sh diff --git a/libswscale/swscale-test-all.sh b/libswscale/swscale-test-all.sh new file mode 100644 index 0000000000..569c9020eb --- /dev/null +++ b/libswscale/swscale-test-all.sh @@ -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 diff --git a/libswscale/swscale-test.c b/libswscale/swscale-test.c index 887973a40e..2ece78a254 100644 --- a/libswscale/swscale-test.c +++ b/libswscale/swscale-test.c @@ -25,9 +25,12 @@ #include #undef HAVE_AV_CONFIG_H + +#include "libavutil/log.h" #include "libavutil/mem.h" #include "libavutil/avutil.h" #include "libavutil/lfg.h" +#include "libavutil/pixdesc.h" #include "swscale.h" /* HACK Duplicated from swscale_internal.h. @@ -186,27 +189,16 @@ end: 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, SWS_BILINEAR, SWS_BICUBIC, SWS_X , SWS_POINT , SWS_AREA, 0 }; const int srcW = w; const int srcH = h; + int i, j, k, res = 0; const int dstW[] = { srcW - srcW/3, srcW, srcW + srcW/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", 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 (k = 0; flags[k] && !res; k++) 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 @@ -235,12 +225,28 @@ int main(int argc, char **argv) int stride[4]={W, W, W, W}; int x, y; struct SwsContext *sws; + enum PixelFormat srcFmt, dstFmt; 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) 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); @@ -253,7 +259,7 @@ int main(int argc, char **argv) sws_freeContext(sws); av_free(rgb_data); - selfTest(src, stride, W, H); + selfTest(src, stride, srcFmt, dstFmt, W, H); av_free(data); return 0; -- cgit v1.2.3