From: <dg...@us...> - 2006-09-24 16:29:13
|
Update of /cvsroot/xine/xine-lib/src/demuxers In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv17902 Modified Files: demux_asf.c Log Message: Before using audio_stream and video_stream indexes, check if they are set. This fixes crash on streams with no audio (bug #1564598). Index: demux_asf.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_asf.c,v retrieving revision 1.182 retrieving revision 1.183 diff -u -r1.182 -r1.183 --- demux_asf.c 15 Sep 2006 21:52:19 -0000 1.182 +++ demux_asf.c 24 Sep 2006 16:29:10 -0000 1.183 @@ -584,8 +584,8 @@ xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "demux_asf: video stream_id: %d, audio stream_id: %d\n", - this->asf_header->streams[this->video_stream]->stream_number, - this->asf_header->streams[this->audio_stream]->stream_number); + this->audio_stream != -1 ? this->asf_header->streams[this->video_stream]->stream_number : -1, + this->video_stream != -1 ? this->asf_header->streams[this->audio_stream]->stream_number : -1); if (this->audio_stream != -1) { _x_stream_info_set(this->stream, XINE_STREAM_INFO_HAS_AUDIO, 1); @@ -1049,8 +1049,8 @@ for (i = 0; i < this->asf_header->stream_count; i++) { lprintf ("stream_number = %d\n", this->asf_header->streams[i]->stream_number); if ((this->asf_header->streams[i]->stream_number == stream_id) && - ((stream_id == this->asf_header->streams[this->audio_stream]->stream_number) || - (stream_id == this->asf_header->streams[this->video_stream]->stream_number))) { + (( this->audio_stream != -1 && stream_id == this->asf_header->streams[this->audio_stream]->stream_number ) || + ( this->video_stream != -1 && stream_id == this->asf_header->streams[this->video_stream]->stream_number ))) { *stream = &this->streams[i]; break; } @@ -1098,7 +1098,7 @@ buf->type = BUF_CONTROL_RESET_DECODER; (*stream)->fifo->put((*stream)->fifo, buf); } - if (stream_id == this->asf_header->streams[this->video_stream]->stream_number) { + if (this->video_stream != -1 && stream_id == this->asf_header->streams[this->video_stream]->stream_number) { lprintf ("bad seq: waiting for keyframe\n"); (*stream)->resync = 1; @@ -1903,7 +1903,7 @@ check_newpts (this, ts * 90, 1, 0); } } else if (state == 1) { - if ((stream_id == this->asf_header->streams[this->audio_stream]->stream_number) && ts && + if ((this->audio_stream != -1 && stream_id == this->asf_header->streams[this->audio_stream]->stream_number) && ts && (ts <= this->keyframe_ts)) { lprintf ("demux_asf_seek: audio packet found at %lld, ts = %lld\n", start_pos, ts); @@ -1911,7 +1911,7 @@ break; } } else if (state == 2) { - if ((stream_id == this->asf_header->streams[this->audio_stream]->stream_number) && !frag_offset) { + if ((this->audio_stream != -1 && stream_id == this->asf_header->streams[this->audio_stream]->stream_number) && !frag_offset) { this->keyframe_found = 1; this->keyframe_ts = ts; state = 5; /* end */ |