Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Unified Diff: content/common/gpu/client/gpu_video_decode_accelerator_host.cc

Issue 1656433002: Sample code: IPC Transport object for GPU Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: GpuMemoryBufferService + Transport object. TODO: Eliminate ChildThreadImpl dependency Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/common/gpu/client/gpu_video_decode_accelerator_host.cc
diff --git a/content/common/gpu/client/gpu_video_decode_accelerator_host.cc b/content/common/gpu/client/gpu_video_decode_accelerator_host.cc
index 19a336b9ca30af573159449f4eef9911b2b01b8d..56ace4053ff69fdca8d071579de7291669e18386 100644
--- a/content/common/gpu/client/gpu_video_decode_accelerator_host.cc
+++ b/content/common/gpu/client/gpu_video_decode_accelerator_host.cc
@@ -7,118 +7,68 @@
#include "base/bind.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
+#include "base/thread_task_runner_handle.h"
#include "build/build_config.h"
#include "content/common/gpu/client/gpu_channel_host.h"
-#include "content/common/gpu/gpu_messages.h"
-#include "content/common/view_messages.h"
-#include "ipc/ipc_message_macros.h"
-#include "ipc/ipc_message_utils.h"
+#include "content/common/gpu/client/ipc/chrome/chrome_command_buffer_ipc_transport.h"
+#include "content/common/gpu/video_decode_params.h"
#if defined(OS_WIN)
#include "content/public/common/sandbox_init.h"
#endif // OS_WIN
using media::VideoDecodeAccelerator;
+
namespace content {
GpuVideoDecodeAcceleratorHost::GpuVideoDecodeAcceleratorHost(
GpuChannelHost* channel,
+ scoped_ptr<GpuVideoDecodeAcceleratorHostIPCTransport> transport,
CommandBufferProxyImpl* impl)
: channel_(channel),
- decoder_route_id_(MSG_ROUTING_NONE),
- client_(NULL),
+ transport_(std::move(transport)),
+ client_(nullptr),
impl_(impl),
weak_this_factory_(this) {
- DCHECK(channel_);
DCHECK(impl_);
impl_->AddDeletionObserver(this);
+ transport_->SetClient(this);
}
GpuVideoDecodeAcceleratorHost::~GpuVideoDecodeAcceleratorHost() {
DCHECK(CalledOnValidThread());
-
- if (channel_ && decoder_route_id_ != MSG_ROUTING_NONE)
- channel_->RemoveRoute(decoder_route_id_);
+ transport_.reset();
if (impl_)
impl_->RemoveDeletionObserver(this);
}
-bool GpuVideoDecodeAcceleratorHost::OnMessageReceived(const IPC::Message& msg) {
- DCHECK(CalledOnValidThread());
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(GpuVideoDecodeAcceleratorHost, msg)
- IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_CdmAttached,
- OnCdmAttached)
- IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_BitstreamBufferProcessed,
- OnBitstreamBufferProcessed)
- IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_ProvidePictureBuffers,
- OnProvidePictureBuffer)
- IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_PictureReady,
- OnPictureReady)
- IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_FlushDone,
- OnFlushDone)
- IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_ResetDone,
- OnResetDone)
- IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_ErrorNotification,
- OnNotifyError)
- IPC_MESSAGE_HANDLER(AcceleratedVideoDecoderHostMsg_DismissPictureBuffer,
- OnDismissPictureBuffer)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- DCHECK(handled);
- // See OnNotifyError for why |this| mustn't be used after OnNotifyError might
- // have been called above.
- return handled;
-}
-
-void GpuVideoDecodeAcceleratorHost::OnChannelError() {
- DCHECK(CalledOnValidThread());
- if (channel_) {
- if (decoder_route_id_ != MSG_ROUTING_NONE)
- channel_->RemoveRoute(decoder_route_id_);
- channel_ = NULL;
- }
- DLOG(ERROR) << "OnChannelError()";
- PostNotifyError(PLATFORM_FAILURE);
-}
-
-bool GpuVideoDecodeAcceleratorHost::Initialize(const Config& config,
- Client* client) {
+bool GpuVideoDecodeAcceleratorHost::Initialize(
+ const Config& config,
+ media::VideoDecodeAccelerator::Client* client) {
DCHECK(CalledOnValidThread());
client_ = client;
if (!impl_)
return false;
- int32_t route_id = channel_->GenerateRouteID();
- channel_->AddRoute(route_id, weak_this_factory_.GetWeakPtr());
-
bool succeeded = false;
- Send(new GpuCommandBufferMsg_CreateVideoDecoder(impl_->route_id(), config,
- route_id, &succeeded));
-
+ impl_->transport()->CreateVideoDecoder(transport_.get(), config, &succeeded);
if (!succeeded) {
- DLOG(ERROR) << "Send(GpuCommandBufferMsg_CreateVideoDecoder()) failed";
+ DLOG(ERROR) << "CreateVideoDecoder() failed";
PostNotifyError(PLATFORM_FAILURE);
- channel_->RemoveRoute(route_id);
return false;
}
- decoder_route_id_ = route_id;
return true;
}
void GpuVideoDecodeAcceleratorHost::SetCdm(int cdm_id) {
DCHECK(CalledOnValidThread());
- if (!channel_)
- return;
- Send(new AcceleratedVideoDecoderMsg_SetCdm(decoder_route_id_, cdm_id));
+ transport_->SetCdm(cdm_id);
}
void GpuVideoDecodeAcceleratorHost::Decode(
const media::BitstreamBuffer& bitstream_buffer) {
DCHECK(CalledOnValidThread());
- if (!channel_)
- return;
base::SharedMemoryHandle handle = channel_->ShareToGpuProcess(
bitstream_buffer.handle());
@@ -127,7 +77,7 @@ void GpuVideoDecodeAcceleratorHost::Decode(
return;
}
- AcceleratedVideoDecoderMsg_Decode_Params params;
+ VideoDecodeParams params;
params.bitstream_buffer_id = bitstream_buffer.id();
params.buffer_handle = handle;
params.size = bitstream_buffer.size();
@@ -136,7 +86,7 @@ void GpuVideoDecodeAcceleratorHost::Decode(
params.iv = bitstream_buffer.iv();
params.subsamples = bitstream_buffer.subsamples();
- Send(new AcceleratedVideoDecoderMsg_Decode(decoder_route_id_, params));
+ transport_->Decode(params);
}
void GpuVideoDecodeAcceleratorHost::AssignPictureBuffers(
@@ -159,8 +109,7 @@ void GpuVideoDecodeAcceleratorHost::AssignPictureBuffers(
texture_ids.push_back(buffer.texture_id());
buffer_ids.push_back(buffer.id());
}
- Send(new AcceleratedVideoDecoderMsg_AssignPictureBuffers(
- decoder_route_id_, buffer_ids, texture_ids));
+ transport_->AssignPictureBuffers(buffer_ids, texture_ids);
}
void GpuVideoDecodeAcceleratorHost::ReusePictureBuffer(
@@ -168,38 +117,34 @@ void GpuVideoDecodeAcceleratorHost::ReusePictureBuffer(
DCHECK(CalledOnValidThread());
if (!channel_)
return;
- Send(new AcceleratedVideoDecoderMsg_ReusePictureBuffer(
- decoder_route_id_, picture_buffer_id));
+ transport_->ReusePictureBuffer(picture_buffer_id);
}
void GpuVideoDecodeAcceleratorHost::Flush() {
DCHECK(CalledOnValidThread());
if (!channel_)
return;
- Send(new AcceleratedVideoDecoderMsg_Flush(decoder_route_id_));
+ transport_->Flush();
}
void GpuVideoDecodeAcceleratorHost::Reset() {
DCHECK(CalledOnValidThread());
if (!channel_)
return;
- Send(new AcceleratedVideoDecoderMsg_Reset(decoder_route_id_));
+ transport_->Reset();
}
void GpuVideoDecodeAcceleratorHost::Destroy() {
DCHECK(CalledOnValidThread());
if (channel_)
- Send(new AcceleratedVideoDecoderMsg_Destroy(decoder_route_id_));
- client_ = NULL;
+ transport_->Destroy();
+ client_ = nullptr;
delete this;
}
void GpuVideoDecodeAcceleratorHost::OnWillDeleteImpl() {
DCHECK(CalledOnValidThread());
- impl_ = NULL;
-
- // The CommandBufferProxyImpl is going away; error out this VDA.
- OnChannelError();
+ impl_ = nullptr;
}
void GpuVideoDecodeAcceleratorHost::PostNotifyError(Error error) {
@@ -210,15 +155,6 @@ void GpuVideoDecodeAcceleratorHost::PostNotifyError(Error error) {
weak_this_factory_.GetWeakPtr(), error));
}
-void GpuVideoDecodeAcceleratorHost::Send(IPC::Message* message) {
- DCHECK(CalledOnValidThread());
- uint32_t message_type = message->type();
- if (!channel_->Send(message)) {
- DLOG(ERROR) << "Send(" << message_type << ") failed";
- PostNotifyError(PLATFORM_FAILURE);
- }
-}
-
void GpuVideoDecodeAcceleratorHost::OnCdmAttached(bool success) {
DCHECK(CalledOnValidThread());
if (client_)
@@ -284,7 +220,7 @@ void GpuVideoDecodeAcceleratorHost::OnNotifyError(uint32_t error) {
// Client::NotifyError() may Destroy() |this|, so calling it needs to be the
// last thing done on this stack!
- media::VideoDecodeAccelerator::Client* client = NULL;
+ media::VideoDecodeAccelerator::Client* client = nullptr;
std::swap(client, client_);
client->NotifyError(static_cast<media::VideoDecodeAccelerator::Error>(error));
}

Powered by Google App Engine
This is Rietveld 408576698