Mercurial > mplayer.hg
changeset 30798:91f90077acf6
Support BGR555, BGR565, RGB555 and RGB565 foreign endian output in
libswscale.
Patch by Alexis Ballier, alexis D ballier A gmail
author | cehoyos |
---|---|
date | Thu, 04 Mar 2010 16:57:04 +0000 |
parents | 5c32244c0ae1 |
children | 76f3878f34fd |
files | libswscale/swscale.c libswscale/swscale_internal.h libswscale/yuv2rgb.c |
diffstat | 3 files changed, 28 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/libswscale/swscale.c Thu Mar 04 15:58:09 2010 +0000 +++ b/libswscale/swscale.c Thu Mar 04 16:57:04 2010 +0000 @@ -765,8 +765,10 @@ dest+=6;\ }\ break;\ - case PIX_FMT_RGB565:\ - case PIX_FMT_BGR565:\ + case PIX_FMT_RGB565BE:\ + case PIX_FMT_RGB565LE:\ + case PIX_FMT_BGR565BE:\ + case PIX_FMT_BGR565LE:\ {\ const int dr1= dither_2x2_8[y&1 ][0];\ const int dg1= dither_2x2_4[y&1 ][0];\ @@ -780,8 +782,10 @@ }\ }\ break;\ - case PIX_FMT_RGB555:\ - case PIX_FMT_BGR555:\ + case PIX_FMT_RGB555BE:\ + case PIX_FMT_RGB555LE:\ + case PIX_FMT_BGR555BE:\ + case PIX_FMT_BGR555LE:\ {\ const int dr1= dither_2x2_8[y&1 ][0];\ const int dg1= dither_2x2_8[y&1 ][1];\
--- a/libswscale/swscale_internal.h Thu Mar 04 15:58:09 2010 +0000 +++ b/libswscale/swscale_internal.h Thu Mar 04 16:57:04 2010 +0000 @@ -391,8 +391,10 @@ || (x)==PIX_FMT_RGB32 \ || (x)==PIX_FMT_RGB32_1 \ || (x)==PIX_FMT_RGB24 \ - || (x)==PIX_FMT_RGB565 \ - || (x)==PIX_FMT_RGB555 \ + || (x)==PIX_FMT_RGB565BE \ + || (x)==PIX_FMT_RGB565LE \ + || (x)==PIX_FMT_RGB555BE \ + || (x)==PIX_FMT_RGB555LE \ || (x)==PIX_FMT_RGB8 \ || (x)==PIX_FMT_RGB4 \ || (x)==PIX_FMT_RGB4_BYTE \ @@ -403,8 +405,10 @@ (x)==PIX_FMT_BGR32 \ || (x)==PIX_FMT_BGR32_1 \ || (x)==PIX_FMT_BGR24 \ - || (x)==PIX_FMT_BGR565 \ - || (x)==PIX_FMT_BGR555 \ + || (x)==PIX_FMT_BGR565BE \ + || (x)==PIX_FMT_BGR565LE \ + || (x)==PIX_FMT_BGR555BE \ + || (x)==PIX_FMT_BGR555LE \ || (x)==PIX_FMT_BGR8 \ || (x)==PIX_FMT_BGR4 \ || (x)==PIX_FMT_BGR4_BYTE \
--- a/libswscale/yuv2rgb.c Thu Mar 04 15:58:09 2010 +0000 +++ b/libswscale/yuv2rgb.c Thu Mar 04 16:57:04 2010 +0000 @@ -33,6 +33,7 @@ #include "swscale.h" #include "swscale_internal.h" #include "libavutil/x86_cpu.h" +#include "libavutil/bswap.h" extern const uint8_t dither_8x8_32[8][8]; extern const uint8_t dither_8x8_73[8][8]; @@ -596,12 +597,18 @@ const int isRgb = c->dstFormat==PIX_FMT_RGB32 || c->dstFormat==PIX_FMT_RGB32_1 || c->dstFormat==PIX_FMT_BGR24 - || c->dstFormat==PIX_FMT_RGB565 - || c->dstFormat==PIX_FMT_RGB555 + || c->dstFormat==PIX_FMT_RGB565BE + || c->dstFormat==PIX_FMT_RGB565LE + || c->dstFormat==PIX_FMT_RGB555BE + || c->dstFormat==PIX_FMT_RGB555LE || 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(BGR565LE,BGR565BE) + || c->dstFormat==PIX_FMT_NE(BGR555LE,BGR555BE); const int bpp = c->dstFormatBpp; uint8_t *y_table; uint16_t *y_table16; @@ -709,6 +716,9 @@ y_table16[i+2048] = (yval >> 3) << 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);