Index: content/browser/renderer_host/media/video_capture_buffer_pool.cc |
diff --git a/content/browser/renderer_host/media/video_capture_buffer_pool.cc b/content/browser/renderer_host/media/video_capture_buffer_pool.cc |
index 894a6710d0ddfc8e7b91351f7d98b5984d877e0b..3e0afcdba6a8b2ac69a60f310efc3b5b71110257 100644 |
--- a/content/browser/renderer_host/media/video_capture_buffer_pool.cc |
+++ b/content/browser/renderer_host/media/video_capture_buffer_pool.cc |
@@ -41,7 +41,8 @@ VideoFrame::Format VideoPixelFormatToVideoFrameFormat( |
// A simple holder of a memory-backed buffer and accesors to it. |
class SimpleBufferHandle final : public VideoCaptureBufferPool::BufferHandle { |
public: |
- SimpleBufferHandle(void* data, size_t size) : data_(data), size_(size) {} |
+ SimpleBufferHandle(void* data, size_t size, base::SharedMemoryHandle handle) |
+ : data_(data), size_(size), handle_(handle) {} |
~SimpleBufferHandle() override {} |
size_t size() const override { return size_; } |
@@ -50,10 +51,18 @@ class SimpleBufferHandle final : public VideoCaptureBufferPool::BufferHandle { |
return gfx::SHARED_MEMORY_BUFFER; |
} |
ClientBuffer AsClientBuffer() override { return nullptr; } |
+ base::PlatformFile AsPlatformHandle() override { |
+#if defined(OS_POSIX) |
+ return handle_.fd; |
+#else |
+ return handle_; |
+#endif |
+ } |
private: |
void* const data_; |
const size_t size_; |
+ base::SharedMemoryHandle handle_; |
}; |
// A holder of a GpuMemoryBuffer-backed buffer, Map()ed on ctor and Unmap()ed on |
@@ -79,6 +88,13 @@ class GpuMemoryBufferBufferHandle |
return gmb_->GetHandle().type; |
} |
ClientBuffer AsClientBuffer() override { return gmb_->AsClientBuffer(); } |
+ base::PlatformFile AsPlatformHandle() override { |
+#if defined(OS_POSIX) |
+ return gmb_->GetHandle().handle.fd; |
+#else |
+ return gmb_->GetHandle().handle; |
+#endif |
+ } |
private: |
gfx::GpuMemoryBuffer* const gmb_; |
@@ -95,8 +111,8 @@ class VideoCaptureBufferPool::SharedMemTracker final : public Tracker { |
size_t mapped_size() const override { return shared_memory_.mapped_size(); } |
scoped_ptr<BufferHandle> GetBufferHandle() override { |
- return make_scoped_ptr( |
- new SimpleBufferHandle(shared_memory_.memory(), mapped_size())); |
+ return make_scoped_ptr(new SimpleBufferHandle( |
+ shared_memory_.memory(), mapped_size(), shared_memory_.handle())); |
} |
bool ShareToProcess(base::ProcessHandle process_handle, |