avcodec/mjpegdec: fix yuv ljpeg prediction 5/6/7 with point transforms
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 4 Sep 2013 23:25:59 +0000 (01:25 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 4 Sep 2013 23:39:20 +0000 (01:39 +0200)
Fixes Ticket2826

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/mjpegdec.c

index 8b48ea2..c18502b 100644 (file)
@@ -944,7 +944,7 @@ static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor,
 
                         if (s->interlaced && s->bottom_field)
                             ptr += linesize >> 1;
-                        pred &= (-1)<<(8-s->bits);
+                        pred &= (-1)<<(8 - s->bits + point_transform);
                         *ptr= pred + (dc << point_transform);
                         }else{
                             ptr16 = (uint16_t*)(s->picture.data[c] + 2*(linesize * (v * mb_y + y)) + 2*(h * mb_x + x)); //FIXME optimize this crap
@@ -964,7 +964,7 @@ static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor,
 
                             if (s->interlaced && s->bottom_field)
                                 ptr16 += linesize >> 1;
-                            pred &= (-1)<<(16-s->bits);
+                            pred &= (-1)<<(16 - s->bits + point_transform);
                             *ptr16= pred + (dc << point_transform);
                         }
                         if (++x == h) {
@@ -1000,13 +1000,13 @@ static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor,
                               (h * mb_x + x); //FIXME optimize this crap
                             PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
 
-                            pred &= (-1)<<(8-s->bits);
+                            pred &= (-1)<<(8 - s->bits + point_transform);
                             *ptr = pred + (dc << point_transform);
                         }else{
                             ptr16 = (uint16_t*)(s->picture.data[c] + 2*(linesize * (v * mb_y + y)) + 2*(h * mb_x + x)); //FIXME optimize this crap
                             PREDICT(pred, ptr16[-linesize-1], ptr16[-linesize], ptr16[-1], predictor);
 
-                            pred &= (-1)<<(16-s->bits);
+                            pred &= (-1)<<(16 - s->bits + point_transform);
                             *ptr16= pred + (dc << point_transform);
                         }