Chromium Code Reviews| Index: media/filters/chunk_demuxer.cc |
| diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc |
| index c50923ccd4e87084913353589b4e7fe9b45cd080..9c3a9d7642ddcd3520e4a118c238b914ebe05575 100644 |
| --- a/media/filters/chunk_demuxer.cc |
| +++ b/media/filters/chunk_demuxer.cc |
| @@ -12,8 +12,8 @@ |
| #include "base/callback_helpers.h" |
| #include "base/location.h" |
| #include "base/macros.h" |
| +#include "base/memory/ptr_util.h" |
| #include "base/metrics/histogram_macros.h" |
| -#include "base/stl_util.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "media/base/audio_decoder_config.h" |
| #include "media/base/bind_to_current_loop.h" |
| @@ -621,7 +621,7 @@ ChunkDemuxer::Status ChunkDemuxer::AddId(const std::string& id, |
| base::Bind(&ChunkDemuxer::OnSourceInitDone, base::Unretained(this), id), |
| expected_mss_codecs, encrypted_media_init_data_cb_, new_text_track_cb); |
| - source_state_map_[id] = source_state.release(); |
| + source_state_map_[id] = std::move(source_state); |
| return kOk; |
| } |
| @@ -638,7 +638,6 @@ void ChunkDemuxer::RemoveId(const std::string& id) { |
| base::AutoLock auto_lock(lock_); |
| CHECK(IsValidId(id)); |
| - delete source_state_map_[id]; |
| source_state_map_.erase(id); |
| pending_source_init_ids_.erase(id); |
| // Remove demuxer streams created for this id. |
| @@ -671,7 +670,7 @@ Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges(const std::string& id) const { |
| base::AutoLock auto_lock(lock_); |
| DCHECK(!id.empty()); |
| - MediaSourceStateMap::const_iterator itr = source_state_map_.find(id); |
| + auto itr = source_state_map_.find(id); |
| DCHECK(itr != source_state_map_.end()); |
| return itr->second->GetBufferedRanges(duration_, state_ == ENDED); |
| @@ -682,7 +681,7 @@ base::TimeDelta ChunkDemuxer::GetHighestPresentationTimestamp( |
| base::AutoLock auto_lock(lock_); |
| DCHECK(!id.empty()); |
| - MediaSourceStateMap::const_iterator itr = source_state_map_.find(id); |
| + auto itr = source_state_map_.find(id); |
| DCHECK(itr != source_state_map_.end()); |
| return itr->second->GetHighestPresentationTimestamp(); |
| @@ -757,7 +756,7 @@ bool ChunkDemuxer::EvictCodedFrames(const std::string& id, |
| DecodeTimestamp::FromPresentationTime(currentMediaTime); |
| DCHECK(!id.empty()); |
| - MediaSourceStateMap::const_iterator itr = source_state_map_.find(id); |
| + auto itr = source_state_map_.find(id); |
| if (itr == source_state_map_.end()) { |
| LOG(WARNING) << __func__ << " stream " << id << " not found"; |
| return false; |
| @@ -924,8 +923,8 @@ void ChunkDemuxer::SetDuration(double duration) { |
| duration_ = duration_td; |
| host_->SetDuration(duration_); |
| - for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| itr->second->OnSetDuration(duration_); |
| } |
| } |
| @@ -977,8 +976,8 @@ void ChunkDemuxer::MarkEndOfStream(PipelineStatus status) { |
| } |
| bool old_waiting_for_data = IsSeekWaitingForData_Locked(); |
| - for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| itr->second->MarkEndOfStream(); |
| } |
| @@ -1008,8 +1007,8 @@ void ChunkDemuxer::UnmarkEndOfStream() { |
| ChangeState_Locked(INITIALIZED); |
| - for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| itr->second->UnmarkEndOfStream(); |
| } |
| } |
| @@ -1031,8 +1030,8 @@ void ChunkDemuxer::Shutdown() { |
| void ChunkDemuxer::SetMemoryLimitsForTest(DemuxerStream::Type type, |
| size_t memory_limit) { |
| - for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| itr->second->SetMemoryLimits(type, memory_limit); |
| } |
| } |
| @@ -1046,8 +1045,6 @@ void ChunkDemuxer::ChangeState_Locked(State new_state) { |
| ChunkDemuxer::~ChunkDemuxer() { |
| DCHECK_NE(state_, INITIALIZED); |
| - |
| - base::STLDeleteValues(&source_state_map_); |
| } |
| void ChunkDemuxer::ReportError_Locked(PipelineStatus error) { |
| @@ -1079,8 +1076,8 @@ void ChunkDemuxer::ReportError_Locked(PipelineStatus error) { |
| bool ChunkDemuxer::IsSeekWaitingForData_Locked() const { |
| lock_.AssertAcquired(); |
| - for (MediaSourceStateMap::const_iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| if (itr->second->IsSeekWaitingForData()) |
| return true; |
| } |
| @@ -1175,40 +1172,35 @@ ChunkDemuxerStream* ChunkDemuxer::CreateDemuxerStream( |
| MediaTrack::Id media_track_id = GenerateMediaTrackId(); |
| + OwnedChunkDemuxerStreamVector* owning_vector = nullptr; |
| switch (type) { |
| - case DemuxerStream::AUDIO: { |
| - std::unique_ptr<ChunkDemuxerStream> audio_stream(new ChunkDemuxerStream( |
| - DemuxerStream::AUDIO, splice_frames_enabled_, media_track_id)); |
| - DCHECK(track_id_to_demux_stream_map_.find(media_track_id) == |
| - track_id_to_demux_stream_map_.end()); |
| - track_id_to_demux_stream_map_[media_track_id] = audio_stream.get(); |
| - id_to_streams_map_[source_id].push_back(audio_stream.get()); |
| - audio_streams_.push_back(std::move(audio_stream)); |
| - return audio_streams_.back().get(); |
| - } |
| - case DemuxerStream::VIDEO: { |
| - std::unique_ptr<ChunkDemuxerStream> video_stream(new ChunkDemuxerStream( |
| - DemuxerStream::VIDEO, splice_frames_enabled_, media_track_id)); |
| - DCHECK(track_id_to_demux_stream_map_.find(media_track_id) == |
| - track_id_to_demux_stream_map_.end()); |
| - track_id_to_demux_stream_map_[media_track_id] = video_stream.get(); |
| - id_to_streams_map_[source_id].push_back(video_stream.get()); |
| - video_streams_.push_back(std::move(video_stream)); |
| - return video_streams_.back().get(); |
| - } |
| - case DemuxerStream::TEXT: { |
| - ChunkDemuxerStream* text_stream = new ChunkDemuxerStream( |
| - DemuxerStream::TEXT, splice_frames_enabled_, media_track_id); |
| - id_to_streams_map_[source_id].push_back(text_stream); |
| - return text_stream; |
| - } |
| + case DemuxerStream::AUDIO: |
| + owning_vector = &audio_streams_; |
| + break; |
| + |
| + case DemuxerStream::VIDEO: |
| + owning_vector = &video_streams_; |
| + break; |
| + |
| + case DemuxerStream::TEXT: |
| + owning_vector = &text_streams_; |
| + break; |
| + |
| case DemuxerStream::UNKNOWN: |
| case DemuxerStream::NUM_TYPES: |
| NOTREACHED(); |
| - return NULL; |
| + return nullptr; |
| } |
| - NOTREACHED(); |
| - return NULL; |
| + |
| + std::unique_ptr<ChunkDemuxerStream> stream = |
| + base::MakeUnique<ChunkDemuxerStream>(type, splice_frames_enabled_, |
|
wolenetz
2016/09/27 22:01:11
:) good cleanup here, especially. Thank you.
Avi (use Gerrit)
2016/09/28 15:41:46
Acknowledged.
|
| + media_track_id); |
| + DCHECK(track_id_to_demux_stream_map_.find(media_track_id) == |
| + track_id_to_demux_stream_map_.end()); |
| + track_id_to_demux_stream_map_[media_track_id] = stream.get(); |
| + id_to_streams_map_[source_id].push_back(stream.get()); |
| + owning_vector->push_back(std::move(stream)); |
| + return owning_vector->back().get(); |
| } |
| void ChunkDemuxer::OnNewTextTrack(ChunkDemuxerStream* text_stream, |
| @@ -1255,8 +1247,8 @@ void ChunkDemuxer::DecreaseDurationIfNecessary() { |
| TimeDelta max_duration; |
| - for (MediaSourceStateMap::const_iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| max_duration = std::max(max_duration, |
| itr->second->GetMaxBufferedDuration()); |
| } |
| @@ -1280,8 +1272,8 @@ Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges_Locked() const { |
| // TODO(acolwell): When we start allowing SourceBuffers that are not active, |
| // we'll need to update this loop to only add ranges from active sources. |
| MediaSourceState::RangesList ranges_list; |
| - for (MediaSourceStateMap::const_iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| ranges_list.push_back(itr->second->GetBufferedRanges(duration_, ended)); |
| } |
| @@ -1289,36 +1281,36 @@ Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges_Locked() const { |
| } |
| void ChunkDemuxer::StartReturningData() { |
| - for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| itr->second->StartReturningData(); |
| } |
| } |
| void ChunkDemuxer::AbortPendingReads_Locked() { |
| - for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| itr->second->AbortReads(); |
| } |
| } |
| void ChunkDemuxer::SeekAllSources(TimeDelta seek_time) { |
| - for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| itr->second->Seek(seek_time); |
| } |
| } |
| void ChunkDemuxer::CompletePendingReadsIfPossible() { |
| - for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| itr->second->CompletePendingReadIfPossible(); |
| } |
| } |
| void ChunkDemuxer::ShutdownAllStreams() { |
| - for (MediaSourceStateMap::iterator itr = source_state_map_.begin(); |
| - itr != source_state_map_.end(); ++itr) { |
| + for (auto itr = source_state_map_.begin(); itr != source_state_map_.end(); |
| + ++itr) { |
| itr->second->Shutdown(); |
| } |
| } |