Mercurial > libavformat.hg
changeset 1077:91677ac6fb19 libavformat
set stream time_base properly
author | mru |
---|---|
date | Fri, 12 May 2006 00:50:43 +0000 |
parents | a1c07ce3943c |
children | 0bc9422cc0ad |
files | ogg2.c oggparseflac.c oggparseogm.c oggparsetheora.c oggparsevorbis.c |
diffstat | 5 files changed, 14 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/ogg2.c Thu May 11 23:07:22 2006 +0000 +++ b/ogg2.c Fri May 12 00:50:43 2006 +0000 @@ -432,15 +432,11 @@ { 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; }
--- a/oggparseflac.c Thu May 11 23:07:22 2006 +0000 +++ b/oggparseflac.c Fri May 12 00:50:43 2006 +0000 @@ -63,6 +63,9 @@ 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); }
--- a/oggparseogm.c Thu May 11 23:07:22 2006 +0000 +++ b/oggparseogm.c Fri May 12 00:50:43 2006 +0000 @@ -48,9 +48,12 @@ 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 @@ 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;
--- a/oggparsetheora.c Thu May 11 23:07:22 2006 +0000 +++ b/oggparsetheora.c Fri May 12 00:50:43 2006 +0000 @@ -79,6 +79,7 @@ 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 @@ 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 = {
--- a/oggparsevorbis.c Thu May 11 23:07:22 2006 +0000 +++ b/oggparsevorbis.c Fri May 12 00:50:43 2006 +0000 @@ -186,6 +186,8 @@ 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 {