@ -764,8 +764,6 @@ int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame)
switch ( avctx - > codec - > type ) {
case AVMEDIA_TYPE_VIDEO :
frame - > width = FFMAX ( avctx - > width , FF_CEIL_RSHIFT ( avctx - > coded_width , avctx - > lowres ) ) ;
frame - > height = FFMAX ( avctx - > height , FF_CEIL_RSHIFT ( avctx - > coded_height , avctx - > lowres ) ) ;
if ( frame - > format < 0 )
frame - > format = avctx - > pix_fmt ;
if ( ! frame - > sample_aspect_ratio . num )
@ -834,6 +832,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
static int get_buffer_internal ( AVCodecContext * avctx , AVFrame * frame , int flags )
{
int override_dimensions = 1 ;
int ret ;
if ( avctx - > codec_type = = AVMEDIA_TYPE_VIDEO ) {
@ -842,6 +841,13 @@ static int get_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags)
return AVERROR ( EINVAL ) ;
}
}
if ( avctx - > codec_type = = AVMEDIA_TYPE_VIDEO ) {
if ( frame - > width < = 0 | | frame - > height < = 0 ) {
frame - > width = FFMAX ( avctx - > width , FF_CEIL_RSHIFT ( avctx - > coded_width , avctx - > lowres ) ) ;
frame - > height = FFMAX ( avctx - > height , FF_CEIL_RSHIFT ( avctx - > coded_height , avctx - > lowres ) ) ;
override_dimensions = 0 ;
}
}
if ( ( ret = ff_init_buffer_info ( avctx , frame ) ) < 0 )
return ret ;
@ -964,7 +970,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
ret = avctx - > get_buffer2 ( avctx , frame , flags ) ;
if ( avctx - > codec_type = = AVMEDIA_TYPE_VIDEO ) {
if ( avctx - > codec_type = = AVMEDIA_TYPE_VIDEO & & ! override_dimensions ) {
frame - > width = avctx - > width ;
frame - > height = avctx - > height ;
}