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_, |
+ 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(); |
} |
} |