From abb785f19e30f618b8de6f9f94dc8408e2a27ac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reimar=20D=C3=B6ffinger?= Date: Fri, 13 Mar 2009 13:37:35 +0000 Subject: [PATCH] Simplify RoQ demuxer pts calculation by using a appropriate time bases. Originally committed as revision 17946 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/idroq.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/libavformat/idroq.c b/libavformat/idroq.c index 8ab3eda14e..c570eecf0d 100644 --- a/libavformat/idroq.c +++ b/libavformat/idroq.c @@ -46,8 +46,6 @@ typedef struct RoqDemuxContext { 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 @@ static int roq_read_header(AVFormatContext *s, { RoqDemuxContext *roq = s->priv_data; ByteIOContext *pb = s->pb; + int framerate; AVStream *st; unsigned char preamble[RoQ_CHUNK_PREAMBLE_SIZE]; @@ -78,8 +77,7 @@ static int roq_read_header(AVFormatContext *s, 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 @@ static int roq_read_header(AVFormatContext *s, 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 @@ static int roq_read_packet(AVFormatContext *s, 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 @@ static int roq_read_packet(AVFormatContext *s, 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 @@ static int roq_read_packet(AVFormatContext *s, 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); }