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

Side by Side Diff: media/filters/chunk_demuxer.cc

Issue 2684103005: Allow media track switching. (Closed)
Patch Set: Fixed comments Created 3 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 unified diff | Download patch
« no previous file with comments | « media/blink/webmediaplayer_impl.cc ('k') | media/filters/ffmpeg_demuxer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/filters/chunk_demuxer.h" 5 #include "media/filters/chunk_demuxer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 708
709 void ChunkDemuxer::OnEnabledAudioTracksChanged( 709 void ChunkDemuxer::OnEnabledAudioTracksChanged(
710 const std::vector<MediaTrack::Id>& track_ids, 710 const std::vector<MediaTrack::Id>& track_ids,
711 base::TimeDelta curr_time) { 711 base::TimeDelta curr_time) {
712 base::AutoLock auto_lock(lock_); 712 base::AutoLock auto_lock(lock_);
713 std::set<ChunkDemuxerStream*> enabled_streams; 713 std::set<ChunkDemuxerStream*> enabled_streams;
714 for (const auto& id : track_ids) { 714 for (const auto& id : track_ids) {
715 ChunkDemuxerStream* stream = track_id_to_demux_stream_map_[id]; 715 ChunkDemuxerStream* stream = track_id_to_demux_stream_map_[id];
716 DCHECK(stream); 716 DCHECK(stream);
717 DCHECK_EQ(DemuxerStream::AUDIO, stream->type()); 717 DCHECK_EQ(DemuxerStream::AUDIO, stream->type());
718 // TODO(servolk): Remove after multiple enabled audio tracks are supported
719 // by the media::RendererImpl.
720 if (!enabled_streams.empty()) {
721 MEDIA_LOG(INFO, media_log_)
722 << "Only one enabled audio track is supported, ignoring track " << id;
723 continue;
724 }
718 enabled_streams.insert(stream); 725 enabled_streams.insert(stream);
719 } 726 }
720 727
721 // First disable all streams that need to be disabled and then enable streams 728 // First disable all streams that need to be disabled and then enable streams
722 // that are enabled. 729 // that are enabled.
723 for (const auto& stream : audio_streams_) { 730 for (const auto& stream : audio_streams_) {
724 if (enabled_streams.find(stream.get()) == enabled_streams.end()) { 731 if (enabled_streams.find(stream.get()) == enabled_streams.end()) {
725 DVLOG(1) << __func__ << ": disabling stream " << stream.get(); 732 DVLOG(1) << __func__ << ": disabling stream " << stream.get();
726 stream->set_enabled(false, curr_time); 733 stream->set_enabled(false, curr_time);
727 } 734 }
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
1220 NOTREACHED(); 1227 NOTREACHED();
1221 return nullptr; 1228 return nullptr;
1222 } 1229 }
1223 1230
1224 std::unique_ptr<ChunkDemuxerStream> stream = 1231 std::unique_ptr<ChunkDemuxerStream> stream =
1225 base::MakeUnique<ChunkDemuxerStream>(type, media_track_id); 1232 base::MakeUnique<ChunkDemuxerStream>(type, media_track_id);
1226 DCHECK(track_id_to_demux_stream_map_.find(media_track_id) == 1233 DCHECK(track_id_to_demux_stream_map_.find(media_track_id) ==
1227 track_id_to_demux_stream_map_.end()); 1234 track_id_to_demux_stream_map_.end());
1228 track_id_to_demux_stream_map_[media_track_id] = stream.get(); 1235 track_id_to_demux_stream_map_[media_track_id] = stream.get();
1229 id_to_streams_map_[source_id].push_back(stream.get()); 1236 id_to_streams_map_[source_id].push_back(stream.get());
1237 stream->set_enabled(owning_vector->empty(), base::TimeDelta());
1230 owning_vector->push_back(std::move(stream)); 1238 owning_vector->push_back(std::move(stream));
1231 return owning_vector->back().get(); 1239 return owning_vector->back().get();
1232 } 1240 }
1233 1241
1234 void ChunkDemuxer::OnNewTextTrack(ChunkDemuxerStream* text_stream, 1242 void ChunkDemuxer::OnNewTextTrack(ChunkDemuxerStream* text_stream,
1235 const TextTrackConfig& config) { 1243 const TextTrackConfig& config) {
1236 lock_.AssertAcquired(); 1244 lock_.AssertAcquired();
1237 DCHECK_NE(state_, SHUTDOWN); 1245 DCHECK_NE(state_, SHUTDOWN);
1238 host_->AddTextStream(text_stream, config); 1246 host_->AddTextStream(text_stream, config);
1239 } 1247 }
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 } 1350 }
1343 1351
1344 void ChunkDemuxer::ShutdownAllStreams() { 1352 void ChunkDemuxer::ShutdownAllStreams() {
1345 for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); 1353 for (auto itr = source_state_map_.begin(); itr != source_state_map_.end();
1346 ++itr) { 1354 ++itr) {
1347 itr->second->Shutdown(); 1355 itr->second->Shutdown();
1348 } 1356 }
1349 } 1357 }
1350 1358
1351 } // namespace media 1359 } // namespace media
OLDNEW
« no previous file with comments | « media/blink/webmediaplayer_impl.cc ('k') | media/filters/ffmpeg_demuxer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698