aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorIvan Schreter <schreter@gmx.net>2009-02-24 20:23:19 +0000
committerCarl Eugen Hoyos <cehoyos@rainbow.studorg.tuwien.ac.at>2009-02-24 20:23:19 +0000
commitedbd72acea0a7766f5a788ff689ef92c91674dee (patch)
treefa9b952b3b4739e0a5b68bef09c7f5696f6ccebb /libavcodec
parentfc9fe42833cb205200fc977fa9014616c70aa4bf (diff)
downloadffmpeg-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.c2
-rw-r--r--libavcodec/mpegvideo_parser.c9
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;
}
}
}