Index: content/renderer/media/media_stream_constraints_util.cc |
diff --git a/content/renderer/media/media_stream_constraints_util.cc b/content/renderer/media/media_stream_constraints_util.cc |
index a5c3b0cb6441262e34677d40a5db15ea36a60044..4a22c9653eb4be1e59fcad7c3e87ccd437e3e9e7 100644 |
--- a/content/renderer/media/media_stream_constraints_util.cc |
+++ b/content/renderer/media/media_stream_constraints_util.cc |
@@ -104,7 +104,9 @@ bool ScanConstraintsForMinValue(const blink::WebMediaConstraints& constraints, |
VideoCaptureSettings::VideoCaptureSettings() : VideoCaptureSettings("") {} |
VideoCaptureSettings::VideoCaptureSettings(const char* failed_constraint_name) |
- : failed_constraint_name_(failed_constraint_name) {} |
+ : failed_constraint_name_(failed_constraint_name) { |
+ DCHECK(failed_constraint_name_); |
+} |
VideoCaptureSettings::VideoCaptureSettings( |
std::string device_id, |
@@ -140,6 +142,37 @@ VideoCaptureSettings& VideoCaptureSettings::operator=( |
VideoCaptureSettings& VideoCaptureSettings::operator=( |
VideoCaptureSettings&& other) = default; |
+AudioCaptureSettings::AudioCaptureSettings() : AudioCaptureSettings("") {} |
+ |
+AudioCaptureSettings::AudioCaptureSettings(const char* failed_constraint_name) |
+ : failed_constraint_name_(failed_constraint_name) { |
+ DCHECK(failed_constraint_name_); |
+} |
+ |
+AudioCaptureSettings::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) |
+ : failed_constraint_name_(nullptr), |
+ device_id_(std::move(device_id)), |
+ audio_parameters_(audio_parameters), |
+ hotword_enabled_(enable_hotword), |
+ disable_local_echo_(disable_local_echo), |
+ render_to_associated_sink_(enable_automatic_output_device_selection), |
+ audio_processing_properties_(audio_processing_properties) {} |
+ |
+AudioCaptureSettings::AudioCaptureSettings(const AudioCaptureSettings& other) = |
+ default; |
+AudioCaptureSettings& AudioCaptureSettings::operator=( |
+ const AudioCaptureSettings& other) = default; |
+AudioCaptureSettings::AudioCaptureSettings(AudioCaptureSettings&& other) = |
+ default; |
+AudioCaptureSettings& AudioCaptureSettings::operator=( |
+ AudioCaptureSettings&& other) = default; |
+ |
bool GetConstraintValueAsBoolean( |
const blink::WebMediaConstraints& constraints, |
const blink::BooleanConstraint blink::WebMediaTrackConstraintSet::*picker, |
@@ -211,6 +244,25 @@ rtc::Optional<bool> ConstraintToOptional( |
return rtc::Optional<bool>(); |
} |
+std::string GetMediaStreamSource( |
+ const blink::WebMediaConstraints& constraints) { |
+ std::string source; |
+ if (constraints.Basic().media_stream_source.HasIdeal() && |
+ constraints.Basic().media_stream_source.Exact().size() > 0) { |
+ source = constraints.Basic().media_stream_source.Ideal()[0].Utf8(); |
+ } |
+ if (constraints.Basic().media_stream_source.HasExact() && |
+ constraints.Basic().media_stream_source.Exact().size() > 0) { |
+ source = constraints.Basic().media_stream_source.Exact()[0].Utf8(); |
+ } |
+ |
+ return source; |
+} |
+ |
+bool IsDeviceCapture(const blink::WebMediaConstraints& constraints) { |
+ return GetMediaStreamSource(constraints).empty(); |
+} |
+ |
VideoTrackAdapterSettings SelectVideoTrackAdapterSettings( |
const blink::WebMediaTrackConstraintSet& basic_constraint_set, |
const ResolutionSet& resolution_set, |
@@ -250,4 +302,26 @@ VideoTrackAdapterSettings SelectVideoTrackAdapterSettings( |
track_max_aspect_ratio, track_max_frame_rate, expected_native_size); |
} |
+double NumericConstraintFitnessDistance(double value1, double value2) { |
+ if (std::fabs(value1 - value2) <= blink::DoubleConstraint::kConstraintEpsilon) |
+ return 0.0; |
+ |
+ return std::fabs(value1 - value2) / |
+ std::max(std::fabs(value1), std::fabs(value2)); |
+} |
+ |
+double StringConstraintFitnessDistance( |
+ const blink::WebString& value, |
+ const blink::StringConstraint& constraint) { |
+ if (!constraint.HasIdeal()) |
+ return 0.0; |
+ |
+ for (auto& ideal_value : constraint.Ideal()) { |
+ if (value == ideal_value) |
+ return 0.0; |
+ } |
+ |
+ return 1.0; |
+} |
+ |
} // namespace content |