Index: content/renderer/media/media_stream_constraints_util_video_device.cc |
diff --git a/content/renderer/media/media_stream_constraints_util_video_source.cc b/content/renderer/media/media_stream_constraints_util_video_device.cc |
similarity index 84% |
rename from content/renderer/media/media_stream_constraints_util_video_source.cc |
rename to content/renderer/media/media_stream_constraints_util_video_device.cc |
index 59826d51aee494fca6976e1c18a2919ac1c36733..3e2f3e8032cd97cb28c41c144263b2d56ca46db6 100644 |
--- a/content/renderer/media/media_stream_constraints_util_video_source.cc |
+++ b/content/renderer/media/media_stream_constraints_util_video_device.cc |
@@ -2,7 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "content/renderer/media/media_stream_constraints_util_video_source.h" |
+#include "content/renderer/media/media_stream_constraints_util_video_device.h" |
#include <algorithm> |
#include <cmath> |
@@ -10,6 +10,7 @@ |
#include <utility> |
#include <vector> |
+#include "content/renderer/media/media_stream_constraints_util.h" |
#include "content/renderer/media/media_stream_video_source.h" |
#include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
#include "third_party/WebKit/public/platform/WebString.h" |
@@ -49,28 +50,73 @@ blink::WebString ToWebString(::mojom::FacingMode facing_mode) { |
} |
} |
-template <typename ConstraintType> |
-bool ConstraintHasMax(const ConstraintType& constraint) { |
- return constraint.hasMax() || constraint.hasExact(); |
-} |
+struct VideoDeviceCaptureSourceSettings { |
+ public: |
+ VideoDeviceCaptureSourceSettings() |
+ : facing_mode_(::mojom::FacingMode::NONE), |
+ power_line_frequency_(media::PowerLineFrequency::FREQUENCY_DEFAULT) {} |
+ |
+ VideoDeviceCaptureSourceSettings( |
+ const std::string& device_id, |
+ const media::VideoCaptureFormat& format, |
+ ::mojom::FacingMode facing_mode, |
+ media::PowerLineFrequency power_line_frequency) |
+ : device_id_(device_id), |
+ format_(format), |
+ facing_mode_(facing_mode), |
+ power_line_frequency_(power_line_frequency) {} |
+ |
+ VideoDeviceCaptureSourceSettings( |
+ const VideoDeviceCaptureSourceSettings& other) = default; |
+ VideoDeviceCaptureSourceSettings& operator=( |
+ const VideoDeviceCaptureSourceSettings& other) = default; |
+ VideoDeviceCaptureSourceSettings(VideoDeviceCaptureSourceSettings&& other) = |
+ default; |
+ VideoDeviceCaptureSourceSettings& operator=( |
+ VideoDeviceCaptureSourceSettings&& other) = default; |
+ ~VideoDeviceCaptureSourceSettings() = default; |
+ |
+ // These accessor-like methods transform types to what Blink constraint |
+ // classes expect. |
+ blink::WebString GetFacingMode() const { return ToWebString(facing_mode_); } |
+ long GetPowerLineFrequency() const { |
+ return static_cast<long>(power_line_frequency_); |
+ } |
+ long GetWidth() const { return format_.frame_size.width(); } |
+ long GetHeight() const { return format_.frame_size.height(); } |
+ double GetFrameRate() const { return format_.frame_rate; } |
+ blink::WebString GetDeviceId() const { |
+ return blink::WebString::fromASCII(device_id_.data()); |
+ } |
+ blink::WebString GetVideoKind() const { |
+ return GetVideoKindForFormat(format_); |
+ } |
-template <typename ConstraintType> |
-bool ConstraintHasMin(const ConstraintType& constraint) { |
- return constraint.hasMin() || constraint.hasExact(); |
-} |
+ // Accessors. |
+ const media::VideoCaptureFormat& format() const { return format_; } |
+ const std::string& device_id() const { return device_id_; } |
+ ::mojom::FacingMode facing_mode() const { return facing_mode_; } |
+ media::PowerLineFrequency power_line_frequency() const { |
+ return power_line_frequency_; |
+ } |
-template <typename ConstraintType> |
-auto ConstraintMax(const ConstraintType& constraint) |
- -> decltype(constraint.max()) { |
- DCHECK(ConstraintHasMax(constraint)); |
- return constraint.hasExact() ? constraint.exact() : constraint.max(); |
-} |
+ private: |
+ std::string device_id_; |
+ media::VideoCaptureFormat format_; |
+ ::mojom::FacingMode facing_mode_; |
+ media::PowerLineFrequency power_line_frequency_; |
+}; |
+ |
+VideoDeviceCaptureSourceSelectionResult ResultFromSettings( |
+ const VideoDeviceCaptureSourceSettings& settings) { |
+ VideoDeviceCaptureSourceSelectionResult result; |
+ result.capture_params.power_line_frequency = settings.power_line_frequency(); |
+ result.capture_params.requested_format = settings.format(); |
+ result.device_id = settings.device_id(); |
+ result.facing_mode = settings.facing_mode(); |
+ result.failed_constraint_name = nullptr; |
-template <typename ConstraintType> |
-auto ConstraintMin(const ConstraintType& constraint) |
- -> decltype(constraint.min()) { |
- DCHECK(ConstraintHasMin(constraint)); |
- return constraint.hasExact() ? constraint.exact() : constraint.min(); |
+ return result; |
} |
// Generic distance function between two numeric values. Based on the fitness |
@@ -324,7 +370,7 @@ double FormatSourceDistance( |
// Otherwise the distance is a finite value. Candidates with lower distance |
// satisfy |constraint_set| in a "better" way. |
double CandidateSourceDistance( |
- const VideoCaptureSourceSettings& candidate, |
+ const VideoDeviceCaptureSourceSettings& candidate, |
const blink::WebMediaTrackConstraintSet& constraint_set, |
const char** failed_constraint_name) { |
return DeviceSourceDistance(candidate.device_id(), candidate.facing_mode(), |
@@ -470,7 +516,7 @@ double PowerLineFrequencyConstraintFitnessDistance( |
// setting in |candidate| and the corresponding constraint in |constraint_set|. |
// Based on https://w3c.github.io/mediacapture-main/#dfn-fitness-distance. |
double CandidateFitnessDistance( |
- const VideoCaptureSourceSettings& candidate, |
+ const VideoDeviceCaptureSourceSettings& candidate, |
const blink::WebMediaTrackConstraintSet& constraint_set) { |
DCHECK(std::isfinite( |
CandidateSourceDistance(candidate, constraint_set, nullptr))); |
@@ -502,7 +548,7 @@ double CandidateFitnessDistance( |
// height and frame rate). |
// Based on https://w3c.github.io/mediacapture-main/#dfn-fitness-distance. |
double CandidateNativeFitnessDistance( |
- const VideoCaptureSourceSettings& candidate, |
+ const VideoDeviceCaptureSourceSettings& candidate, |
const blink::WebMediaTrackConstraintSet& constraint_set) { |
DCHECK(std::isfinite( |
CandidateSourceDistance(candidate, constraint_set, nullptr))); |
@@ -524,9 +570,10 @@ using DistanceVector = std::vector<double>; |
// These entries are to be used as the final tie breaker for candidates that |
// are equally good according to the spec and the custom distance functions |
// between candidates and constraints. |
-void AppendDistanceFromDefault(const VideoCaptureSourceSettings& candidate, |
- const VideoCaptureCapabilities& capabilities, |
- DistanceVector* distance_vector) { |
+void AppendDistanceFromDefault( |
+ const VideoDeviceCaptureSourceSettings& candidate, |
+ const VideoDeviceCaptureCapabilities& capabilities, |
+ DistanceVector* distance_vector) { |
// Favor IDs that appear first in the enumeration. |
for (size_t i = 0; i < capabilities.device_capabilities.size(); ++i) { |
if (candidate.device_id() == |
@@ -570,82 +617,36 @@ blink::WebString GetVideoKindForFormat( |
: blink::WebString::fromASCII(kVideoKindColor); |
} |
-VideoCaptureCapabilities::VideoCaptureCapabilities() = default; |
-VideoCaptureCapabilities::VideoCaptureCapabilities( |
- VideoCaptureCapabilities&& other) = default; |
-VideoCaptureCapabilities::~VideoCaptureCapabilities() = default; |
-VideoCaptureCapabilities& VideoCaptureCapabilities::operator=( |
- VideoCaptureCapabilities&& other) = default; |
- |
-VideoCaptureSourceSettings::VideoCaptureSourceSettings( |
- const VideoCaptureSourceSettings& other) = default; |
-VideoCaptureSourceSettings::VideoCaptureSourceSettings( |
- VideoCaptureSourceSettings&& other) = default; |
-VideoCaptureSourceSettings::~VideoCaptureSourceSettings() = default; |
-VideoCaptureSourceSettings& VideoCaptureSourceSettings::operator=( |
- const VideoCaptureSourceSettings& other) = default; |
-VideoCaptureSourceSettings& VideoCaptureSourceSettings::operator=( |
- VideoCaptureSourceSettings&& other) = default; |
- |
-VideoCaptureSourceSettings::VideoCaptureSourceSettings() |
- : facing_mode_(::mojom::FacingMode::NONE), |
- power_line_frequency_(media::PowerLineFrequency::FREQUENCY_DEFAULT) {} |
- |
-VideoCaptureSourceSettings::VideoCaptureSourceSettings( |
- const std::string& device_id, |
- const media::VideoCaptureFormat& format, |
- ::mojom::FacingMode facing_mode, |
- media::PowerLineFrequency power_line_frequency) |
- : device_id_(device_id), |
- format_(format), |
- facing_mode_(facing_mode), |
- power_line_frequency_(power_line_frequency) {} |
- |
-blink::WebString VideoCaptureSourceSettings::GetFacingMode() const { |
- return ToWebString(facing_mode_); |
-} |
- |
-long VideoCaptureSourceSettings::GetPowerLineFrequency() const { |
- return static_cast<long>(power_line_frequency_); |
-} |
- |
-long VideoCaptureSourceSettings::GetWidth() const { |
- return format_.frame_size.width(); |
-} |
- |
-long VideoCaptureSourceSettings::GetHeight() const { |
- return format_.frame_size.height(); |
-} |
- |
-double VideoCaptureSourceSettings::GetFrameRate() const { |
- return format_.frame_rate; |
-} |
- |
-blink::WebString VideoCaptureSourceSettings::GetDeviceId() const { |
- return blink::WebString::fromASCII(device_id_.data()); |
-} |
- |
-blink::WebString VideoCaptureSourceSettings::GetVideoKind() const { |
- return GetVideoKindForFormat(format_); |
-} |
+VideoDeviceCaptureCapabilities::VideoDeviceCaptureCapabilities() = default; |
+VideoDeviceCaptureCapabilities::VideoDeviceCaptureCapabilities( |
+ VideoDeviceCaptureCapabilities&& other) = default; |
+VideoDeviceCaptureCapabilities::~VideoDeviceCaptureCapabilities() = default; |
+VideoDeviceCaptureCapabilities& VideoDeviceCaptureCapabilities::operator=( |
+ VideoDeviceCaptureCapabilities&& other) = default; |
const char kDefaultFailedConstraintName[] = ""; |
-VideoCaptureSourceSelectionResult::VideoCaptureSourceSelectionResult() |
- : failed_constraint_name(kDefaultFailedConstraintName) {} |
-VideoCaptureSourceSelectionResult::VideoCaptureSourceSelectionResult( |
- const VideoCaptureSourceSelectionResult& other) = default; |
-VideoCaptureSourceSelectionResult::VideoCaptureSourceSelectionResult( |
- VideoCaptureSourceSelectionResult&& other) = default; |
-VideoCaptureSourceSelectionResult::~VideoCaptureSourceSelectionResult() = |
- default; |
-VideoCaptureSourceSelectionResult& VideoCaptureSourceSelectionResult::operator=( |
- const VideoCaptureSourceSelectionResult& other) = default; |
-VideoCaptureSourceSelectionResult& VideoCaptureSourceSelectionResult::operator=( |
- VideoCaptureSourceSelectionResult&& other) = default; |
- |
-VideoCaptureSourceSelectionResult SelectVideoCaptureSourceSettings( |
- const VideoCaptureCapabilities& capabilities, |
+VideoDeviceCaptureSourceSelectionResult:: |
+ VideoDeviceCaptureSourceSelectionResult() |
+ : failed_constraint_name(kDefaultFailedConstraintName), |
+ facing_mode(::mojom::FacingMode::NONE) {} |
+VideoDeviceCaptureSourceSelectionResult:: |
+ VideoDeviceCaptureSourceSelectionResult( |
+ const VideoDeviceCaptureSourceSelectionResult& other) = default; |
+VideoDeviceCaptureSourceSelectionResult:: |
+ VideoDeviceCaptureSourceSelectionResult( |
+ VideoDeviceCaptureSourceSelectionResult&& other) = default; |
+VideoDeviceCaptureSourceSelectionResult:: |
+ ~VideoDeviceCaptureSourceSelectionResult() = default; |
+VideoDeviceCaptureSourceSelectionResult& |
+VideoDeviceCaptureSourceSelectionResult::operator=( |
+ const VideoDeviceCaptureSourceSelectionResult& other) = default; |
+VideoDeviceCaptureSourceSelectionResult& |
+VideoDeviceCaptureSourceSelectionResult::operator=( |
+ VideoDeviceCaptureSourceSelectionResult&& other) = default; |
+ |
+VideoDeviceCaptureSourceSelectionResult SelectVideoDeviceCaptureSourceSettings( |
+ const VideoDeviceCaptureCapabilities& capabilities, |
const blink::WebMediaConstraints& constraints) { |
// This function works only if infinity is defined for the double type. |
DCHECK(std::numeric_limits<double>::has_infinity); |
@@ -667,7 +668,7 @@ VideoCaptureSourceSelectionResult SelectVideoCaptureSourceSettings( |
DistanceVector best_distance(2 * constraints.advanced().size() + 3 + |
kNumDefaultDistanceEntries); |
std::fill(best_distance.begin(), best_distance.end(), HUGE_VAL); |
- VideoCaptureSourceSelectionResult result; |
+ VideoDeviceCaptureSourceSelectionResult result; |
const char* failed_constraint_name = result.failed_constraint_name; |
for (auto& device : capabilities.device_capabilities) { |
@@ -701,9 +702,9 @@ VideoCaptureSourceSelectionResult SelectVideoCaptureSourceSettings( |
// Custom distances must be added to the candidate distance vector after |
// all the spec-mandated values. |
DistanceVector advanced_custom_distance_vector; |
- VideoCaptureSourceSettings candidate(device->device_id, format, |
- device->facing_mode, |
- power_line_frequency); |
+ VideoDeviceCaptureSourceSettings candidate(device->device_id, format, |
+ device->facing_mode, |
+ power_line_frequency); |
DistanceVector candidate_distance_vector; |
// First criteria for valid candidates is satisfaction of advanced |
// constraint sets. |
@@ -736,14 +737,13 @@ VideoCaptureSourceSelectionResult SelectVideoCaptureSourceSettings( |
DCHECK_EQ(best_distance.size(), candidate_distance_vector.size()); |
if (candidate_distance_vector < best_distance) { |
best_distance = candidate_distance_vector; |
- result.settings = std::move(candidate); |
- result.failed_constraint_name = nullptr; |
+ result = ResultFromSettings(candidate); |
} |
} |
} |
} |
- if (!result.has_value()) |
+ if (!result.HasValue()) |
result.failed_constraint_name = failed_constraint_name; |
return result; |