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 |