Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1158)

Unified Diff: media/filters/video_frame_stream.cc

Issue 14217008: Remove reference counting from media::DemuxerStream and friends. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/video_frame_stream.h ('k') | media/filters/video_frame_stream_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..13d8b38fc6eaf800ce4cdf602318e052e491c3ad 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,9 @@ 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;
- decrypting_demuxer_stream_ = NULL;
decoder_.reset();
+ decrypting_demuxer_stream_.reset();
message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&stop_cb_));
}
@@ -163,19 +151,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 +221,9 @@ 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;
- decrypting_demuxer_stream_ = NULL;
decoder_.reset();
+ decrypting_demuxer_stream_.reset();
base::ResetAndReturn(&stop_cb_).Run();
}
« no previous file with comments | « media/filters/video_frame_stream.h ('k') | media/filters/video_frame_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698