Index: content/renderer/media/media_stream_constraints_util_unittest.cc |
diff --git a/content/renderer/media/media_stream_constraints_util_unittest.cc b/content/renderer/media/media_stream_constraints_util_unittest.cc |
index 786f681db4f2465c66b3cbc5e5a8e659bfedc697..2bdc1b69cf06855bde1a493768a21e4289d41de4 100644 |
--- a/content/renderer/media/media_stream_constraints_util_unittest.cc |
+++ b/content/renderer/media/media_stream_constraints_util_unittest.cc |
@@ -6,13 +6,30 @@ |
#include "content/renderer/media/media_stream_audio_processor_options.h" |
#include "content/renderer/media/media_stream_constraints_util.h" |
-#include "content/renderer/media/media_stream_video_source.h" |
+#include "content/renderer/media/media_stream_constraints_util_sets.h" |
#include "content/renderer/media/mock_constraint_factory.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+namespace { |
+ |
+const int kSourceHeight = 1000; |
+const int kSourceWidth = 1500; |
+constexpr double kSourceAspectRatio = |
+ static_cast<double>(kSourceWidth) / static_cast<double>(kSourceHeight); |
+constexpr double kSourceFrameRate = 100.0; |
+ |
+media::VideoCaptureFormat SourceFormat() { |
+ return media::VideoCaptureFormat(gfx::Size(kSourceWidth, kSourceHeight), |
+ kSourceFrameRate, media::PIXEL_FORMAT_I420); |
+} |
+ |
+} // namespace |
+ |
namespace content { |
class MediaStreamConstraintsUtilTest : public testing::Test { |
+ protected: |
+ using DoubleRangeSet = NumericRangeSet<double>; |
}; |
TEST_F(MediaStreamConstraintsUtilTest, BooleanConstraints) { |
@@ -63,7 +80,7 @@ TEST_F(MediaStreamConstraintsUtilTest, BooleanConstraints) { |
TEST_F(MediaStreamConstraintsUtilTest, DoubleConstraints) { |
MockConstraintFactory constraint_factory; |
- const double test_value= 0.01f; |
+ const double test_value = 0.01f; |
constraint_factory.basic().aspectRatio.setExact(test_value); |
blink::WebMediaConstraints constraints = |
@@ -99,4 +116,439 @@ TEST_F(MediaStreamConstraintsUtilTest, IntConstraints) { |
EXPECT_EQ(test_value, value); |
} |
+TEST_F(MediaStreamConstraintsUtilTest, VideoTrackAdapterSettingsUnconstrained) { |
+ ResolutionSet resolution_set; |
+ DoubleRangeSet frame_rate_set; |
+ |
+ // No ideal values. |
+ { |
+ MockConstraintFactory constraint_factory; |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kSourceHeight, result.max_height); |
+ EXPECT_EQ(kSourceWidth, result.max_width); |
+ EXPECT_EQ(0.0, result.min_aspect_ratio); |
+ EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); |
+ EXPECT_EQ(0.0, result.max_frame_rate); |
+ } |
+ |
+ // Ideal height. |
+ { |
+ const int kIdealHeight = 400; |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().height.setIdeal(kIdealHeight); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kIdealHeight, result.max_height); |
+ EXPECT_EQ(std::round(kIdealHeight * kSourceAspectRatio), result.max_width); |
+ EXPECT_EQ(0.0, result.min_aspect_ratio); |
+ EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); |
+ EXPECT_EQ(0.0, result.max_frame_rate); |
+ } |
+ |
+ // Ideal width. |
+ { |
+ const int kIdealWidth = 400; |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().width.setIdeal(kIdealWidth); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(std::round(kIdealWidth / kSourceAspectRatio), result.max_height); |
+ EXPECT_EQ(kIdealWidth, result.max_width); |
+ EXPECT_EQ(0.0, result.min_aspect_ratio); |
+ EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); |
+ EXPECT_EQ(0.0, result.max_frame_rate); |
+ } |
+ |
+ // Ideal aspect ratio. |
+ { |
+ const double kIdealAspectRatio = 2.0; |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().aspectRatio.setIdeal(kIdealAspectRatio); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kSourceHeight, result.max_height); |
+ EXPECT_EQ(std::round(kSourceHeight * kIdealAspectRatio), result.max_width); |
+ EXPECT_EQ(0.0, result.min_aspect_ratio); |
+ EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); |
+ EXPECT_EQ(0.0, result.max_frame_rate); |
+ } |
+ |
+ // Ideal frame rate. |
+ { |
+ const double kIdealFrameRate = 33; |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kSourceHeight, result.max_height); |
+ EXPECT_EQ(kSourceWidth, result.max_width); |
+ EXPECT_EQ(0.0, result.min_aspect_ratio); |
+ EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); |
+ EXPECT_EQ(kIdealFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // All ideals supplied. |
+ { |
+ const int kIdealHeight = 400; |
+ const int kIdealWidth = 600; |
+ const int kIdealAspectRatio = 2.0; |
+ const double kIdealFrameRate = 33; |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().height.setIdeal(kIdealHeight); |
+ constraint_factory.basic().width.setIdeal(kIdealWidth); |
+ // Ideal aspect ratio is ignored if ideal width and height are supplied. |
+ constraint_factory.basic().aspectRatio.setIdeal(kIdealAspectRatio); |
+ constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kIdealHeight, result.max_height); |
+ EXPECT_EQ(kIdealWidth, result.max_width); |
+ EXPECT_EQ(0.0, result.min_aspect_ratio); |
+ EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); |
+ EXPECT_EQ(kIdealFrameRate, result.max_frame_rate); |
+ } |
+} |
+ |
+TEST_F(MediaStreamConstraintsUtilTest, VideoTrackAdapterSettingsConstrained) { |
+ const int kMinHeight = 500; |
+ const int kMaxHeight = 1200; |
+ const int kMinWidth = 1000; |
+ const int kMaxWidth = 2000; |
+ constexpr double kMinAspectRatio = 1.0; |
+ constexpr double kMaxAspectRatio = 2.0; |
+ constexpr double kMinFrameRate = 20.0; |
+ constexpr double kMaxFrameRate = 44.0; |
+ ResolutionSet resolution_set(kMinHeight, kMaxHeight, kMinWidth, kMaxWidth, |
+ kMinAspectRatio, kMaxAspectRatio); |
+ DoubleRangeSet frame_rate_set(kMinFrameRate, kMaxFrameRate); |
+ |
+ // No ideal values. |
+ { |
+ MockConstraintFactory constraint_factory; |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kSourceHeight, result.max_height); |
+ EXPECT_EQ(kSourceWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Ideal height < min. |
+ { |
+ const int kIdealHeight = 400; |
+ static_assert(kIdealHeight < kMinHeight, |
+ "kIdealHeight must be less than kMinHeight"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().height.setIdeal(kIdealHeight); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kMinHeight, result.max_height); |
+ // kMinWidth > kMinHeight * kNativeAspectRatio |
+ EXPECT_EQ(kMinWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // min < Ideal height < max. |
+ { |
+ const int kIdealHeight = 1100; |
+ static_assert(kIdealHeight > kMinHeight, |
+ "kIdealHeight must be greater than kMinHeight"); |
+ static_assert(kIdealHeight < kMaxHeight, |
+ "kIdealHeight must be less than kMaxHeight"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().height.setIdeal(kIdealHeight); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kIdealHeight, result.max_height); |
+ EXPECT_EQ(std::round(kIdealHeight * kSourceAspectRatio), result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Ideal height > max. |
+ { |
+ const int kIdealHeight = 2000; |
+ static_assert(kIdealHeight > kMaxHeight, |
+ "kIdealHeight must be greater than kMaxHeight"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().height.setIdeal(kIdealHeight); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kMaxHeight, result.max_height); |
+ EXPECT_EQ(std::round(kMaxHeight * kSourceAspectRatio), result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Ideal width < min. |
+ { |
+ const int kIdealWidth = 800; |
+ static_assert(kIdealWidth < kMinWidth, |
+ "kIdealWidth must be less than kMinWidth"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().width.setIdeal(kIdealWidth); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(std::round(kMinWidth / kSourceAspectRatio), result.max_height); |
+ EXPECT_EQ(kMinWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // min < Ideal width < max. |
+ { |
+ const int kIdealWidth = 1800; |
+ static_assert(kIdealWidth > kMinWidth, |
+ "kIdealWidth must be greater than kMinWidth"); |
+ static_assert(kIdealWidth < kMaxWidth, |
+ "kIdealWidth must be less than kMaxWidth"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().width.setIdeal(kIdealWidth); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(std::round(kIdealWidth / kSourceAspectRatio), result.max_height); |
+ EXPECT_EQ(kIdealWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Ideal width > max. |
+ { |
+ const int kIdealWidth = 3000; |
+ static_assert(kIdealWidth > kMaxWidth, |
+ "kIdealWidth must be greater than kMaxWidth"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().width.setIdeal(kIdealWidth); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ // kMaxHeight < kMaxWidth / kNativeAspectRatio |
+ EXPECT_EQ(kMaxHeight, result.max_height); |
+ EXPECT_EQ(kMaxWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Ideal aspect ratio < min. |
+ { |
+ constexpr double kIdealAspectRatio = 0.5; |
+ static_assert(kIdealAspectRatio < kMinAspectRatio, |
+ "kIdealAspectRatio must be less than kMinAspectRatio"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().aspectRatio.setIdeal(kIdealAspectRatio); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ // Desired point is (kNativeWidth/kMinAspectRatio, kNativeWidth), but it |
+ // is outside the size constraints. Closest to that while maintaining the |
+ // same aspect ratio is (kMaxHeight, kMaxHeight * kMinAspectRatio). |
+ EXPECT_EQ(kMaxHeight, result.max_height); |
+ EXPECT_EQ(std::round(kMaxHeight * kMinAspectRatio), result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // min < Ideal aspect ratio < max. |
+ { |
+ constexpr double kIdealAspectRatio = 1.25; |
+ static_assert(kIdealAspectRatio > kMinAspectRatio, |
+ "kIdealAspectRatio must be greater than kMinAspectRatio"); |
+ static_assert(kIdealAspectRatio < kMaxAspectRatio, |
+ "kIdealAspectRatio must be less than kMaxAspectRatio"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().aspectRatio.setIdeal(kIdealAspectRatio); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(std::round(kSourceWidth / kIdealAspectRatio), result.max_height); |
+ EXPECT_EQ(kSourceWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Ideal aspect ratio > max. |
+ { |
+ constexpr double kIdealAspectRatio = 3.0; |
+ static_assert(kIdealAspectRatio > kMaxAspectRatio, |
+ "kIdealAspectRatio must be greater than kMaxAspectRatio"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().aspectRatio.setIdeal(kIdealAspectRatio); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kSourceHeight, result.max_height); |
+ EXPECT_EQ(std::round(kSourceHeight * kMaxAspectRatio), result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Ideal frame rate < min. |
+ { |
+ constexpr double kIdealFrameRate = 3.0; |
+ static_assert(kIdealFrameRate < kMinFrameRate, |
+ "kIdealFrameRate must be less than kMinFrameRate"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kSourceHeight, result.max_height); |
+ EXPECT_EQ(kSourceWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMinFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // min < Ideal frame rate < max. |
+ { |
+ constexpr double kIdealFrameRate = 31.0; |
+ static_assert(kIdealFrameRate > kMinFrameRate, |
+ "kIdealFrameRate must be greater than kMinFrameRate"); |
+ static_assert(kIdealFrameRate < kMaxFrameRate, |
+ "kIdealFrameRate must be less than kMaxFrameRate"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kSourceHeight, result.max_height); |
+ EXPECT_EQ(kSourceWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kIdealFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Ideal frame rate > max. |
+ { |
+ constexpr double kIdealFrameRate = 1000.0; |
+ static_assert(kIdealFrameRate > kMaxFrameRate, |
+ "kIdealFrameRate must be greater than kMaxFrameRate"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kSourceHeight, result.max_height); |
+ EXPECT_EQ(kSourceWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Ideal values inside constraints. |
+ { |
+ const int kIdealHeight = 900; |
+ const int kIdealWidth = 1600; |
+ constexpr double kIdealFrameRate = 35.0; |
+ static_assert(kIdealHeight > kMinHeight, |
+ "kMinHeight must be greater than kMinHeight"); |
+ static_assert(kIdealHeight < kMaxHeight, |
+ "kMinHeight must be less than kMaxHeight"); |
+ static_assert(kIdealWidth > kMinWidth, |
+ "kIdealWidth must be greater than kMinWidth"); |
+ static_assert(kIdealWidth < kMaxWidth, |
+ "kIdealWidth must be less than kMaxHeight"); |
+ static_assert(kIdealFrameRate > kMinFrameRate, |
+ "kIdealFrameRate must be greater than kMinFrameRate"); |
+ static_assert(kIdealFrameRate < kMaxFrameRate, |
+ "kIdealFrameRate must be less than kMaxFrameRate"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().height.setIdeal(kIdealHeight); |
+ constraint_factory.basic().width.setIdeal(kIdealWidth); |
+ constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kIdealHeight, result.max_height); |
+ EXPECT_EQ(kIdealWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kIdealFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Ideal values outside constraints. |
+ { |
+ const int kIdealHeight = 2900; |
+ const int kIdealWidth = 3600; |
+ constexpr double kIdealFrameRate = 350.0; |
+ static_assert(kIdealHeight > kMaxHeight, |
+ "kMinHeight must be greater than kMaxHeight"); |
+ static_assert(kIdealWidth > kMaxWidth, |
+ "kIdealWidth must be greater than kMaxHeight"); |
+ static_assert(kIdealFrameRate > kMaxFrameRate, |
+ "kIdealFrameRate must be greater than kMaxFrameRate"); |
+ MockConstraintFactory constraint_factory; |
+ constraint_factory.basic().height.setIdeal(kIdealHeight); |
+ constraint_factory.basic().width.setIdeal(kIdealWidth); |
+ constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kMaxHeight, result.max_height); |
+ EXPECT_EQ(kMaxWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); |
+ } |
+ |
+ // Source frame rate. |
+ { |
+ DoubleRangeSet frame_rate_set(kMinFrameRate, kSourceFrameRate); |
+ MockConstraintFactory constraint_factory; |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kSourceHeight, result.max_height); |
+ EXPECT_EQ(kSourceWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ // No frame-rate adjustment because the track will use the same frame rate |
+ // as the source. |
+ EXPECT_EQ(0.0, result.max_frame_rate); |
+ } |
+ |
+ // High frame rate. |
+ { |
+ constexpr double kHighFrameRate = 400.0; // Greater than source. |
+ DoubleRangeSet frame_rate_set(kMinFrameRate, kHighFrameRate); |
+ static_assert(kHighFrameRate > kSourceFrameRate, |
+ "kIdealFrameRate must be greater than kSourceFrameRate"); |
+ MockConstraintFactory constraint_factory; |
+ auto result = SelectVideoTrackAdapterSettings( |
+ constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, |
+ frame_rate_set, SourceFormat()); |
+ EXPECT_EQ(kSourceHeight, result.max_height); |
+ EXPECT_EQ(kSourceWidth, result.max_width); |
+ EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); |
+ // No frame-rate adjustment because the track will use a frame rate that is |
+ // greater than the source's. |
+ EXPECT_EQ(0.0, result.max_frame_rate); |
+ } |
+} |
+ |
} // namespace content |