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..14d806482ede23f1ff2a6dae485f9ef076fdc035 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,10 @@ 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(const base::SharedMemory& shared_memory) |
+ : shared_memory_(shared_memory), |
+ data_(shared_memory.memory()), |
+ size_(shared_memory.mapped_size()) {} |
~SimpleBufferHandle() override {} |
size_t size() const override { return size_; } |
@@ -50,8 +53,16 @@ class SimpleBufferHandle final : public VideoCaptureBufferPool::BufferHandle { |
return gfx::SHARED_MEMORY_BUFFER; |
} |
ClientBuffer AsClientBuffer() override { return nullptr; } |
+ base::PlatformFile AsPlatformFile() override { |
+#if defined(OS_POSIX) |
+ return shared_memory_.handle().fd; |
+#else |
+ return shared_memory_.handle(); |
+#endif |
+ } |
private: |
+ const base::SharedMemory& shared_memory_; |
void* const data_; |
const size_t size_; |
}; |
@@ -69,7 +80,8 @@ class GpuMemoryBufferBufferHandle |
gmb_->GetFormat())]), |
size_(size) { |
DCHECK(gmb && !gmb_->IsMapped()); |
- gmb_->Map(data_.get()); |
+ if (gmb_->GetHandle().type == gfx::SHARED_MEMORY_BUFFER) |
+ gmb_->Map(data_.get()); |
} |
~GpuMemoryBufferBufferHandle() override { gmb_->Unmap(); } |
@@ -79,6 +91,10 @@ class GpuMemoryBufferBufferHandle |
return gmb_->GetHandle().type; |
} |
ClientBuffer AsClientBuffer() override { return gmb_->AsClientBuffer(); } |
+ base::PlatformFile AsPlatformFile() override { |
+ NOTIMPLEMENTED(); |
+ return base::PlatformFile(); |
+ } |
private: |
gfx::GpuMemoryBuffer* const gmb_; |
@@ -95,8 +111,7 @@ 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_)); |
} |
bool ShareToProcess(base::ProcessHandle process_handle, |