set stream time_base properly
authorMåns Rullgård <mans@mansr.com>
Fri, 12 May 2006 00:50:43 +0000 (00:50 +0000)
committerMåns Rullgård <mans@mansr.com>
Fri, 12 May 2006 00:50:43 +0000 (00:50 +0000)
Originally committed as revision 5367 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/ogg2.c
libavformat/oggparseflac.c
libavformat/oggparseogm.c
libavformat/oggparsetheora.c
libavformat/oggparsevorbis.c

index 7daf560..71b4d69 100644 (file)
@@ -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;
 {
     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);
     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;
     }
 
         pts = gp;
     }
 
index d1d53b0..a63e9d2 100644 (file)
@@ -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;
         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);
     }
     } else if (mdt == 4) {
         vorbis_comment (s, os->buf + os->pstart + 4, os->psize - 4);
     }
index 6468bdf..0e25dcc 100644 (file)
@@ -48,9 +48,12 @@ ogm_header(AVFormatContext *s, int idx)
     p++;
 
     if(*p == 'v'){
     p++;
 
     if(*p == 'v'){
+        int tag;
         st->codec->codec_type = CODEC_TYPE_VIDEO;
         p += 8;
         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;
     } 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;
         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;
     }
 
     return 1;
index 2f35d1b..fcd9dc1 100644 (file)
@@ -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);
             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);
 
         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)
 {
 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;
 
     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 = {
 }
 
 ogg_codec_t theora_codec = {
index 202601f..9eddeff 100644 (file)
@@ -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->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 {
     } else if (os->buf[os->pstart] == 3) {
         vorbis_comment (s, os->buf + os->pstart + 7, os->psize - 8);
     } else {