diff libswscale/swscale.c @ 27783:3a18c8bdb555

Fix broken palette8to*.
author vitor
date Thu, 23 Oct 2008 19:13:11 +0000
parents 7b83cbade239
children a57f38e92ed5
line wrap: on
line diff
--- a/libswscale/swscale.c	Thu Oct 23 16:23:42 2008 +0000
+++ b/libswscale/swscale.c	Thu Oct 23 19:13:11 2008 +0000
@@ -1729,10 +1729,12 @@
                sws_format_name(srcFormat), sws_format_name(dstFormat));
 
     switch(dstFormat){
-    case PIX_FMT_RGB32: conv = palette8torgb32; break;
-    case PIX_FMT_BGR32: conv = palette8tobgr32; break;
-    case PIX_FMT_RGB24: conv = palette8torgb24; break;
-    case PIX_FMT_BGR24: conv = palette8tobgr24; break;
+    case PIX_FMT_RGB32  : conv = palette8topacked32; break;
+    case PIX_FMT_BGR32  : conv = palette8topacked32; break;
+    case PIX_FMT_BGR32_1: conv = palette8topacked32; break;
+    case PIX_FMT_RGB32_1: conv = palette8topacked32; break;
+    case PIX_FMT_RGB24  : conv = palette8topacked24; break;
+    case PIX_FMT_BGR24  : conv = palette8topacked24; break;
     default: av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
                     sws_format_name(srcFormat), sws_format_name(dstFormat)); break;
     }
@@ -2343,8 +2345,10 @@
 
         if ((usePal(srcFormat) && (
                  dstFormat == PIX_FMT_RGB32 ||
+                 dstFormat == PIX_FMT_RGB32_1 ||
                  dstFormat == PIX_FMT_RGB24 ||
                  dstFormat == PIX_FMT_BGR32 ||
+                 dstFormat == PIX_FMT_BGR32_1 ||
                  dstFormat == PIX_FMT_BGR24)))
              c->swScale= pal2rgbWrapper;
 
@@ -2739,7 +2743,34 @@
             u= av_clip_uint8((RU*r + GU*g + BU*b + (257<<(RGB2YUV_SHIFT-1)))>>RGB2YUV_SHIFT);
             v= av_clip_uint8((RV*r + GV*g + BV*b + (257<<(RGB2YUV_SHIFT-1)))>>RGB2YUV_SHIFT);
             c->pal_yuv[i]= y + (u<<8) + (v<<16);
-            c->pal_rgb[i]= b + (g<<8) + (r<<16);
+
+
+            switch(c->dstFormat) {
+            case PIX_FMT_BGR32:
+#ifndef WORDS_BIGENDIAN
+            case PIX_FMT_RGB24:
+#endif
+                c->pal_rgb[i]=  r + (g<<8) + (b<<16);
+                break;
+            case PIX_FMT_BGR32_1:
+#ifdef  WORDS_BIGENDIAN
+            case PIX_FMT_BGR24:
+#endif
+                c->pal_rgb[i]= (r + (g<<8) + (b<<16)) << 8;
+                break;
+            case PIX_FMT_RGB32_1:
+#ifdef  WORDS_BIGENDIAN
+            case PIX_FMT_RGB24:
+#endif
+                c->pal_rgb[i]= (b + (g<<8) + (r<<16)) << 8;
+                break;
+            case PIX_FMT_RGB32:
+#ifndef WORDS_BIGENDIAN
+            case PIX_FMT_BGR24:
+#endif
+            default:
+                c->pal_rgb[i]=  b + (g<<8) + (r<<16);
+            }
         }
     }