Mercurial > libavformat.hg
changeset 1889:e81bae269ae1 libavformat
fix pts handling
author | bcoudurier |
---|---|
date | Thu, 08 Mar 2007 21:29:38 +0000 |
parents | f794ef55fafe |
children | 04f9a3ae30af |
files | swf.c |
diffstat | 1 files changed, 7 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/swf.c Thu Mar 08 14:49:43 2007 +0000 +++ b/swf.c Thu Mar 08 21:29:38 2007 +0000 @@ -67,7 +67,7 @@ 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 @@ { 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 @@ 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 @@ 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 @@ 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 @@ 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; }