[FFmpeg-cvslog] r17572 - in trunk/libavcodec: mpeg12.c mpegvideo_parser.c

cehoyos subversion
Tue Feb 24 21:23:19 CET 2009


Author: cehoyos
Date: Tue Feb 24 21:23:19 2009
New Revision: 17572

Log:
Correct time_base and repeat_pict for MPEG2 video.

Patch by Ivan Schreter, schreter gmx net

Modified:
   trunk/libavcodec/mpeg12.c
   trunk/libavcodec/mpegvideo_parser.c

Modified: trunk/libavcodec/mpeg12.c
==============================================================================
--- trunk/libavcodec/mpeg12.c	Tue Feb 24 21:19:59 2009	(r17571)
+++ trunk/libavcodec/mpeg12.c	Tue Feb 24 21:23:19 2009	(r17572)
@@ -1275,7 +1275,7 @@ static int mpeg_decode_postinit(AVCodecC
             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

Modified: trunk/libavcodec/mpegvideo_parser.c
==============================================================================
--- trunk/libavcodec/mpegvideo_parser.c	Tue Feb 24 21:19:59 2009	(r17571)
+++ trunk/libavcodec/mpegvideo_parser.c	Tue Feb 24 21:23:19 2009	(r17572)
@@ -81,7 +81,7 @@ static void mpegvideo_extract_headers(AV
                         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(AV
                         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;
                             }
                         }
                     }




More information about the ffmpeg-cvslog mailing list