Index: trunk/src/media/filters/video_frame_stream.cc |
=================================================================== |
--- trunk/src/media/filters/video_frame_stream.cc (revision 195011) |
+++ trunk/src/media/filters/video_frame_stream.cc (working copy) |
@@ -19,13 +19,11 @@ |
VideoFrameStream::VideoFrameStream( |
const scoped_refptr<base::MessageLoopProxy>& message_loop, |
- ScopedVector<VideoDecoder> decoders, |
const SetDecryptorReadyCB& set_decryptor_ready_cb) |
: message_loop_(message_loop), |
weak_factory_(this), |
state_(UNINITIALIZED), |
- decoder_selector_( |
- message_loop_, decoders.Pass(), set_decryptor_ready_cb) { |
+ set_decryptor_ready_cb_(set_decryptor_ready_cb) { |
} |
VideoFrameStream::~VideoFrameStream() { |
@@ -33,6 +31,7 @@ |
} |
void VideoFrameStream::Initialize(const scoped_refptr<DemuxerStream>& stream, |
+ const VideoDecoderList& decoders, |
const StatisticsCB& statistics_cb, |
const InitCB& init_cb) { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
@@ -45,8 +44,20 @@ |
init_cb_ = init_cb; |
stream_ = stream; |
- decoder_selector_.SelectVideoDecoder(this, statistics_cb, base::Bind( |
- &VideoFrameStream::OnDecoderSelected, weak_this_)); |
+ scoped_ptr<VideoDecoderSelector> decoder_selector( |
+ new VideoDecoderSelector(message_loop_, |
+ 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( |
+ this, |
+ statistics_cb, |
+ base::Bind(&VideoFrameStream::OnDecoderSelected, weak_this_, |
+ base::Passed(&decoder_selector))); |
} |
void VideoFrameStream::ReadFrame(const VideoDecoder::ReadCB& read_cb) { |
@@ -117,7 +128,7 @@ |
// we don't need this here. See: http://crbug.com/173313 |
stream_ = NULL; |
decrypting_demuxer_stream_ = NULL; |
- decoder_.reset(); |
+ decoder_ = NULL; |
message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&stop_cb_)); |
} |
@@ -153,7 +164,8 @@ |
} |
void VideoFrameStream::OnDecoderSelected( |
- scoped_ptr<VideoDecoder> selected_decoder, |
+ scoped_ptr<VideoDecoderSelector> decoder_selector, |
+ const scoped_refptr<VideoDecoder>& selected_decoder, |
const scoped_refptr<DecryptingDemuxerStream>& decrypting_demuxer_stream) { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
DCHECK_EQ(state_, UNINITIALIZED); |
@@ -163,7 +175,7 @@ |
state_ = UNINITIALIZED; |
base::ResetAndReturn(&init_cb_).Run(false, false); |
} else { |
- decoder_ = selected_decoder.Pass(); |
+ decoder_ = selected_decoder; |
decrypting_demuxer_stream_ = decrypting_demuxer_stream; |
state_ = NORMAL; |
base::ResetAndReturn(&init_cb_).Run(true, decoder_->HasAlpha()); |
@@ -227,7 +239,7 @@ |
// we don't need this here. See: http://crbug.com/173313 |
stream_ = NULL; |
decrypting_demuxer_stream_ = NULL; |
- decoder_.reset(); |
+ decoder_ = NULL; |
base::ResetAndReturn(&stop_cb_).Run(); |
} |