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 b571429464240cb1e2ad3e0a010137b79665e772..6ef54d3c554cd44426091fa389edf5077c36ddbb 100644 |
--- a/content/browser/renderer_host/media/video_capture_buffer_pool.cc |
+++ b/content/browser/renderer_host/media/video_capture_buffer_pool.cc |
@@ -68,15 +68,15 @@ class SimpleBufferHandle final : public VideoCaptureBufferPool::BufferHandle { |
class GpuMemoryBufferBufferHandle final |
: public VideoCaptureBufferPool::BufferHandle { |
public: |
- GpuMemoryBufferBufferHandle(std::vector<void*>* data, |
+ GpuMemoryBufferBufferHandle(const std::vector<void*>& data, |
const gfx::Size& dimensions, |
ScopedVector<gfx::GpuMemoryBuffer>* gmbs) |
: data_(data), dimensions_(dimensions), gmbs_(gmbs) { |
#ifndef NDEBUG |
- DCHECK_EQ(data->size(), gmbs->size()); |
+ DCHECK_EQ(data.size(), gmbs->size()); |
for (const auto& gmb : *gmbs) |
DCHECK(gmb); |
- for (const auto& data_ptr : *data) |
+ for (const auto& data_ptr : data) |
DCHECK(data_ptr); |
#endif |
} |
@@ -86,8 +86,8 @@ class GpuMemoryBufferBufferHandle final |
size_t mapped_size() const override { return dimensions_.GetArea(); } |
void* data(int plane) override { |
DCHECK_GE(plane, media::VideoFrame::kYPlane); |
- DCHECK_LT(plane, static_cast<int>(data_->size())); |
- return data_->at(plane); |
+ DCHECK_LT(plane, static_cast<int>(data_.size())); |
+ return data_.at(plane); |
} |
ClientBuffer AsClientBuffer(int plane) override { |
DCHECK_GE(plane, media::VideoFrame::kYPlane); |
@@ -102,7 +102,7 @@ class GpuMemoryBufferBufferHandle final |
#endif |
private: |
- std::vector<void*>* data_; |
+ const std::vector<void*> data_; |
const gfx::Size dimensions_; |
ScopedVector<gfx::GpuMemoryBuffer>* const gmbs_; |
}; |
@@ -147,8 +147,13 @@ class VideoCaptureBufferPool::GpuMemoryBufferTracker final : public Tracker { |
~GpuMemoryBufferTracker() override; |
scoped_ptr<BufferHandle> GetBufferHandle() override { |
+ std::vector<void*> data; |
+ DCHECK_EQ(gpu_memory_buffers_.size(), |
+ media::VideoFrame::NumPlanes(pixel_format())); |
+ for (const auto& gmb : gpu_memory_buffers_) |
+ data.push_back(gmb->memory(0)); |
return make_scoped_ptr(new GpuMemoryBufferBufferHandle( |
- &data_, dimensions_, &gpu_memory_buffers_)); |
+ data, dimensions_, &gpu_memory_buffers_)); |
} |
bool ShareToProcess(base::ProcessHandle process_handle, |
base::SharedMemoryHandle* new_handle) override { |
@@ -160,7 +165,6 @@ class VideoCaptureBufferPool::GpuMemoryBufferTracker final : public Tracker { |
gfx::GpuMemoryBufferHandle* new_handle) override; |
private: |
- std::vector<void*> data_; |
gfx::Size dimensions_; |
// Owned references to GpuMemoryBuffers. |
ScopedVector<gfx::GpuMemoryBuffer> gpu_memory_buffers_; |
@@ -213,11 +217,10 @@ bool VideoCaptureBufferPool::GpuMemoryBufferTracker::Init( |
return true; |
dimensions_ = dimensions; |
- const media::VideoPixelFormat video_format = media::PIXEL_FORMAT_I420; |
- const size_t num_planes = media::VideoFrame::NumPlanes(video_format); |
+ const size_t num_planes = media::VideoFrame::NumPlanes(pixel_format()); |
for (size_t i = 0; i < num_planes; ++i) { |
const gfx::Size& size = |
- media::VideoFrame::PlaneSize(video_format, i, dimensions); |
+ media::VideoFrame::PlaneSize(pixel_format(), i, dimensions); |
gpu_memory_buffers_.push_back( |
BrowserGpuMemoryBufferManager::current()->AllocateGpuMemoryBuffer( |
size, |
@@ -225,13 +228,8 @@ bool VideoCaptureBufferPool::GpuMemoryBufferTracker::Init( |
gfx::BufferUsage::MAP)); |
DLOG_IF(ERROR, !gpu_memory_buffers_[i]) << "Allocating GpuMemoryBuffer"; |
- if (!gpu_memory_buffers_[i]) |
+ if (!gpu_memory_buffers_[i] || !gpu_memory_buffers_[i]->Map()) |
return false; |
- |
- void* temp_data = nullptr; |
- gpu_memory_buffers_[i]->Map(&temp_data); |
- DCHECK(temp_data); |
- data_.push_back(temp_data); |
} |
return true; |
} |