mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 20:19:55 +00:00
fix pts handling
Originally committed as revision 8299 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
d0429b4ff5
commit
b912ef3fc9
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user