diff options
author | wjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-23 21:00:22 +0000 |
---|---|---|
committer | wjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-23 21:00:22 +0000 |
commit | 4b5dc66011b4499c09da44eb69d7e8f5836a9f50 (patch) | |
tree | 6851c8bfbcdd191628257d484b586d50ea174ae8 | |
parent | 9744a15e383387eea82a0d941a13c1d9714af536 (diff) | |
download | chromium_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.h | 4 | ||||
-rw-r--r-- | content/public/common/media_stream_request.cc | 14 | ||||
-rw-r--r-- | content/public/common/media_stream_request.h | 14 | ||||
-rw-r--r-- | content/renderer/media/media_stream_center.cc | 27 |
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); } |