X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmpeg12.c;h=b5bf68d6832fabadbf6a166b555e323cb0c820c9;hb=78e08fd340e03b49f75e1ac31c20cc21434794bd;hp=953cd5ec942724196680c0ebb28b218cae466ffd;hpb=83962004f7275a4ea98ca02398ae5dfff59e5fb7;p=ffmpeg diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 953cd5ec942..b5bf68d6832 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -1278,7 +1278,12 @@ static int mpeg_decode_postinit(AVCodecContext *avctx) return -2; avcodec_set_dimensions(avctx, s->width, s->height); - avctx->bit_rate = s->bit_rate; + if (avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO && s->bit_rate) { + avctx->rc_max_rate = s->bit_rate; + } else if (avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO && s->bit_rate && + (s->bit_rate != 0x3FFFF*400 || s->vbv_delay != 0xFFFF)) { + avctx->bit_rate = s->bit_rate; + } s1->save_aspect_info = s->aspect_ratio_info; s1->save_width = s->width; s1->save_height = s->height; @@ -1290,8 +1295,8 @@ static int mpeg_decode_postinit(AVCodecContext *avctx) if (avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO) { //MPEG-1 fps - avctx->time_base.den = avpriv_frame_rate_tab[s->frame_rate_index].num; - avctx->time_base.num = avpriv_frame_rate_tab[s->frame_rate_index].den; + avctx->time_base.den = ff_mpeg12_frame_rate_tab[s->frame_rate_index].num; + avctx->time_base.num = ff_mpeg12_frame_rate_tab[s->frame_rate_index].den; //MPEG-1 aspect avctx->sample_aspect_ratio = av_d2q(1.0/ff_mpeg1_aspect[s->aspect_ratio_info], 255); avctx->ticks_per_frame=1; @@ -1299,8 +1304,8 @@ static int mpeg_decode_postinit(AVCodecContext *avctx) //MPEG-2 fps av_reduce(&s->avctx->time_base.den, &s->avctx->time_base.num, - avpriv_frame_rate_tab[s->frame_rate_index].num * s1->frame_rate_ext.num*2, - avpriv_frame_rate_tab[s->frame_rate_index].den * s1->frame_rate_ext.den, + ff_mpeg12_frame_rate_tab[s->frame_rate_index].num * s1->frame_rate_ext.num*2, + ff_mpeg12_frame_rate_tab[s->frame_rate_index].den * s1->frame_rate_ext.den, 1 << 30); avctx->ticks_per_frame = 2; //MPEG-2 aspect @@ -1377,6 +1382,7 @@ static int mpeg1_decode_picture(AVCodecContext *avctx, return -1; vbv_delay = get_bits(&s->gb, 16); + s->vbv_delay = vbv_delay; if (s->pict_type == AV_PICTURE_TYPE_P || s->pict_type == AV_PICTURE_TYPE_B) { s->full_pel[0] = get_bits1(&s->gb); f_code = get_bits(&s->gb, 3);