Chromium Code Reviews| 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 |