Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(436)

Unified Diff: media/filters/ffmpeg_demuxer.cc

Issue 100085: Adds a second vector of streams to FFmpegDemuxer to handle re-mapped audio/video streams. (Closed)
Patch Set: Created 11 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/ffmpeg_demuxer.h ('k') | media/filters/ffmpeg_demuxer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
« no previous file with comments | « media/filters/ffmpeg_demuxer.h ('k') | media/filters/ffmpeg_demuxer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698