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

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: Passing a Texture+SharedMemory video frame. Created 5 years, 6 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 0c3e887b5bbccb8b7a5b66cfdeb2e080bb9e11d3..00a1b77f431892794056004b8cacbf93d8f59de7 100644
--- a/content/common/gpu/media/gpu_video_encode_accelerator.cc
+++ b/content/common/gpu/media/gpu_video_encode_accelerator.cc
@@ -121,7 +121,7 @@ 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_Encode, OnEncode)
IPC_MESSAGE_HANDLER(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer,
OnUseOutputBitstreamBuffer)
IPC_MESSAGE_HANDLER(
@@ -227,28 +227,28 @@ GpuVideoEncodeAccelerator::CreateAndroidVEA() {
return encoder.Pass();
}
-void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id,
- base::SharedMemoryHandle buffer_handle,
- uint32 buffer_offset,
- uint32 buffer_size,
- bool force_keyframe) {
- DVLOG(3) << "GpuVideoEncodeAccelerator::OnEncode(): frame_id=" << frame_id
- << ", buffer_size=" << buffer_size
- << ", force_keyframe=" << force_keyframe;
+void GpuVideoEncodeAccelerator::OnEncode(
+ const AcceleratedVideoEncoderMsg_Encode_Params& params) {
+ DVLOG(3) << "GpuVideoEncodeAccelerator::OnEncode: frame_id = "
+ << params.frame_id << ", buffer_size=" << params.buffer_size
+ << ", force_keyframe=" << params.force_keyframe;
+ DCHECK_EQ(params.storage_type, media::VideoFrame::STORAGE_SHMEM);
+ DCHECK_EQ(params.pixel_format, input_format_);
+
if (!encoder_)
return;
- if (frame_id < 0) {
- DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): invalid frame_id="
- << frame_id;
+ if (params.frame_id < 0) {
+ DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): invalid "
+ "frame_id=" << params.frame_id;
NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
return;
}
uint32 aligned_offset =
- buffer_offset % base::SysInfo::VMAllocationGranularity();
- base::CheckedNumeric<off_t> map_offset = buffer_offset;
+ params.buffer_offset % base::SysInfo::VMAllocationGranularity();
+ base::CheckedNumeric<off_t> map_offset = params.buffer_offset;
map_offset -= aligned_offset;
- base::CheckedNumeric<size_t> map_size = buffer_size;
+ base::CheckedNumeric<size_t> map_size = params.buffer_size;
map_size += aligned_offset;
if (!map_offset.IsValid() || !map_size.IsValid()) {
@@ -259,10 +259,10 @@ void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id,
}
scoped_ptr<base::SharedMemory> shm(
- new base::SharedMemory(buffer_handle, true));
+ new base::SharedMemory(params.buffer_handle, true));
if (!shm->MapAt(map_offset.ValueOrDie(), map_size.ValueOrDie())) {
DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): "
- "could not map frame_id=" << frame_id;
+ "could not map frame_id=" << params.frame_id;
NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
return;
}
@@ -275,25 +275,22 @@ void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id,
gfx::Rect(input_visible_size_),
input_visible_size_,
shm_memory,
- buffer_size,
- buffer_handle,
- buffer_offset,
+ params.buffer_size,
+ params.buffer_handle,
+ params.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::EncodeFrameFinished,
+ weak_this_factory_.GetWeakPtr(), params.frame_id, base::Passed(&shm))));
if (!frame.get()) {
- DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): "
- "could not create VideoFrame for frame_id=" << frame_id;
+ DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): could not create "
+ "VideoFrame for frame_id=" << params.frame_id;
NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
return;
}
- encoder_->Encode(frame, force_keyframe);
+ encoder_->Encode(frame, params.force_keyframe);
}
void GpuVideoEncodeAccelerator::OnUseOutputBitstreamBuffer(
@@ -342,7 +339,7 @@ void GpuVideoEncodeAccelerator::EncodeFrameFinished(
scoped_ptr<base::SharedMemory> shm) {
Send(new AcceleratedVideoEncoderHostMsg_NotifyInputDone(host_route_id_,
frame_id));
- // Just let shm fall out of scope.
+ // Just let |shm| fall out of scope.
}
void GpuVideoEncodeAccelerator::Send(IPC::Message* message) {
« no previous file with comments | « content/common/gpu/media/gpu_video_encode_accelerator.h ('k') | content/renderer/media/rtc_video_encoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698