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

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

Issue 2803483003: [Mojo Video Capture] Split interface BuildableVideoCaptureDevice (Closed)
Patch Set: Remove fallback mechanism. Created 3 years, 8 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 22578ac132b94239d72b7126b8f6338d2a1f8343..c291a144674681c899d516bdfe6f1b2720699c9f 100644
--- a/content/browser/renderer_host/media/video_capture_controller.cc
+++ b/content/browser/renderer_host/media/video_capture_controller.cc
@@ -167,13 +167,13 @@ VideoCaptureController::VideoCaptureController(
const std::string& device_id,
MediaStreamType stream_type,
const media::VideoCaptureParams& params,
- std::unique_ptr<BuildableVideoCaptureDevice> buildable_device)
+ std::unique_ptr<VideoCaptureDeviceLauncher> device_launcher)
: serial_id_(g_device_start_id++),
device_id_(device_id),
stream_type_(stream_type),
parameters_(params),
- buildable_device_(std::move(buildable_device)),
- consumer_feedback_observer_(nullptr),
+ device_launcher_(std::move(device_launcher)),
+ device_launch_observer_(nullptr),
state_(VIDEO_CAPTURE_STATE_STARTING),
has_received_frames_(false),
weak_ptr_factory_(this) {
@@ -187,16 +187,6 @@ VideoCaptureController::GetWeakPtrForIOThread() {
return weak_ptr_factory_.GetWeakPtr();
}
-void VideoCaptureController::SetConsumerFeedbackObserver(
- std::unique_ptr<media::VideoFrameConsumerFeedbackObserver>
- consumer_feedback_observer) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- consumer_feedback_observer_ = std::move(consumer_feedback_observer);
- // Update existing BufferContext entries.
- for (auto& entry : buffer_contexts_)
- entry.set_consumer_feedback_observer(consumer_feedback_observer_.get());
-}
-
void VideoCaptureController::AddClient(
VideoCaptureControllerID id,
VideoCaptureControllerEventHandler* event_handler,
@@ -385,7 +375,7 @@ void VideoCaptureController::OnNewBufferHandle(
DCHECK(FindUnretiredBufferContextFromBufferId(buffer_id) ==
buffer_contexts_.end());
buffer_contexts_.emplace_back(
- next_buffer_context_id_++, buffer_id, consumer_feedback_observer_.get(),
+ next_buffer_context_id_++, buffer_id, launched_device_.get(),
handle_provider->GetHandleForInterProcessTransit());
}
@@ -497,55 +487,106 @@ void VideoCaptureController::OnStartedUsingGpuDecode() {
PerformForClientsWithOpenSession(base::Bind(&CallOnStartedUsingGpuDecode));
}
+void VideoCaptureController::OnDeviceLaunched(
+ std::unique_ptr<LaunchedVideoCaptureDevice> device) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ launched_device_ = std::move(device);
+ for (auto& entry : buffer_contexts_)
+ entry.set_consumer_feedback_observer(launched_device_.get());
+ if (device_launch_observer_) {
+ device_launch_observer_->OnDeviceLaunched(this);
+ device_launch_observer_ = nullptr;
+ }
+}
+
+void VideoCaptureController::OnDeviceLaunchFailed() {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ if (device_launch_observer_) {
+ device_launch_observer_->OnDeviceLaunchFailed(this);
+ device_launch_observer_ = nullptr;
+ }
+}
+
+void VideoCaptureController::OnDeviceLaunchAborted() {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ if (device_launch_observer_) {
+ device_launch_observer_->OnDeviceLaunchAborted();
+ device_launch_observer_ = nullptr;
+ }
+}
+
void VideoCaptureController::CreateAndStartDeviceAsync(
const media::VideoCaptureParams& params,
- BuildableVideoCaptureDevice::Callbacks* callbacks,
+ VideoCaptureDeviceLaunchObserver* observer,
base::OnceClosure done_cb) {
- buildable_device_->CreateAndStartDeviceAsync(this, params, callbacks,
- std::move(done_cb));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ device_launch_observer_ = observer;
+ device_launcher_->LaunchDeviceAsync(device_id_, stream_type_, params,
+ GetWeakPtrForIOThread(), this,
+ std::move(done_cb));
}
void VideoCaptureController::ReleaseDeviceAsync(base::OnceClosure done_cb) {
- buildable_device_->ReleaseDeviceAsync(this, std::move(done_cb));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ if (!launched_device_) {
+ device_launcher_->AbortLaunch();
+ return;
+ }
+ launched_device_.reset();
}
bool VideoCaptureController::IsDeviceAlive() const {
- return buildable_device_->IsDeviceAlive();
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ return launched_device_ != nullptr;
}
void VideoCaptureController::GetPhotoCapabilities(
media::VideoCaptureDevice::GetPhotoCapabilitiesCallback callback) const {
- buildable_device_->GetPhotoCapabilities(std::move(callback));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(launched_device_);
+ launched_device_->GetPhotoCapabilities(std::move(callback));
}
void VideoCaptureController::SetPhotoOptions(
media::mojom::PhotoSettingsPtr settings,
media::VideoCaptureDevice::SetPhotoOptionsCallback callback) {
- buildable_device_->SetPhotoOptions(std::move(settings), std::move(callback));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(launched_device_);
+ launched_device_->SetPhotoOptions(std::move(settings), std::move(callback));
}
void VideoCaptureController::TakePhoto(
media::VideoCaptureDevice::TakePhotoCallback callback) {
- buildable_device_->TakePhoto(std::move(callback));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(launched_device_);
+ launched_device_->TakePhoto(std::move(callback));
}
void VideoCaptureController::MaybeSuspend() {
- buildable_device_->MaybeSuspendDevice();
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(launched_device_);
+ launched_device_->MaybeSuspendDevice();
}
void VideoCaptureController::Resume() {
- buildable_device_->ResumeDevice();
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(launched_device_);
+ launched_device_->ResumeDevice();
}
void VideoCaptureController::RequestRefreshFrame() {
- buildable_device_->RequestRefreshFrame();
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(launched_device_);
+ launched_device_->RequestRefreshFrame();
}
void VideoCaptureController::SetDesktopCaptureWindowIdAsync(
gfx::NativeViewId window_id,
base::OnceClosure done_cb) {
- buildable_device_->SetDesktopCaptureWindowIdAsync(window_id,
- std::move(done_cb));
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(launched_device_);
+ launched_device_->SetDesktopCaptureWindowIdAsync(window_id,
+ std::move(done_cb));
}
VideoCaptureController::ControllerClient* VideoCaptureController::FindClient(

Powered by Google App Engine
This is Rietveld 408576698