Index: content/renderer/media/media_stream_constraints_util_audio.h |
diff --git a/content/renderer/media/media_stream_constraints_util_audio.h b/content/renderer/media/media_stream_constraints_util_audio.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c5e085951fabe86fc3f491db4cb14f0039775884 |
--- /dev/null |
+++ b/content/renderer/media/media_stream_constraints_util_audio.h |
@@ -0,0 +1,102 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CONSTRAINTS_UTIL_AUDIO_H_ |
+#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CONSTRAINTS_UTIL_AUDIO_H_ |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "content/common/content_export.h" |
+#include "content/common/media/media_devices.mojom.h" |
+#include "content/renderer/media/media_stream_constraints_util.h" |
+ |
+namespace blink { |
+class WebMediaConstraints; |
+} |
+ |
+namespace content { |
+ |
+using AudioDeviceCaptureCapabilities = |
+ std::vector<::mojom::AudioInputDeviceCapabilitiesPtr>; |
+ |
+// This function implements the SelectSettings algorithm for audio tracks as |
+// described in https://w3c.github.io/mediacapture-main/#dfn-selectsettings |
+// The algorithm starts with a set containing all possible candidate settings |
+// based on hardware capabilities (passed via the |capabilities| parameter) and |
+// supported values for properties not involved in device selection. Candidates |
+// that do not support the basic constraint set from |constraints| are removed. |
+// If the set of candidates is empty after this step, the function returns an |
+// AudioCaptureSettings object without value and whose failed_constraint_name() |
+// method returns the name of one of the (possibly many) constraints that could |
+// not be satisfied or an empty string if the set of candidates was initially |
+// empty (e.g., if there are no devices in the system). |
+// After the basic constraint set is applied, advanced constraint sets are |
+// applied. If no candidates can satisfy an advanced set, the advanced set is |
+// ignored, otherwise the candidates that cannot satisfy the advanced set are |
+// removed. |
+// Once all constraint sets are applied, the result is selected from the |
+// remaining candidates by giving preference to candidates closest to the ideal |
+// values specified in the basic constraint set, or using default |
+// implementation-specific values. |
+// The result includes the following properties: |
+// * Device. A device is chosen using the device_id, sample_rate, sample_size, |
+// and channel_count constraints. If multiple devices satisfy the constraints |
+// preference is given to the default device (system defined or chosen by |
+// user preferences). If the default device is not included in the valid |
+// candidates, the first valid device in the list obtained by querying the |
+// system capabilities is chosen. For content capture, no real audio input |
+// devices are used and the sample_rate, sample_size and channel_count |
+// constraints are ignored. In content capture, the deviceId constraint is |
+// supported and is interpreted by the system as a string that indicates, |
+// for example, which tab to capture. Validation for that "device" ID is |
+// performed by the getUserMedia implementation. To decide between content |
+// or device capture, the value of the special media_stream_source constraint |
+// is used. |
+// * Audio features: the hotword_enabled, disable_local_echo and |
+// render_to_associated_sink constraints can be used to enable the |
+// corresponding audio feature. If not specified, their default value is |
+// false. |
+// * Audio processing. The remaining constraints are used to control audio |
+// processing. This is how audio-processing properties are set for device |
+// capture(see the content::AudioProcessingProperties struct) : |
+// - enable_sw_echo_cancellation: If the selected device has hardware echo |
+// cancellation, software echo cancellation is disabled regardless of |
+// any constraint values. Otherwise, it is enabled by default unless |
+// either the echo_cancellation or the goog_echo_cancellation constraint |
+// has a final value of false after applying all constraint sets. Note |
+// that if these constraints have contradictory values, SelectSettings |
+// fails and returns no value. |
+// - disable_hw_echo_cancellation: For devices that have hardware echo |
+// cancellation, the feature is disabled if the echo_cancellation or |
+// goog_echo_cancellation constraints have a final value of false. |
+// - goog_audio_mirroring: This property is mapped directly from the final |
+// value of the goog_audio_mirroring constraint. If no value is |
+// explicitly specified, the default value is false. |
+// The remaining audio-processing properties are directly mapped from the |
+// final value of the corresponding constraints. If no value is explicitly |
+// specified, the default value is the same as the final value of the |
+// echo_cancellation constraint. If the echo_cancellation constraint is |
+// not explicitly specified, the default value is implementation defined |
+// (see content::AudioProcessingProperties). |
+// For content capture the rules are the same, but all properties are false |
+// by default, regardless of the value of the echo_cancellation constraint. |
+// Note that it is important to distinguish between audio properties and |
+// constraints. Constraints are an input to SelectSettings, while properties |
+// are part of the output. The value for most boolean properties comes |
+// directly from a corresponding boolean constraint, but this is not true for |
+// all constraints and properties. For example, the echo_cancellation and |
+// goog_echo_cancellation constraints are not directly mapped to any |
+// property, but they, together with hardware characteristics, influence the |
+// enabling and disabling of software and hardware echo cancellation. |
+// Moreover, the echo_cancellation constraint influences most other |
+// audio-processing properties for which no explicit value is provided in |
+// their corresponding constraints. |
+AudioCaptureSettings CONTENT_EXPORT |
+SelectSettingsAudioCapture(const AudioDeviceCaptureCapabilities& capabilities, |
+ const blink::WebMediaConstraints& constraints); |
+ |
+} // namespace content |
+ |
+#endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CONSTRAINTS_UTIL_AUDIO_H_ |