summaryrefslogtreecommitdiffstats
path: root/libswscale/swscale.c
diff options
context:
space:
mode:
authorvitor <vitor@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-10-23 19:13:11 +0000
committervitor <vitor@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-10-23 19:13:11 +0000
commitf42e50f3679d7ce362d6ca5652dd90c6fd289073 (patch)
tree013eebe0ea413636db1f271eb8db18a546a20980 /libswscale/swscale.c
parente9b43bec0944b6a0882d0520d70edb5f4c7876f3 (diff)
downloadmpv-f42e50f3679d7ce362d6ca5652dd90c6fd289073.tar.bz2
mpv-f42e50f3679d7ce362d6ca5652dd90c6fd289073.tar.xz
Fix broken palette8to*.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27817 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libswscale/swscale.c')
-rw-r--r--libswscale/swscale.c41
1 files changed, 36 insertions, 5 deletions
diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index 8b899c4493..1ad488c57f 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -1729,10 +1729,12 @@ static int pal2rgbWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int sr
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 @@ SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat, int d
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 @@ int sws_scale(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
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);
+ }
}
}