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

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

Issue 2684103005: Allow media track switching. (Closed)
Patch Set: CR feedback 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
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 694 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 705
706 void ChunkDemuxer::OnEnabledAudioTracksChanged( 706 void ChunkDemuxer::OnEnabledAudioTracksChanged(
707 const std::vector<MediaTrack::Id>& track_ids, 707 const std::vector<MediaTrack::Id>& track_ids,
708 base::TimeDelta curr_time) { 708 base::TimeDelta curr_time) {
709 base::AutoLock auto_lock(lock_); 709 base::AutoLock auto_lock(lock_);
710 std::set<ChunkDemuxerStream*> enabled_streams; 710 std::set<ChunkDemuxerStream*> enabled_streams;
711 for (const auto& id : track_ids) { 711 for (const auto& id : track_ids) {
712 ChunkDemuxerStream* stream = track_id_to_demux_stream_map_[id]; 712 ChunkDemuxerStream* stream = track_id_to_demux_stream_map_[id];
713 DCHECK(stream); 713 DCHECK(stream);
714 DCHECK_EQ(DemuxerStream::AUDIO, stream->type()); 714 DCHECK_EQ(DemuxerStream::AUDIO, stream->type());
715 // TODO(servolk): Remove after multiple enabled audio tracks are supported
716 // by the media::RendererImpl.
717 if (!enabled_streams.empty()) {
718 MEDIA_LOG(INFO, media_log_)
719 << "Only one enabled audio track is supported, ignoring track " << id;
720 continue;
721 }
715 enabled_streams.insert(stream); 722 enabled_streams.insert(stream);
716 } 723 }
717 724
718 // First disable all streams that need to be disabled and then enable streams 725 // First disable all streams that need to be disabled and then enable streams
719 // that are enabled. 726 // that are enabled.
720 for (const auto& stream : audio_streams_) { 727 for (const auto& stream : audio_streams_) {
721 if (enabled_streams.find(stream.get()) == enabled_streams.end()) { 728 if (enabled_streams.find(stream.get()) == enabled_streams.end()) {
722 DVLOG(1) << __func__ << ": disabling stream " << stream.get(); 729 DVLOG(1) << __func__ << ": disabling stream " << stream.get();
723 stream->set_enabled(false, curr_time); 730 stream->set_enabled(false, curr_time);
724 } 731 }
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
1217 NOTREACHED(); 1224 NOTREACHED();
1218 return nullptr; 1225 return nullptr;
1219 } 1226 }
1220 1227
1221 std::unique_ptr<ChunkDemuxerStream> stream = 1228 std::unique_ptr<ChunkDemuxerStream> stream =
1222 base::MakeUnique<ChunkDemuxerStream>(type, media_track_id); 1229 base::MakeUnique<ChunkDemuxerStream>(type, media_track_id);
1223 DCHECK(track_id_to_demux_stream_map_.find(media_track_id) == 1230 DCHECK(track_id_to_demux_stream_map_.find(media_track_id) ==
1224 track_id_to_demux_stream_map_.end()); 1231 track_id_to_demux_stream_map_.end());
1225 track_id_to_demux_stream_map_[media_track_id] = stream.get(); 1232 track_id_to_demux_stream_map_[media_track_id] = stream.get();
1226 id_to_streams_map_[source_id].push_back(stream.get()); 1233 id_to_streams_map_[source_id].push_back(stream.get());
1234 stream->set_enabled(owning_vector->empty(), base::TimeDelta());
1227 owning_vector->push_back(std::move(stream)); 1235 owning_vector->push_back(std::move(stream));
1228 return owning_vector->back().get(); 1236 return owning_vector->back().get();
1229 } 1237 }
1230 1238
1231 void ChunkDemuxer::OnNewTextTrack(ChunkDemuxerStream* text_stream, 1239 void ChunkDemuxer::OnNewTextTrack(ChunkDemuxerStream* text_stream,
1232 const TextTrackConfig& config) { 1240 const TextTrackConfig& config) {
1233 lock_.AssertAcquired(); 1241 lock_.AssertAcquired();
1234 DCHECK_NE(state_, SHUTDOWN); 1242 DCHECK_NE(state_, SHUTDOWN);
1235 host_->AddTextStream(text_stream, config); 1243 host_->AddTextStream(text_stream, config);
1236 } 1244 }
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1339 } 1347 }
1340 1348
1341 void ChunkDemuxer::ShutdownAllStreams() { 1349 void ChunkDemuxer::ShutdownAllStreams() {
1342 for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); 1350 for (auto itr = source_state_map_.begin(); itr != source_state_map_.end();
1343 ++itr) { 1351 ++itr) {
1344 itr->second->Shutdown(); 1352 itr->second->Shutdown();
1345 } 1353 }
1346 } 1354 }
1347 1355
1348 } // namespace media 1356 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698