OSDN Git Service

swscale-example: Check for Gray formats.
authorRamiro Polla <ramiro.polla@gmail.com>
Thu, 13 Aug 2009 11:33:18 +0000 (11:33 +0000)
committerRamiro Polla <ramiro.polla@gmail.com>
Thu, 13 Aug 2009 11:33:18 +0000 (11:33 +0000)
Originally committed as revision 29503 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale

libswscale/swscale-example.c

index f90e2f3..89fdf5f 100644 (file)
 /* 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 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h, int srcFormat
     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 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h, int srcFormat
     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;