From b912ef3fc924a2cd2ee29d004b6d2bb9c37862ba Mon Sep 17 00:00:00 2001 From: Baptiste Coudurier Date: Thu, 8 Mar 2007 21:29:38 +0000 Subject: [PATCH] fix pts handling Originally committed as revision 8299 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/swf.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/libavformat/swf.c b/libavformat/swf.c index 654a367a42..49c43431f4 100644 --- a/libavformat/swf.c +++ b/libavformat/swf.c @@ -67,7 +67,7 @@ typedef struct { int sound_samples; int swf_frame_number; int video_frame_number; - int ms_per_frame; + int frame_rate; int tag; uint8_t audio_fifo[AUDIO_FIFO_SIZE]; @@ -631,7 +631,7 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap) { SWFContext *swf = s->priv_data; ByteIOContext *pb = &s->pb; - int nbits, len, frame_rate, tag, v; + int nbits, len, tag, v; offset_t frame_offset = -1; AVStream *ast = 0; AVStream *vst = 0; @@ -650,13 +650,9 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap) nbits = get_byte(pb) >> 3; len = (4 * nbits - 3 + 7) / 8; url_fskip(pb, len); - frame_rate = get_le16(pb); + swf->frame_rate = get_le16(pb); /* 8.8 fixed */ get_le16(pb); /* frame count */ - /* The Flash Player converts 8.8 frame rates - to milliseconds internally. Do the same to get - a correct framerate */ - swf->ms_per_frame = ( 1000 * 256 ) / frame_rate; swf->samples_per_frame = 0; for(;;) { @@ -683,7 +679,7 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap) v = get_byte(pb); swf->samples_per_frame = get_le16(pb); ast = av_new_stream(s, -1); /* -1 to avoid clash with video stream ch_id */ - av_set_pts_info(ast, 24, 1, 1000); /* 24 bit pts in ms */ + av_set_pts_info(ast, 64, 256, swf->frame_rate); /* XXX same as video stream */ swf->audio_stream_index = ast->index; ast->codec->channels = 1 + (v&1); ast->codec->codec_type = CODEC_TYPE_AUDIO; @@ -706,13 +702,8 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap) url_fskip(pb, len); } } - if (vst) { - av_set_pts_info(vst, 24, 1, 1000); /* 24 bit pts in ms */ - if (swf->ms_per_frame) { - vst->codec->time_base.den = 1000. / swf->ms_per_frame; - vst->codec->time_base.num = 1; - } - } + if (vst) + av_set_pts_info(vst, 64, 256, swf->frame_rate); return 0; } @@ -735,7 +726,7 @@ static int swf_read_packet(AVFormatContext *s, AVPacket *pkt) if (st->codec->codec_type == CODEC_TYPE_VIDEO && st->id == ch_id) { frame = get_le16(pb); av_get_packet(pb, pkt, len-2); - pkt->pts = frame * swf->ms_per_frame; + pkt->pts = frame; pkt->stream_index = st->index; return pkt->size; }