diff options
-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); } |