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 f636f3ac819e0b04c9eb4dc8f614983c6762aee5..50a1e122a294acc60290666fe28bf69ec723591a 100644 |
--- a/content/browser/renderer_host/media/video_capture_buffer_pool.cc |
+++ b/content/browser/renderer_host/media/video_capture_buffer_pool.cc |
@@ -61,7 +61,8 @@ VideoFrame::StorageType VideoPixelFormatToVideoFrameStorageType( |
// 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_; } |
@@ -70,10 +71,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_; |
+ const base::SharedMemoryHandle handle_; |
}; |
// A holder of a GpuMemoryBuffer-backed buffer, Map()ed on ctor and Unmap()ed on |
@@ -99,6 +108,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_; |
@@ -117,8 +133,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, |