|
|
|
@@ -886,12 +886,13 @@ static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int nb_components, int p |
|
|
|
static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor, |
|
|
|
int point_transform, int nb_components) |
|
|
|
{ |
|
|
|
int i, mb_x, mb_y; |
|
|
|
int i, mb_x, mb_y, mask; |
|
|
|
int bits= (s->bits+7)&~7; |
|
|
|
int resync_mb_y = 0; |
|
|
|
int resync_mb_x = 0; |
|
|
|
|
|
|
|
point_transform += bits - s->bits; |
|
|
|
mask = ((1 << s->bits) - 1) << point_transform; |
|
|
|
|
|
|
|
av_assert0(nb_components>=1 && nb_components<=4); |
|
|
|
|
|
|
|
@@ -944,7 +945,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 + point_transform); |
|
|
|
pred &= mask; |
|
|
|
*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 +965,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 + point_transform); |
|
|
|
pred &= mask; |
|
|
|
*ptr16= pred + (dc << point_transform); |
|
|
|
} |
|
|
|
if (++x == h) { |
|
|
|
@@ -1000,13 +1001,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 + point_transform); |
|
|
|
pred &= mask; |
|
|
|
*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 + point_transform); |
|
|
|
pred &= mask; |
|
|
|
*ptr16= pred + (dc << point_transform); |
|
|
|
} |
|
|
|
|
|
|
|
|