Mercurial > mplayer.hg
changeset 29461:1429547613d0
swscale-example: Check for Gray formats.
author | ramiro |
---|---|
date | Thu, 13 Aug 2009 11:33:18 +0000 |
parents | d9be78936c0c |
children | db2d76bfaaa6 |
files | libswscale/swscale-example.c |
diffstat | 1 files changed, 9 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/libswscale/swscale-example.c Wed Aug 12 15:20:14 2009 +0000 +++ b/libswscale/swscale-example.c Thu Aug 13 11:33:18 2009 +0000 @@ -32,6 +32,11 @@ /* HACK Duplicated from swscale_internal.h. * Should be removed when a cleaner pixel format system exists. */ const char *sws_format_name(enum PixelFormat format); +#define isGray(x) ( \ + (x)==PIX_FMT_GRAY8 \ + || (x)==PIX_FMT_GRAY16BE \ + || (x)==PIX_FMT_GRAY16LE \ + ) #define isALPHA(x) ( \ (x)==PIX_FMT_BGR32 \ || (x)==PIX_FMT_BGR32_1 \ @@ -66,7 +71,7 @@ uint8_t *out[4] = {0}; int srcStride[4], dstStride[4]; int i; - uint64_t ssdY, ssdU, ssdV, ssdA=0; + uint64_t ssdY, ssdU=0, ssdV=0, ssdA=0; struct SwsContext *srcContext = NULL, *dstContext = NULL, *outContext = NULL; int res; @@ -134,13 +139,14 @@ sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride); ssdY= getSSD(ref[0], out[0], refStride[0], refStride[0], w, h); + if (!isGray(srcFormat) && !isGray(dstFormat)) { + //FIXME check that output is really gray 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;