Index: content/browser/renderer_host/media/video_capture_provider_switcher.cc |
diff --git a/content/browser/renderer_host/media/video_capture_provider_switcher.cc b/content/browser/renderer_host/media/video_capture_provider_switcher.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..244304b41d57b4e066d6eaa412ee5e0052273e0f |
--- /dev/null |
+++ b/content/browser/renderer_host/media/video_capture_provider_switcher.cc |
@@ -0,0 +1,74 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/browser/renderer_host/media/video_capture_provider_switcher.h" |
+ |
+namespace content { |
+ |
+VideoCaptureProviderSwitcher::VideoCaptureProviderSwitcher( |
+ std::unique_ptr<VideoCaptureProvider> media_device_capture_provider, |
+ std::unique_ptr<VideoCaptureProvider> other_types_capture_provider) |
+ : media_device_capture_provider_(std::move(media_device_capture_provider)), |
+ other_types_capture_provider_(std::move(other_types_capture_provider)) {} |
+ |
+VideoCaptureProviderSwitcher::~VideoCaptureProviderSwitcher() = default; |
+ |
+void VideoCaptureProviderSwitcher::Uninitialize() { |
+ media_device_capture_provider_->Uninitialize(); |
+ other_types_capture_provider_->Uninitialize(); |
+} |
+ |
+void VideoCaptureProviderSwitcher::GetDeviceInfosAsync( |
+ const base::Callback<void( |
+ const std::vector<media::VideoCaptureDeviceInfo>&)>& result_callback) { |
+ media_device_capture_provider_->GetDeviceInfosAsync(result_callback); |
+} |
+ |
+std::unique_ptr<VideoCaptureDeviceLauncher> |
+VideoCaptureProviderSwitcher::CreateDeviceLauncher() { |
+ return base::MakeUnique<VideoCaptureDeviceLauncherSwitcher>( |
+ media_device_capture_provider_->CreateDeviceLauncher(), |
+ other_types_capture_provider_->CreateDeviceLauncher()); |
+} |
+ |
+VideoCaptureDeviceLauncherSwitcher::VideoCaptureDeviceLauncherSwitcher( |
+ std::unique_ptr<VideoCaptureDeviceLauncher> media_device_launcher, |
+ std::unique_ptr<VideoCaptureDeviceLauncher> other_types_launcher) |
+ : media_device_launcher_(std::move(media_device_launcher)), |
+ other_types_launcher_(std::move(other_types_launcher)) {} |
+ |
+VideoCaptureDeviceLauncherSwitcher::~VideoCaptureDeviceLauncherSwitcher() = |
+ default; |
+ |
+void VideoCaptureDeviceLauncherSwitcher::LaunchDeviceAsync( |
+ const std::string& device_id, |
+ MediaStreamType stream_type, |
+ const media::VideoCaptureParams& params, |
+ base::WeakPtr<media::VideoFrameReceiver> receiver, |
+ Callbacks* callbacks, |
+ base::OnceClosure done_cb) { |
+ last_launched_stream_type_ = stream_type; |
+ if (stream_type == content::MEDIA_DEVICE_VIDEO_CAPTURE) { |
+ return media_device_launcher_->LaunchDeviceAsync( |
+ device_id, stream_type, params, std::move(receiver), callbacks, |
+ std::move(done_cb)); |
+ } else { |
mcasas
2017/05/10 02:33:33
No need for else after a return.
https://chromium.
chfremer
2017/05/10 17:59:39
Done.
|
+ return other_types_launcher_->LaunchDeviceAsync( |
+ device_id, stream_type, params, std::move(receiver), callbacks, |
+ std::move(done_cb)); |
+ } |
+} |
+ |
+void VideoCaptureDeviceLauncherSwitcher::AbortLaunch() { |
+ if (!last_launched_stream_type_.has_value()) |
+ return; |
+ if (last_launched_stream_type_.value() == |
+ content::MEDIA_DEVICE_VIDEO_CAPTURE) { |
+ media_device_launcher_->AbortLaunch(); |
+ } else { |
+ other_types_launcher_->AbortLaunch(); |
+ } |
mcasas
2017/05/10 02:33:33
Instead of |last_launched_stream_type_|, bind a me
chfremer
2017/05/10 17:59:39
Done.
|
+} |
+ |
+} // namespace content |