Index: content/renderer/media/media_stream_constraints_util.h |
diff --git a/content/renderer/media/media_stream_constraints_util.h b/content/renderer/media/media_stream_constraints_util.h |
index 1c666a34f6cbfc0c7dac5a16bfd536efe4327ae2..4c238a53c3199641081f7548a024ce2de178a0ab 100644 |
--- a/content/renderer/media/media_stream_constraints_util.h |
+++ b/content/renderer/media/media_stream_constraints_util.h |
@@ -10,6 +10,7 @@ |
#include "base/logging.h" |
#include "content/common/content_export.h" |
#include "content/common/media/media_devices.mojom.h" |
+#include "content/renderer/media/media_stream_audio_processor_options.h" |
#include "content/renderer/media/video_track_adapter.h" |
#include "media/capture/video_capture_types.h" |
#include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
@@ -50,6 +51,9 @@ class NumericRangeSet; |
// * min_frame_rate and max_frame_rate: used to control frame refreshes in |
// screen-capture tracks sent to a peer connection. Derived from the |
// frameRate constraint. |
+// If SelectSettings fails, the HasValue() method returns false and |
+// failed_constraint_name() returns the name of one of the (possibly multiple) |
+// constraints that could not be satisfied. |
class CONTENT_EXPORT VideoCaptureSettings { |
public: |
// Creates an object without value and with an empty failed constraint name. |
@@ -57,8 +61,8 @@ class CONTENT_EXPORT VideoCaptureSettings { |
// Creates an object without value and with the given |
// |failed_constraint_name|. Does not take ownership of |
- // |failed_constraint_name|, so it must be null or point to a string that |
- // remains accessible. |
+ // |failed_constraint_name|, so it must point to a string that remains |
+ // accessible. |failed_constraint_name| must be non-null. |
explicit VideoCaptureSettings(const char* failed_constraint_name); |
// Creates an object with the given values. |
@@ -140,6 +144,95 @@ class CONTENT_EXPORT VideoCaptureSettings { |
base::Optional<double> max_frame_rate_; |
}; |
+// This class represents the output the SelectSettings algorithm for audio |
+// constraints (see https://w3c.github.io/mediacapture-main/#dfn-selectsettings) |
+// The input to SelectSettings is a user-supplied constraints object, and its |
+// output is a set of implementation-specific settings that are used to |
+// configure other Chromium objects such as sources, tracks and sinks so that |
+// they work in the way indicated by the specification. AudioCaptureSettings may |
+// also be used to implement other constraints-related functionality, such as |
+// the getSettings() function. |
+// The following fields are used to control MediaStreamVideoSource objects: |
+// * device_id: used for device selection and obtained from the deviceId |
+// * device_parameters: these are the hardware parameters for the device |
+// selected by SelectSettings. They can be used to verify that the |
+// parameters with which the audio stream is actually created corresponds |
+// to what SelectSettings selected. It can also be used to implement |
+// getSettings() for device-related properties such as sampleRate and |
+// channelCount. |
+// The following fields are used to control various audio features: |
+// * hotword_enabled |
+// * disable_local_echo |
+// * render_to_associated_sink |
+// The audio_properties field is used to control the audio-processing module, |
+// which provides features such as software-based echo cancellation. |
+// If SelectSettings fails, the HasValue() method returns false and |
+// failed_constraint_name() returns the name of one of the (possibly multiple) |
+// constraints that could not be satisfied. |
+class CONTENT_EXPORT AudioCaptureSettings { |
+ public: |
+ // Creates an object without value and with an empty failed constraint name. |
+ AudioCaptureSettings(); |
+ |
+ // Creates an object without value and with the given |
+ // |failed_constraint_name|. Does not take ownership of |
+ // |failed_constraint_name|, so it must point to a string that remains |
+ // accessible. |failed_constraint_name| must be non-null. |
+ explicit AudioCaptureSettings(const char* failed_constraint_name); |
+ |
+ // Creates an object with the given values. |
+ explicit AudioCaptureSettings( |
+ std::string device_id, |
+ const media::AudioParameters& audio_parameters, |
+ bool enable_hotword, |
+ bool disable_local_echo, |
+ bool enable_automatic_output_device_selection, |
+ const AudioProcessingProperties& audio_processing_properties); |
+ AudioCaptureSettings(const AudioCaptureSettings& other); |
+ AudioCaptureSettings& operator=(const AudioCaptureSettings& other); |
+ AudioCaptureSettings(AudioCaptureSettings&& other); |
+ AudioCaptureSettings& operator=(AudioCaptureSettings&& other); |
+ |
+ bool HasValue() const { return failed_constraint_name_ == nullptr; } |
+ |
+ // Accessors. |
+ const char* failed_constraint_name() const { return failed_constraint_name_; } |
+ const std::string& device_id() const { |
+ DCHECK(HasValue()); |
+ return device_id_; |
+ } |
+ // This field is meaningless in content capture. |
+ const media::AudioParameters& device_parameters() const { |
+ DCHECK(HasValue()); |
+ return audio_parameters_; |
+ } |
+ bool hotword_enabled() const { |
+ DCHECK(HasValue()); |
+ return hotword_enabled_; |
+ } |
+ bool disable_local_echo() const { |
+ DCHECK(HasValue()); |
+ return disable_local_echo_; |
+ } |
+ bool render_to_associated_sink() const { |
+ DCHECK(HasValue()); |
+ return render_to_associated_sink_; |
+ } |
+ AudioProcessingProperties audio_processing_properties() const { |
+ DCHECK(HasValue()); |
+ return audio_processing_properties_; |
+ } |
+ |
+ private: |
+ const char* failed_constraint_name_; |
+ std::string device_id_; |
+ media::AudioParameters audio_parameters_; |
+ bool hotword_enabled_; |
+ bool disable_local_echo_; |
+ bool render_to_associated_sink_; |
+ AudioProcessingProperties audio_processing_properties_; |
+}; |
+ |
// Method to get boolean value of constraint with |name| from constraints. |
// Returns true if the constraint is specified in either mandatory or optional |
// constraints. |
@@ -220,6 +313,22 @@ auto ConstraintMin(const ConstraintType& constraint) |
return constraint.HasExact() ? constraint.Exact() : constraint.Min(); |
} |
+// If |value| is outside the range of |constraint|, returns the name of the |
+// failed constraint. Otherwise, returns nullptr. The return value converts to |
+// bool in the expected way. |
+template <typename NumericConstraintType, typename ValueType> |
+const char* IsOutsideConstraintRange(NumericConstraintType constraint, |
+ ValueType value) { |
+ return (ConstraintHasMin(constraint) && value < ConstraintMin(constraint)) || |
+ (ConstraintHasMax(constraint) && |
+ value > ConstraintMax(constraint)) |
+ ? constraint.GetName() |
+ : nullptr; |
+} |
+ |
+std::string GetMediaStreamSource(const blink::WebMediaConstraints& constraints); |
+bool IsDeviceCapture(const blink::WebMediaConstraints& constraints); |
+ |
// This function selects track settings from a set of candidate resolutions and |
// frame rates, given the source video-capture format and ideal values. |
// The output are settings for a VideoTrackAdapter, which can adjust the |
@@ -249,6 +358,17 @@ VideoTrackAdapterSettings CONTENT_EXPORT SelectVideoTrackAdapterSettings( |
const media::VideoCaptureFormat& source_format, |
bool expect_source_native_size); |
+// Generic distance function between two values for numeric constraints. Based |
+// on the fitness-distance function described in |
+// https://w3c.github.io/mediacapture-main/#dfn-fitness-distance |
+double NumericConstraintFitnessDistance(double value1, double value2); |
+ |
+// Fitness distance between |value| and |constraint|. |
+// Based on https://w3c.github.io/mediacapture-main/#dfn-fitness-distance. |
+double StringConstraintFitnessDistance( |
+ const blink::WebString& value, |
+ const blink::StringConstraint& constraint); |
+ |
} // namespace content |
#endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CONSTRAINTS_UTIL_H_ |