diff options
author | Ivan Schreter <schreter@gmx.net> | 2009-02-24 20:23:19 +0000 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@rainbow.studorg.tuwien.ac.at> | 2009-02-24 20:23:19 +0000 |
commit | edbd72acea0a7766f5a788ff689ef92c91674dee (patch) | |
tree | fa9b952b3b4739e0a5b68bef09c7f5696f6ccebb /libavcodec | |
parent | fc9fe42833cb205200fc977fa9014616c70aa4bf (diff) | |
download | ffmpeg-edbd72acea0a7766f5a788ff689ef92c91674dee.tar.gz |
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
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/mpeg12.c | 2 | ||||
-rw-r--r-- | libavcodec/mpegvideo_parser.c | 9 |
2 files changed, 6 insertions, 5 deletions
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index d958ae52f3..0ef83b16bd 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -1275,7 +1275,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){ av_reduce( &s->avctx->time_base.den, &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, 1<<30); //MPEG-2 aspect diff --git a/libavcodec/mpegvideo_parser.c b/libavcodec/mpegvideo_parser.c index 180c6fa9d0..2ccb9fff2c 100644 --- a/libavcodec/mpegvideo_parser.c +++ b/libavcodec/mpegvideo_parser.c @@ -81,7 +81,7 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s, pc->height |=( vert_size_ext << 12); avctx->bit_rate += (bit_rate_ext << 18) * 400; 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->codec_id = CODEC_ID_MPEG2VIDEO; avctx->sub_id = 2; /* forces MPEG2 */ @@ -95,14 +95,15 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s, progressive_frame = buf[4] & (1 << 7); /* check if we must repeat the frame */ + s->repeat_pict = 1; if (repeat_first_field) { if (pc->progressive_sequence) { if (top_field_first) - s->repeat_pict = 4; + s->repeat_pict = 5; else - s->repeat_pict = 2; + s->repeat_pict = 3; } else if (progressive_frame) { - s->repeat_pict = 1; + s->repeat_pict = 2; } } } |