summaryrefslogtreecommitdiffstats
path: root/content/browser/renderer_host/media/video_capture_device_client.cc
diff options
context:
space:
mode:
authoremircan <emircan@chromium.org>2015-08-31 10:53:08 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-31 17:53:50 +0000
commitb479059b5368c433bb6a321f53c54f67b0081433 (patch)
treedd6b5fa4bb9bdc91e9ca85dc1fd0e3bdb6f6603b /content/browser/renderer_host/media/video_capture_device_client.cc
parente0096ef8707579fd6507e3e228df0c0c3afc8df8 (diff)
downloadchromium_src-b479059b5368c433bb6a321f53c54f67b0081433.zip
chromium_src-b479059b5368c433bb6a321f53c54f67b0081433.tar.gz
chromium_src-b479059b5368c433bb6a321f53c54f67b0081433.tar.bz2
Pass GpuMemoryBuffer backed VideoFrame from browser to renderer processes
This is a CL for Video Capture using GpuMemoryBuffers plan[0]. The plans for future CLs can be seen on [1]. [0] https://docs.google.com/document/d/1lobWf168_Kq05TLNLX81gRQwY5oe4k2t3oP-XTBEpIo/edit#heading=h.lflt7hoq3oui [1] https://docs.google.com/document/d/1lobWf168_Kq05TLNLX81gRQwY5oe4k2t3oP-XTBEpIo/edit#heading=h.exy0h9917c1d - Changed VideoCaptureBufferPool::ShareToProcess() method to handle sharing both SharedMemory and GpuMemoryBuffer backed video frames. - Added VideoCaptureBufferPool::GpuMemoryBufferTracker::ShareToProcess() for sharing GMB backed buffers. - Added dimensions() method to media::VideoCaptureDevice::Client::Buffer and VideoCaptureBufferPool::BufferHandle interfaces as required by GMB mapping. Also, renamed size() to mapped_size() to avoid confusion. - Added OnGpuMemoryBufferCreated() calls between Browser and Renderer to notify the creation of GMB backed buffers and pass handles. - Added VideoCaptureImpl::ClientGpuMemoryBuffer on Renderer side to create&map new GMB client buffers. Also, buffer reuse and destruction is handled behind VideoCaptureDeviceClient::AutoReleaseBuffer like listed below: Buffer Creation *Browser VideoCaptureController::DoIncomingCapturedVideoFrameOnIOThread - ShareToProcess(Renderer) VideoCaptureHost::OnBufferCreated *Renderer VideoCaptureMessageFilter::OnBufferCreated VideoCaptureImpl::OnBufferCreated - Adds to client_buffers_ Buffer Reuse *Renderer VideoCaptureImpl::OnClientBufferFinished *Browser VideoCaptureHost::OnRendererFinishedWithBuffer VideoCaptureController::ReturnBuffer VideoCaptureBufferPool::RelinquishConsumerHold ~AutoReleaseBuffer VideoCaptureBufferPool::RelinquishProducerReservation BUG=440843, 503835 TEST= - Without the kUseGpuMemoryBuffersForCapture flag, AppRTC loopback runs as before. - With the flag, AppRTC loopback crashes in VideoCaptureHost::OnBufferReady as expected. Review URL: https://codereview.chromium.org/1267883002 Cr-Commit-Position: refs/heads/master@{#346414}
Diffstat (limited to 'content/browser/renderer_host/media/video_capture_device_client.cc')
-rw-r--r--content/browser/renderer_host/media/video_capture_device_client.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/content/browser/renderer_host/media/video_capture_device_client.cc b/content/browser/renderer_host/media/video_capture_device_client.cc
index ade0d74..2adf8d1 100644
--- a/content/browser/renderer_host/media/video_capture_device_client.cc
+++ b/content/browser/renderer_host/media/video_capture_device_client.cc
@@ -121,7 +121,8 @@ class AutoReleaseBuffer : public media::VideoCaptureDevice::Client::Buffer {
DCHECK(pool_.get());
}
int id() const override { return id_; }
- size_t size() const override { return buffer_handle_->size(); }
+ gfx::Size dimensions() const override { return buffer_handle_->dimensions(); }
+ size_t mapped_size() const override { return buffer_handle_->mapped_size(); }
void* data(int plane) override { return buffer_handle_->data(plane); }
ClientBuffer AsClientBuffer(int plane) override {
return buffer_handle_->AsClientBuffer(plane);