Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1848)

Unified Diff: content/renderer/media/media_stream_constraints_util_sets.cc

Issue 2777703002: Introduce SelectSettings algorithm for MediaStream video tracks. (Closed)
Patch Set: static asserts Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/media_stream_constraints_util_sets.cc
diff --git a/content/renderer/media/media_stream_constraints_util_sets.cc b/content/renderer/media/media_stream_constraints_util_sets.cc
index 545674b490e5a6e615a64a837cf5fe8f32073f43..1159d4a5dfec3f293361426666f8e04f268e051e 100644
--- a/content/renderer/media/media_stream_constraints_util_sets.cc
+++ b/content/renderer/media/media_stream_constraints_util_sets.cc
@@ -7,7 +7,6 @@
#include <cmath>
#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"
namespace content {
@@ -18,11 +17,6 @@ namespace {
constexpr double kTolerance = 1e-5;
-constexpr int kDefaultHeight = MediaStreamVideoSource::kDefaultHeight;
-constexpr int kDefaultWidth = MediaStreamVideoSource::kDefaultWidth;
-constexpr double kDefaultAspectRatio =
- MediaStreamVideoSource::kDefaultAspectRatio;
-
// Not perfect, but good enough for this application.
bool AreApproximatelyEqual(double d1, double d2) {
if (std::fabs((d1 - d2)) <= kTolerance)
@@ -274,7 +268,14 @@ ResolutionSet ResolutionSet::Intersection(const ResolutionSet& other) const {
}
Point ResolutionSet::SelectClosestPointToIdeal(
- const blink::WebMediaTrackConstraintSet& constraint_set) const {
+ const blink::WebMediaTrackConstraintSet& constraint_set,
+ int default_height,
+ int default_width) const {
+ DCHECK_GE(default_height, 1);
+ DCHECK_GE(default_width, 1);
+ double default_aspect_ratio =
+ static_cast<double>(default_width) / static_cast<double>(default_height);
+
DCHECK(!IsEmpty());
int num_ideals = 0;
if (constraint_set.height.hasIdeal())
@@ -286,7 +287,8 @@ Point ResolutionSet::SelectClosestPointToIdeal(
switch (num_ideals) {
case 0:
- return SelectClosestPointToIdealAspectRatio(kDefaultAspectRatio);
+ return SelectClosestPointToIdealAspectRatio(
+ default_aspect_ratio, default_height, default_width);
case 1:
// This case requires a point closest to a line.
@@ -304,12 +306,12 @@ Point ResolutionSet::SelectClosestPointToIdeal(
ResolutionSet intersection = Intersection(ideal_line);
if (!intersection.IsEmpty()) {
return intersection.ClosestPointTo(
- Point(ideal_height, ideal_height * kDefaultAspectRatio));
+ Point(ideal_height, ideal_height * default_aspect_ratio));
}
std::vector<Point> closest_vertices =
GetClosestVertices(&Point::height, ideal_height);
Point ideal_point(closest_vertices[0].height(),
- closest_vertices[0].height() * kDefaultAspectRatio);
+ closest_vertices[0].height() * default_aspect_ratio);
return GetClosestPointToVertexOrSide(closest_vertices, ideal_point);
} else if (constraint_set.width.hasIdeal()) {
int ideal_width = ToValidDimension(constraint_set.width.ideal());
@@ -317,18 +319,19 @@ Point ResolutionSet::SelectClosestPointToIdeal(
ResolutionSet intersection = Intersection(ideal_line);
if (!intersection.IsEmpty()) {
return intersection.ClosestPointTo(
- Point(ideal_width / kDefaultAspectRatio, ideal_width));
+ Point(ideal_width / default_aspect_ratio, ideal_width));
}
std::vector<Point> closest_vertices =
GetClosestVertices(&Point::width, ideal_width);
- Point ideal_point(closest_vertices[0].width() / kDefaultAspectRatio,
+ Point ideal_point(closest_vertices[0].width() / default_aspect_ratio,
closest_vertices[0].width());
return GetClosestPointToVertexOrSide(closest_vertices, ideal_point);
} else {
DCHECK(constraint_set.aspectRatio.hasIdeal());
double ideal_aspect_ratio =
ToValidAspectRatio(constraint_set.aspectRatio.ideal());
- return SelectClosestPointToIdealAspectRatio(ideal_aspect_ratio);
+ return SelectClosestPointToIdealAspectRatio(
+ ideal_aspect_ratio, default_height, default_width);
}
case 2:
@@ -359,14 +362,16 @@ Point ResolutionSet::SelectClosestPointToIdeal(
}
Point ResolutionSet::SelectClosestPointToIdealAspectRatio(
- double ideal_aspect_ratio) const {
+ double ideal_aspect_ratio,
+ int default_height,
+ int default_width) const {
ResolutionSet intersection =
Intersection(ResolutionSet::FromExactAspectRatio(ideal_aspect_ratio));
if (!intersection.IsEmpty()) {
- Point default_height_point(kDefaultHeight,
- kDefaultHeight * ideal_aspect_ratio);
- Point default_width_point(kDefaultWidth / ideal_aspect_ratio,
- kDefaultWidth);
+ Point default_height_point(default_height,
+ default_height * ideal_aspect_ratio);
+ Point default_width_point(default_width / ideal_aspect_ratio,
+ default_width);
return SelectPointWithLargestArea(
intersection.ClosestPointTo(default_height_point),
intersection.ClosestPointTo(default_width_point));
@@ -374,9 +379,9 @@ Point ResolutionSet::SelectClosestPointToIdealAspectRatio(
std::vector<Point> closest_vertices =
GetClosestVertices(&Point::AspectRatio, ideal_aspect_ratio);
double actual_aspect_ratio = closest_vertices[0].AspectRatio();
- Point default_height_point(kDefaultHeight,
- kDefaultHeight * actual_aspect_ratio);
- Point default_width_point(kDefaultWidth / actual_aspect_ratio, kDefaultWidth);
+ Point default_height_point(default_height,
+ default_height * actual_aspect_ratio);
+ Point default_width_point(default_width / actual_aspect_ratio, default_width);
return SelectPointWithLargestArea(
GetClosestPointToVertexOrSide(closest_vertices, default_height_point),
GetClosestPointToVertexOrSide(closest_vertices, default_width_point));
@@ -384,6 +389,8 @@ Point ResolutionSet::SelectClosestPointToIdealAspectRatio(
Point ResolutionSet::ClosestPointTo(const Point& point) const {
DCHECK(std::numeric_limits<double>::has_infinity);
+ DCHECK(std::isfinite(point.height()));
+ DCHECK(std::isfinite(point.width()));
if (ContainsPoint(point))
return point;

Powered by Google App Engine
This is Rietveld 408576698