From 3644cb8ff9e8603859e74ebf2d0ed6eff5bef551 Mon Sep 17 00:00:00 2001 From: Måns Rullgård Date: Fri, 12 May 2006 00:50:43 +0000 Subject: set stream time_base properly Originally committed as revision 5367 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/ogg2.c | 6 +----- libavformat/oggparseflac.c | 3 +++ libavformat/oggparseogm.c | 7 ++++++- libavformat/oggparsetheora.c | 5 ++--- libavformat/oggparsevorbis.c | 2 ++ 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/libavformat/ogg2.c b/libavformat/ogg2.c index 7daf560641..71b4d69a97 100644 --- a/libavformat/ogg2.c +++ b/libavformat/ogg2.c @@ -432,15 +432,11 @@ ogg_gptopts (AVFormatContext * s, int i, uint64_t gp) { ogg_t *ogg = s->priv_data; ogg_stream_t *os = ogg->streams + i; - AVStream *st = s->streams[i]; - AVCodecContext *codec = st->codec; uint64_t pts = AV_NOPTS_VALUE; if(os->codec->gptopts){ pts = os->codec->gptopts(s, i, gp); - } else if (codec->codec_type == CODEC_TYPE_AUDIO){ - pts = gp * 1000000LL / codec->sample_rate; - }else if (codec->codec_type == CODEC_TYPE_VIDEO){ + } else { pts = gp; } diff --git a/libavformat/oggparseflac.c b/libavformat/oggparseflac.c index d1d53b0256..a63e9d2e60 100644 --- a/libavformat/oggparseflac.c +++ b/libavformat/oggparseflac.c @@ -63,6 +63,9 @@ flac_header (AVFormatContext * s, int idx) memcpy (st->codec->extradata, os->buf + os->pstart + 5 + 4 + 4 + 4, FLAC_STREAMINFO_SIZE); st->codec->extradata_size = FLAC_STREAMINFO_SIZE; + + st->time_base.num = 1; + st->time_base.den = st->codec->sample_rate; } else if (mdt == 4) { vorbis_comment (s, os->buf + os->pstart + 4, os->psize - 4); } diff --git a/libavformat/oggparseogm.c b/libavformat/oggparseogm.c index 6468bdf260..0e25dcc1eb 100644 --- a/libavformat/oggparseogm.c +++ b/libavformat/oggparseogm.c @@ -48,9 +48,12 @@ ogm_header(AVFormatContext *s, int idx) p++; if(*p == 'v'){ + int tag; st->codec->codec_type = CODEC_TYPE_VIDEO; p += 8; - st->codec->codec_id = codec_get_bmp_id(le2me_32(unaligned32(p))); + tag = le2me_32(unaligned32(p)); + st->codec->codec_id = codec_get_bmp_id(tag); + st->codec->codec_tag = tag; } else { int cid; st->codec->codec_type = CODEC_TYPE_AUDIO; @@ -85,6 +88,8 @@ ogm_header(AVFormatContext *s, int idx) p += 2; /* block_align */ st->codec->bit_rate = le2me_32(unaligned32(p)) * 8; st->codec->sample_rate = spu * 10000000 / time_unit; + st->time_base.num = 1; + st->time_base.den = st->codec->sample_rate; } return 1; diff --git a/libavformat/oggparsetheora.c b/libavformat/oggparsetheora.c index 2f35d1b73c..fcd9dc132c 100644 --- a/libavformat/oggparsetheora.c +++ b/libavformat/oggparsetheora.c @@ -79,6 +79,7 @@ theora_header (AVFormatContext * s, int idx) skip_bits(&gb, 64); st->codec->time_base.den = get_bits(&gb, 32); st->codec->time_base.num = get_bits(&gb, 32); + st->time_base = st->codec->time_base; st->codec->sample_aspect_ratio.num = get_bits(&gb, 24); st->codec->sample_aspect_ratio.den = get_bits(&gb, 24); @@ -111,15 +112,13 @@ theora_header (AVFormatContext * s, int idx) static uint64_t theora_gptopts(AVFormatContext *ctx, int idx, uint64_t gp) { - AVStream *st = ctx->streams[idx]; ogg_t *ogg = ctx->priv_data; ogg_stream_t *os = ogg->streams + idx; theora_params_t *thp = os->private; uint64_t iframe = gp >> thp->gpshift; uint64_t pframe = gp & thp->gpmask; - return (iframe + pframe) * AV_TIME_BASE * st->codec->time_base.num / - st->codec->time_base.den; + return iframe + pframe; } ogg_codec_t theora_codec = { diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c index 202601fa9e..9eddeff09c 100644 --- a/libavformat/oggparsevorbis.c +++ b/libavformat/oggparsevorbis.c @@ -186,6 +186,8 @@ vorbis_header (AVFormatContext * s, int idx) st->codec->codec_type = CODEC_TYPE_AUDIO; st->codec->codec_id = CODEC_ID_VORBIS; + st->time_base.num = 1; + st->time_base.den = st->codec->sample_rate; } else if (os->buf[os->pstart] == 3) { vorbis_comment (s, os->buf + os->pstart + 7, os->psize - 8); } else { -- cgit v1.2.3