Index: content/browser/renderer_host/media/video_capture_controller.cc |
diff --git a/content/browser/renderer_host/media/video_capture_controller.cc b/content/browser/renderer_host/media/video_capture_controller.cc |
index e3a6d79e01cfe3d1a0d55db5d44f503edd03fa0d..4f330baa8bbfbf076c8e34fbadbfd364527d0472 100644 |
--- a/content/browser/renderer_host/media/video_capture_controller.cc |
+++ b/content/browser/renderer_host/media/video_capture_controller.cc |
@@ -316,25 +316,34 @@ void VideoCaptureController::DoIncomingCapturedVideoFrameOnIOThread( |
CHECK((frame->IsMappable() && |
frame->format() == media::PIXEL_FORMAT_I420) || |
- (!frame->IsMappable() && frame->HasTextures() && |
- frame->format() == media::PIXEL_FORMAT_ARGB)) |
+ (frame->HasTextures() && |
+ (frame->format() == media::PIXEL_FORMAT_ARGB || |
+ frame->format() == media::PIXEL_FORMAT_I420))) |
<< "Format and/or storage type combination not supported (received: " |
<< media::VideoPixelFormatToString(frame->format()) << ")"; |
- if (frame->HasTextures()) { |
- DCHECK(frame->coded_size() == frame->visible_rect().size()) |
- << "Textures are always supposed to be tightly packed."; |
- DCHECK_EQ(1u, VideoFrame::NumPlanes(frame->format())); |
- } else if (frame->format() == media::PIXEL_FORMAT_I420) { |
- const bool is_new_buffer = |
- client->known_buffers.insert(buffer_id).second; |
- if (is_new_buffer) { |
- // On the first use of a buffer on a client, share the memory handle. |
- size_t memory_size = 0; |
- base::SharedMemoryHandle remote_handle = buffer_pool_->ShareToProcess( |
- buffer_id, client->render_process_handle, &memory_size); |
+ // On the first use of a buffer on a client, share the memory handles. |
+ const bool is_new_buffer = client->known_buffers.insert(buffer_id).second; |
+ if (is_new_buffer) { |
+ if (frame->HasTextures() && |
+ frame->format() == media::PIXEL_FORMAT_I420) { |
+ std::vector<gfx::GpuMemoryBufferHandle> gmb_handles( |
+ VideoFrame::NumPlanes(frame->format())); |
+ for (size_t i = 0; i < gmb_handles.size(); ++i) |
+ buffer_pool_->ShareToProcess( |
+ buffer_id, i, client->render_process_handle, &gmb_handles[i]); |
+ |
+ client->event_handler->OnGpuMemoryBufferCreated( |
+ client->controller_id, gmb_handles, buffer->dimensions(), |
+ buffer_id); |
+ } else if (frame->IsMappable()) { |
mcasas
2015/08/21 03:57:25
Please keep the DCHECKs for the case of opaque tex
emircan
2015/08/22 03:13:26
Done. I restructured this method to make it clear
|
+ base::SharedMemoryHandle remote_handle; |
+ buffer_pool_->ShareToProcess( |
+ buffer_id, 0, client->render_process_handle, &remote_handle); |
+ |
client->event_handler->OnBufferCreated( |
- client->controller_id, remote_handle, memory_size, buffer_id); |
+ client->controller_id, remote_handle, buffer->mapped_size(), |
+ buffer_id); |
} |
} |