Commit e243ee8c authored by Chandan Padhi's avatar Chandan Padhi Committed by Commit Bot

Implement InputDeviceInfo.getCapabilities() for audio devices

Bug: 817769
Change-Id: Iae2abc17aee26c5586c38412140f18fbacc66568
Reviewed-on: https://chromium-review.googlesource.com/945590Reviewed-by: default avatarPhilip Jägenstedt <foolip@chromium.org>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Commit-Queue: Chandan Padhi <c.padhi@samsung.com>
Cr-Commit-Position: refs/heads/master@{#542312}
parent c164831e
...@@ -822,11 +822,8 @@ blink::WebMediaStreamSource UserMediaProcessor::InitializeAudioSourceObject( ...@@ -822,11 +822,8 @@ blink::WebMediaStreamSource UserMediaProcessor::InitializeAudioSourceObject(
audio_source->SetStopCallback(base::Bind( audio_source->SetStopCallback(base::Bind(
&UserMediaProcessor::OnLocalSourceStopped, weak_factory_.GetWeakPtr())); &UserMediaProcessor::OnLocalSourceStopped, weak_factory_.GetWeakPtr()));
std::vector<bool> echo_cancellation;
echo_cancellation.push_back(true);
echo_cancellation.push_back(false);
blink::WebMediaStreamSource::Capabilities capabilities; blink::WebMediaStreamSource::Capabilities capabilities;
capabilities.echo_cancellation = echo_cancellation; capabilities.echo_cancellation = {true, false};
capabilities.device_id = blink::WebString::FromUTF8(device.id); capabilities.device_id = blink::WebString::FromUTF8(device.id);
source.SetExtraData(audio_source); // Takes ownership. source.SetExtraData(audio_source); // Takes ownership.
......
...@@ -16,28 +16,30 @@ ...@@ -16,28 +16,30 @@
<script> <script>
"use strict"; "use strict";
//NOTE ALEX: for completion, a test for ondevicechange event is missing. //NOTE ALEX: for completion, a test for ondevicechange event is missing.
test(function () { promise_test(function() {
assert_true(undefined !== navigator.mediaDevices.enumerateDevices, "navigator.mediaDevices.enumerateDevices exists"); assert_true(undefined !== navigator.mediaDevices.enumerateDevices, "navigator.mediaDevices.enumerateDevices exists");
var p = navigator.mediaDevices.enumerateDevices() return navigator.mediaDevices.enumerateDevices().then(function(list) {
p.then(function(list){
for (let mediainfo of list) { for (let mediainfo of list) {
assert_true(undefined !== mediainfo.deviceId, "mediaInfo's deviceId should exist."); assert_true(undefined !== mediainfo.deviceId, "mediaInfo's deviceId should exist.");
assert_true(undefined !== mediainfo.kind, "mediaInfo's kind should exist."); assert_true(undefined !== mediainfo.kind, "mediaInfo's kind should exist.");
assert_true(undefined !== mediainfo.label, "mediaInfo's label should exist."); assert_true(undefined !== mediainfo.label, "mediaInfo's label should exist.");
assert_true(undefined !== mediainfo.groupId, "mediaInfo's groupId should exist."); assert_true(undefined !== mediainfo.groupId, "mediaInfo's groupId should exist.");
// TODO the values of some of those fields should be empty string by default if no permission has been requested. // TODO the values of some of those fields should be empty string by default if no permission has been requested.
if ( mediainfo.kind == "audioinput" || if ( mediainfo.kind == "audioinput" || mediainfo.kind == "videoinput") {
mediainfo.kind == "videoinput") {
assert_true(mediainfo instanceof InputDeviceInfo); assert_true(mediainfo instanceof InputDeviceInfo);
var capabilities = mediainfo.getCapabilities();
assert_equals(typeof capabilities, "object", "capabilities must be an object.");
assert_equals(typeof capabilities.deviceId, "string", "deviceId must be a string.");
assert_equals(typeof capabilities.groupId, "string", "groupId must be a string.");
if (mediainfo.kind == "audioinput") {
assert_equals(typeof capabilities.echoCancellation, "object", "echoCancellation must be an object.");
}
} else if ( mediainfo.kind == "audiooutput" ) { } else if ( mediainfo.kind == "audiooutput" ) {
assert_true(mediainfo instanceof MediaDeviceInfo); assert_true(mediainfo instanceof MediaDeviceInfo);
} else { } else {
assert_unreached("mediainfo.kind should be one of 'audioinput', 'videoinput', or 'audiooutput'.") assert_unreached("mediainfo.kind should be one of 'audioinput', 'videoinput', or 'audiooutput'.")
} }
} }
})
p.catch(function(err){
assert_unreached("A call to enumerateDevices() should never fail.");
}); });
}, "mediaDevices.enumerateDevices() is present and working on navigator"); }, "mediaDevices.enumerateDevices() is present and working on navigator");
</script> </script>
......
...@@ -21,6 +21,12 @@ InputDeviceInfo::InputDeviceInfo(const String& device_id, ...@@ -21,6 +21,12 @@ InputDeviceInfo::InputDeviceInfo(const String& device_id,
MediaDeviceType device_type) MediaDeviceType device_type)
: MediaDeviceInfo(device_id, label, group_id, device_type) {} : MediaDeviceInfo(device_id, label, group_id, device_type) {}
void InputDeviceInfo::getCapabilities(MediaTrackCapabilities& capabilities) {} void InputDeviceInfo::getCapabilities(MediaTrackCapabilities& capabilities) {
capabilities.setDeviceId(deviceId());
capabilities.setGroupId(groupId());
if (DeviceType() == MediaDeviceType::MEDIA_AUDIO_INPUT)
capabilities.setEchoCancellation({true, false});
}
} // namespace blink } // namespace blink
...@@ -53,7 +53,6 @@ class MODULES_EXPORT MediaDeviceInfo : public ScriptWrappable { ...@@ -53,7 +53,6 @@ class MODULES_EXPORT MediaDeviceInfo : public ScriptWrappable {
String label() const; String label() const;
String groupId() const; String groupId() const;
// Used for testing only.
MediaDeviceType DeviceType() const; MediaDeviceType DeviceType() const;
ScriptValue toJSONForBinding(ScriptState*); ScriptValue toJSONForBinding(ScriptState*);
......
...@@ -10,6 +10,7 @@ dictionary MediaTrackCapabilities { ...@@ -10,6 +10,7 @@ dictionary MediaTrackCapabilities {
sequence<DOMString> facingMode; sequence<DOMString> facingMode;
sequence<boolean> echoCancellation; sequence<boolean> echoCancellation;
DOMString deviceId; DOMString deviceId;
DOMString groupId;
// W3C Image Capture API // W3C Image Capture API
// https://w3c.github.io/mediacapture-image/#mediatrackcapabilities-section // https://w3c.github.io/mediacapture-image/#mediatrackcapabilities-section
// TODO(mcasas) move out when partial dictionaries are supported // TODO(mcasas) move out when partial dictionaries are supported
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment