| Index: content/renderer/media/rtc_video_decoder.cc
|
| diff --git a/content/renderer/media/rtc_video_decoder.cc b/content/renderer/media/rtc_video_decoder.cc
|
| index 1c8d6008bcadd65892c23b85ef3435b5ddacdb79..aa32aae8a955c71b2c1ca71c2bb34737a7790615 100644
|
| --- a/content/renderer/media/rtc_video_decoder.cc
|
| +++ b/content/renderer/media/rtc_video_decoder.cc
|
| @@ -74,7 +74,7 @@ RTCVideoDecoder::BufferData::~BufferData() {}
|
| RTCVideoDecoder::RTCVideoDecoder(
|
| const scoped_refptr<media::GpuVideoAcceleratorFactories>& factories)
|
| : factories_(factories),
|
| - vda_loop_proxy_(factories->GetMessageLoop()),
|
| + vda_task_runner_(factories->GetTaskRunner()),
|
| decoder_texture_target_(0),
|
| next_picture_buffer_id_(0),
|
| state_(UNINITIALIZED),
|
| @@ -83,25 +83,24 @@ RTCVideoDecoder::RTCVideoDecoder(
|
| next_bitstream_buffer_id_(0),
|
| reset_bitstream_buffer_id_(ID_INVALID),
|
| weak_factory_(this) {
|
| - DCHECK(!vda_loop_proxy_->BelongsToCurrentThread());
|
| -
|
| + DCHECK(!vda_task_runner_->BelongsToCurrentThread());
|
| weak_this_ = weak_factory_.GetWeakPtr();
|
|
|
| base::WaitableEvent message_loop_async_waiter(false, false);
|
| // Waiting here is safe. The media thread is stopped in the child thread and
|
| // the child thread is blocked when VideoDecoderFactory::CreateVideoDecoder
|
| // runs.
|
| - vda_loop_proxy_->PostTask(FROM_HERE,
|
| - base::Bind(&RTCVideoDecoder::Initialize,
|
| - base::Unretained(this),
|
| - &message_loop_async_waiter));
|
| + vda_task_runner_->PostTask(FROM_HERE,
|
| + base::Bind(&RTCVideoDecoder::Initialize,
|
| + base::Unretained(this),
|
| + &message_loop_async_waiter));
|
| message_loop_async_waiter.Wait();
|
| }
|
|
|
| RTCVideoDecoder::~RTCVideoDecoder() {
|
| DVLOG(2) << "~RTCVideoDecoder";
|
| // Destroy VDA and remove |this| from the observer if this is vda thread.
|
| - if (vda_loop_proxy_->BelongsToCurrentThread()) {
|
| + if (vda_task_runner_->BelongsToCurrentThread()) {
|
| base::MessageLoop::current()->RemoveDestructionObserver(this);
|
| DestroyVDA();
|
| } else {
|
| @@ -147,7 +146,7 @@ scoped_ptr<RTCVideoDecoder> RTCVideoDecoder::Create(
|
| if (decoder->vda_ != NULL) {
|
| decoder->state_ = INITIALIZED;
|
| } else {
|
| - factories->GetMessageLoop()->DeleteSoon(FROM_HERE, decoder.release());
|
| + factories->GetTaskRunner()->DeleteSoon(FROM_HERE, decoder.release());
|
| }
|
| return decoder.Pass();
|
| }
|
| @@ -168,11 +167,11 @@ int32_t RTCVideoDecoder::InitDecode(const webrtc::VideoCodec* codecSettings,
|
| }
|
| // Create some shared memory if the queue is empty.
|
| if (available_shm_segments_.size() == 0) {
|
| - vda_loop_proxy_->PostTask(FROM_HERE,
|
| - base::Bind(&RTCVideoDecoder::CreateSHM,
|
| - weak_this_,
|
| - kMaxInFlightDecodes,
|
| - kSharedMemorySegmentBytes));
|
| + vda_task_runner_->PostTask(FROM_HERE,
|
| + base::Bind(&RTCVideoDecoder::CreateSHM,
|
| + weak_this_,
|
| + kMaxInFlightDecodes,
|
| + kSharedMemorySegmentBytes));
|
| }
|
| return RecordInitDecodeUMA(WEBRTC_VIDEO_CODEC_OK);
|
| }
|
| @@ -258,7 +257,7 @@ int32_t RTCVideoDecoder::Decode(
|
| }
|
|
|
| SaveToDecodeBuffers_Locked(inputImage, shm_buffer.Pass(), buffer_data);
|
| - vda_loop_proxy_->PostTask(
|
| + vda_task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&RTCVideoDecoder::RequestBufferDecode, weak_this_));
|
| return WEBRTC_VIDEO_CODEC_OK;
|
| }
|
| @@ -292,7 +291,7 @@ int32_t RTCVideoDecoder::Reset() {
|
| // If VDA is already resetting, no need to request the reset again.
|
| if (state_ != RESETTING) {
|
| state_ = RESETTING;
|
| - vda_loop_proxy_->PostTask(
|
| + vda_task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&RTCVideoDecoder::ResetInternal, weak_this_));
|
| }
|
| return WEBRTC_VIDEO_CODEC_OK;
|
| @@ -306,7 +305,7 @@ void RTCVideoDecoder::NotifyInitializeDone() {
|
| void RTCVideoDecoder::ProvidePictureBuffers(uint32 count,
|
| const gfx::Size& size,
|
| uint32 texture_target) {
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| DVLOG(3) << "ProvidePictureBuffers. texture_target=" << texture_target;
|
|
|
| if (!vda_)
|
| @@ -341,7 +340,7 @@ void RTCVideoDecoder::ProvidePictureBuffers(uint32 count,
|
|
|
| void RTCVideoDecoder::DismissPictureBuffer(int32 id) {
|
| DVLOG(3) << "DismissPictureBuffer. id=" << id;
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
|
|
| std::map<int32, media::PictureBuffer>::iterator it =
|
| assigned_picture_buffers_.find(id);
|
| @@ -369,7 +368,7 @@ void RTCVideoDecoder::DismissPictureBuffer(int32 id) {
|
|
|
| void RTCVideoDecoder::PictureReady(const media::Picture& picture) {
|
| DVLOG(3) << "PictureReady";
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
|
|
| std::map<int32, media::PictureBuffer>::iterator it =
|
| assigned_picture_buffers_.find(picture.picture_buffer_id());
|
| @@ -442,7 +441,7 @@ scoped_refptr<media::VideoFrame> RTCVideoDecoder::CreateVideoFrame(
|
|
|
| void RTCVideoDecoder::NotifyEndOfBitstreamBuffer(int32 id) {
|
| DVLOG(3) << "NotifyEndOfBitstreamBuffer. id=" << id;
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
|
|
| std::map<int32, SHMBuffer*>::iterator it =
|
| bitstream_buffers_in_decoder_.find(id);
|
| @@ -467,7 +466,7 @@ void RTCVideoDecoder::NotifyFlushDone() {
|
| }
|
|
|
| void RTCVideoDecoder::NotifyResetDone() {
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| DVLOG(3) << "NotifyResetDone";
|
|
|
| if (!vda_)
|
| @@ -483,7 +482,7 @@ void RTCVideoDecoder::NotifyResetDone() {
|
| }
|
|
|
| void RTCVideoDecoder::NotifyError(media::VideoDecodeAccelerator::Error error) {
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| if (!vda_)
|
| return;
|
|
|
| @@ -499,7 +498,7 @@ void RTCVideoDecoder::NotifyError(media::VideoDecodeAccelerator::Error error) {
|
|
|
| void RTCVideoDecoder::WillDestroyCurrentMessageLoop() {
|
| DVLOG(2) << "WillDestroyCurrentMessageLoop";
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| factories_->Abort();
|
| weak_factory_.InvalidateWeakPtrs();
|
| DestroyVDA();
|
| @@ -507,13 +506,13 @@ void RTCVideoDecoder::WillDestroyCurrentMessageLoop() {
|
|
|
| void RTCVideoDecoder::Initialize(base::WaitableEvent* waiter) {
|
| DVLOG(2) << "Initialize";
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| base::MessageLoop::current()->AddDestructionObserver(this);
|
| waiter->Signal();
|
| }
|
|
|
| void RTCVideoDecoder::RequestBufferDecode() {
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| if (!vda_)
|
| return;
|
|
|
| @@ -635,7 +634,7 @@ void RTCVideoDecoder::MovePendingBuffersToDecodeBuffers() {
|
| }
|
|
|
| void RTCVideoDecoder::ResetInternal() {
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| DVLOG(2) << "ResetInternal";
|
| if (vda_)
|
| vda_->Reset();
|
| @@ -643,7 +642,7 @@ void RTCVideoDecoder::ResetInternal() {
|
|
|
| void RTCVideoDecoder::ReusePictureBuffer(int64 picture_buffer_id,
|
| uint32 sync_point) {
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| DVLOG(3) << "ReusePictureBuffer. id=" << picture_buffer_id;
|
|
|
| if (!vda_)
|
| @@ -672,7 +671,7 @@ void RTCVideoDecoder::ReusePictureBuffer(int64 picture_buffer_id,
|
| }
|
|
|
| void RTCVideoDecoder::DestroyTextures() {
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| std::map<int32, media::PictureBuffer>::iterator it;
|
|
|
| for (it = assigned_picture_buffers_.begin();
|
| @@ -692,7 +691,7 @@ void RTCVideoDecoder::DestroyTextures() {
|
|
|
| void RTCVideoDecoder::DestroyVDA() {
|
| DVLOG(2) << "DestroyVDA";
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| if (vda_)
|
| vda_.release()->Destroy();
|
| DestroyTextures();
|
| @@ -713,7 +712,7 @@ scoped_ptr<RTCVideoDecoder::SHMBuffer> RTCVideoDecoder::GetSHM_Locked(
|
| // queue is almost empty.
|
| if (num_shm_buffers_ < kMaxNumSharedMemorySegments &&
|
| (ret == NULL || available_shm_segments_.size() <= 1)) {
|
| - vda_loop_proxy_->PostTask(
|
| + vda_task_runner_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&RTCVideoDecoder::CreateSHM, weak_this_, 1, min_size));
|
| }
|
| @@ -725,7 +724,7 @@ void RTCVideoDecoder::PutSHM_Locked(scoped_ptr<SHMBuffer> shm_buffer) {
|
| }
|
|
|
| void RTCVideoDecoder::CreateSHM(int number, size_t min_size) {
|
| - DCHECK(vda_loop_proxy_->BelongsToCurrentThread());
|
| + DCHECK(vda_task_runner_->BelongsToCurrentThread());
|
| DVLOG(2) << "CreateSHM. size=" << min_size;
|
| int number_to_allocate;
|
| {
|
|
|