| 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,
|
|
|