Support mono as input format.
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 12 Sep 2008 16:46:38 +0000 (16:46 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 12 Sep 2008 16:46:38 +0000 (16:46 +0000)
Originally committed as revision 27587 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale

libswscale/swscale.c
libswscale/swscale_template.c

index 2f9d306..c938306 100644 (file)
@@ -127,6 +127,8 @@ unsigned swscale_version(void)
         || (x)==PIX_FMT_BGR4_BYTE   \
         || (x)==PIX_FMT_RGB4_BYTE   \
         || (x)==PIX_FMT_YUV440P     \
+        || (x)==PIX_FMT_MONOWHITE   \
+        || (x)==PIX_FMT_MONOBLACK   \
     )
 #define isSupportedOut(x)   (       \
            (x)==PIX_FMT_YUV420P     \
index 9b3a4dc..3ff9c2b 100644 (file)
@@ -2143,6 +2143,16 @@ static inline void RENAME(palToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1,
     }
 }
 
+static inline void RENAME(mono2Y)(uint8_t *dst, uint8_t *src, long width, int format)
+{
+    int i, j;
+    for (i=0; i<width/8; i++){
+        int d= format == PIX_FMT_MONOBLACK ? src[i] : ~src[i];
+        for(j=7; j>=0; j--)
+            dst[i]= ((d>>j)&1)*255;
+    }
+}
+
 // bilinear / bicubic scaling
 static inline void RENAME(hScale)(int16_t *dst, int dstW, uint8_t *src, int srcW, int xInc,
                                   int16_t *filter, int16_t *filterPos, long filterSize)
@@ -2398,6 +2408,11 @@ static inline void RENAME(hyscale)(SwsContext *c, uint16_t *dst, long dstWidth,
         RENAME(palToY)(formatConvBuffer, src, srcW, (uint32_t*)pal);
         src= formatConvBuffer;
     }
+    else if (srcFormat==PIX_FMT_MONOBLACK ||srcFormat==PIX_FMT_MONOWHITE)
+    {
+        RENAME(mono2Y)(formatConvBuffer, src, srcW, srcFormat);
+        src= formatConvBuffer;
+    }
 
 #ifdef HAVE_MMX
     // Use the new MMX scaler if the MMX2 one can't be used (it is faster than the x86 ASM one).
@@ -2660,7 +2675,7 @@ inline static void RENAME(hcscale)(SwsContext *c, uint16_t *dst, long dstWidth,
         src1= formatConvBuffer;
         src2= formatConvBuffer+VOFW;
     }
-    else if (isGray(srcFormat))
+    else if (isGray(srcFormat) || srcFormat==PIX_FMT_MONOBLACK || PIX_FMT_MONOWHITE)
     {
         return;
     }