OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "webrtc/system_wrappers/include/sleep.h" | 22 #include "webrtc/system_wrappers/include/sleep.h" |
23 #include "webrtc/test/encoder_settings.h" | 23 #include "webrtc/test/encoder_settings.h" |
24 #include "webrtc/test/fake_encoder.h" | 24 #include "webrtc/test/fake_encoder.h" |
25 #include "webrtc/test/frame_generator.h" | 25 #include "webrtc/test/frame_generator.h" |
26 #include "webrtc/test/gmock.h" | 26 #include "webrtc/test/gmock.h" |
27 #include "webrtc/test/gtest.h" | 27 #include "webrtc/test/gtest.h" |
28 #include "webrtc/video/send_statistics_proxy.h" | 28 #include "webrtc/video/send_statistics_proxy.h" |
29 #include "webrtc/video/video_stream_encoder.h" | 29 #include "webrtc/video/video_stream_encoder.h" |
30 | 30 |
31 namespace { | 31 namespace { |
32 // TODO(kthelgason): Lower this limit when better testing | |
33 // on MediaCodec and fallback implementations are in place. | |
34 const int kMinPixelsPerFrame = 320 * 180; | 32 const int kMinPixelsPerFrame = 320 * 180; |
35 const int kMinFramerateFps = 2; | 33 const int kMinFramerateFps = 2; |
36 const int64_t kFrameTimeoutMs = 100; | 34 const int64_t kFrameTimeoutMs = 100; |
37 const unsigned char kNumSlDummy = 0; | 35 const unsigned char kNumSlDummy = 0; |
38 } // namespace | 36 } // namespace |
39 | 37 |
40 namespace webrtc { | 38 namespace webrtc { |
41 | 39 |
42 using DegredationPreference = VideoSendStream::DegradationPreference; | 40 using DegredationPreference = VideoSendStream::DegradationPreference; |
43 using ScaleReason = AdaptationObserverInterface::AdaptReason; | 41 using ScaleReason = AdaptationObserverInterface::AdaptReason; |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 } | 473 } |
476 | 474 |
477 void BlockNextEncode() { | 475 void BlockNextEncode() { |
478 rtc::CritScope lock(&local_crit_sect_); | 476 rtc::CritScope lock(&local_crit_sect_); |
479 block_next_encode_ = true; | 477 block_next_encode_ = true; |
480 } | 478 } |
481 | 479 |
482 VideoEncoder::ScalingSettings GetScalingSettings() const override { | 480 VideoEncoder::ScalingSettings GetScalingSettings() const override { |
483 rtc::CritScope lock(&local_crit_sect_); | 481 rtc::CritScope lock(&local_crit_sect_); |
484 if (quality_scaling_) | 482 if (quality_scaling_) |
485 return VideoEncoder::ScalingSettings(true, 1, 2); | 483 return VideoEncoder::ScalingSettings(true, 1, 2, kMinPixelsPerFrame); |
486 return VideoEncoder::ScalingSettings(false); | 484 return VideoEncoder::ScalingSettings(false); |
487 } | 485 } |
488 | 486 |
489 void ContinueEncode() { continue_encode_event_.Set(); } | 487 void ContinueEncode() { continue_encode_event_.Set(); } |
490 | 488 |
491 void CheckLastTimeStampsMatch(int64_t ntp_time_ms, | 489 void CheckLastTimeStampsMatch(int64_t ntp_time_ms, |
492 uint32_t timestamp) const { | 490 uint32_t timestamp) const { |
493 rtc::CritScope lock(&local_crit_sect_); | 491 rtc::CritScope lock(&local_crit_sect_); |
494 EXPECT_EQ(timestamp_, timestamp); | 492 EXPECT_EQ(timestamp_, timestamp); |
495 EXPECT_EQ(ntp_time_ms_, ntp_time_ms); | 493 EXPECT_EQ(ntp_time_ms_, ntp_time_ms); |
(...skipping 1406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1902 } | 1900 } |
1903 | 1901 |
1904 TEST_F(VideoStreamEncoderTest, DoesNotScaleBelowSetResolutionLimit) { | 1902 TEST_F(VideoStreamEncoderTest, DoesNotScaleBelowSetResolutionLimit) { |
1905 const int kWidth = 1280; | 1903 const int kWidth = 1280; |
1906 const int kHeight = 720; | 1904 const int kHeight = 720; |
1907 const size_t kNumFrames = 10; | 1905 const size_t kNumFrames = 10; |
1908 | 1906 |
1909 video_stream_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); | 1907 video_stream_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); |
1910 | 1908 |
1911 // Enable adapter, expected input resolutions when downscaling: | 1909 // Enable adapter, expected input resolutions when downscaling: |
1912 // 1280x720 -> 960x540 -> 640x360 -> 480x270 -> 320x180 (min resolution limit) | 1910 // 1280x720 -> 960x540 -> 640x360 -> 480x270 -> 320x180 (kMinPixelsPerFrame) |
1913 video_source_.set_adaptation_enabled(true); | 1911 video_source_.set_adaptation_enabled(true); |
1914 | 1912 |
1915 EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution); | 1913 EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution); |
1916 EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes); | 1914 EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes); |
1917 | 1915 |
1918 int downscales = 0; | 1916 int downscales = 0; |
1919 for (size_t i = 1; i <= kNumFrames; i++) { | 1917 for (size_t i = 1; i <= kNumFrames; i++) { |
1920 video_source_.IncomingCapturedFrame(CreateFrame(i, kWidth, kHeight)); | 1918 video_source_.IncomingCapturedFrame(CreateFrame(i, kWidth, kHeight)); |
1921 WaitForEncodedFrame(i); | 1919 WaitForEncodedFrame(i); |
1922 | 1920 |
(...skipping 1350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3273 // Bitrate observer should not be called. | 3271 // Bitrate observer should not be called. |
3274 EXPECT_CALL(bitrate_observer, OnBitrateAllocationUpdated(_)).Times(0); | 3272 EXPECT_CALL(bitrate_observer, OnBitrateAllocationUpdated(_)).Times(0); |
3275 video_source_.IncomingCapturedFrame( | 3273 video_source_.IncomingCapturedFrame( |
3276 CreateFrame(timestamp_ms, kFrameWidth, kFrameHeight)); | 3274 CreateFrame(timestamp_ms, kFrameWidth, kFrameHeight)); |
3277 ExpectDroppedFrame(); | 3275 ExpectDroppedFrame(); |
3278 | 3276 |
3279 video_stream_encoder_->Stop(); | 3277 video_stream_encoder_->Stop(); |
3280 } | 3278 } |
3281 | 3279 |
3282 } // namespace webrtc | 3280 } // namespace webrtc |
OLD | NEW |