Index: media/filters/ffmpeg_demuxer.cc |
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc |
index 08433b51f13ecc413b379889de743824fa15b1e5..e6c08954f0eefd95744c0426f9cc44760274eb1e 100644 |
--- a/media/filters/ffmpeg_demuxer.cc |
+++ b/media/filters/ffmpeg_demuxer.cc |
@@ -278,7 +278,10 @@ void FFmpegDemuxer::InititalizeTask(DataSource* data_source) { |
= new FFmpegDemuxerStream(this, stream); |
DCHECK(demuxer_stream); |
streams_.push_back(demuxer_stream); |
+ packet_streams_.push_back(demuxer_stream); |
max_duration = std::max(max_duration, demuxer_stream->duration()); |
+ } else { |
+ packet_streams_.push_back(NULL); |
} |
} |
if (streams_.empty()) { |
@@ -332,9 +335,13 @@ void FFmpegDemuxer::DemuxTask() { |
// worried about downstream filters (i.e., decoders) executing on this |
// thread. |
DCHECK(packet->stream_index >= 0); |
- DCHECK(packet->stream_index < static_cast<int>(streams_.size())); |
- FFmpegDemuxerStream* demuxer_stream = streams_[packet->stream_index]; |
- current_timestamp_ = demuxer_stream->EnqueuePacket(packet.release()); |
+ DCHECK(packet->stream_index < static_cast<int>(packet_streams_.size())); |
+ FFmpegDemuxerStream* demuxer_stream = packet_streams_[packet->stream_index]; |
+ if (demuxer_stream) { |
+ current_timestamp_ = demuxer_stream->EnqueuePacket(packet.release()); |
+ } else { |
+ av_free_packet(packet.get()); |
+ } |
// Create a loop by posting another task. This allows seek and message loop |
// quit tasks to get processed. |