summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-23 21:00:22 +0000
committerwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-23 21:00:22 +0000
commit4b5dc66011b4499c09da44eb69d7e8f5836a9f50 (patch)
tree6851c8bfbcdd191628257d484b586d50ea174ae8
parent9744a15e383387eea82a0d941a13c1d9714af536 (diff)
downloadchromium_src-4b5dc66011b4499c09da44eb69d7e8f5836a9f50.zip
chromium_src-4b5dc66011b4499c09da44eb69d7e8f5836a9f50.tar.gz
chromium_src-4b5dc66011b4499c09da44eb69d7e8f5836a9f50.tar.bz2
Populate video capture facing mode for device enumeration.
This will help JS writer to display info about the camera. This is enabled for Android only, since it makes sense for mobile device. BUG=https://code.google.com/p/webrtc/issues/detail?id=2393 R=avi@chromium.org, palmer@chromium.org, tsepez@chromium.org, vrk@chromium.org Review URL: https://codereview.chromium.org/24340002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@224788 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/common/media/media_stream_messages.h4
-rw-r--r--content/public/common/media_stream_request.cc14
-rw-r--r--content/public/common/media_stream_request.h14
-rw-r--r--content/renderer/media/media_stream_center.cc27
4 files changed, 50 insertions, 9 deletions
diff --git a/content/common/media/media_stream_messages.h b/content/common/media/media_stream_messages.h
index 6ee9f8f..b95f4f6 100644
--- a/content/common/media/media_stream_messages.h
+++ b/content/common/media/media_stream_messages.h
@@ -19,6 +19,9 @@
IPC_ENUM_TRAITS_MAX_VALUE(content::MediaStreamType,
content::NUM_MEDIA_TYPES - 1)
+IPC_ENUM_TRAITS_MAX_VALUE(content::VideoFacingMode,
+ content::NUM_MEDIA_VIDEO_FACING_MODE - 1)
+
IPC_STRUCT_TRAITS_BEGIN(content::StreamOptions)
IPC_STRUCT_TRAITS_MEMBER(audio_type)
IPC_STRUCT_TRAITS_MEMBER(audio_device_id)
@@ -30,6 +33,7 @@ IPC_STRUCT_TRAITS_BEGIN(content::StreamDeviceInfo)
IPC_STRUCT_TRAITS_MEMBER(device.type)
IPC_STRUCT_TRAITS_MEMBER(device.name)
IPC_STRUCT_TRAITS_MEMBER(device.id)
+ IPC_STRUCT_TRAITS_MEMBER(device.video_facing)
IPC_STRUCT_TRAITS_MEMBER(device.matched_output_device_id)
IPC_STRUCT_TRAITS_MEMBER(device.input.sample_rate)
IPC_STRUCT_TRAITS_MEMBER(device.input.channel_layout)
diff --git a/content/public/common/media_stream_request.cc b/content/public/common/media_stream_request.cc
index 00883541..d343e76 100644
--- a/content/public/common/media_stream_request.cc
+++ b/content/public/common/media_stream_request.cc
@@ -20,7 +20,10 @@ bool IsVideoMediaType(MediaStreamType type) {
type == content::MEDIA_DESKTOP_VIDEO_CAPTURE);
}
-MediaStreamDevice::MediaStreamDevice() : type(MEDIA_NO_SERVICE) {}
+MediaStreamDevice::MediaStreamDevice()
+ : type(MEDIA_NO_SERVICE),
+ video_facing(MEDIA_VIDEO_FACING_NONE) {
+}
MediaStreamDevice::MediaStreamDevice(
MediaStreamType type,
@@ -28,7 +31,15 @@ MediaStreamDevice::MediaStreamDevice(
const std::string& name)
: type(type),
id(id),
+ video_facing(MEDIA_VIDEO_FACING_NONE),
name(name) {
+#if defined(OS_ANDROID)
+ if (name.find("front") != std::string::npos) {
+ video_facing = MEDIA_VIDEO_FACING_USER;
+ } else if (name.find("back") != std::string::npos) {
+ video_facing = MEDIA_VIDEO_FACING_ENVIRONMENT;
+ }
+#endif
}
MediaStreamDevice::MediaStreamDevice(
@@ -40,6 +51,7 @@ MediaStreamDevice::MediaStreamDevice(
int frames_per_buffer)
: type(type),
id(id),
+ video_facing(MEDIA_VIDEO_FACING_NONE),
name(name),
input(sample_rate, channel_layout, frames_per_buffer) {
}
diff --git a/content/public/common/media_stream_request.h b/content/public/common/media_stream_request.h
index 26fe9c1..1c844cc 100644
--- a/content/public/common/media_stream_request.h
+++ b/content/public/common/media_stream_request.h
@@ -51,6 +51,17 @@ enum MediaStreamRequestType {
MEDIA_OPEN_DEVICE
};
+// Facing mode for video capture.
+enum VideoFacingMode {
+ MEDIA_VIDEO_FACING_NONE = 0,
+ MEDIA_VIDEO_FACING_USER,
+ MEDIA_VIDEO_FACING_ENVIRONMENT,
+ MEDIA_VIDEO_FACING_LEFT,
+ MEDIA_VIDEO_FACING_RIGHT,
+
+ NUM_MEDIA_VIDEO_FACING_MODE
+};
+
// Convenience predicates to determine whether the given type represents some
// audio or some video device.
CONTENT_EXPORT bool IsAudioMediaType(MediaStreamType type);
@@ -82,6 +93,9 @@ struct CONTENT_EXPORT MediaStreamDevice {
// The device's unique ID.
std::string id;
+ // The facing mode for video capture device.
+ VideoFacingMode video_facing;
+
// The device id of a matched output device if any (otherwise empty).
// Only applicable to audio devices.
std::string matched_output_device_id;
diff --git a/content/renderer/media/media_stream_center.cc b/content/renderer/media/media_stream_center.cc
index ef9a00e..26f2303 100644
--- a/content/renderer/media/media_stream_center.cc
+++ b/content/renderer/media/media_stream_center.cc
@@ -150,17 +150,28 @@ void MediaStreamCenter::OnGetSourcesComplete(
WebKit::WebVector<WebKit::WebSourceInfo> sourceInfos(devices.size());
for (size_t i = 0; i < devices.size(); ++i) {
- DCHECK(devices[i].device.type == MEDIA_DEVICE_AUDIO_CAPTURE ||
- devices[i].device.type == MEDIA_DEVICE_VIDEO_CAPTURE);
- // TODO(vrk): Hook this up to the device policy so that |device.name| is
- // only populated when appropriate.
+ const MediaStreamDevice& device = devices[i].device;
+ DCHECK(device.type == MEDIA_DEVICE_AUDIO_CAPTURE ||
+ device.type == MEDIA_DEVICE_VIDEO_CAPTURE);
+ WebKit::WebSourceInfo::VideoFacingMode video_facing;
+ switch (device.video_facing) {
+ case MEDIA_VIDEO_FACING_USER:
+ video_facing = WebKit::WebSourceInfo::VideoFacingModeUser;
+ break;
+ case MEDIA_VIDEO_FACING_ENVIRONMENT:
+ video_facing = WebKit::WebSourceInfo::VideoFacingModeEnvironment;
+ break;
+ default:
+ video_facing = WebKit::WebSourceInfo::VideoFacingModeNone;
+ }
+
sourceInfos[i]
- .initialize(WebKit::WebString::fromUTF8(devices[i].device.id),
- devices[i].device.type == MEDIA_DEVICE_AUDIO_CAPTURE
+ .initialize(WebKit::WebString::fromUTF8(device.id),
+ device.type == MEDIA_DEVICE_AUDIO_CAPTURE
? WebKit::WebSourceInfo::SourceKindAudio
: WebKit::WebSourceInfo::SourceKindVideo,
- WebKit::WebString::fromUTF8(devices[i].device.name),
- WebKit::WebSourceInfo::VideoFacingModeNone);
+ WebKit::WebString::fromUTF8(device.name),
+ video_facing);
}
request_it->second.requestSucceeded(sourceInfos);
}