|
|
|
@@ -1197,7 +1197,7 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, |
|
|
|
int mb_bitmask_size, |
|
|
|
const AVFrame *reference) |
|
|
|
{ |
|
|
|
int i, mb_x, mb_y; |
|
|
|
int i, mb_x, mb_y, chroma_h_shift, chroma_v_shift, chroma_width, chroma_height; |
|
|
|
uint8_t *data[MAX_COMPONENTS]; |
|
|
|
const uint8_t *reference_data[MAX_COMPONENTS]; |
|
|
|
int linesize[MAX_COMPONENTS]; |
|
|
|
@@ -1214,6 +1214,11 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, |
|
|
|
|
|
|
|
s->restart_count = 0; |
|
|
|
|
|
|
|
av_pix_fmt_get_chroma_sub_sample(s->avctx->pix_fmt, &chroma_h_shift, |
|
|
|
&chroma_v_shift); |
|
|
|
chroma_width = FF_CEIL_RSHIFT(s->width, chroma_h_shift); |
|
|
|
chroma_height = FF_CEIL_RSHIFT(s->height, chroma_v_shift); |
|
|
|
|
|
|
|
for (i = 0; i < nb_components; i++) { |
|
|
|
int c = s->comp_index[i]; |
|
|
|
data[c] = s->picture_ptr->data[c]; |
|
|
|
@@ -1250,8 +1255,8 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, |
|
|
|
|
|
|
|
if (s->interlaced && s->bottom_field) |
|
|
|
block_offset += linesize[c] >> 1; |
|
|
|
if ( 8*(h * mb_x + x) < s->width |
|
|
|
&& 8*(v * mb_y + y) < s->height) { |
|
|
|
if ( 8*(h * mb_x + x) < ((c == 1) || (c == 2) ? chroma_width : s->width) |
|
|
|
&& 8*(v * mb_y + y) < ((c == 1) || (c == 2) ? chroma_height : s->height)) { |
|
|
|
ptr = data[c] + block_offset; |
|
|
|
} else |
|
|
|
ptr = NULL; |
|
|
|
|