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

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

Issue 2646833002: Add IPC to query capabilities of video input devices. (Closed)
Patch Set: Created 3 years, 11 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/media_devices_dispatcher_host.cc
diff --git a/content/browser/renderer_host/media/media_devices_dispatcher_host.cc b/content/browser/renderer_host/media/media_devices_dispatcher_host.cc
index c8e7b555c59225fc08c1b6476de5a9c208d847fa..5d43d4ae860017cc9911783863fc2da606652421 100644
--- a/content/browser/renderer_host/media/media_devices_dispatcher_host.cc
+++ b/content/browser/renderer_host/media/media_devices_dispatcher_host.cc
@@ -12,7 +12,9 @@
#include "base/bind_helpers.h"
#include "base/memory/ptr_util.h"
#include "content/browser/bad_message.h"
+#include "content/browser/media/media_devices_util.h"
#include "content/browser/renderer_host/media/media_stream_manager.h"
+#include "content/browser/renderer_host/media/video_capture_manager.h"
#include "content/common/media/media_devices.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/media_device_id.h"
@@ -147,6 +149,23 @@ void MediaDevicesDispatcherHost::EnumerateDevices(
security_origin, client_callback));
}
+void MediaDevicesDispatcherHost::GetVideoInputCapabilities(
+ const url::Origin& security_origin,
+ const GetVideoInputCapabilitiesCallback& client_callback) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ if (!MediaStreamManager::IsOriginAllowed(render_process_id_,
+ security_origin)) {
+ bad_message::ReceivedBadMessage(render_process_id_,
dcheng 2017/01/20 07:56:50 Hmm. +rockot... do you forsee replacing bad_messag
Guido Urdaneta 2017/01/20 12:40:58 Should I make this change or was this a question f
dcheng 2017/01/20 18:28:29 This is a question for +rockot, I'm trying to unde
Ken Rockot(use gerrit already) 2017/01/20 18:34:36 Yes, I think we should replace ReceivedBadMessage
+ bad_message::MDDH_UNAUTHORIZED_ORIGIN);
+ return;
+ }
+
+ GetDefaultMediaDeviceID(
+ MEDIA_DEVICE_TYPE_VIDEO_INPUT, render_process_id_, render_frame_id_,
+ base::Bind(&MediaDevicesDispatcherHost::GotDefaultVideoInputDeviceID,
+ weak_factory_.GetWeakPtr(), security_origin, client_callback));
+}
+
void MediaDevicesDispatcherHost::SubscribeDeviceChangeNotifications(
MediaDeviceType type,
uint32_t subscription_id,
@@ -298,4 +317,68 @@ void MediaDevicesDispatcherHost::DevicesEnumerated(
client_callback.Run(result);
}
+void MediaDevicesDispatcherHost::GotDefaultVideoInputDeviceID(
+ const url::Origin& security_origin,
+ const GetVideoInputCapabilitiesCallback& client_callback,
+ const std::string& default_device_id) {
+ MediaDevicesManager::BoolDeviceTypes devices_to_enumerate;
+ devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true;
+ media_stream_manager_->media_devices_manager()->EnumerateDevices(
+ devices_to_enumerate,
+ base::Bind(&MediaDevicesDispatcherHost::FinalizeGetVideoInputCapabilities,
+ weak_factory_.GetWeakPtr(), security_origin, client_callback,
+ default_device_id));
+}
+
+void MediaDevicesDispatcherHost::FinalizeGetVideoInputCapabilities(
+ const url::Origin& security_origin,
+ const GetVideoInputCapabilitiesCallback& client_callback,
+ const std::string& default_device_id,
+ const MediaDeviceEnumeration& enumeration) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ std::vector<::mojom::VideoInputDeviceCapabilitiesPtr>
+ video_input_capabilities;
+ for (const auto& device_info : enumeration[MEDIA_DEVICE_TYPE_VIDEO_INPUT]) {
+ MediaDeviceInfo translated_info = TranslateDeviceInfo(
+ true, device_id_salt_, group_id_salt_, security_origin, device_info);
+
+ ::mojom::VideoInputDeviceCapabilitiesPtr capabilities =
+ ::mojom::VideoInputDeviceCapabilities::New();
+ capabilities->device_id = std::move(translated_info.device_id);
dcheng 2017/01/20 18:28:29 FWIW, this should normally be typemapped... that b
+ capabilities->formats = GetVideoInputFormats(device_info.device_id);
+ capabilities->facing_mode = ::mojom::FacingMode::UNKNOWN;
+#if defined(OS_ANDROID)
+ // On Android, the facing mode is available as part of the label.
+ // TODO(guidou): Update this code once an API is available to get the
+ // facing mode in all platforms. See http://crbug.com/672856.
+ if (device_info.label.find("facing front") != std::string::npos)
+ capabilities->facing_mode = ::mojom::FacingMode::USER;
+ else if (device_info.label.find("facing back") != std::string::npos)
+ capabilities->facing_mode = ::mojom::FacingMode::ENVIRONMENT;
+#endif
+ if (device_info.device_id == default_device_id) {
+ video_input_capabilities.insert(video_input_capabilities.begin(),
+ std::move(capabilities));
+ } else {
+ video_input_capabilities.push_back(std::move(capabilities));
+ }
+ }
+
+ client_callback.Run(std::move(video_input_capabilities));
+}
+
+media::VideoCaptureFormats MediaDevicesDispatcherHost::GetVideoInputFormats(
+ const std::string& device_id) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ media::VideoCaptureFormats formats;
+ media_stream_manager_->video_capture_manager()->GetDeviceFormatsInUse(
+ MEDIA_DEVICE_VIDEO_CAPTURE, device_id, &formats);
+ if (!formats.empty())
+ return formats;
+
+ media_stream_manager_->video_capture_manager()->GetDeviceSupportedFormats(
+ device_id, &formats);
+ return formats;
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698