Index: content/common/gpu/media/gpu_video_decode_accelerator.cc |
diff --git a/content/common/gpu/media/gpu_video_decode_accelerator.cc b/content/common/gpu/media/gpu_video_decode_accelerator.cc |
index 9ec813983645bef94c86d0470861d9c00ce2ecae..e76608fc826769e176c72c68c7202884c8da0fd1 100644 |
--- a/content/common/gpu/media/gpu_video_decode_accelerator.cc |
+++ b/content/common/gpu/media/gpu_video_decode_accelerator.cc |
@@ -130,8 +130,7 @@ GpuVideoDecodeAccelerator::GpuVideoDecodeAccelerator( |
int32 host_route_id, |
GpuCommandBufferStub* stub, |
const scoped_refptr<base::MessageLoopProxy>& io_message_loop) |
- : init_done_msg_(NULL), |
- host_route_id_(host_route_id), |
+ : host_route_id_(host_route_id), |
stub_(stub), |
texture_target_(0), |
filter_removed_(true, false), |
@@ -139,7 +138,6 @@ GpuVideoDecodeAccelerator::GpuVideoDecodeAccelerator( |
weak_factory_for_io_(this) { |
DCHECK(stub_); |
stub_->AddDestructionObserver(this); |
- stub_->channel()->AddRoute(host_route_id_, this); |
child_message_loop_ = base::MessageLoopProxy::current(); |
make_context_current_ = |
base::Bind(&MakeDecoderContextCurrent, stub_->AsWeakPtr()); |
@@ -148,7 +146,7 @@ GpuVideoDecodeAccelerator::GpuVideoDecodeAccelerator( |
GpuVideoDecodeAccelerator::~GpuVideoDecodeAccelerator() { |
// This class can only be self-deleted from OnWillDestroyStub(), which means |
// the VDA has already been destroyed in there. |
- CHECK(!video_decode_accelerator_.get()); |
+ DCHECK(!video_decode_accelerator_); |
} |
bool GpuVideoDecodeAccelerator::OnMessageReceived(const IPC::Message& msg) { |
@@ -229,16 +227,6 @@ void GpuVideoDecodeAccelerator::PictureReady( |
void GpuVideoDecodeAccelerator::NotifyError( |
media::VideoDecodeAccelerator::Error error) { |
- if (init_done_msg_) { |
- // If we get an error while we're initializing, NotifyInitializeDone won't |
- // be called, so we need to send the reply (with an error) here. |
- GpuCommandBufferMsg_CreateVideoDecoder::WriteReplyParams( |
- init_done_msg_, -1); |
- if (!Send(init_done_msg_)) |
- DLOG(ERROR) << "Send(init_done_msg_) failed"; |
- init_done_msg_ = NULL; |
- return; |
- } |
if (!Send(new AcceleratedVideoDecoderHostMsg_ErrorNotification( |
host_route_id_, error))) { |
DLOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_ErrorNotification) " |
@@ -246,19 +234,22 @@ void GpuVideoDecodeAccelerator::NotifyError( |
} |
} |
+#define WRITE_REPLY_AND_SEND(msg, route_id) \ |
+ do { \ |
+ GpuCommandBufferMsg_CreateVideoDecoder::WriteReplyParams(msg, route_id); \ |
+ Send(init_done_msg); \ |
Ami GONE FROM CHROMIUM
2014/03/17 03:17:54
s/init_done_msg/msg/
but why not just a helper met
sheu
2014/03/18 22:38:35
Done.
|
+ } while (0) |
+ |
void GpuVideoDecodeAccelerator::Initialize( |
const media::VideoCodecProfile profile, |
IPC::Message* init_done_msg) { |
DCHECK(!video_decode_accelerator_.get()); |
- DCHECK(!init_done_msg_); |
- DCHECK(init_done_msg); |
- init_done_msg_ = init_done_msg; |
#if !defined(OS_WIN) |
// Ensure we will be able to get a GL context at all before initializing |
// non-Windows VDAs. |
if (!make_context_current_.Run()) { |
- NotifyError(media::VideoDecodeAccelerator::PLATFORM_FAILURE); |
+ WRITE_REPLY_AND_SEND(init_done_msg, -1); |
Ami GONE FROM CHROMIUM
2014/03/17 03:17:54
I thought route ID of "0" was error. But here I s
sheu
2014/03/18 22:38:35
On the renderer side it checks " < 0 " for error.
|
return; |
} |
#endif |
@@ -266,7 +257,7 @@ void GpuVideoDecodeAccelerator::Initialize( |
#if defined(OS_WIN) |
if (base::win::GetVersion() < base::win::VERSION_WIN7) { |
NOTIMPLEMENTED() << "HW video decode acceleration not available."; |
- NotifyError(media::VideoDecodeAccelerator::PLATFORM_FAILURE); |
+ WRITE_REPLY_AND_SEND(init_done_msg, -1); |
return; |
} |
DVLOG(0) << "Initializing DXVA HW decoder for windows."; |
@@ -275,7 +266,7 @@ void GpuVideoDecodeAccelerator::Initialize( |
#elif defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) && defined(USE_X11) |
scoped_ptr<V4L2Device> device = V4L2Device::Create(); |
if (!device.get()) { |
- NotifyError(media::VideoDecodeAccelerator::PLATFORM_FAILURE); |
+ WRITE_REPLY_AND_SEND(init_done_msg, -1); |
return; |
} |
video_decode_accelerator_.reset( |
@@ -288,7 +279,7 @@ void GpuVideoDecodeAccelerator::Initialize( |
if (gfx::GetGLImplementation() != gfx::kGLImplementationDesktopGL) { |
VLOG(1) << "HW video decode acceleration not available without " |
"DesktopGL (GLX)."; |
- NotifyError(media::VideoDecodeAccelerator::PLATFORM_FAILURE); |
+ WRITE_REPLY_AND_SEND(init_done_msg, -1); |
return; |
} |
gfx::GLContextGLX* glx_context = |
@@ -301,7 +292,7 @@ void GpuVideoDecodeAccelerator::Initialize( |
make_context_current_)); |
#else |
NOTIMPLEMENTED() << "HW video decode acceleration not available."; |
- NotifyError(media::VideoDecodeAccelerator::PLATFORM_FAILURE); |
+ WRITE_REPLY_AND_SEND(init_done_msg, -1); |
return; |
#endif |
@@ -310,10 +301,16 @@ void GpuVideoDecodeAccelerator::Initialize( |
stub_->channel()->AddFilter(filter_.get()); |
} |
- if (!video_decode_accelerator_->Initialize(profile, this)) |
- NotifyError(media::VideoDecodeAccelerator::PLATFORM_FAILURE); |
+ if (!video_decode_accelerator_->Initialize(profile, this)) { |
+ WRITE_REPLY_AND_SEND(init_done_msg, -1); |
+ return; |
+ } |
+ |
+ WRITE_REPLY_AND_SEND(init_done_msg, host_route_id_); |
} |
+#undef WRITE_REPLY_AND_SEND |
+ |
// Runs on IO thread if video_decode_accelerator_->CanDecodeOnIOThread() is |
// true, otherwise on the main thread. |
void GpuVideoDecodeAccelerator::OnDecode( |
@@ -448,14 +445,6 @@ void GpuVideoDecodeAccelerator::NotifyEndOfBitstreamBuffer( |
} |
} |
-void GpuVideoDecodeAccelerator::NotifyInitializeDone() { |
- GpuCommandBufferMsg_CreateVideoDecoder::WriteReplyParams( |
- init_done_msg_, host_route_id_); |
- if (!Send(init_done_msg_)) |
- DLOG(ERROR) << "Send(init_done_msg_) failed"; |
- init_done_msg_ = NULL; |
-} |
- |
void GpuVideoDecodeAccelerator::NotifyFlushDone() { |
if (!Send(new AcceleratedVideoDecoderHostMsg_FlushDone(host_route_id_))) |
DLOG(ERROR) << "Send(AcceleratedVideoDecoderHostMsg_FlushDone) failed"; |