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

Unified Diff: content/common/gpu/media/gpu_video_encode_accelerator.cc

Issue 1128213005: Passing Native Texture backed Video Frame from Renderer to GPU process (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: posciak@ and magjed@ comments. Created 5 years, 7 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/media/gpu_video_encode_accelerator.cc
diff --git a/content/common/gpu/media/gpu_video_encode_accelerator.cc b/content/common/gpu/media/gpu_video_encode_accelerator.cc
index a61f1fe4d2e93b1997a3c4f3adf45e9b8e1e8c58..157c2488cc4d405cbff71f2f69710b8df375fd44 100644
--- a/content/common/gpu/media/gpu_video_encode_accelerator.cc
+++ b/content/common/gpu/media/gpu_video_encode_accelerator.cc
@@ -112,7 +112,10 @@ void GpuVideoEncodeAccelerator::Initialize(
bool GpuVideoEncodeAccelerator::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(GpuVideoEncodeAccelerator, message)
- IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_Encode, OnEncode)
+ IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_EncodeSharedMemory,
mcasas 2015/06/04 15:20:55 Indent here and in l.117 to match l.119 etc. I kno
emircan 2015/06/04 22:04:40 Done.
+ OnEncodeSharedMemory)
+ IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_EncodeNativeTexture,
+ OnEncodeNativeTexture)
IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer,
OnUseOutputBitstreamBuffer)
IPC_MESSAGE_HANDLER(
@@ -207,11 +210,12 @@ GpuVideoEncodeAccelerator::CreateAndroidVEA() {
return encoder.Pass();
}
-void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id,
- base::SharedMemoryHandle buffer_handle,
- uint32 buffer_offset,
- uint32 buffer_size,
- bool force_keyframe) {
+void GpuVideoEncodeAccelerator::OnEncodeSharedMemory(
+ int32 frame_id,
+ base::SharedMemoryHandle buffer_handle,
+ uint32 buffer_offset,
+ uint32 buffer_size,
+ bool force_keyframe) {
DVLOG(3) << "GpuVideoEncodeAccelerator::OnEncode(): frame_id=" << frame_id
mcasas 2015/06/04 15:20:55 Update the method name. Or better, use __func__
<< ", buffer_size=" << buffer_size
<< ", force_keyframe=" << force_keyframe;
@@ -259,12 +263,9 @@ void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id,
buffer_handle,
buffer_offset,
base::TimeDelta());
- frame->AddDestructionObserver(
- media::BindToCurrentLoop(
- base::Bind(&GpuVideoEncodeAccelerator::EncodeFrameFinished,
- weak_this_factory_.GetWeakPtr(),
- frame_id,
- base::Passed(&shm))));
+ frame->AddDestructionObserver(media::BindToCurrentLoop(base::Bind(
+ &GpuVideoEncodeAccelerator::EncodeSharedMemoryFrameFinished,
+ weak_this_factory_.GetWeakPtr(), frame_id, base::Passed(&shm))));
if (!frame.get()) {
DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): "
@@ -276,6 +277,43 @@ void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id,
encoder_->Encode(frame, force_keyframe);
}
+void GpuVideoEncodeAccelerator::OnEncodeNativeTexture(
+ int32 frame_id,
+ gpu::MailboxHolder mailbox_holder,
+ bool force_keyframe) {
+ DVLOG(3) << "GpuVideoEncodeAccelerator::OnEncodeNativeTexture(): frame_id="
+ << frame_id << ", force_keyframe=" << force_keyframe;
+ if (!encoder_)
+ return;
+ if (frame_id < 0) {
+ DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncodeNativeTexture(): "
+ "invalid frame_id=" << frame_id;
+ NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
+ return;
+ }
+ DCHECK(!mailbox_holder.mailbox.IsZero());
mcasas 2015/06/04 15:20:56 nit: pass these DCHECKs to the beginning of the me
emircan 2015/06/04 22:04:40 Done.
+ DCHECK(mailbox_holder.mailbox.Verify());
+ DCHECK(mailbox_holder.texture_target);
+ DCHECK(mailbox_holder.sync_point);
+
+ scoped_refptr<media::VideoFrame> frame = media::VideoFrame::WrapNativeTexture(
+ mailbox_holder,
+ media::VideoFrame::ReleaseMailboxCB(),
+ input_coded_size_, gfx::Rect(input_visible_size_), input_visible_size_,
+ base::TimeDelta(), true /* allow_overlay */, true /* has_alpha */);
+ frame->AddDestructionObserver(media::BindToCurrentLoop(
+ base::Bind(&GpuVideoEncodeAccelerator::EncodeNativeTextureFrameFinished,
+ weak_this_factory_.GetWeakPtr(), frame_id)));
+ if (!frame.get()) {
+ DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncodeNativeTexture(): "
+ "could not create VideoFrame for frame_id=" << frame_id;
+ NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
+ return;
+ }
+
+ encoder_->Encode(frame, force_keyframe);
+}
+
void GpuVideoEncodeAccelerator::OnUseOutputBitstreamBuffer(
int32 buffer_id,
base::SharedMemoryHandle buffer_handle,
@@ -317,13 +355,18 @@ void GpuVideoEncodeAccelerator::OnRequestEncodingParametersChange(
encoder_->RequestEncodingParametersChange(bitrate, framerate);
}
-void GpuVideoEncodeAccelerator::EncodeFrameFinished(
+void GpuVideoEncodeAccelerator::EncodeSharedMemoryFrameFinished(
int32 frame_id,
scoped_ptr<base::SharedMemory> shm) {
Send(new AcceleratedVideoEncoderHostMsg_NotifyInputDone(host_route_id_,
frame_id));
// Just let shm fall out of scope.
mcasas 2015/06/04 15:20:55 s/shm/|shm|/
emircan 2015/06/04 22:04:41 Done.
}
+void GpuVideoEncodeAccelerator::EncodeNativeTextureFrameFinished(
+ int32 frame_id) {
+ Send(new AcceleratedVideoEncoderHostMsg_NotifyInputDone(host_route_id_,
+ frame_id));
+}
void GpuVideoEncodeAccelerator::Send(IPC::Message* message) {
stub_->channel()->Send(message);

Powered by Google App Engine
This is Rietveld 408576698