changeset 9036:8e5fe9e56b93 libavcodec

Correct time_base and repeat_pict for MPEG2 video. Patch by Ivan Schreter, schreter gmx net
author cehoyos
date Tue, 24 Feb 2009 20:23:19 +0000
parents d22ed7aad1b0
children e2f94ff2f2e3
files mpeg12.c mpegvideo_parser.c
diffstat 2 files changed, 6 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mpeg12.c	Tue Feb 24 20:19:59 2009 +0000
+++ b/mpeg12.c	Tue Feb 24 20:23:19 2009 +0000
@@ -1275,7 +1275,7 @@
             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
--- a/mpegvideo_parser.c	Tue Feb 24 20:19:59 2009 +0000
+++ b/mpegvideo_parser.c	Tue Feb 24 20:23:19 2009 +0000
@@ -81,7 +81,7 @@
                         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 @@
                         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;
                             }
                         }
                     }