summaryrefslogtreecommitdiff
path: root/libavcodec/parser.c
diff options
context:
space:
mode:
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>2006-11-05 19:24:23 +0000
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>2006-11-05 19:24:23 +0000
commit8cd13128b8e3567e72d02974b99c4dc760a4672a (patch)
treea07e4239655063fd96526f1fb7c90aacdf93bb43 /libavcodec/parser.c
parentbcea96056118be69600d84518ce585e6c646f724 (diff)
use AVRational and ff_frame_rate_tab for frame_rate
Originally committed as revision 6905 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/parser.c')
-rw-r--r--libavcodec/parser.c38
1 files changed, 8 insertions, 30 deletions
diff --git a/libavcodec/parser.c b/libavcodec/parser.c
index fc373cebe2..3b8668b2eb 100644
--- a/libavcodec/parser.c
+++ b/libavcodec/parser.c
@@ -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 */
}