diff --git a/libswscale/swscale-test.c b/libswscale/swscale-test.c index dc4f78e2e7..1ea240d387 100644 --- a/libswscale/swscale-test.c +++ b/libswscale/swscale-test.c @@ -242,7 +242,9 @@ 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], int w, int h, + enum PixelFormat srcFormat_in, + enum PixelFormat dstFormat_in) { const int flags[] = { SWS_FAST_BILINEAR, SWS_BILINEAR, SWS_BICUBIC, @@ -253,11 +255,13 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h) const int dstH[] = { srcH - srcH/3, srcH, srcH + srcH/3, 0 }; enum PixelFormat srcFormat, dstFormat; - for (srcFormat = 0; srcFormat < PIX_FMT_NB; srcFormat++) { + for (srcFormat = srcFormat_in != PIX_FMT_NONE ? srcFormat_in : 0; + srcFormat < PIX_FMT_NB; srcFormat++) { if (!sws_isSupportedInput(srcFormat) || !sws_isSupportedOutput(srcFormat)) continue; - for (dstFormat = 0; dstFormat < PIX_FMT_NB; dstFormat++) { + for (dstFormat = dstFormat_in != PIX_FMT_NONE ? dstFormat_in : 0; + dstFormat < PIX_FMT_NB; dstFormat++) { int i, j, k; int res = 0; @@ -277,11 +281,17 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h) srcW, srcH, dstW[i], dstH[j], flags[k], NULL); } + if (dstFormat_in != PIX_FMT_NONE) + break; } + if (srcFormat_in != PIX_FMT_NONE) + break; } } -static int fileTest(uint8_t *ref[4], int refStride[4], int w, int h, FILE *fp) +static int fileTest(uint8_t *ref[4], int refStride[4], int w, int h, FILE *fp, + enum PixelFormat srcFormat_in, + enum PixelFormat dstFormat_in) { char buf[256]; @@ -312,6 +322,9 @@ static int fileTest(uint8_t *ref[4], int refStride[4], int w, int h, FILE *fp) fprintf(stderr, "malformed input file\n"); return -1; } + if ((srcFormat_in != PIX_FMT_NONE && srcFormat_in != srcFormat) || + (dstFormat_in != PIX_FMT_NONE && dstFormat_in != dstFormat)) + continue; if (ret != 12) { printf("%s", buf); continue; @@ -331,6 +344,8 @@ static int fileTest(uint8_t *ref[4], int refStride[4], int w, int h, FILE *fp) int main(int argc, char **argv) { + enum PixelFormat srcFormat = PIX_FMT_NONE; + enum PixelFormat dstFormat = PIX_FMT_NONE; uint8_t *rgb_data = av_malloc (W*H*4); uint8_t *rgb_src[3]= {rgb_data, NULL, NULL}; int rgb_stride[3]={4*W, 0, 0}; @@ -368,9 +383,21 @@ int main(int argc, char **argv) fprintf(stderr, "could not open '%s'\n", argv[i+1]); goto error; } - res = fileTest(src, stride, W, H, fp); + res = fileTest(src, stride, W, H, fp, srcFormat, dstFormat); fclose(fp); goto end; + } else if (!strcmp(argv[i], "-src")) { + srcFormat = av_get_pix_fmt(argv[i+1]); + if (srcFormat == PIX_FMT_NONE) { + fprintf(stderr, "invalid pixel format %s\n", argv[i+1]); + return -1; + } + } else if (!strcmp(argv[i], "-dst")) { + dstFormat = av_get_pix_fmt(argv[i+1]); + if (dstFormat == PIX_FMT_NONE) { + fprintf(stderr, "invalid pixel format %s\n", argv[i+1]); + return -1; + } } else { bad_option: fprintf(stderr, "bad option or argument missing (%s)\n", argv[i]); @@ -378,7 +405,7 @@ bad_option: } } - selfTest(src, stride, W, H); + selfTest(src, stride, W, H, srcFormat, dstFormat); end: res = 0; error: