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

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: miu's comments Created 3 years, 12 months 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 ac5bc7215e2c02a71fa84f5a08804961ae0ca3ba..bbdf3674d6bd3cf3403674d546082735fb409235 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) {}
@@ -369,20 +368,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();
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());
@@ -402,11 +400,11 @@ void VideoCaptureController::OnIncomingCapturedVideoFrame(
<< media::VideoPixelFormatToString(frame->format());
// Sanity-checks to confirm |frame| is actually being backed by |buffer|.
+ auto buffer_access = buffer.handle_provider->GetHandleForInProcessAccess();
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_) {
@@ -422,9 +420,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.handle_provider->GetHandleForInterProcessTransit();
+ 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);
@@ -475,7 +477,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)
@@ -494,21 +495,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