summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);
}