| 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 8c886bd68bd45f077d0f1c84428837c097282fe5..16b3fcd22b1194e487f92eb389e85a7665f74114 100644
|
| --- a/content/renderer/media/media_stream_constraints_util.cc
|
| +++ b/content/renderer/media/media_stream_constraints_util.cc
|
| @@ -4,8 +4,12 @@
|
|
|
| #include "content/renderer/media/media_stream_constraints_util.h"
|
|
|
| +#include <algorithm>
|
| +#include <utility>
|
| +
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "content/renderer/media/media_stream_constraints_util_sets.h"
|
| #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
|
| #include "third_party/WebKit/public/platform/WebString.h"
|
|
|
| @@ -91,6 +95,42 @@ bool ScanConstraintsForMinValue(const blink::WebMediaConstraints& constraints,
|
|
|
| } // namespace
|
|
|
| +VideoCaptureSettings::VideoCaptureSettings() : VideoCaptureSettings("") {}
|
| +
|
| +VideoCaptureSettings::VideoCaptureSettings(const char* failed_constraint_name)
|
| + : failed_constraint_name_(failed_constraint_name) {}
|
| +
|
| +VideoCaptureSettings::VideoCaptureSettings(
|
| + std::string device_id,
|
| + media::VideoCaptureParams capture_params,
|
| + base::Optional<bool> noise_reduction,
|
| + const VideoTrackAdapterSettings& track_adapter_settings,
|
| + double min_frame_rate)
|
| + : failed_constraint_name_(nullptr),
|
| + device_id_(std::move(device_id)),
|
| + capture_params_(capture_params),
|
| + noise_reduction_(noise_reduction),
|
| + track_adapter_settings_(track_adapter_settings),
|
| + min_frame_rate_(min_frame_rate) {
|
| + DCHECK_LE(min_frame_rate_, capture_params.requested_format.frame_rate);
|
| + DCHECK_LE(track_adapter_settings.max_width,
|
| + capture_params.requested_format.frame_size.width());
|
| + DCHECK_LE(track_adapter_settings.max_height,
|
| + capture_params.requested_format.frame_size.height());
|
| + DCHECK_LT(track_adapter_settings.max_frame_rate,
|
| + capture_params.requested_format.frame_rate);
|
| +}
|
| +
|
| +VideoCaptureSettings::VideoCaptureSettings(const VideoCaptureSettings& other) =
|
| + default;
|
| +VideoCaptureSettings::VideoCaptureSettings(VideoCaptureSettings&& other) =
|
| + default;
|
| +VideoCaptureSettings::~VideoCaptureSettings() = default;
|
| +VideoCaptureSettings& VideoCaptureSettings::operator=(
|
| + const VideoCaptureSettings& other) = default;
|
| +VideoCaptureSettings& VideoCaptureSettings::operator=(
|
| + VideoCaptureSettings&& other) = default;
|
| +
|
| bool GetConstraintValueAsBoolean(
|
| const blink::WebMediaConstraints& constraints,
|
| const blink::BooleanConstraint blink::WebMediaTrackConstraintSet::*picker,
|
| @@ -162,4 +202,38 @@ rtc::Optional<bool> ConstraintToOptional(
|
| return rtc::Optional<bool>();
|
| }
|
|
|
| +VideoTrackAdapterSettings SelectVideoTrackAdapterSettings(
|
| + const blink::WebMediaTrackConstraintSet& basic_constraint_set,
|
| + const ResolutionSet& resolution_set,
|
| + const NumericRangeSet<double>& frame_rate_set,
|
| + const media::VideoCaptureFormat& source_format) {
|
| + ResolutionSet::Point resolution = resolution_set.SelectClosestPointToIdeal(
|
| + basic_constraint_set, source_format.frame_size.height(),
|
| + source_format.frame_size.width());
|
| + int track_max_height = static_cast<int>(std::round(resolution.height()));
|
| + int track_max_width = static_cast<int>(std::round(resolution.width()));
|
| + double track_min_aspect_ratio =
|
| + std::max(resolution_set.min_aspect_ratio(),
|
| + static_cast<double>(resolution_set.min_width()) /
|
| + static_cast<double>(resolution_set.max_height()));
|
| + double track_max_aspect_ratio =
|
| + std::min(resolution_set.max_aspect_ratio(),
|
| + static_cast<double>(resolution_set.max_width()) /
|
| + static_cast<double>(resolution_set.min_height()));
|
| + double track_max_frame_rate = frame_rate_set.Max();
|
| + if (basic_constraint_set.frameRate.hasIdeal()) {
|
| + track_max_frame_rate = std::min(
|
| + track_max_frame_rate,
|
| + std::max(basic_constraint_set.frameRate.ideal(), frame_rate_set.Min()));
|
| + }
|
| + // VideoTrackAdapter uses a frame rate of 0.0 to disable frame-rate
|
| + // adjustment.
|
| + if (track_max_frame_rate >= source_format.frame_rate)
|
| + track_max_frame_rate = 0.0;
|
| +
|
| + return VideoTrackAdapterSettings(
|
| + track_max_width, track_max_height, track_min_aspect_ratio,
|
| + track_max_aspect_ratio, track_max_frame_rate);
|
| +}
|
| +
|
| } // namespace content
|
|
|