use AVRational and ff_frame_rate_tab for frame_rate
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>
Sun, 5 Nov 2006 19:24:23 +0000 (19:24 +0000)
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>
Sun, 5 Nov 2006 19:24:23 +0000 (19:24 +0000)
Originally committed as revision 6905 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/parser.c

index fc373ce..3b8668b 100644 (file)
@@ -225,7 +225,7 @@ typedef struct ParseContext1{
     ParseContext pc;
 /* XXX/FIXME PC1 vs. PC */
     /* MPEG2 specific */
-    int frame_rate;
+    AVRational frame_rate;
     int progressive_sequence;
     int width, height;
 
@@ -296,32 +296,10 @@ int ff_combine_frame(ParseContext *pc, int next, uint8_t **buf, int *buf_size)
     return 0;
 }
 
-/* XXX: merge with libavcodec ? */
-#define MPEG1_FRAME_RATE_BASE 1001
-
-static const int frame_rate_tab[16] = {
-        0,
-    24000,
-    24024,
-    25025,
-    30000,
-    30030,
-    50050,
-    60000,
-    60060,
-  // Xing's 15fps: (9)
-    15015,
-  // libmpeg3's "Unofficial economy rates": (10-13)
-     5005,
-    10010,
-    12012,
-    15015,
-  // random, just to avoid segfault !never encode these
-    25025,
-    25025,
-};
-
 #ifdef CONFIG_MPEGVIDEO_PARSER
+
+extern const AVRational ff_frame_rate_tab[];
+
 //FIXME move into mpeg12.c
 static void mpegvideo_extract_headers(AVCodecParserContext *s,
                                       AVCodecContext *avctx,
@@ -353,8 +331,8 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
                 pc->height = ((buf[1] & 0x0f) << 8) | buf[2];
                 avcodec_set_dimensions(avctx, pc->width, pc->height);
                 frame_rate_index = buf[3] & 0xf;
-                pc->frame_rate = avctx->time_base.den = frame_rate_tab[frame_rate_index];
-                avctx->time_base.num = MPEG1_FRAME_RATE_BASE;
+                pc->frame_rate.den = avctx->time_base.den = ff_frame_rate_tab[frame_rate_index].num;
+                pc->frame_rate.num = avctx->time_base.num = ff_frame_rate_tab[frame_rate_index].den;
                 avctx->bit_rate = ((buf[4]<<10) | (buf[5]<<2) | (buf[6]>>6))*400;
                 avctx->codec_id = CODEC_ID_MPEG1VIDEO;
                 avctx->sub_id = 1;
@@ -378,8 +356,8 @@ 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 * (frame_rate_ext_n + 1);
-                        avctx->time_base.num = MPEG1_FRAME_RATE_BASE * (frame_rate_ext_d + 1);
+                        avctx->time_base.den = pc->frame_rate.den * (frame_rate_ext_n + 1);
+                        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 */
                     }