Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1847)

Unified Diff: content/browser/renderer_host/media/video_capture_controller.cc

Issue 2573223002: [Mojo Video Capture] Simplify media::VideoCaptureDevice::Client:Buffer to a struct (Closed)
Patch Set: Merge Ownership into BufferAccessProvider. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 e39cc6104e5ee5c23166ab3d5dc3a12c4aa07397..073db2f20152f6ae7e2409f4fb8610b3a4da05b3 100644
--- a/content/browser/renderer_host/media/video_capture_controller.cc
+++ b/content/browser/renderer_host/media/video_capture_controller.cc
@@ -25,6 +25,7 @@
#include "media/capture/video/video_capture_buffer_pool.h"
#include "media/capture/video/video_capture_buffer_tracker_factory_impl.h"
#include "media/capture/video/video_capture_device_client.h"
+#include "mojo/public/cpp/system/platform_handle.h"
#if !defined(OS_ANDROID)
#include "content/browser/compositor/image_transport_factory.h"
@@ -95,13 +96,11 @@ VideoCaptureController::BufferState::BufferState(
int buffer_id,
int frame_feedback_id,
media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer,
- media::FrameBufferPool* frame_buffer_pool,
- scoped_refptr<media::VideoFrame> frame)
+ media::FrameBufferPool* frame_buffer_pool)
: buffer_id_(buffer_id),
frame_feedback_id_(frame_feedback_id),
consumer_feedback_observer_(consumer_feedback_observer),
frame_buffer_pool_(frame_buffer_pool),
- frame_(std::move(frame)),
max_consumer_utilization_(
media::VideoFrameConsumerFeedbackObserver::kNoUtilizationRecorded),
consumer_hold_count_(0) {}
@@ -370,20 +369,19 @@ VideoCaptureController::GetVideoCaptureFormat() const {
}
void VideoCaptureController::OnIncomingCapturedVideoFrame(
- std::unique_ptr<media::VideoCaptureDevice::Client::Buffer> buffer,
+ media::VideoCaptureDevice::Client::Buffer buffer,
scoped_refptr<VideoFrame> frame) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(frame_buffer_pool_);
- const int buffer_id = buffer->id();
+ const int buffer_id = buffer.id;
miu 2016/12/20 22:25:37 If |frame_buffer_pool_| is null, should we return
chfremer 2016/12/22 19:01:20 No. Before this CL |frame_buffer_pool_| == null wa
miu 2016/12/27 23:38:48 Acknowledged.
DCHECK_NE(buffer_id, media::VideoCaptureBufferPool::kInvalidId);
// Insert if not exists.
const auto it =
buffer_id_to_state_map_
.insert(std::make_pair(
- buffer_id, BufferState(buffer_id, buffer->frame_feedback_id(),
+ buffer_id, BufferState(buffer_id, buffer.frame_feedback_id,
consumer_feedback_observer_.get(),
- frame_buffer_pool_.get(), frame)))
+ frame_buffer_pool_.get())))
.first;
BufferState& buffer_state = it->second;
DCHECK(buffer_state.HasZeroConsumerHoldCount());
@@ -404,11 +402,11 @@ void VideoCaptureController::OnIncomingCapturedVideoFrame(
<< media::VideoPixelFormatToString(frame->format());
// Sanity-checks to confirm |frame| is actually being backed by |buffer|.
+ auto buffer_access = buffer.access_provider->GetReadWriteAccess();
DCHECK(frame->storage_type() == media::VideoFrame::STORAGE_SHMEM);
- DCHECK(frame->data(media::VideoFrame::kYPlane) >= buffer->data(0) &&
+ DCHECK(frame->data(media::VideoFrame::kYPlane) >= buffer_access->data() &&
(frame->data(media::VideoFrame::kYPlane) <
- (reinterpret_cast<const uint8_t*>(buffer->data(0)) +
- buffer->mapped_size())))
+ (buffer_access->data() + buffer_access->mapped_size())))
<< "VideoFrame does not appear to be backed by Buffer";
for (const auto& client : controller_clients_) {
@@ -424,9 +422,13 @@ void VideoCaptureController::OnIncomingCapturedVideoFrame(
client->known_buffers.push_back(buffer_id);
is_new_buffer = true;
}
- if (is_new_buffer)
- DoNewBufferOnIOThread(client.get(), buffer.get(), frame);
-
+ if (is_new_buffer) {
+ mojo::ScopedSharedBufferHandle handle =
+ buffer.access_provider->GetHandleForTransit();
+ client->event_handler->OnBufferCreated(
+ client->controller_id, std::move(handle),
+ buffer_access->mapped_size(), buffer_id);
+ }
client->event_handler->OnBufferReady(client->controller_id, buffer_id,
frame);
@@ -477,7 +479,6 @@ void VideoCaptureController::OnLog(const std::string& message) {
void VideoCaptureController::OnBufferDestroyed(int buffer_id_to_drop) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(frame_buffer_pool_);
for (const auto& client : controller_clients_) {
if (client->session_closed)
@@ -496,21 +497,6 @@ void VideoCaptureController::OnBufferDestroyed(int buffer_id_to_drop) {
buffer_id_to_state_map_.erase(buffer_id_to_drop);
}
-void VideoCaptureController::DoNewBufferOnIOThread(
- ControllerClient* client,
- media::VideoCaptureDevice::Client::Buffer* buffer,
- const scoped_refptr<media::VideoFrame>& frame) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK_EQ(media::VideoFrame::STORAGE_SHMEM, frame->storage_type());
-
- const int buffer_id = buffer->id();
- mojo::ScopedSharedBufferHandle handle =
- frame_buffer_pool_->GetHandleForTransit(buffer_id);
- client->event_handler->OnBufferCreated(client->controller_id,
- std::move(handle),
- buffer->mapped_size(), buffer_id);
-}
-
VideoCaptureController::ControllerClient* VideoCaptureController::FindClient(
VideoCaptureControllerID id,
VideoCaptureControllerEventHandler* handler,

Powered by Google App Engine
This is Rietveld 408576698