changeset 30813:87acb5d9e4aa

Add support to BGR444/RGB444 foreign endian output in libswscale. Patch by Janusz Krzysztofik |jkrzyszt ^ tis icnet pl|.
author stefano
date Sat, 06 Mar 2010 11:27:31 +0000
parents 4c3685b029f7
children 9257c04720ed
files libswscale/swscale_internal.h libswscale/yuv2rgb.c
diffstat 2 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/libswscale/swscale_internal.h	Sat Mar 06 11:12:32 2010 +0000
+++ b/libswscale/swscale_internal.h	Sat Mar 06 11:27:31 2010 +0000
@@ -395,7 +395,8 @@
         || (x)==PIX_FMT_RGB565LE    \
         || (x)==PIX_FMT_RGB555BE    \
         || (x)==PIX_FMT_RGB555LE    \
-        || (x)==PIX_FMT_RGB444      \
+        || (x)==PIX_FMT_RGB444BE    \
+        || (x)==PIX_FMT_RGB444LE    \
         || (x)==PIX_FMT_RGB8        \
         || (x)==PIX_FMT_RGB4        \
         || (x)==PIX_FMT_RGB4_BYTE   \
@@ -410,7 +411,8 @@
         || (x)==PIX_FMT_BGR565LE    \
         || (x)==PIX_FMT_BGR555BE    \
         || (x)==PIX_FMT_BGR555LE    \
-        || (x)==PIX_FMT_BGR444      \
+        || (x)==PIX_FMT_BGR444BE    \
+        || (x)==PIX_FMT_BGR444LE    \
         || (x)==PIX_FMT_BGR8        \
         || (x)==PIX_FMT_BGR4        \
         || (x)==PIX_FMT_BGR4_BYTE   \
--- a/libswscale/yuv2rgb.c	Sat Mar 06 11:12:32 2010 +0000
+++ b/libswscale/yuv2rgb.c	Sat Mar 06 11:27:31 2010 +0000
@@ -630,15 +630,18 @@
                         || c->dstFormat==PIX_FMT_RGB565LE
                         || c->dstFormat==PIX_FMT_RGB555BE
                         || c->dstFormat==PIX_FMT_RGB555LE
-                        || c->dstFormat==PIX_FMT_RGB444
+                        || c->dstFormat==PIX_FMT_RGB444BE
+                        || c->dstFormat==PIX_FMT_RGB444LE
                         || c->dstFormat==PIX_FMT_RGB8
                         || c->dstFormat==PIX_FMT_RGB4
                         || c->dstFormat==PIX_FMT_RGB4_BYTE
                         || c->dstFormat==PIX_FMT_MONOBLACK;
     const int isNotNe =    c->dstFormat==PIX_FMT_NE(RGB565LE,RGB565BE)
                         || c->dstFormat==PIX_FMT_NE(RGB555LE,RGB555BE)
+                        || c->dstFormat==PIX_FMT_NE(RGB444LE,RGB444BE)
                         || c->dstFormat==PIX_FMT_NE(BGR565LE,BGR565BE)
-                        || c->dstFormat==PIX_FMT_NE(BGR555LE,BGR555BE);
+                        || c->dstFormat==PIX_FMT_NE(BGR555LE,BGR555BE)
+                        || c->dstFormat==PIX_FMT_NE(BGR444LE,BGR444BE);
     const int bpp = c->dstFormatBpp;
     uint8_t *y_table;
     uint16_t *y_table16;
@@ -745,6 +748,9 @@
             y_table16[i+2048] = (yval >> 4) << bbase;
             yb += cy;
         }
+        if (isNotNe)
+            for (i = 0; i < 1024*3; i++)
+                y_table16[i] = bswap_16(y_table16[i]);
         fill_table(c->table_rV, 2, crv, y_table16 + yoffs);
         fill_table(c->table_gU, 2, cgu, y_table16 + yoffs + 1024);
         fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2048);