Chromium Code Reviews| Index: media/filters/chunk_demuxer.cc |
| diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc |
| index 3ff3f1c9f3d1bcb73c6706bbd8389f6cafbaf6a8..a443eea4cc5dd91311f11a4556ca85e19ec9a0f3 100644 |
| --- a/media/filters/chunk_demuxer.cc |
| +++ b/media/filters/chunk_demuxer.cc |
| @@ -173,6 +173,7 @@ class ChunkDemuxerStream : public DemuxerStream { |
| const LogCB& log_cb); |
| ChunkDemuxerStream(const VideoDecoderConfig& video_config, |
| const LogCB& log_cb); |
| + virtual ~ChunkDemuxerStream(); |
| void StartWaitingForSeek(); |
| void Seek(TimeDelta time); |
| @@ -213,9 +214,6 @@ class ChunkDemuxerStream : public DemuxerStream { |
| virtual const AudioDecoderConfig& audio_decoder_config() OVERRIDE; |
| virtual const VideoDecoderConfig& video_decoder_config() OVERRIDE; |
| - protected: |
| - virtual ~ChunkDemuxerStream(); |
| - |
| private: |
| enum State { |
| RETURNING_DATA_FOR_READS, |
| @@ -615,18 +613,17 @@ void ChunkDemuxer::Seek(TimeDelta time, const PipelineStatusCB& cb) { |
| void ChunkDemuxer::OnAudioRendererDisabled() { |
| base::AutoLock auto_lock(lock_); |
| - audio_ = NULL; |
| + audio_.reset(); // XXX: IS THIS OK? |
|
acolwell GONE FROM CHROMIUM
2013/04/23 03:20:42
Unfortunately no. The decoder still has a referenc
scherkus (not reviewing)
2013/04/23 18:43:40
I took a stab at fixing this + added a test, but I
|
| } |
| // Demuxer implementation. |
| -scoped_refptr<DemuxerStream> ChunkDemuxer::GetStream( |
| - DemuxerStream::Type type) { |
| +DemuxerStream* ChunkDemuxer::GetStream(DemuxerStream::Type type) { |
| base::AutoLock auto_lock(lock_); |
| if (type == DemuxerStream::VIDEO) |
| - return video_; |
| + return video_.get(); |
| if (type == DemuxerStream::AUDIO) |
| - return audio_; |
| + return audio_.get(); |
| return NULL; |
| } |
| @@ -1142,7 +1139,7 @@ bool ChunkDemuxer::OnNewConfigs(bool has_audio, bool has_video, |
| if (audio_) { |
| success &= audio_->UpdateAudioConfig(audio_config); |
| } else { |
| - audio_ = new ChunkDemuxerStream(audio_config, log_cb_); |
| + audio_.reset(new ChunkDemuxerStream(audio_config, log_cb_)); |
| } |
| } |
| @@ -1150,7 +1147,7 @@ bool ChunkDemuxer::OnNewConfigs(bool has_audio, bool has_video, |
| if (video_) { |
| success &= video_->UpdateVideoConfig(video_config); |
| } else { |
| - video_ = new ChunkDemuxerStream(video_config, log_cb_); |
| + video_.reset(new ChunkDemuxerStream(video_config, log_cb_)); |
| } |
| } |
| @@ -1169,7 +1166,7 @@ bool ChunkDemuxer::OnAudioBuffers(const StreamParser::BufferQueue& buffers) { |
| if (!audio_->Append(buffers)) |
| return false; |
| - IncreaseDurationIfNecessary(buffers, audio_); |
| + IncreaseDurationIfNecessary(buffers, audio_.get()); |
| return true; |
| } |
| @@ -1184,7 +1181,7 @@ bool ChunkDemuxer::OnVideoBuffers(const StreamParser::BufferQueue& buffers) { |
| if (!video_->Append(buffers)) |
| return false; |
| - IncreaseDurationIfNecessary(buffers, video_); |
| + IncreaseDurationIfNecessary(buffers, video_.get()); |
| return true; |
| } |
| @@ -1227,7 +1224,7 @@ void ChunkDemuxer::UpdateDuration(base::TimeDelta new_duration) { |
| void ChunkDemuxer::IncreaseDurationIfNecessary( |
| const StreamParser::BufferQueue& buffers, |
| - const scoped_refptr<ChunkDemuxerStream>& stream) { |
| + ChunkDemuxerStream* stream) { |
| DCHECK(!buffers.empty()); |
| if (buffers.back()->GetTimestamp() <= duration_) |
| return; |