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

Unified Diff: content/common/gpu/client/gpu_video_encode_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_encode_accelerator_host.cc
diff --git a/content/common/gpu/client/gpu_video_encode_accelerator_host.cc b/content/common/gpu/client/gpu_video_encode_accelerator_host.cc
index 9002490e1dd21d51163285b5d5fa99bee9ee8a91..86e8923b7ff9b975e6f5236b3afd37dc7682fcee 100644
--- a/content/common/gpu/client/gpu_video_encode_accelerator_host.cc
+++ b/content/common/gpu/client/gpu_video_encode_accelerator_host.cc
@@ -6,9 +6,12 @@
#include "base/location.h"
#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+#include "base/thread_task_runner_handle.h"
#include "content/common/gpu/client/gpu_channel_host.h"
-#include "content/common/gpu/gpu_messages.h"
+#include "content/common/gpu/client/ipc/command_buffer_ipc_transport.h"
#include "content/common/gpu/media/gpu_video_accelerator_util.h"
+#include "content/common/gpu/video_encode_params.h"
#include "media/base/video_frame.h"
#include "media/video/video_encode_accelerator.h"
#include "ui/gfx/gpu_memory_buffer.h"
@@ -17,56 +20,29 @@ namespace content {
GpuVideoEncodeAcceleratorHost::GpuVideoEncodeAcceleratorHost(
GpuChannelHost* channel,
+ scoped_ptr<GpuVideoEncodeAcceleratorHostIPCTransport> transport,
CommandBufferProxyImpl* impl)
: channel_(channel),
- encoder_route_id_(MSG_ROUTING_NONE),
- client_(NULL),
+ transport_(std::move(transport)),
+ client_(nullptr),
impl_(impl),
next_frame_id_(0),
weak_this_factory_(this) {
DCHECK(channel_);
DCHECK(impl_);
impl_->AddDeletionObserver(this);
+ transport_->SetClient(this);
}
GpuVideoEncodeAcceleratorHost::~GpuVideoEncodeAcceleratorHost() {
DCHECK(CalledOnValidThread());
- if (channel_ && encoder_route_id_ != MSG_ROUTING_NONE)
- channel_->RemoveRoute(encoder_route_id_);
+ // TODO(fsamuel): Figure out message routing here.
+ // if (channel_ && encoder_route_id_ != MSG_ROUTING_NONE)
+ // channel_->RemoveRoute(encoder_route_id_);
if (impl_)
impl_->RemoveDeletionObserver(this);
}
-bool GpuVideoEncodeAcceleratorHost::OnMessageReceived(
- const IPC::Message& message) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(GpuVideoEncodeAcceleratorHost, message)
- IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderHostMsg_RequireBitstreamBuffers,
- OnRequireBitstreamBuffers)
- IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderHostMsg_NotifyInputDone,
- OnNotifyInputDone)
- IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderHostMsg_BitstreamBufferReady,
- OnBitstreamBufferReady)
- IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderHostMsg_NotifyError,
- OnNotifyError)
- 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 GpuVideoEncodeAcceleratorHost::OnChannelError() {
- DCHECK(CalledOnValidThread());
- if (channel_) {
- if (encoder_route_id_ != MSG_ROUTING_NONE)
- channel_->RemoveRoute(encoder_route_id_);
- channel_ = NULL;
- }
- PostNotifyError(FROM_HERE, kPlatformFailureError, "OnChannelError()");
-}
-
media::VideoEncodeAccelerator::SupportedProfiles
GpuVideoEncodeAcceleratorHost::GetSupportedProfiles() {
DCHECK(CalledOnValidThread());
@@ -81,7 +57,7 @@ bool GpuVideoEncodeAcceleratorHost::Initialize(
const gfx::Size& input_visible_size,
media::VideoCodecProfile output_profile,
uint32_t initial_bitrate,
- Client* client) {
+ media::VideoEncodeAccelerator::Client* client) {
DCHECK(CalledOnValidThread());
client_ = client;
if (!impl_) {
@@ -89,19 +65,14 @@ bool GpuVideoEncodeAcceleratorHost::Initialize(
return false;
}
- int32_t route_id = channel_->GenerateRouteID();
- channel_->AddRoute(route_id, weak_this_factory_.GetWeakPtr());
-
bool succeeded = false;
- Send(new GpuCommandBufferMsg_CreateVideoEncoder(
- impl_->route_id(), input_format, input_visible_size, output_profile,
- initial_bitrate, route_id, &succeeded));
+ impl_->transport()->CreateVideoEncoder(transport_.get(), input_format,
+ input_visible_size, output_profile,
+ initial_bitrate, &succeeded);
if (!succeeded) {
- DLOG(ERROR) << "Send(GpuCommandBufferMsg_CreateVideoEncoder()) failed";
- channel_->RemoveRoute(route_id);
+ DLOG(ERROR) << "CreateVidoEncoder() failed";
return false;
}
- encoder_route_id_ = route_id;
return true;
}
@@ -148,8 +119,7 @@ void GpuVideoEncodeAcceleratorHost::UseOutputBitstreamBuffer(
buffer.id()));
return;
}
- Send(new AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer(
- encoder_route_id_, buffer.id(), handle, buffer.size()));
+ transport_->UseOutputBitstreamBuffer(buffer.id(), handle, buffer.size());
}
void GpuVideoEncodeAcceleratorHost::RequestEncodingParametersChange(
@@ -158,25 +128,20 @@ void GpuVideoEncodeAcceleratorHost::RequestEncodingParametersChange(
DCHECK(CalledOnValidThread());
if (!channel_)
return;
-
- Send(new AcceleratedVideoEncoderMsg_RequestEncodingParametersChange(
- encoder_route_id_, bitrate, framerate));
+ transport_->RequestEncodingParametersChange(bitrate, framerate);
}
void GpuVideoEncodeAcceleratorHost::Destroy() {
DCHECK(CalledOnValidThread());
if (channel_)
- Send(new AcceleratedVideoEncoderMsg_Destroy(encoder_route_id_));
- client_ = NULL;
+ transport_->Destroy();
+ client_ = nullptr;
delete this;
}
void GpuVideoEncodeAcceleratorHost::OnWillDeleteImpl() {
DCHECK(CalledOnValidThread());
- impl_ = NULL;
-
- // The CommandBufferProxyImpl is going away; error out this VEA.
- OnChannelError();
+ impl_ = nullptr;
}
void GpuVideoEncodeAcceleratorHost::EncodeGpuMemoryBufferFrame(
@@ -184,7 +149,7 @@ void GpuVideoEncodeAcceleratorHost::EncodeGpuMemoryBufferFrame(
bool force_keyframe){
DCHECK_EQ(media::VideoFrame::NumPlanes(media::PIXEL_FORMAT_I420),
frame->gpu_memory_buffer_handles().size());
- AcceleratedVideoEncoderMsg_Encode_Params2 params;
+ VideoEncodeParams2 params;
params.frame_id = next_frame_id_;
params.timestamp = frame->timestamp();
bool requires_sync_point = false;
@@ -202,8 +167,7 @@ void GpuVideoEncodeAcceleratorHost::EncodeGpuMemoryBufferFrame(
}
params.size = frame->coded_size();
params.force_keyframe = force_keyframe;
-
- Send(new AcceleratedVideoEncoderMsg_Encode2(encoder_route_id_, params));
+ transport_->Encode2(params);
}
void GpuVideoEncodeAcceleratorHost::EncodeSharedMemoryFrame(
@@ -216,7 +180,7 @@ void GpuVideoEncodeAcceleratorHost::EncodeSharedMemoryFrame(
return;
}
- AcceleratedVideoEncoderMsg_Encode_Params params;
+ VideoEncodeParams params;
params.frame_id = next_frame_id_;
params.timestamp = frame->timestamp();
params.buffer_handle =
@@ -232,8 +196,7 @@ void GpuVideoEncodeAcceleratorHost::EncodeSharedMemoryFrame(
params.buffer_size =
media::VideoFrame::AllocationSize(frame->format(), frame->coded_size());
params.force_keyframe = force_keyframe;
-
- Send(new AcceleratedVideoEncoderMsg_Encode(encoder_route_id_, params));
+ transport_->Encode(params);
}
void GpuVideoEncodeAcceleratorHost::PostNotifyError(
@@ -250,15 +213,6 @@ void GpuVideoEncodeAcceleratorHost::PostNotifyError(
weak_this_factory_.GetWeakPtr(), error));
}
-void GpuVideoEncodeAcceleratorHost::Send(IPC::Message* message) {
- DCHECK(CalledOnValidThread());
- uint32_t message_type = message->type();
- if (!channel_->Send(message)) {
- PostNotifyError(FROM_HERE, kPlatformFailureError,
- base::StringPrintf("Send(%d) failed", message_type));
- }
-}
-
void GpuVideoEncodeAcceleratorHost::OnRequireBitstreamBuffers(
uint32_t input_count,
const gfx::Size& input_coded_size,
@@ -290,7 +244,8 @@ void GpuVideoEncodeAcceleratorHost::OnNotifyInputDone(int32_t frame_id) {
OnNotifyError(kPlatformFailureError);
return;
}
- frame = NULL; // Not necessary but nice to be explicit; see fun-fact above.
+ frame =
+ nullptr; // Not necessary but nice to be explicit; see fun-fact above.
}
void GpuVideoEncodeAcceleratorHost::OnBitstreamBufferReady(
@@ -315,7 +270,7 @@ void GpuVideoEncodeAcceleratorHost::OnNotifyError(Error error) {
// Client::NotifyError() may Destroy() |this|, so calling it needs to be the
// last thing done on this stack!
- media::VideoEncodeAccelerator::Client* client = NULL;
+ media::VideoEncodeAccelerator::Client* client = nullptr;
std::swap(client_, client);
client->NotifyError(error);
}

Powered by Google App Engine
This is Rietveld 408576698