| Index: content/common/gpu/media/v4l2_video_decode_accelerator.cc
|
| diff --git a/content/common/gpu/media/v4l2_video_decode_accelerator.cc b/content/common/gpu/media/v4l2_video_decode_accelerator.cc
|
| index 68baaa85c845c91dda916e544ddd9e15e27431a3..587da6bbc04ed5449ccadf7bf00f693f9273d3e4 100644
|
| --- a/content/common/gpu/media/v4l2_video_decode_accelerator.cc
|
| +++ b/content/common/gpu/media/v4l2_video_decode_accelerator.cc
|
| @@ -288,6 +288,9 @@ bool V4L2VideoDecodeAccelerator::Initialize(media::VideoCodecProfile profile,
|
| return false;
|
| }
|
|
|
| + if (!StartDevicePoll())
|
| + return false;
|
| +
|
| SetDecoderState(kInitialized);
|
|
|
| child_message_loop_proxy_->PostTask(FROM_HERE, base::Bind(
|
| @@ -709,7 +712,6 @@ bool V4L2VideoDecodeAccelerator::DecodeBufferInitial(
|
| DCHECK_EQ(decoder_thread_.message_loop(), base::MessageLoop::current());
|
| DCHECK_NE(decoder_state_, kUninitialized);
|
| DCHECK_NE(decoder_state_, kDecoding);
|
| - DCHECK(!device_poll_thread_.IsRunning());
|
| // Initial decode. We haven't been able to get output stream format info yet.
|
| // Get it, and start decoding.
|
|
|
| @@ -755,10 +757,6 @@ bool V4L2VideoDecodeAccelerator::DecodeBufferInitial(
|
| *endpos = size;
|
| }
|
|
|
| - // StartDevicePoll will raise the error if there is one.
|
| - if (!StartDevicePoll())
|
| - return false;
|
| -
|
| decoder_state_ = kDecoding;
|
| ScheduleDecodeBufferTaskIfNeeded();
|
| return true;
|
| @@ -885,8 +883,6 @@ void V4L2VideoDecodeAccelerator::ServiceDeviceTask(bool event_pending) {
|
| DVLOG(3) << "ServiceDeviceTask()";
|
| DCHECK_EQ(decoder_thread_.message_loop(), base::MessageLoop::current());
|
| DCHECK_NE(decoder_state_, kUninitialized);
|
| - DCHECK_NE(decoder_state_, kInitialized);
|
| - DCHECK_NE(decoder_state_, kAfterReset);
|
| TRACE_EVENT0("Video Decoder", "V4L2VDA::ServiceDeviceTask");
|
|
|
| if (decoder_state_ == kResetting) {
|
| @@ -1353,6 +1349,9 @@ void V4L2VideoDecodeAccelerator::ResetDoneTask() {
|
| return;
|
| }
|
|
|
| + if (!StartDevicePoll())
|
| + return;
|
| +
|
| // We might have received a resolution change event while we were waiting
|
| // for the reset to finish. The codec will not post another event if the
|
| // resolution after reset remains the same as the one to which were just
|
| @@ -1407,8 +1406,9 @@ void V4L2VideoDecodeAccelerator::DestroyTask() {
|
|
|
| bool V4L2VideoDecodeAccelerator::StartDevicePoll() {
|
| DVLOG(3) << "StartDevicePoll()";
|
| - DCHECK_EQ(decoder_thread_.message_loop(), base::MessageLoop::current());
|
| DCHECK(!device_poll_thread_.IsRunning());
|
| + if (decoder_thread_.IsRunning())
|
| + DCHECK_EQ(decoder_thread_.message_loop(), base::MessageLoop::current());
|
|
|
| // Start up the device poll thread and schedule its first DevicePollTask().
|
| if (!device_poll_thread_.Start()) {
|
| @@ -1495,7 +1495,8 @@ bool V4L2VideoDecodeAccelerator::StopDevicePoll(bool keep_input_state) {
|
|
|
| void V4L2VideoDecodeAccelerator::StartResolutionChangeIfNeeded() {
|
| DCHECK_EQ(decoder_thread_.message_loop(), base::MessageLoop::current());
|
| - DCHECK_EQ(decoder_state_, kDecoding);
|
| + DCHECK_NE(decoder_state_, kUninitialized);
|
| + DCHECK_NE(decoder_state_, kResetting);
|
|
|
| if (!resolution_change_pending_)
|
| return;
|
|
|