| OLD | NEW | 
|     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 675 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   686   DCHECK(!id.empty()); |   686   DCHECK(!id.empty()); | 
|   687  |   687  | 
|   688   auto itr = source_state_map_.find(id); |   688   auto itr = source_state_map_.find(id); | 
|   689  |   689  | 
|   690   DCHECK(itr != source_state_map_.end()); |   690   DCHECK(itr != source_state_map_.end()); | 
|   691   return itr->second->GetHighestPresentationTimestamp(); |   691   return itr->second->GetHighestPresentationTimestamp(); | 
|   692 } |   692 } | 
|   693  |   693  | 
|   694 void ChunkDemuxer::OnEnabledAudioTracksChanged( |   694 void ChunkDemuxer::OnEnabledAudioTracksChanged( | 
|   695     const std::vector<MediaTrack::Id>& track_ids, |   695     const std::vector<MediaTrack::Id>& track_ids, | 
|   696     base::TimeDelta currTime) { |   696     base::TimeDelta curr_time) { | 
|   697   base::AutoLock auto_lock(lock_); |   697   base::AutoLock auto_lock(lock_); | 
|   698   std::set<ChunkDemuxerStream*> enabled_streams; |   698   std::set<ChunkDemuxerStream*> enabled_streams; | 
|   699   for (const auto& id : track_ids) { |   699   for (const auto& id : track_ids) { | 
|   700     ChunkDemuxerStream* stream = track_id_to_demux_stream_map_[id]; |   700     ChunkDemuxerStream* stream = track_id_to_demux_stream_map_[id]; | 
|   701     DCHECK(stream); |   701     DCHECK(stream); | 
|   702     DCHECK_EQ(DemuxerStream::AUDIO, stream->type()); |   702     DCHECK_EQ(DemuxerStream::AUDIO, stream->type()); | 
|   703     enabled_streams.insert(stream); |   703     enabled_streams.insert(stream); | 
|   704   } |   704   } | 
|   705  |   705  | 
|   706   // First disable all streams that need to be disabled and then enable streams |   706   // First disable all streams that need to be disabled and then enable streams | 
|   707   // that are enabled. |   707   // that are enabled. | 
|   708   for (const auto& stream : audio_streams_) { |   708   for (const auto& stream : audio_streams_) { | 
|   709     if (enabled_streams.find(stream.get()) == enabled_streams.end()) { |   709     if (enabled_streams.find(stream.get()) == enabled_streams.end()) { | 
|   710       DVLOG(1) << __func__ << ": disabling stream " << stream.get(); |   710       DVLOG(1) << __func__ << ": disabling stream " << stream.get(); | 
|   711       stream->set_enabled(false, currTime); |   711       stream->set_enabled(false, curr_time); | 
|   712     } |   712     } | 
|   713   } |   713   } | 
|   714   for (auto* stream : enabled_streams) { |   714   for (auto* stream : enabled_streams) { | 
|   715     DVLOG(1) << __func__ << ": enabling stream " << stream; |   715     DVLOG(1) << __func__ << ": enabling stream " << stream; | 
|   716     stream->set_enabled(true, currTime); |   716     stream->set_enabled(true, curr_time); | 
|   717   } |   717   } | 
|   718 } |   718 } | 
|   719  |   719  | 
|   720 void ChunkDemuxer::OnSelectedVideoTrackChanged( |   720 void ChunkDemuxer::OnSelectedVideoTrackChanged( | 
|   721     const std::vector<MediaTrack::Id>& track_ids, |   721     base::Optional<MediaTrack::Id> track_id, | 
|   722     base::TimeDelta currTime) { |   722     base::TimeDelta curr_time) { | 
|   723   DCHECK_LE(track_ids.size(), 1u); |  | 
|   724  |  | 
|   725   base::AutoLock auto_lock(lock_); |   723   base::AutoLock auto_lock(lock_); | 
|   726   ChunkDemuxerStream* selected_stream = nullptr; |   724   ChunkDemuxerStream* selected_stream = nullptr; | 
|   727   if (!track_ids.empty()) { |   725   if (track_id) { | 
|   728     selected_stream = track_id_to_demux_stream_map_[track_ids[0]]; |   726     selected_stream = track_id_to_demux_stream_map_[*track_id]; | 
|   729     DCHECK(selected_stream); |   727     DCHECK(selected_stream); | 
|   730     DCHECK_EQ(DemuxerStream::VIDEO, selected_stream->type()); |   728     DCHECK_EQ(DemuxerStream::VIDEO, selected_stream->type()); | 
|   731   } |   729   } | 
|   732  |   730  | 
|   733   // First disable all streams that need to be disabled and then enable the |   731   // First disable all streams that need to be disabled and then enable the | 
|   734   // stream that needs to be enabled (if any). |   732   // stream that needs to be enabled (if any). | 
|   735   for (const auto& stream : video_streams_) { |   733   for (const auto& stream : video_streams_) { | 
|   736     if (stream.get() != selected_stream) { |   734     if (stream.get() != selected_stream) { | 
|   737       DVLOG(1) << __func__ << ": disabling stream " << stream.get(); |   735       DVLOG(1) << __func__ << ": disabling stream " << stream.get(); | 
|   738       DCHECK_EQ(DemuxerStream::VIDEO, stream->type()); |   736       DCHECK_EQ(DemuxerStream::VIDEO, stream->type()); | 
|   739       stream->set_enabled(false, currTime); |   737       stream->set_enabled(false, curr_time); | 
|   740     } |   738     } | 
|   741   } |   739   } | 
|   742   if (selected_stream) { |   740   if (selected_stream) { | 
|   743     DVLOG(1) << __func__ << ": enabling stream " << selected_stream; |   741     DVLOG(1) << __func__ << ": enabling stream " << selected_stream; | 
|   744     selected_stream->set_enabled(true, currTime); |   742     selected_stream->set_enabled(true, curr_time); | 
|   745   } |   743   } | 
|   746 } |   744 } | 
|   747  |   745  | 
|   748 void ChunkDemuxer::OnMemoryPressure( |   746 void ChunkDemuxer::OnMemoryPressure( | 
|   749     base::TimeDelta currentMediaTime, |   747     base::TimeDelta currentMediaTime, | 
|   750     base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level, |   748     base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level, | 
|   751     bool force_instant_gc) { |   749     bool force_instant_gc) { | 
|   752   DecodeTimestamp media_time_dts = |   750   DecodeTimestamp media_time_dts = | 
|   753       DecodeTimestamp::FromPresentationTime(currentMediaTime); |   751       DecodeTimestamp::FromPresentationTime(currentMediaTime); | 
|   754   base::AutoLock auto_lock(lock_); |   752   base::AutoLock auto_lock(lock_); | 
| (...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1329 } |  1327 } | 
|  1330  |  1328  | 
|  1331 void ChunkDemuxer::ShutdownAllStreams() { |  1329 void ChunkDemuxer::ShutdownAllStreams() { | 
|  1332   for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |  1330   for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); | 
|  1333        ++itr) { |  1331        ++itr) { | 
|  1334     itr->second->Shutdown(); |  1332     itr->second->Shutdown(); | 
|  1335   } |  1333   } | 
|  1336 } |  1334 } | 
|  1337  |  1335  | 
|  1338 }  // namespace media |  1336 }  // namespace media | 
| OLD | NEW |