diff options
-rw-r--r-- | libavformat/swf.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/libavformat/swf.c b/libavformat/swf.c index df3c71660a..f07afab266 100644 --- a/libavformat/swf.c +++ b/libavformat/swf.c @@ -69,7 +69,6 @@ typedef struct { int swf_frame_number; int video_frame_number; int ms_per_frame; - int ch_id; int tag; uint8_t *audio_fifo; @@ -313,7 +312,6 @@ static int swf_write_header(AVFormatContext *s) uint8_t buf1[256]; int i, width, height, rate, rate_base; - swf->ch_id = -1; swf->audio_in_pos = 0; swf->audio_out_pos = 0; swf->audio_size = 0; @@ -775,7 +773,6 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap) a correct framerate */ swf->ms_per_frame = ( 1000 * 256 ) / frame_rate; swf->samples_per_frame = 0; - swf->ch_id = -1; firstTagOff = url_ftell(pb); for(;;) { @@ -792,13 +789,13 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap) return AVERROR_IO; } if ( tag == TAG_VIDEOSTREAM && !vst) { - swf->ch_id = get_le16(pb); + int ch_id = get_le16(pb); get_le16(pb); get_le16(pb); get_le16(pb); get_byte(pb); /* Check for FLV1 */ - vst = av_new_stream(s, 0); + vst = av_new_stream(s, ch_id); av_set_pts_info(vst, 24, 1, 1000); /* 24 bit pts in ms */ vst->codec->codec_type = CODEC_TYPE_VIDEO; vst->codec->codec_id = codec_get_id(swf_codec_tags, get_byte(pb)); @@ -856,22 +853,18 @@ static int swf_read_packet(AVFormatContext *s, AVPacket *pkt) if (tag < 0) return AVERROR_IO; if (tag == TAG_VIDEOFRAME) { + int ch_id = get_le16(pb); for( i=0; i<s->nb_streams; i++ ) { st = s->streams[i]; - if (st->id == 0) { - if ( get_le16(pb) == swf->ch_id ) { - frame = get_le16(pb); - av_get_packet(pb, pkt, len-4); - pkt->pts = frame * swf->ms_per_frame; - pkt->stream_index = st->index; - return pkt->size; - } else { - url_fskip(pb, len-2); - continue; - } + if (st->codec->codec_type == CODEC_TYPE_VIDEO && st->id == ch_id) { + frame = get_le16(pb); + av_get_packet(pb, pkt, len-4); + pkt->pts = frame * swf->ms_per_frame; + pkt->stream_index = st->index; + return pkt->size; } } - url_fskip(pb, len); + url_fskip(pb, len-2); } else if (tag == TAG_STREAMBLOCK) { for( i=0; i<s->nb_streams; i++ ) { st = s->streams[i]; |