diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2008-09-04 21:59:15 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2008-09-04 21:59:15 +0000 |
commit | 9990e4269c37d77a26777a98e42c59179bdda7fb (patch) | |
tree | 21355d417f8bf71e09d31e56d7b1807f672579a1 /libswscale/yuv2rgb.c | |
parent | 6b682df2337eeec0fceafc1a54b8c7d1804d03cf (diff) | |
download | ffmpeg-9990e4269c37d77a26777a98e42c59179bdda7fb.tar.gz |
Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
Fixes issue248.
Originally committed as revision 27522 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
Diffstat (limited to 'libswscale/yuv2rgb.c')
-rw-r--r-- | libswscale/yuv2rgb.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c index c177cba0c1..5aa42c046c 100644 --- a/libswscale/yuv2rgb.c +++ b/libswscale/yuv2rgb.c @@ -644,6 +644,8 @@ SwsFunc yuv2rgb_get_func_ptr (SwsContext *c) av_log(c, AV_LOG_WARNING, "No accelerated colorspace conversion found.\n"); switch(c->dstFormat){ + case PIX_FMT_BGR32_1: + case PIX_FMT_RGB32_1: case PIX_FMT_BGR32: case PIX_FMT_RGB32: return yuv2rgb_c_32; case PIX_FMT_RGB24: return yuv2rgb_c_24_rgb; @@ -676,6 +678,7 @@ static int div_round (int dividend, int divisor) int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation) { 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 @@ -684,7 +687,7 @@ int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, || c->dstFormat==PIX_FMT_RGB4_BYTE || c->dstFormat==PIX_FMT_MONOBLACK; const int bpp = fmt_depth(c->dstFormat); - int i; + int i, base; uint8_t table_Y[1024]; uint32_t *table_32 = 0; uint16_t *table_16 = 0; @@ -733,6 +736,7 @@ int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, switch (bpp) { case 32: table_start= table_32 = av_malloc ((197 + 2*682 + 256 + 132) * sizeof (uint32_t)); + base= (c->dstFormat == PIX_FMT_RGB32_1 || c->dstFormat == PIX_FMT_BGR32_1) ? 8 : 0; entry_size = sizeof (uint32_t); table_r = table_32 + 197; @@ -740,11 +744,11 @@ int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, table_g = table_32 + 197 + 2*682; for (i = -197; i < 256+197; i++) - ((uint32_t *)table_r)[i] = table_Y[i+384] << (isRgb ? 16 : 0); + ((uint32_t *)table_r)[i] = table_Y[i+384] << ((isRgb ? 16 : 0) + base); for (i = -132; i < 256+132; i++) - ((uint32_t *)table_g)[i] = table_Y[i+384] << 8; + ((uint32_t *)table_g)[i] = table_Y[i+384] << (8 + base); for (i = -232; i < 256+232; i++) - ((uint32_t *)table_b)[i] = table_Y[i+384] << (isRgb ? 0 : 16); + ((uint32_t *)table_b)[i] = table_Y[i+384] << ((isRgb ? 0 : 16) + base); break; case 24: |