changeset 4705:492dd0722ee1 libavformat

Simplify RoQ demuxer pts calculation by using a appropriate time bases.
author reimar
date Fri, 13 Mar 2009 13:37:35 +0000
parents 2b641c55e83e
children a3f213a1d3a8
files idroq.c
diffstat 1 files changed, 6 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/idroq.c	Thu Mar 12 11:47:50 2009 +0000
+++ b/idroq.c	Fri Mar 13 13:37:35 2009 +0000
@@ -46,8 +46,6 @@
     int width;
     int height;
     int audio_channels;
-    int framerate;
-    int frame_pts_inc;
 
     int video_stream_index;
     int audio_stream_index;
@@ -71,6 +69,7 @@
 {
     RoqDemuxContext *roq = s->priv_data;
     ByteIOContext *pb = s->pb;
+    int framerate;
     AVStream *st;
     unsigned char preamble[RoQ_CHUNK_PREAMBLE_SIZE];
 
@@ -78,8 +77,7 @@
     if (get_buffer(pb, preamble, RoQ_CHUNK_PREAMBLE_SIZE) !=
         RoQ_CHUNK_PREAMBLE_SIZE)
         return AVERROR(EIO);
-    roq->framerate = AV_RL16(&preamble[6]);
-    roq->frame_pts_inc = 90000 / roq->framerate;
+    framerate = AV_RL16(&preamble[6]);
 
     /* init private context parameters */
     roq->width = roq->height = roq->audio_channels = roq->video_pts =
@@ -89,8 +87,7 @@
     st = av_new_stream(s, 0);
     if (!st)
         return AVERROR(ENOMEM);
-    /* set the pts reference (1 pts = 1/90000) */
-    av_set_pts_info(st, 33, 1, 90000);
+    av_set_pts_info(st, 63, 1, framerate);
     roq->video_stream_index = st->index;
     st->codec->codec_type = CODEC_TYPE_VIDEO;
     st->codec->codec_id = CODEC_ID_ROQ;
@@ -161,9 +158,8 @@
             if (ret != chunk_size)
                 return AVERROR(EIO);
             pkt->stream_index = roq->video_stream_index;
-            pkt->pts = roq->video_pts;
+            pkt->pts = roq->video_pts++;
 
-            roq->video_pts += roq->frame_pts_inc;
             packet_read = 1;
             break;
 
@@ -173,7 +169,7 @@
                 AVStream *st = av_new_stream(s, 1);
                 if (!st)
                     return AVERROR(ENOMEM);
-                av_set_pts_info(st, 33, 1, 90000);
+                av_set_pts_info(st, 32, 1, RoQ_AUDIO_SAMPLE_RATE);
                 roq->audio_stream_index = st->index;
                 st->codec->codec_type = CODEC_TYPE_AUDIO;
                 st->codec->codec_id = CODEC_ID_ROQ_DPCM;
@@ -194,13 +190,10 @@
 
             if (chunk_type == RoQ_QUAD_VQ) {
                 pkt->stream_index = roq->video_stream_index;
-                pkt->pts = roq->video_pts;
-                roq->video_pts += roq->frame_pts_inc;
+                pkt->pts = roq->video_pts++;
             } else {
                 pkt->stream_index = roq->audio_stream_index;
                 pkt->pts = roq->audio_frame_count;
-                pkt->pts *= 90000;
-                pkt->pts /= RoQ_AUDIO_SAMPLE_RATE;
                 roq->audio_frame_count += (chunk_size / roq->audio_channels);
             }