|
|
|
@@ -2982,9 +2982,19 @@ static int decode_slice_header(H264Context *h, H264Context *h0) |
|
|
|
"Cannot (re-)initialize context during parallel decoding.\n"); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
avcodec_set_dimensions(s->avctx, s->width, s->height); |
|
|
|
s->avctx->width -= (2>>CHROMA444)*FFMIN(h->sps.crop_right, (8<<CHROMA444)-1); |
|
|
|
s->avctx->height -= (1<<s->chroma_y_shift)*FFMIN(h->sps.crop_bottom, (16>>s->chroma_y_shift)-1) * (2 - h->sps.frame_mbs_only_flag); |
|
|
|
if( FFALIGN(s->avctx->width , 16 ) == s->width |
|
|
|
&& FFALIGN(s->avctx->height, 16*(2 - h->sps.frame_mbs_only_flag)) == s->height |
|
|
|
&& !h->sps.crop_right && !h->sps.crop_bottom |
|
|
|
&& (s->avctx->width != s->width || s->avctx->height && s->height) |
|
|
|
) { |
|
|
|
av_log(h->s.avctx, AV_LOG_DEBUG, "Using externally provided dimensions\n"); |
|
|
|
s->avctx->coded_width = s->width; |
|
|
|
s->avctx->coded_height = s->height; |
|
|
|
} else{ |
|
|
|
avcodec_set_dimensions(s->avctx, s->width, s->height); |
|
|
|
s->avctx->width -= (2>>CHROMA444)*FFMIN(h->sps.crop_right, (8<<CHROMA444)-1); |
|
|
|
s->avctx->height -= (1<<s->chroma_y_shift)*FFMIN(h->sps.crop_bottom, (16>>s->chroma_y_shift)-1) * (2 - h->sps.frame_mbs_only_flag); |
|
|
|
} |
|
|
|
s->avctx->sample_aspect_ratio = h->sps.sar; |
|
|
|
av_assert0(s->avctx->sample_aspect_ratio.den); |
|
|
|
|
|
|
|
|