Mercurial > mplayer.hg
changeset 28978:3aa3a63b8a83
Also test the alpha channel in swscale-example
author | sdrik |
---|---|
date | Fri, 20 Mar 2009 14:17:20 +0000 |
parents | 6601bf7365d5 |
children | 9fc0071c1d20 |
files | libswscale/swscale-example.c |
diffstat | 1 files changed, 22 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/libswscale/swscale-example.c Fri Mar 20 14:16:24 2009 +0000 +++ b/libswscale/swscale-example.c Fri Mar 20 14:17:20 2009 +0000 @@ -49,20 +49,20 @@ // test by ref -> src -> dst -> out & compare out against ref // ref & out are YV12 -static int doTest(uint8_t *ref[3], int refStride[3], int w, int h, int srcFormat, int dstFormat, +static int doTest(uint8_t *ref[4], int refStride[4], int w, int h, int srcFormat, int dstFormat, int srcW, int srcH, int dstW, int dstH, int flags){ - uint8_t *src[3]; - uint8_t *dst[3]; - uint8_t *out[3]; - int srcStride[3], dstStride[3]; + uint8_t *src[4]; + uint8_t *dst[4]; + uint8_t *out[4]; + int srcStride[4], dstStride[4]; int i; - uint64_t ssdY, ssdU, ssdV; + uint64_t ssdY, ssdU, ssdV, ssdA=0; struct SwsContext *srcContext = NULL, *dstContext = NULL, *outContext = NULL; int res; res = 0; - for (i=0; i<3; i++){ + for (i=0; i<4; i++){ // avoid stride % bpp != 0 if (srcFormat==PIX_FMT_RGB24 || srcFormat==PIX_FMT_BGR24) srcStride[i]= srcW*3; @@ -85,10 +85,10 @@ } } - srcContext= sws_getContext(w, h, PIX_FMT_YUV420P, srcW, srcH, srcFormat, flags, NULL, NULL, NULL); + srcContext= sws_getContext(w, h, PIX_FMT_YUVA420P, srcW, srcH, srcFormat, flags, NULL, NULL, NULL); if (!srcContext) { fprintf(stderr, "Failed to get %s ---> %s\n", - sws_format_name(PIX_FMT_YUV420P), + sws_format_name(PIX_FMT_YUVA420P), sws_format_name(srcFormat)); res = -1; @@ -103,11 +103,11 @@ goto end; } - outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUV420P, flags, NULL, NULL, NULL); + outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUVA420P, flags, NULL, NULL, NULL); if (!outContext) { fprintf(stderr, "Failed to get %s ---> %s\n", sws_format_name(dstFormat), - sws_format_name(PIX_FMT_YUV420P)); + sws_format_name(PIX_FMT_YUVA420P)); res = -1; goto end; @@ -122,17 +122,20 @@ ssdY= getSSD(ref[0], out[0], refStride[0], refStride[0], w, h); ssdU= getSSD(ref[1], out[1], refStride[1], refStride[1], (w+1)>>1, (h+1)>>1); ssdV= getSSD(ref[2], out[2], refStride[2], refStride[2], (w+1)>>1, (h+1)>>1); + if (isALPHA(srcFormat) && isALPHA(dstFormat)) + ssdA= getSSD(ref[3], out[3], refStride[3], refStride[3], w, h); if (srcFormat == PIX_FMT_GRAY8 || dstFormat==PIX_FMT_GRAY8) ssdU=ssdV=0; //FIXME check that output is really gray ssdY/= w*h; ssdU/= w*h/4; ssdV/= w*h/4; + ssdA/= w*h; - printf(" %s %dx%d -> %s %4dx%4d flags=%2d SSD=%5lld,%5lld,%5lld\n", + printf(" %s %dx%d -> %s %4dx%4d flags=%2d SSD=%5lld,%5lld,%5lld,%5lld\n", sws_format_name(srcFormat), srcW, srcH, sws_format_name(dstFormat), dstW, dstH, - flags, ssdY, ssdU, ssdV); + flags, ssdY, ssdU, ssdV, ssdA); fflush(stdout); end: @@ -141,7 +144,7 @@ sws_freeContext(dstContext); sws_freeContext(outContext); - for (i=0; i<3; i++){ + for (i=0; i<4; i++){ free(src[i]); free(dst[i]); free(out[i]); @@ -150,7 +153,7 @@ return res; } -static void selfTest(uint8_t *src[3], int stride[3], int w, int h){ +static void selfTest(uint8_t *src[4], int stride[4], int w, int h){ enum PixelFormat srcFormat, dstFormat; int srcW, srcH, dstW, dstH; int flags; @@ -190,14 +193,14 @@ uint8_t *rgb_data = malloc (W*H*4); uint8_t *rgb_src[3]= {rgb_data, NULL, NULL}; int rgb_stride[3]={4*W, 0, 0}; - uint8_t *data = malloc (3*W*H); - uint8_t *src[3]= {data, data+W*H, data+W*H*2}; - int stride[3]={W, W, W}; + uint8_t *data = malloc (4*W*H); + uint8_t *src[4]= {data, data+W*H, data+W*H*2, data+W*H*3}; + int stride[4]={W, W, W, W}; int x, y; struct SwsContext *sws; AVLFG rand; - sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUV420P, 2, NULL, NULL, NULL); + sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUVA420P, 2, NULL, NULL, NULL); av_lfg_init(&rand, 1);