Index: content/renderer/media/media_stream_constraints_util_video_device.h |
diff --git a/content/renderer/media/media_stream_constraints_util_video_device.h b/content/renderer/media/media_stream_constraints_util_video_device.h |
index 02e47d787a0beebb6fe3c0be0eef95ddd85f473c..79aa4598f5d9665fa11f2f9b03e1e2c23d25f16c 100644 |
--- a/content/renderer/media/media_stream_constraints_util_video_device.h |
+++ b/content/renderer/media/media_stream_constraints_util_video_device.h |
@@ -8,11 +8,11 @@ |
#include <string> |
#include <vector> |
-#include "base/logging.h" |
+#include "base/optional.h" |
#include "content/common/content_export.h" |
#include "content/common/media/media_devices.mojom.h" |
+#include "content/renderer/media/media_stream_constraints_util.h" |
#include "media/capture/video_capture_types.h" |
-#include "third_party/webrtc/base/optional.h" |
namespace blink { |
class WebString; |
@@ -36,117 +36,33 @@ struct CONTENT_EXPORT VideoDeviceCaptureCapabilities { |
// Each field is independent of each other. |
std::vector<::mojom::VideoInputDeviceCapabilitiesPtr> device_capabilities; |
std::vector<media::PowerLineFrequency> power_line_capabilities; |
- std::vector<rtc::Optional<bool>> noise_reduction_capabilities; |
+ std::vector<base::Optional<bool>> noise_reduction_capabilities; |
}; |
-class CONTENT_EXPORT VideoDeviceCaptureSourceSelectionResult { |
- public: |
- // Creates a result without value and with an empty failed constraint name. |
- VideoDeviceCaptureSourceSelectionResult(); |
- |
- // Creates a result 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. |
- explicit VideoDeviceCaptureSourceSelectionResult( |
- const char* failed_constraint_name); |
- |
- // Creates a result with the given values. |
- VideoDeviceCaptureSourceSelectionResult( |
- const std::string& device_id, |
- ::mojom::FacingMode facing_mode_, |
- media::VideoCaptureParams capture_params_, |
- rtc::Optional<bool> noise_reduction_); |
- |
- VideoDeviceCaptureSourceSelectionResult( |
- const VideoDeviceCaptureSourceSelectionResult& other); |
- VideoDeviceCaptureSourceSelectionResult& operator=( |
- const VideoDeviceCaptureSourceSelectionResult& other); |
- VideoDeviceCaptureSourceSelectionResult( |
- VideoDeviceCaptureSourceSelectionResult&& other); |
- VideoDeviceCaptureSourceSelectionResult& operator=( |
- VideoDeviceCaptureSourceSelectionResult&& other); |
- ~VideoDeviceCaptureSourceSelectionResult(); |
- |
- bool HasValue() const { return failed_constraint_name_ == nullptr; } |
- |
- // Convenience accessors for fields embedded in |capture_params|. |
- const media::VideoCaptureFormat& Format() const { |
- return capture_params_.requested_format; |
- } |
- int Width() const { |
- DCHECK(HasValue()); |
- return capture_params_.requested_format.frame_size.width(); |
- } |
- int Height() const { |
- DCHECK(HasValue()); |
- return capture_params_.requested_format.frame_size.height(); |
- } |
- float FrameRate() const { |
- DCHECK(HasValue()); |
- return capture_params_.requested_format.frame_rate; |
- } |
- media::PowerLineFrequency PowerLineFrequency() const { |
- DCHECK(HasValue()); |
- return capture_params_.power_line_frequency; |
- } |
- |
- // Other accessors. |
- const char* failed_constraint_name() const { return failed_constraint_name_; } |
- |
- const std::string& device_id() const { |
- DCHECK(HasValue()); |
- return device_id_; |
- } |
- |
- ::mojom::FacingMode facing_mode() const { |
- DCHECK(HasValue()); |
- return facing_mode_; |
- } |
- |
- const media::VideoCaptureParams& capture_params() const { |
- DCHECK(HasValue()); |
- return capture_params_; |
- } |
- |
- const rtc::Optional<bool>& noise_reduction() const { |
- DCHECK(HasValue()); |
- return noise_reduction_; |
- } |
- |
- private: |
- const char* failed_constraint_name_; |
- std::string device_id_; |
- ::mojom::FacingMode facing_mode_; |
- media::VideoCaptureParams capture_params_; |
- rtc::Optional<bool> noise_reduction_; |
-}; |
- |
-// This function performs source and source-settings selection based on |
-// the given |capabilities| and |constraints|. |
+// This function performs source, source-settings and track-settings selection |
+// based on the given |capabilities| and |constraints|. |
// Chromium performs constraint resolution in two steps. First, a source and its |
-// settings are selected; then a track is created, connected to the source, and |
-// finally the track settings are selected. This function implements an |
-// algorithm for the first step. Sources are not a user-visible concept, so the |
-// spec only specifies an algorithm for track settings. |
-// This algorithm for sources is compatible with the spec algorithm for tracks, |
+// settings are selected, then track settings are selected based on the source |
+// settings. This function implements both steps. Sources are not a user-visible |
+// concept, so the spec only specifies an algorithm for track settings. |
+// The algorithm for sources is compatible with the spec algorithm for tracks, |
// as defined in https://w3c.github.io/mediacapture-main/#dfn-selectsettings, |
// but it is customized to account for differences between sources and tracks, |
// and to break ties when multiple source settings are equally good according to |
// the spec algorithm. |
// The main difference between a source and a track with regards to the spec |
// algorithm is that a candidate source can support a range of values for some |
-// constraints while a candidate track supports a single value. For example, |
+// properties while a candidate track supports a single value. For example, |
// cropping allows a source with native resolution AxB to support the range of |
// resolutions from 1x1 to AxB. |
// Only candidates that satisfy the basic constraint set are valid. If no |
// candidate can satisfy the basic constraint set, this function returns |
-// a result without a valid |settings| field and with the name of a failed |
-// constraint in field |failed_constraint_name|. If at least one candidate that |
+// a result without value and with the name of a failed constraint accessible |
+// via the failed_constraint_name() method. If at least one candidate that |
// satisfies the basic constraint set can be found, this function returns a |
-// result with a valid |settings| field and a null |failed_constraint_name|. |
-// If there are no candidates at all, this function returns a result with an |
-// empty string in |failed_constraint_name| and without a valid |settings| |
-// field. |
+// result with a valid value. |
+// If there are no candidates at all, this function returns a result without |
+// value and an empty failed constraint name. |
// The criteria to decide if a valid candidate is better than another one are as |
// follows: |
// 1. Given advanced constraint sets A[0],A[1]...,A[n], candidate C1 is better |
@@ -183,8 +99,12 @@ class CONTENT_EXPORT VideoDeviceCaptureSourceSelectionResult { |
// settings that include the device ID, power-line frequency, noise |
// reduction, resolution, and frame rate, in that order. Note that there is |
// no default facing mode or aspect ratio. |
-VideoDeviceCaptureSourceSelectionResult CONTENT_EXPORT |
-SelectVideoDeviceCaptureSourceSettings( |
+// This function uses the SelectVideoTrackAdapterSettings function to compute |
+// some track-specific settings. These are available in the returned value via |
+// the track_adapter_settings() accessor. For more details about the algorithm |
+// for track adapter settings, see the SelectVideoTrackAdapterSettings |
+// documentation. |
+VideoCaptureSettings CONTENT_EXPORT SelectSettingsVideoDeviceCapture( |
const VideoDeviceCaptureCapabilities& capabilities, |
const blink::WebMediaConstraints& constraints); |