changeset 27555:bf2638aa89b4

Support mono as input format.
author michael
date Fri, 12 Sep 2008 16:46:38 +0000
parents 021a1889cc26
children ff8cabc7f18f
files libswscale/swscale.c libswscale/swscale_template.c
diffstat 2 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libswscale/swscale.c	Fri Sep 12 16:01:17 2008 +0000
+++ b/libswscale/swscale.c	Fri Sep 12 16:46:38 2008 +0000
@@ -127,6 +127,8 @@
         || (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     \
--- a/libswscale/swscale_template.c	Fri Sep 12 16:01:17 2008 +0000
+++ b/libswscale/swscale_template.c	Fri Sep 12 16:46:38 2008 +0000
@@ -2143,6 +2143,16 @@
     }
 }
 
+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 @@
         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 @@
         src1= formatConvBuffer;
         src2= formatConvBuffer+VOFW;
     }
-    else if (isGray(srcFormat))
+    else if (isGray(srcFormat) || srcFormat==PIX_FMT_MONOBLACK || PIX_FMT_MONOWHITE)
     {
         return;
     }