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

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

Issue 877353002: media: VideoFrame: add offset for shared memory buffers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update after dcheng's review Created 5 years, 11 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 df16d97839ac9b14e8a407ce06d25622df1e873b..98d0406b2359e89bd7e12dedcaf8eadbb0afb6d4 100644
--- a/content/common/gpu/media/gpu_video_encode_accelerator.cc
+++ b/content/common/gpu/media/gpu_video_encode_accelerator.cc
@@ -9,6 +9,8 @@
#include "base/logging.h"
#include "base/memory/shared_memory.h"
#include "base/message_loop/message_loop_proxy.h"
+#include "base/numerics/safe_math.h"
+#include "base/sys_info.h"
#include "build/build_config.h"
#include "content/common/gpu/gpu_channel.h"
#include "content/common/gpu/gpu_messages.h"
@@ -245,6 +247,7 @@ GpuVideoEncodeAccelerator::CreateAndroidVEA() {
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
@@ -259,16 +262,36 @@ void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id,
return;
}
+ base::CheckedNumeric<off_t> map_offset = buffer_offset;
+ map_offset -= (buffer_offset % base::SysInfo::VMAllocationGranularity());
+ if (!map_offset.IsValid()) {
+ DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode():"
+ << " invalid buffer_offset=" << buffer_offset;
+ NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
+ return;
+ }
+ base::CheckedNumeric<size_t> map_size = buffer_size;
+ map_size += (static_cast<off_t>(buffer_offset) -
+ static_cast<off_t>(map_offset.ValueOrDie()));
dcheng 2015/02/06 21:39:47 Let's avoid casting if we don't have to. It makes
llandwerlin-old 2015/02/09 14:48:47 Done.
+ if (!map_size.IsValid()) {
+ DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode():"
+ << " invalid buffer_offset=" << buffer_offset
+ << " buffer_size=" << buffer_size;
+ NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
+ return;
+ }
+
scoped_ptr<base::SharedMemory> shm(
new base::SharedMemory(buffer_handle, true));
- if (!shm->Map(buffer_size)) {
+ if (!shm->MapAt(map_offset.ValueOrDie(), map_size.ValueOrDie())) {
DLOG(ERROR) << "GpuVideoEncodeAccelerator::OnEncode(): "
"could not map frame_id=" << frame_id;
NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
return;
}
- uint8* shm_memory = reinterpret_cast<uint8*>(shm->memory());
+ uint8* shm_memory = reinterpret_cast<uint8*>(shm->memory()) +
+ (buffer_offset - map_offset.ValueOrDie());
scoped_refptr<media::VideoFrame> frame =
media::VideoFrame::WrapExternalPackedMemory(
input_format_,
@@ -278,6 +301,7 @@ void GpuVideoEncodeAccelerator::OnEncode(int32 frame_id,
shm_memory,
buffer_size,
buffer_handle,
+ buffer_offset,
base::TimeDelta(),
// It's turtles all the way down...
base::Bind(base::IgnoreResult(&base::MessageLoopProxy::PostTask),
« 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