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

Unified Diff: media/filters/video_renderer_base.cc

Issue 12989009: Remove reference counting from media::VideoDecoder and friends. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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
Index: media/filters/video_renderer_base.cc
diff --git a/media/filters/video_renderer_base.cc b/media/filters/video_renderer_base.cc
index ca8f3429c737089d9b4ec07aeda5501aec64689b..9318f161da953ac3b62d961fa139106634ab0ad6 100644
--- a/media/filters/video_renderer_base.cc
+++ b/media/filters/video_renderer_base.cc
@@ -24,13 +24,15 @@ base::TimeDelta VideoRendererBase::kMaxLastFrameDuration() {
VideoRendererBase::VideoRendererBase(
const scoped_refptr<base::MessageLoopProxy>& message_loop,
+ ScopedVector<VideoDecoder> decoders,
const SetDecryptorReadyCB& set_decryptor_ready_cb,
const PaintCB& paint_cb,
const SetOpaqueCB& set_opaque_cb,
bool drop_frames)
: message_loop_(message_loop),
weak_factory_(this),
- set_decryptor_ready_cb_(set_decryptor_ready_cb),
+ decoder_selector_(new VideoDecoderSelector(
+ message_loop, decoders.Pass(), set_decryptor_ready_cb)),
received_end_of_stream_(false),
frame_available_(&lock_),
state_(kUninitialized),
@@ -162,7 +164,6 @@ void VideoRendererBase::Preroll(base::TimeDelta time,
}
void VideoRendererBase::Initialize(const scoped_refptr<DemuxerStream>& stream,
- const VideoDecoderList& decoders,
const PipelineStatusCB& init_cb,
const StatisticsCB& statistics_cb,
const TimeCB& max_time_cb,
@@ -174,7 +175,6 @@ void VideoRendererBase::Initialize(const scoped_refptr<DemuxerStream>& stream,
DCHECK(message_loop_->BelongsToCurrentThread());
base::AutoLock auto_lock(lock_);
DCHECK(stream);
- DCHECK(!decoders.empty());
DCHECK_EQ(stream->type(), DemuxerStream::VIDEO);
DCHECK(!init_cb.is_null());
DCHECK(!statistics_cb.is_null());
@@ -196,25 +196,14 @@ void VideoRendererBase::Initialize(const scoped_refptr<DemuxerStream>& stream,
get_duration_cb_ = get_duration_cb;
state_ = kInitializing;
- scoped_ptr<VideoDecoderSelector> decoder_selector(
- new VideoDecoderSelector(base::MessageLoopProxy::current(),
- decoders,
- set_decryptor_ready_cb_));
-
- // To avoid calling |decoder_selector| methods and passing ownership of
- // |decoder_selector| in the same line.
- VideoDecoderSelector* decoder_selector_ptr = decoder_selector.get();
-
- decoder_selector_ptr->SelectVideoDecoder(
+ decoder_selector_->SelectVideoDecoder(
stream,
statistics_cb,
- base::Bind(&VideoRendererBase::OnDecoderSelected, weak_this_,
- base::Passed(&decoder_selector)));
+ base::Bind(&VideoRendererBase::OnDecoderSelected, weak_this_));
}
void VideoRendererBase::OnDecoderSelected(
- scoped_ptr<VideoDecoderSelector> decoder_selector,
- const scoped_refptr<VideoDecoder>& selected_decoder,
+ scoped_ptr<VideoDecoder> decoder,
const scoped_refptr<DecryptingDemuxerStream>& decrypting_demuxer_stream) {
DCHECK(message_loop_->BelongsToCurrentThread());
base::AutoLock auto_lock(lock_);
@@ -224,13 +213,13 @@ void VideoRendererBase::OnDecoderSelected(
DCHECK_EQ(state_, kInitializing);
- if (!selected_decoder) {
+ if (!decoder) {
state_ = kUninitialized;
base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED);
return;
}
- decoder_ = selected_decoder;
+ decoder_ = decoder.Pass();
decrypting_demuxer_stream_ = decrypting_demuxer_stream;
// We're all good! Consider ourselves flushed. (ThreadMain() should never

Powered by Google App Engine
This is Rietveld 408576698