Chromium Code Reviews| Index: media/filters/video_frame_stream.cc |
| diff --git a/media/filters/video_frame_stream.cc b/media/filters/video_frame_stream.cc |
| index 93f2a0ea16d304a138a2963beb190c989ca4c513..be34a62cc6e024f830bd5c38e2665b1ef763055c 100644 |
| --- a/media/filters/video_frame_stream.cc |
| +++ b/media/filters/video_frame_stream.cc |
| @@ -24,15 +24,16 @@ VideoFrameStream::VideoFrameStream( |
| : message_loop_(message_loop), |
| weak_factory_(this), |
| state_(UNINITIALIZED), |
| - decoders_(decoders.Pass()), |
| - set_decryptor_ready_cb_(set_decryptor_ready_cb) { |
| + stream_(NULL), |
| + decoder_selector_(new VideoDecoderSelector( |
| + message_loop, decoders.Pass(), set_decryptor_ready_cb)) { |
| } |
| VideoFrameStream::~VideoFrameStream() { |
| DCHECK(state_ == UNINITIALIZED || state_ == STOPPED) << state_; |
| } |
| -void VideoFrameStream::Initialize(const scoped_refptr<DemuxerStream>& stream, |
| +void VideoFrameStream::Initialize(DemuxerStream* stream, |
| const StatisticsCB& statistics_cb, |
| const InitCB& init_cb) { |
| DCHECK(message_loop_->BelongsToCurrentThread()); |
| @@ -45,18 +46,8 @@ void VideoFrameStream::Initialize(const scoped_refptr<DemuxerStream>& stream, |
| init_cb_ = init_cb; |
| stream_ = stream; |
| - // TODO(scherkus): Make |decoder_selector| a member variable after |
| - // DemuxerStream is no longer refcounted. Today we're forced to do this |
| - // because it creates a refcount loop between |this| and |decoder_selector|. |
| - scoped_ptr<VideoDecoderSelector> decoder_selector(new VideoDecoderSelector( |
| - message_loop_, decoders_.Pass(), set_decryptor_ready_cb_)); |
| - set_decryptor_ready_cb_.Reset(); |
| - |
| - VideoDecoderSelector* decoder_selector_ptr = decoder_selector.get(); |
| - |
| - decoder_selector_ptr->SelectVideoDecoder(this, statistics_cb, base::Bind( |
| - &VideoFrameStream::OnDecoderSelected, weak_this_, |
| - base::Passed(&decoder_selector))); |
| + decoder_selector_->SelectVideoDecoder(this, statistics_cb, base::Bind( |
| + &VideoFrameStream::OnDecoderSelected, weak_this_)); |
| } |
| void VideoFrameStream::ReadFrame(const VideoDecoder::ReadCB& read_cb) { |
| @@ -122,12 +113,8 @@ void VideoFrameStream::Stop(const base::Closure& closure) { |
| } |
| state_ = STOPPED; |
| - // Break the ref-count loop so we don't leak objects. |
| - // TODO(scherkus): Make DemuxerStream and/or VideoDecoder not ref-counted so |
| - // we don't need this here. See: http://crbug.com/173313 |
| - stream_ = NULL; |
|
acolwell GONE FROM CHROMIUM
2013/04/23 03:20:42
nit: Any harm in keeping this?
scherkus (not reviewing)
2013/04/23 18:43:40
Done.
|
| - decrypting_demuxer_stream_ = NULL; |
| decoder_.reset(); |
| + decrypting_demuxer_stream_.reset(); |
| message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&stop_cb_)); |
| } |
| @@ -163,19 +150,19 @@ void VideoFrameStream::EnableBitstreamConverter() { |
| } |
| void VideoFrameStream::OnDecoderSelected( |
| - scoped_ptr<VideoDecoderSelector> decoder_selector, |
| scoped_ptr<VideoDecoder> selected_decoder, |
| - const scoped_refptr<DecryptingDemuxerStream>& decrypting_demuxer_stream) { |
| + scoped_ptr<DecryptingDemuxerStream> decrypting_demuxer_stream) { |
| DCHECK(message_loop_->BelongsToCurrentThread()); |
| DCHECK_EQ(state_, UNINITIALIZED); |
| DCHECK(!init_cb_.is_null()); |
| + decoder_selector_.reset(); |
| if (!selected_decoder) { |
| state_ = UNINITIALIZED; |
| base::ResetAndReturn(&init_cb_).Run(false, false); |
| } else { |
| decoder_ = selected_decoder.Pass(); |
| - decrypting_demuxer_stream_ = decrypting_demuxer_stream; |
| + decrypting_demuxer_stream_ = decrypting_demuxer_stream.Pass(); |
| state_ = NORMAL; |
| base::ResetAndReturn(&init_cb_).Run(true, decoder_->HasAlpha()); |
| } |
| @@ -233,12 +220,8 @@ void VideoFrameStream::OnDecoderStopped() { |
| DCHECK(!stop_cb_.is_null()); |
| state_ = STOPPED; |
| - // Break the ref-count loop so we don't leak objects. |
| - // TODO(scherkus): Make DemuxerStream and/or VideoDecoder not ref-counted so |
| - // we don't need this here. See: http://crbug.com/173313 |
| - stream_ = NULL; |
|
acolwell GONE FROM CHROMIUM
2013/04/23 03:20:42
nit:ditto
scherkus (not reviewing)
2013/04/23 18:43:40
Done.
|
| - decrypting_demuxer_stream_ = NULL; |
| decoder_.reset(); |
| + decrypting_demuxer_stream_.reset(); |
| base::ResetAndReturn(&stop_cb_).Run(); |
| } |