Correct time_base and repeat_pict for MPEG2 video.
Patch by Ivan Schreter, schreter gmx net Originally committed as revision 17572 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
committed by
Carl Eugen Hoyos
parent
fc9fe42833
commit
edbd72acea
@@ -1275,7 +1275,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){
|
|||||||
av_reduce(
|
av_reduce(
|
||||||
&s->avctx->time_base.den,
|
&s->avctx->time_base.den,
|
||||||
&s->avctx->time_base.num,
|
&s->avctx->time_base.num,
|
||||||
ff_frame_rate_tab[s->frame_rate_index].num * s1->frame_rate_ext.num,
|
ff_frame_rate_tab[s->frame_rate_index].num * s1->frame_rate_ext.num*2,
|
||||||
ff_frame_rate_tab[s->frame_rate_index].den * s1->frame_rate_ext.den,
|
ff_frame_rate_tab[s->frame_rate_index].den * s1->frame_rate_ext.den,
|
||||||
1<<30);
|
1<<30);
|
||||||
//MPEG-2 aspect
|
//MPEG-2 aspect
|
||||||
|
@@ -81,7 +81,7 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
|
|||||||
pc->height |=( vert_size_ext << 12);
|
pc->height |=( vert_size_ext << 12);
|
||||||
avctx->bit_rate += (bit_rate_ext << 18) * 400;
|
avctx->bit_rate += (bit_rate_ext << 18) * 400;
|
||||||
avcodec_set_dimensions(avctx, pc->width, pc->height);
|
avcodec_set_dimensions(avctx, pc->width, pc->height);
|
||||||
avctx->time_base.den = pc->frame_rate.den * (frame_rate_ext_n + 1);
|
avctx->time_base.den = pc->frame_rate.den * (frame_rate_ext_n + 1) * 2;
|
||||||
avctx->time_base.num = pc->frame_rate.num * (frame_rate_ext_d + 1);
|
avctx->time_base.num = pc->frame_rate.num * (frame_rate_ext_d + 1);
|
||||||
avctx->codec_id = CODEC_ID_MPEG2VIDEO;
|
avctx->codec_id = CODEC_ID_MPEG2VIDEO;
|
||||||
avctx->sub_id = 2; /* forces MPEG2 */
|
avctx->sub_id = 2; /* forces MPEG2 */
|
||||||
@@ -95,14 +95,15 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
|
|||||||
progressive_frame = buf[4] & (1 << 7);
|
progressive_frame = buf[4] & (1 << 7);
|
||||||
|
|
||||||
/* check if we must repeat the frame */
|
/* check if we must repeat the frame */
|
||||||
|
s->repeat_pict = 1;
|
||||||
if (repeat_first_field) {
|
if (repeat_first_field) {
|
||||||
if (pc->progressive_sequence) {
|
if (pc->progressive_sequence) {
|
||||||
if (top_field_first)
|
if (top_field_first)
|
||||||
s->repeat_pict = 4;
|
s->repeat_pict = 5;
|
||||||
else
|
else
|
||||||
s->repeat_pict = 2;
|
s->repeat_pict = 3;
|
||||||
} else if (progressive_frame) {
|
} else if (progressive_frame) {
|
||||||
s->repeat_pict = 1;
|
s->repeat_pict = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user