diff options
author | emircan <emircan@chromium.org> | 2015-08-31 10:53:08 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-31 17:53:50 +0000 |
commit | b479059b5368c433bb6a321f53c54f67b0081433 (patch) | |
tree | dd6b5fa4bb9bdc91e9ca85dc1fd0e3bdb6f6603b /content/browser/renderer_host/media/video_capture_device_client.cc | |
parent | e0096ef8707579fd6507e3e228df0c0c3afc8df8 (diff) | |
download | chromium_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.cc | 3 |
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); |