summaryrefslogtreecommitdiffstats
path: root/libswscale/swscale.c
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-09-16 03:49:54 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-09-16 03:49:54 +0000
commite4a71d081875ccb46e4e808b5e738f8b867df355 (patch)
tree800d51c667b438da2dc7c277fe2bd24e2c2dfcff /libswscale/swscale.c
parentd17f5c5c72f9d9207db83908117e07773ac9a131 (diff)
downloadmpv-e4a71d081875ccb46e4e808b5e738f8b867df355.tar.bz2
mpv-e4a71d081875ccb46e4e808b5e738f8b867df355.tar.xz
Fix segfault with rgb24 and full_internal_chroma due to non-existing alpha
byte being written after the array. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27628 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libswscale/swscale.c')
-rw-r--r--libswscale/swscale.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index 56a349c811..a7c42c8371 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -905,29 +905,34 @@ static inline void yuv2rgbXinC_full(SwsContext *c, int16_t *lumFilter, int16_t *
{
int i;
int step= fmt_depth(c->dstFormat)/8;
+ int aidx= 3;
switch(c->dstFormat){
case PIX_FMT_ARGB:
dest++;
+ aidx= 0;
case PIX_FMT_RGB24:
+ aidx--;
case PIX_FMT_RGBA:
YSCALE_YUV_2_RGBX_FULL_C(1<<21)
+ dest[aidx]= 0;
dest[0]= R>>22;
dest[1]= G>>22;
dest[2]= B>>22;
- dest[3]= 0;
dest+= step;
}
break;
case PIX_FMT_ABGR:
dest++;
+ aidx= 0;
case PIX_FMT_BGR24:
+ aidx--;
case PIX_FMT_BGRA:
YSCALE_YUV_2_RGBX_FULL_C(1<<21)
+ dest[aidx]= 0;
dest[0]= B>>22;
dest[1]= G>>22;
dest[2]= R>>22;
- dest[3]= 0;
dest+= step;
}
break;