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

Side by Side Diff: webrtc/video/video_send_stream_tests.cc

Issue 2351633002: Let ViEEncoder handle resolution changes. (Closed)
Patch Set: Rebased Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 #include <algorithm> // max 10 #include <algorithm> // max
(...skipping 19 matching lines...) Expand all
30 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h" 30 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h"
31 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" 31 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
32 #include "webrtc/system_wrappers/include/sleep.h" 32 #include "webrtc/system_wrappers/include/sleep.h"
33 #include "webrtc/test/call_test.h" 33 #include "webrtc/test/call_test.h"
34 #include "webrtc/test/configurable_frame_size_encoder.h" 34 #include "webrtc/test/configurable_frame_size_encoder.h"
35 #include "webrtc/test/fake_texture_frame.h" 35 #include "webrtc/test/fake_texture_frame.h"
36 #include "webrtc/test/frame_generator.h" 36 #include "webrtc/test/frame_generator.h"
37 #include "webrtc/test/frame_utils.h" 37 #include "webrtc/test/frame_utils.h"
38 #include "webrtc/test/null_transport.h" 38 #include "webrtc/test/null_transport.h"
39 #include "webrtc/test/testsupport/perf_test.h" 39 #include "webrtc/test/testsupport/perf_test.h"
40
40 #include "webrtc/video/send_statistics_proxy.h" 41 #include "webrtc/video/send_statistics_proxy.h"
41 #include "webrtc/video_frame.h" 42 #include "webrtc/video_frame.h"
42 #include "webrtc/video_send_stream.h" 43 #include "webrtc/video_send_stream.h"
43 44
44 namespace webrtc { 45 namespace webrtc {
45 46
46 enum VideoFormat { kGeneric, kVP8, }; 47 enum VideoFormat { kGeneric, kVP8, };
47 48
48 void ExpectEqualFramesVector(const std::vector<VideoFrame>& frames1, 49 void ExpectEqualFramesVector(const std::vector<VideoFrame>& frames1,
49 const std::vector<VideoFrame>& frames2); 50 const std::vector<VideoFrame>& frames2);
(...skipping 851 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 void OnVideoStreamsCreated( 902 void OnVideoStreamsCreated(
902 VideoSendStream* send_stream, 903 VideoSendStream* send_stream,
903 const std::vector<VideoReceiveStream*>& receive_streams) override { 904 const std::vector<VideoReceiveStream*>& receive_streams) override {
904 stream_ = send_stream; 905 stream_ = send_stream;
905 } 906 }
906 907
907 void ModifyVideoConfigs( 908 void ModifyVideoConfigs(
908 VideoSendStream::Config* send_config, 909 VideoSendStream::Config* send_config,
909 std::vector<VideoReceiveStream::Config>* receive_configs, 910 std::vector<VideoReceiveStream::Config>* receive_configs,
910 VideoEncoderConfig* encoder_config) override { 911 VideoEncoderConfig* encoder_config) override {
912 RTC_DCHECK_EQ(1u, encoder_config->number_of_streams);
911 transport_adapter_.reset( 913 transport_adapter_.reset(
912 new internal::TransportAdapter(send_config->send_transport)); 914 new internal::TransportAdapter(send_config->send_transport));
913 transport_adapter_->Enable(); 915 transport_adapter_->Enable();
914 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 916 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
915 send_config->pre_encode_callback = this; 917 send_config->pre_encode_callback = this;
916 send_config->suspend_below_min_bitrate = true; 918 send_config->suspend_below_min_bitrate = true;
917 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; 919 int min_bitrate_bps =
920 test::DefaultVideoStreamFactory::kDefaultMinBitratePerStream[0];
918 set_low_remb_bps(min_bitrate_bps - 10000); 921 set_low_remb_bps(min_bitrate_bps - 10000);
919 int threshold_window = std::max(min_bitrate_bps / 10, 20000); 922 int threshold_window = std::max(min_bitrate_bps / 10, 20000);
920 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, 923 ASSERT_GT(encoder_config->max_bitrate_bps,
921 min_bitrate_bps + threshold_window + 5000); 924 min_bitrate_bps + threshold_window + 5000);
922 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000); 925 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000);
923 } 926 }
924 927
925 void PerformTest() override { 928 void PerformTest() override {
926 EXPECT_TRUE(Wait()) << "Timed out during suspend-below-min-bitrate test."; 929 EXPECT_TRUE(Wait()) << "Timed out during suspend-below-min-bitrate test.";
927 } 930 }
928 931
929 enum TestState { 932 enum TestState {
930 kBeforeSuspend, 933 kBeforeSuspend,
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
1199 void OnVideoStreamsCreated( 1202 void OnVideoStreamsCreated(
1200 VideoSendStream* send_stream, 1203 VideoSendStream* send_stream,
1201 const std::vector<VideoReceiveStream*>& receive_streams) override { 1204 const std::vector<VideoReceiveStream*>& receive_streams) override {
1202 send_stream_ = send_stream; 1205 send_stream_ = send_stream;
1203 } 1206 }
1204 1207
1205 void ModifyVideoConfigs( 1208 void ModifyVideoConfigs(
1206 VideoSendStream::Config* send_config, 1209 VideoSendStream::Config* send_config,
1207 std::vector<VideoReceiveStream::Config>* receive_configs, 1210 std::vector<VideoReceiveStream::Config>* receive_configs,
1208 VideoEncoderConfig* encoder_config) override { 1211 VideoEncoderConfig* encoder_config) override {
1209 RTC_DCHECK_EQ(1u, encoder_config->streams.size()); 1212 RTC_DCHECK_EQ(1u, encoder_config->number_of_streams);
1210 if (running_without_padding_) { 1213 if (running_without_padding_) {
1211 encoder_config->min_transmit_bitrate_bps = 0; 1214 encoder_config->min_transmit_bitrate_bps = 0;
1212 encoder_config->content_type = 1215 encoder_config->content_type =
1213 VideoEncoderConfig::ContentType::kRealtimeVideo; 1216 VideoEncoderConfig::ContentType::kRealtimeVideo;
1214 } else { 1217 } else {
1215 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; 1218 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps;
1216 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; 1219 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
1217 } 1220 }
1218 encoder_config_ = encoder_config->Copy(); 1221 encoder_config_ = encoder_config->Copy();
1219 } 1222 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 rtc::Event start_bitrate_changed_; 1315 rtc::Event start_bitrate_changed_;
1313 int start_bitrate_kbps_ GUARDED_BY(crit_); 1316 int start_bitrate_kbps_ GUARDED_BY(crit_);
1314 }; 1317 };
1315 1318
1316 CreateSenderCall(Call::Config()); 1319 CreateSenderCall(Call::Config());
1317 1320
1318 test::NullTransport transport; 1321 test::NullTransport transport;
1319 CreateSendConfig(1, 0, &transport); 1322 CreateSendConfig(1, 0, &transport);
1320 1323
1321 Call::Config::BitrateConfig bitrate_config; 1324 Call::Config::BitrateConfig bitrate_config;
1322 bitrate_config.start_bitrate_bps = 1325 bitrate_config.start_bitrate_bps = 2 * video_encoder_config_.max_bitrate_bps;
1323 2 * video_encoder_config_.streams[0].max_bitrate_bps;
1324 sender_call_->SetBitrateConfig(bitrate_config); 1326 sender_call_->SetBitrateConfig(bitrate_config);
1325 1327
1326 StartBitrateObserver encoder; 1328 StartBitrateObserver encoder;
1327 video_send_config_.encoder_settings.encoder = &encoder; 1329 video_send_config_.encoder_settings.encoder = &encoder;
1330 // Since this test does not use a capturer, set |internal_source| = true.
1331 // Encoder configuration is otherwise updated on the next video frame.
1332 video_send_config_.encoder_settings.internal_source = true;
1328 1333
1329 CreateVideoStreams(); 1334 CreateVideoStreams();
1330 1335
1331 EXPECT_TRUE(encoder.WaitForStartBitrate()); 1336 EXPECT_TRUE(encoder.WaitForStartBitrate());
1332 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, 1337 EXPECT_EQ(video_encoder_config_.max_bitrate_bps / 1000,
1333 encoder.GetStartBitrateKbps()); 1338 encoder.GetStartBitrateKbps());
1334 1339
1335 video_encoder_config_.streams[0].max_bitrate_bps = 1340 video_encoder_config_.max_bitrate_bps = 2 * bitrate_config.start_bitrate_bps;
1336 2 * bitrate_config.start_bitrate_bps;
1337 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_.Copy()); 1341 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_.Copy());
1338 1342
1339 // New bitrate should be reconfigured above the previous max. As there's no 1343 // New bitrate should be reconfigured above the previous max. As there's no
1340 // network connection this shouldn't be flaky, as no bitrate should've been 1344 // network connection this shouldn't be flaky, as no bitrate should've been
1341 // reported in between. 1345 // reported in between.
1342 EXPECT_TRUE(encoder.WaitForStartBitrate()); 1346 EXPECT_TRUE(encoder.WaitForStartBitrate());
1343 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, 1347 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000,
1344 encoder.GetStartBitrateKbps()); 1348 encoder.GetStartBitrateKbps());
1345 1349
1346 DestroyStreams(); 1350 DestroyStreams();
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1452 1456
1453 test::NullTransport transport; 1457 test::NullTransport transport;
1454 CreateSendConfig(1, 0, &transport); 1458 CreateSendConfig(1, 0, &transport);
1455 FrameObserver observer; 1459 FrameObserver observer;
1456 video_send_config_.pre_encode_callback = &observer; 1460 video_send_config_.pre_encode_callback = &observer;
1457 CreateVideoStreams(); 1461 CreateVideoStreams();
1458 1462
1459 // Prepare five input frames. Send ordinary VideoFrame and texture frames 1463 // Prepare five input frames. Send ordinary VideoFrame and texture frames
1460 // alternatively. 1464 // alternatively.
1461 std::vector<VideoFrame> input_frames; 1465 std::vector<VideoFrame> input_frames;
1462 int width = static_cast<int>(video_encoder_config_.streams[0].width); 1466 int width = 168;
1463 int height = static_cast<int>(video_encoder_config_.streams[0].height); 1467 int height = 132;
1468
1464 test::FakeNativeHandle* handle1 = new test::FakeNativeHandle(); 1469 test::FakeNativeHandle* handle1 = new test::FakeNativeHandle();
1465 test::FakeNativeHandle* handle2 = new test::FakeNativeHandle(); 1470 test::FakeNativeHandle* handle2 = new test::FakeNativeHandle();
1466 test::FakeNativeHandle* handle3 = new test::FakeNativeHandle(); 1471 test::FakeNativeHandle* handle3 = new test::FakeNativeHandle();
1467 input_frames.push_back(test::FakeNativeHandle::CreateFrame( 1472 input_frames.push_back(test::FakeNativeHandle::CreateFrame(
1468 handle1, width, height, 1, 1, kVideoRotation_0)); 1473 handle1, width, height, 1, 1, kVideoRotation_0));
1469 input_frames.push_back(test::FakeNativeHandle::CreateFrame( 1474 input_frames.push_back(test::FakeNativeHandle::CreateFrame(
1470 handle2, width, height, 2, 2, kVideoRotation_0)); 1475 handle2, width, height, 2, 2, kVideoRotation_0));
1471 input_frames.push_back(CreateVideoFrame(width, height, 3)); 1476 input_frames.push_back(CreateVideoFrame(width, height, 3));
1472 input_frames.push_back(CreateVideoFrame(width, height, 4)); 1477 input_frames.push_back(CreateVideoFrame(width, height, 4));
1473 input_frames.push_back(test::FakeNativeHandle::CreateFrame( 1478 input_frames.push_back(test::FakeNativeHandle::CreateFrame(
1474 handle3, width, height, 5, 5, kVideoRotation_0)); 1479 handle3, width, height, 5, 5, kVideoRotation_0));
1475 1480
1476 video_send_stream_->Start(); 1481 video_send_stream_->Start();
1477 test::FrameForwarder forwarder; 1482 test::FrameForwarder forwarder;
1478 video_send_stream_->SetSource(&forwarder); 1483 video_send_stream_->SetSource(&forwarder);
1479 for (size_t i = 0; i < input_frames.size(); i++) { 1484 for (size_t i = 0; i < input_frames.size(); i++) {
1480 forwarder.IncomingCapturedFrame(input_frames[i]); 1485 forwarder.IncomingCapturedFrame(input_frames[i]);
1481 // Do not send the next frame too fast, so the frame dropper won't drop it.
1482 if (i < input_frames.size() - 1)
1483 SleepMs(1000 / video_encoder_config_.streams[0].max_framerate);
1484 // Wait until the output frame is received before sending the next input 1486 // Wait until the output frame is received before sending the next input
1485 // frame. Or the previous input frame may be replaced without delivering. 1487 // frame. Or the previous input frame may be replaced without delivering.
1486 observer.WaitOutputFrame(); 1488 observer.WaitOutputFrame();
1487 } 1489 }
1488 video_send_stream_->Stop(); 1490 video_send_stream_->Stop();
1489 video_send_stream_->SetSource(nullptr); 1491 video_send_stream_->SetSource(nullptr);
1490 1492
1491 // Test if the input and output frames are the same. render_time_ms and 1493 // Test if the input and output frames are the same. render_time_ms and
1492 // timestamp are not compared because capturer sets those values. 1494 // timestamp are not compared because capturer sets those values.
1493 ExpectEqualFramesVector(input_frames, observer.output_frames()); 1495 ExpectEqualFramesVector(input_frames, observer.output_frames());
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1600 void ModifyVideoConfigs( 1602 void ModifyVideoConfigs(
1601 VideoSendStream::Config* send_config, 1603 VideoSendStream::Config* send_config,
1602 std::vector<VideoReceiveStream::Config>* receive_configs, 1604 std::vector<VideoReceiveStream::Config>* receive_configs,
1603 VideoEncoderConfig* encoder_config) override { 1605 VideoEncoderConfig* encoder_config) override {
1604 send_config->encoder_settings.encoder = this; 1606 send_config->encoder_settings.encoder = this;
1605 encoder_config_ = encoder_config->Copy(); 1607 encoder_config_ = encoder_config->Copy();
1606 } 1608 }
1607 1609
1608 void PerformTest() override { 1610 void PerformTest() override {
1609 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; 1611 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode.";
1610 EXPECT_EQ(0u, num_releases()); 1612 // Expect |num_releases| == 1 since the encoder has been reconfigured
1613 // once when the first frame is encoded. Not until at that point is the
1614 // frame size known and the encoder can be properly initialized.
1615 EXPECT_EQ(1u, num_releases());
1611 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); 1616 stream_->ReconfigureVideoEncoder(std::move(encoder_config_));
1612 EXPECT_EQ(0u, num_releases()); 1617 EXPECT_EQ(1u, num_releases());
1613 stream_->Stop(); 1618 stream_->Stop();
1614 // Encoder should not be released before destroying the VideoSendStream. 1619 // Encoder should not be released before destroying the VideoSendStream.
1615 EXPECT_FALSE(IsReleased()); 1620 EXPECT_FALSE(IsReleased());
1616 EXPECT_TRUE(IsReadyForEncode()); 1621 EXPECT_TRUE(IsReadyForEncode());
1617 stream_->Start(); 1622 stream_->Start();
1618 // Sanity check, make sure we still encode frames with this encoder. 1623 // Sanity check, make sure we still encode frames with this encoder.
1619 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; 1624 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode.";
1620 } 1625 }
1621 1626
1622 rtc::CriticalSection crit_; 1627 rtc::CriticalSection crit_;
1623 VideoSendStream* stream_; 1628 VideoSendStream* stream_;
1624 bool initialized_ GUARDED_BY(crit_); 1629 bool initialized_ GUARDED_BY(crit_);
1625 bool callback_registered_ GUARDED_BY(crit_); 1630 bool callback_registered_ GUARDED_BY(crit_);
1626 size_t num_releases_ GUARDED_BY(crit_); 1631 size_t num_releases_ GUARDED_BY(crit_);
1627 bool released_ GUARDED_BY(crit_); 1632 bool released_ GUARDED_BY(crit_);
1628 VideoEncoderConfig encoder_config_; 1633 VideoEncoderConfig encoder_config_;
1629 } test_encoder; 1634 } test_encoder;
1630 1635
1631 RunBaseTest(&test_encoder); 1636 RunBaseTest(&test_encoder);
1632 1637
1633 EXPECT_TRUE(test_encoder.IsReleased()); 1638 EXPECT_TRUE(test_encoder.IsReleased());
1634 EXPECT_EQ(1u, test_encoder.num_releases()); 1639 EXPECT_EQ(2u, test_encoder.num_releases());
1635 } 1640 }
1636 1641
1637 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { 1642 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) {
1638 class VideoCodecConfigObserver : public test::SendTest, 1643 class VideoCodecConfigObserver : public test::SendTest,
1639 public test::FakeEncoder { 1644 public test::FakeEncoder {
1640 public: 1645 public:
1641 VideoCodecConfigObserver() 1646 VideoCodecConfigObserver()
1642 : SendTest(kDefaultTimeoutMs), 1647 : SendTest(kDefaultTimeoutMs),
1643 FakeEncoder(Clock::GetRealTimeClock()), 1648 FakeEncoder(Clock::GetRealTimeClock()),
1644 init_encode_event_(false, false), 1649 init_encode_event_(false, false),
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 FakeEncoder(Clock::GetRealTimeClock()), 1712 FakeEncoder(Clock::GetRealTimeClock()),
1708 video_codec_type_(video_codec_type), 1713 video_codec_type_(video_codec_type),
1709 codec_name_(codec_name), 1714 codec_name_(codec_name),
1710 init_encode_event_(false, false), 1715 init_encode_event_(false, false),
1711 num_initializations_(0), 1716 num_initializations_(0),
1712 stream_(nullptr) { 1717 stream_(nullptr) {
1713 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); 1718 memset(&encoder_settings_, 0, sizeof(encoder_settings_));
1714 } 1719 }
1715 1720
1716 private: 1721 private:
1722 class VideoStreamFactory
1723 : public VideoEncoderConfig::VideoStreamFactoryInterface {
1724 public:
1725 VideoStreamFactory() {}
1726
1727 private:
1728 std::vector<VideoStream> CreateEncoderStreams(
1729 int width,
1730 int height,
1731 const VideoEncoderConfig& encoder_config) override {
1732 std::vector<VideoStream> streams =
1733 test::CreateVideoStreams(width, height, encoder_config);
1734 for (size_t i = 0; i < streams.size(); ++i) {
1735 streams[i].temporal_layer_thresholds_bps.resize(
1736 kVideoCodecConfigObserverNumberOfTemporalLayers - 1);
1737 }
1738 return streams;
1739 }
1740 };
1741
1717 void ModifyVideoConfigs( 1742 void ModifyVideoConfigs(
1718 VideoSendStream::Config* send_config, 1743 VideoSendStream::Config* send_config,
1719 std::vector<VideoReceiveStream::Config>* receive_configs, 1744 std::vector<VideoReceiveStream::Config>* receive_configs,
1720 VideoEncoderConfig* encoder_config) override { 1745 VideoEncoderConfig* encoder_config) override {
1721 send_config->encoder_settings.encoder = this; 1746 send_config->encoder_settings.encoder = this;
1722 send_config->encoder_settings.payload_name = codec_name_; 1747 send_config->encoder_settings.payload_name = codec_name_;
1723 1748
1724 for (size_t i = 0; i < encoder_config->streams.size(); ++i) {
1725 encoder_config->streams[i].temporal_layer_thresholds_bps.resize(
1726 kVideoCodecConfigObserverNumberOfTemporalLayers - 1);
1727 }
1728
1729 encoder_config->encoder_specific_settings = GetEncoderSpecificSettings(); 1749 encoder_config->encoder_specific_settings = GetEncoderSpecificSettings();
1750 encoder_config->encoder_stream_factory =
1751 new rtc::RefCountedObject<VideoStreamFactory>();
1730 encoder_config_ = encoder_config->Copy(); 1752 encoder_config_ = encoder_config->Copy();
1731 } 1753 }
1732 1754
1733 void OnVideoStreamsCreated( 1755 void OnVideoStreamsCreated(
1734 VideoSendStream* send_stream, 1756 VideoSendStream* send_stream,
1735 const std::vector<VideoReceiveStream*>& receive_streams) override { 1757 const std::vector<VideoReceiveStream*>& receive_streams) override {
1736 stream_ = send_stream; 1758 stream_ = send_stream;
1737 } 1759 }
1738 1760
1739 int32_t InitEncode(const VideoCodec* config, 1761 int32_t InitEncode(const VideoCodec* config,
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1915 rtc::CriticalSection crit_; 1937 rtc::CriticalSection crit_;
1916 size_t rtp_packets_sent_ GUARDED_BY(&crit_); 1938 size_t rtp_packets_sent_ GUARDED_BY(&crit_);
1917 size_t media_bytes_sent_ GUARDED_BY(&crit_); 1939 size_t media_bytes_sent_ GUARDED_BY(&crit_);
1918 } test; 1940 } test;
1919 1941
1920 RunBaseTest(&test); 1942 RunBaseTest(&test);
1921 } 1943 }
1922 1944
1923 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { 1945 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) {
1924 static const int kScreencastTargetBitrateKbps = 200; 1946 static const int kScreencastTargetBitrateKbps = 200;
1947
1948 class VideoStreamFactory
1949 : public VideoEncoderConfig::VideoStreamFactoryInterface {
1950 public:
1951 VideoStreamFactory() {}
1952
1953 private:
1954 std::vector<VideoStream> CreateEncoderStreams(
1955 int width,
1956 int height,
1957 const VideoEncoderConfig& encoder_config) override {
1958 std::vector<VideoStream> streams =
1959 test::CreateVideoStreams(width, height, encoder_config);
1960 EXPECT_TRUE(streams[0].temporal_layer_thresholds_bps.empty());
1961 streams[0].temporal_layer_thresholds_bps.push_back(
1962 kScreencastTargetBitrateKbps * 1000);
1963 return streams;
1964 }
1965 };
1966
1925 class ScreencastTargetBitrateTest : public test::SendTest, 1967 class ScreencastTargetBitrateTest : public test::SendTest,
1926 public test::FakeEncoder { 1968 public test::FakeEncoder {
1927 public: 1969 public:
1928 ScreencastTargetBitrateTest() 1970 ScreencastTargetBitrateTest()
1929 : SendTest(kDefaultTimeoutMs), 1971 : SendTest(kDefaultTimeoutMs),
1930 test::FakeEncoder(Clock::GetRealTimeClock()) {} 1972 test::FakeEncoder(Clock::GetRealTimeClock()) {}
1931 1973
1932 private: 1974 private:
1933 int32_t InitEncode(const VideoCodec* config, 1975 int32_t InitEncode(const VideoCodec* config,
1934 int32_t number_of_cores, 1976 int32_t number_of_cores,
1935 size_t max_payload_size) override { 1977 size_t max_payload_size) override {
1936 EXPECT_EQ(static_cast<unsigned int>(kScreencastTargetBitrateKbps), 1978 EXPECT_EQ(static_cast<unsigned int>(kScreencastTargetBitrateKbps),
1937 config->targetBitrate); 1979 config->targetBitrate);
1938 observation_complete_.Set(); 1980 observation_complete_.Set();
1939 return test::FakeEncoder::InitEncode( 1981 return test::FakeEncoder::InitEncode(
1940 config, number_of_cores, max_payload_size); 1982 config, number_of_cores, max_payload_size);
1941 } 1983 }
1942 void ModifyVideoConfigs( 1984 void ModifyVideoConfigs(
1943 VideoSendStream::Config* send_config, 1985 VideoSendStream::Config* send_config,
1944 std::vector<VideoReceiveStream::Config>* receive_configs, 1986 std::vector<VideoReceiveStream::Config>* receive_configs,
1945 VideoEncoderConfig* encoder_config) override { 1987 VideoEncoderConfig* encoder_config) override {
1946 send_config->encoder_settings.encoder = this; 1988 send_config->encoder_settings.encoder = this;
1947 EXPECT_EQ(1u, encoder_config->streams.size()); 1989 EXPECT_EQ(1u, encoder_config->number_of_streams);
1948 EXPECT_TRUE( 1990 encoder_config->encoder_stream_factory =
1949 encoder_config->streams[0].temporal_layer_thresholds_bps.empty()); 1991 new rtc::RefCountedObject<VideoStreamFactory>();
1950 encoder_config->streams[0].temporal_layer_thresholds_bps.push_back(
1951 kScreencastTargetBitrateKbps * 1000);
1952 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; 1992 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
1953 } 1993 }
1954 1994
1955 void PerformTest() override { 1995 void PerformTest() override {
1956 EXPECT_TRUE(Wait()) 1996 EXPECT_TRUE(Wait())
1957 << "Timed out while waiting for the encoder to be initialized."; 1997 << "Timed out while waiting for the encoder to be initialized.";
1958 } 1998 }
1959 } test; 1999 } test;
1960 2000
1961 RunBaseTest(&test); 2001 RunBaseTest(&test);
(...skipping 20 matching lines...) Expand all
1982 num_initializations_(0), 2022 num_initializations_(0),
1983 call_(nullptr), 2023 call_(nullptr),
1984 send_stream_(nullptr) {} 2024 send_stream_(nullptr) {}
1985 2025
1986 private: 2026 private:
1987 int32_t InitEncode(const VideoCodec* codecSettings, 2027 int32_t InitEncode(const VideoCodec* codecSettings,
1988 int32_t numberOfCores, 2028 int32_t numberOfCores,
1989 size_t maxPayloadSize) override { 2029 size_t maxPayloadSize) override {
1990 EXPECT_GE(codecSettings->startBitrate, codecSettings->minBitrate); 2030 EXPECT_GE(codecSettings->startBitrate, codecSettings->minBitrate);
1991 EXPECT_LE(codecSettings->startBitrate, codecSettings->maxBitrate); 2031 EXPECT_LE(codecSettings->startBitrate, codecSettings->maxBitrate);
1992 if (num_initializations_ == 0) { 2032 // First reinitialization happens due to that the frame size is updated.
2033 if (num_initializations_ == 0 || num_initializations_ == 1) {
1993 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), 2034 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps),
1994 codecSettings->minBitrate); 2035 codecSettings->minBitrate);
1995 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), 2036 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps),
1996 codecSettings->startBitrate); 2037 codecSettings->startBitrate);
1997 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), 2038 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps),
1998 codecSettings->maxBitrate); 2039 codecSettings->maxBitrate);
1999 observation_complete_.Set(); 2040 observation_complete_.Set();
2000 } else if (num_initializations_ == 1) { 2041 } else if (num_initializations_ == 2) {
2001 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), 2042 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps),
2002 codecSettings->maxBitrate); 2043 codecSettings->maxBitrate);
2003 // The start bitrate should be kept (-1) and capped to the max bitrate. 2044 // The start bitrate should be kept (-1) and capped to the max bitrate.
2004 // Since this is not an end-to-end call no receiver should have been 2045 // Since this is not an end-to-end call no receiver should have been
2005 // returning a REMB that could lower this estimate. 2046 // returning a REMB that could lower this estimate.
2006 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); 2047 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate);
2007 } else if (num_initializations_ == 2) { 2048 } else if (num_initializations_ == 3) {
2008 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), 2049 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps),
2009 codecSettings->maxBitrate); 2050 codecSettings->maxBitrate);
2010 // The start bitrate will be whatever the rate BitRateController 2051 // The start bitrate will be whatever the rate BitRateController
2011 // has currently configured but in the span of the set max and min 2052 // has currently configured but in the span of the set max and min
2012 // bitrate. 2053 // bitrate.
2013 } 2054 }
2014 ++num_initializations_; 2055 ++num_initializations_;
2015 init_encode_event_.Set(); 2056 init_encode_event_.Set();
2016 return FakeEncoder::InitEncode(codecSettings, numberOfCores, 2057 return FakeEncoder::InitEncode(codecSettings, numberOfCores,
2017 maxPayloadSize); 2058 maxPayloadSize);
2018 } 2059 }
2019 2060
2020 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { 2061 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override {
2021 { 2062 {
2022 rtc::CritScope lock(&crit_); 2063 rtc::CritScope lock(&crit_);
2064 if (target_bitrate_ == newBitRate) {
2065 return FakeEncoder::SetRates(newBitRate, frameRate);
2066 }
2023 target_bitrate_ = newBitRate; 2067 target_bitrate_ = newBitRate;
2024 } 2068 }
2025 bitrate_changed_event_.Set(); 2069 bitrate_changed_event_.Set();
2026 return FakeEncoder::SetRates(newBitRate, frameRate); 2070 return FakeEncoder::SetRates(newBitRate, frameRate);
2027 } 2071 }
2028 2072
2029 void WaitForSetRates(uint32_t expected_bitrate) { 2073 void WaitForSetRates(uint32_t expected_bitrate) {
2030 EXPECT_TRUE( 2074 EXPECT_TRUE(
2031 bitrate_changed_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) 2075 bitrate_changed_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs))
2032 << "Timed out while waiting encoder rate to be set."; 2076 << "Timed out while waiting encoder rate to be set.";
2033 rtc::CritScope lock(&crit_); 2077 rtc::CritScope lock(&crit_);
2034 EXPECT_EQ(expected_bitrate, target_bitrate_); 2078 EXPECT_EQ(expected_bitrate, target_bitrate_);
2035 } 2079 }
2036 2080
2037 Call::Config GetSenderCallConfig() override { 2081 Call::Config GetSenderCallConfig() override {
2038 Call::Config config; 2082 Call::Config config;
2039 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; 2083 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000;
2040 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; 2084 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000;
2041 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; 2085 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000;
2042 return config; 2086 return config;
2043 } 2087 }
2044 2088
2089 class VideoStreamFactory
2090 : public VideoEncoderConfig::VideoStreamFactoryInterface {
2091 public:
2092 explicit VideoStreamFactory(int min_bitrate_bps)
2093 : min_bitrate_bps_(min_bitrate_bps) {}
2094
2095 private:
2096 std::vector<VideoStream> CreateEncoderStreams(
2097 int width,
2098 int height,
2099 const VideoEncoderConfig& encoder_config) override {
2100 std::vector<VideoStream> streams =
2101 test::CreateVideoStreams(width, height, encoder_config);
2102 streams[0].min_bitrate_bps = min_bitrate_bps_;
2103 return streams;
2104 }
2105
2106 const int min_bitrate_bps_;
2107 };
2108
2045 void ModifyVideoConfigs( 2109 void ModifyVideoConfigs(
2046 VideoSendStream::Config* send_config, 2110 VideoSendStream::Config* send_config,
2047 std::vector<VideoReceiveStream::Config>* receive_configs, 2111 std::vector<VideoReceiveStream::Config>* receive_configs,
2048 VideoEncoderConfig* encoder_config) override { 2112 VideoEncoderConfig* encoder_config) override {
2049 send_config->encoder_settings.encoder = this; 2113 send_config->encoder_settings.encoder = this;
2050 // Set bitrates lower/higher than min/max to make sure they are properly 2114 // Set bitrates lower/higher than min/max to make sure they are properly
2051 // capped. 2115 // capped.
2052 encoder_config->streams.front().min_bitrate_bps = kMinBitrateKbps * 1000; 2116 encoder_config->max_bitrate_bps = kMaxBitrateKbps * 1000;
2053 encoder_config->streams.front().max_bitrate_bps = kMaxBitrateKbps * 1000; 2117 // Create a new StreamFactory to be able to set
2118 // |VideoStream.min_bitrate_bps|.
2119 encoder_config->encoder_stream_factory =
2120 new rtc::RefCountedObject<VideoStreamFactory>(kMinBitrateKbps * 1000);
2054 encoder_config_ = encoder_config->Copy(); 2121 encoder_config_ = encoder_config->Copy();
2055 } 2122 }
2056 2123
2057 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { 2124 void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
2058 call_ = sender_call; 2125 call_ = sender_call;
2059 } 2126 }
2060 2127
2061 void OnVideoStreamsCreated( 2128 void OnVideoStreamsCreated(
2062 VideoSendStream* send_stream, 2129 VideoSendStream* send_stream,
2063 const std::vector<VideoReceiveStream*>& receive_streams) override { 2130 const std::vector<VideoReceiveStream*>& receive_streams) override {
2064 send_stream_ = send_stream; 2131 send_stream_ = send_stream;
2065 } 2132 }
2066 2133
2067 void PerformTest() override { 2134 void PerformTest() override {
2068 ASSERT_TRUE( 2135 ASSERT_TRUE(
2069 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) 2136 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs))
2070 << "Timed out while waiting for encoder to be configured."; 2137 << "Timed out while waiting for encoder to be configured.";
2071 WaitForSetRates(kStartBitrateKbps); 2138 WaitForSetRates(kStartBitrateKbps);
2072 Call::Config::BitrateConfig bitrate_config; 2139 Call::Config::BitrateConfig bitrate_config;
2073 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; 2140 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000;
2074 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; 2141 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000;
2075 call_->SetBitrateConfig(bitrate_config); 2142 call_->SetBitrateConfig(bitrate_config);
2076 // Encoder rate is capped by EncoderConfig max_bitrate_bps. 2143 // Encoder rate is capped by EncoderConfig max_bitrate_bps.
2077 WaitForSetRates(kMaxBitrateKbps); 2144 WaitForSetRates(kMaxBitrateKbps);
2078 2145 encoder_config_.max_bitrate_bps = kLowerMaxBitrateKbps * 1000;
2079 encoder_config_.streams[0].min_bitrate_bps = 0;
2080 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000;
2081 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); 2146 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy());
2082 ASSERT_TRUE( 2147 ASSERT_TRUE(
2083 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); 2148 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
2084 EXPECT_EQ(2, num_initializations_) 2149 EXPECT_EQ(2, num_initializations_)
2085 << "Encoder should have been reconfigured with the new value."; 2150 << "Encoder should have been reconfigured with the new value.";
2086 WaitForSetRates(kLowerMaxBitrateKbps); 2151 WaitForSetRates(kLowerMaxBitrateKbps);
2087 2152
2088 encoder_config_.streams[0].target_bitrate_bps = 2153 encoder_config_.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000;
2089 encoder_config_.streams[0].min_bitrate_bps;
2090 encoder_config_.streams[0].max_bitrate_bps =
2091 kIncreasedMaxBitrateKbps * 1000;
2092 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); 2154 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy());
2093 ASSERT_TRUE( 2155 ASSERT_TRUE(
2094 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); 2156 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
2095 EXPECT_EQ(3, num_initializations_) 2157 EXPECT_EQ(3, num_initializations_)
2096 << "Encoder should have been reconfigured with the new value."; 2158 << "Encoder should have been reconfigured with the new value.";
2097 // Expected target bitrate is the start bitrate set in the call to 2159 // Expected target bitrate is the start bitrate set in the call to
2098 // call_->SetBitrateConfig. 2160 // call_->SetBitrateConfig.
2099 WaitForSetRates(kIncreasedStartBitrateKbps); 2161 WaitForSetRates(kIncreasedStartBitrateKbps);
2100 } 2162 }
2101 2163
2102 rtc::Event init_encode_event_; 2164 rtc::Event init_encode_event_;
2103 rtc::Event bitrate_changed_event_; 2165 rtc::Event bitrate_changed_event_;
2104 rtc::CriticalSection crit_; 2166 rtc::CriticalSection crit_;
2105 uint32_t target_bitrate_ GUARDED_BY(&crit_); 2167 uint32_t target_bitrate_ GUARDED_BY(&crit_);
2168
2106 int num_initializations_; 2169 int num_initializations_;
2107 webrtc::Call* call_; 2170 webrtc::Call* call_;
2108 webrtc::VideoSendStream* send_stream_; 2171 webrtc::VideoSendStream* send_stream_;
2109 webrtc::VideoEncoderConfig encoder_config_; 2172 webrtc::VideoEncoderConfig encoder_config_;
2110 } test; 2173 } test;
2111 2174
2112 RunBaseTest(&test); 2175 RunBaseTest(&test);
2113 } 2176 }
2114 2177
2115 TEST_F(VideoSendStreamTest, ReportsSentResolution) { 2178 TEST_F(VideoSendStreamTest, ReportsSentResolution) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2151 } 2214 }
2152 2215
2153 observation_complete_.Set(); 2216 observation_complete_.Set();
2154 return 0; 2217 return 0;
2155 } 2218 }
2156 void ModifyVideoConfigs( 2219 void ModifyVideoConfigs(
2157 VideoSendStream::Config* send_config, 2220 VideoSendStream::Config* send_config,
2158 std::vector<VideoReceiveStream::Config>* receive_configs, 2221 std::vector<VideoReceiveStream::Config>* receive_configs,
2159 VideoEncoderConfig* encoder_config) override { 2222 VideoEncoderConfig* encoder_config) override {
2160 send_config->encoder_settings.encoder = this; 2223 send_config->encoder_settings.encoder = this;
2161 EXPECT_EQ(kNumStreams, encoder_config->streams.size()); 2224 EXPECT_EQ(kNumStreams, encoder_config->number_of_streams);
2162 } 2225 }
2163 2226
2164 size_t GetNumVideoStreams() const override { return kNumStreams; } 2227 size_t GetNumVideoStreams() const override { return kNumStreams; }
2165 2228
2166 void PerformTest() override { 2229 void PerformTest() override {
2167 EXPECT_TRUE(Wait()) 2230 EXPECT_TRUE(Wait())
2168 << "Timed out while waiting for the encoder to send one frame."; 2231 << "Timed out while waiting for the encoder to send one frame.";
2169 VideoSendStream::Stats stats = send_stream_->GetStats(); 2232 VideoSendStream::Stats stats = send_stream_->GetStats();
2170 2233
2171 for (size_t i = 0; i < kNumStreams; ++i) { 2234 for (size_t i = 0; i < kNumStreams; ++i) {
(...skipping 21 matching lines...) Expand all
2193 } 2256 }
2194 2257
2195 #if !defined(RTC_DISABLE_VP9) 2258 #if !defined(RTC_DISABLE_VP9)
2196 class Vp9HeaderObserver : public test::SendTest { 2259 class Vp9HeaderObserver : public test::SendTest {
2197 public: 2260 public:
2198 Vp9HeaderObserver() 2261 Vp9HeaderObserver()
2199 : SendTest(VideoSendStreamTest::kLongTimeoutMs), 2262 : SendTest(VideoSendStreamTest::kLongTimeoutMs),
2200 vp9_encoder_(VP9Encoder::Create()), 2263 vp9_encoder_(VP9Encoder::Create()),
2201 vp9_settings_(VideoEncoder::GetDefaultVp9Settings()), 2264 vp9_settings_(VideoEncoder::GetDefaultVp9Settings()),
2202 packets_sent_(0), 2265 packets_sent_(0),
2203 frames_sent_(0) {} 2266 frames_sent_(0),
2267 expected_width_(0),
2268 expected_height_(0) {}
2204 2269
2205 virtual void ModifyVideoConfigsHook( 2270 virtual void ModifyVideoConfigsHook(
2206 VideoSendStream::Config* send_config, 2271 VideoSendStream::Config* send_config,
2207 std::vector<VideoReceiveStream::Config>* receive_configs, 2272 std::vector<VideoReceiveStream::Config>* receive_configs,
2208 VideoEncoderConfig* encoder_config) {} 2273 VideoEncoderConfig* encoder_config) {}
2209 2274
2210 virtual void InspectHeader(const RTPVideoHeaderVP9& vp9) = 0; 2275 virtual void InspectHeader(const RTPVideoHeaderVP9& vp9) = 0;
2211 2276
2212 private: 2277 private:
2213 const int kVp9PayloadType = 105; 2278 const int kVp9PayloadType = 105;
2214 2279
2280 class VideoStreamFactory
2281 : public VideoEncoderConfig::VideoStreamFactoryInterface {
2282 public:
2283 explicit VideoStreamFactory(size_t number_of_temporal_layers)
2284 : number_of_temporal_layers_(number_of_temporal_layers) {}
2285
2286 private:
2287 std::vector<VideoStream> CreateEncoderStreams(
2288 int width,
2289 int height,
2290 const VideoEncoderConfig& encoder_config) override {
2291 std::vector<VideoStream> streams =
2292 test::CreateVideoStreams(width, height, encoder_config);
2293 streams[0].temporal_layer_thresholds_bps.resize(
2294 number_of_temporal_layers_ - 1);
2295 return streams;
2296 }
2297
2298 const size_t number_of_temporal_layers_;
2299 };
2300
2215 void ModifyVideoConfigs( 2301 void ModifyVideoConfigs(
2216 VideoSendStream::Config* send_config, 2302 VideoSendStream::Config* send_config,
2217 std::vector<VideoReceiveStream::Config>* receive_configs, 2303 std::vector<VideoReceiveStream::Config>* receive_configs,
2218 VideoEncoderConfig* encoder_config) override { 2304 VideoEncoderConfig* encoder_config) override {
2219 send_config->encoder_settings.encoder = vp9_encoder_.get(); 2305 send_config->encoder_settings.encoder = vp9_encoder_.get();
2220 send_config->encoder_settings.payload_name = "VP9"; 2306 send_config->encoder_settings.payload_name = "VP9";
2221 send_config->encoder_settings.payload_type = kVp9PayloadType; 2307 send_config->encoder_settings.payload_type = kVp9PayloadType;
2222 ModifyVideoConfigsHook(send_config, receive_configs, encoder_config); 2308 ModifyVideoConfigsHook(send_config, receive_configs, encoder_config);
2223 encoder_config->encoder_specific_settings = new rtc::RefCountedObject< 2309 encoder_config->encoder_specific_settings = new rtc::RefCountedObject<
2224 VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9_settings_); 2310 VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9_settings_);
2225 EXPECT_EQ(1u, encoder_config->streams.size()); 2311 EXPECT_EQ(1u, encoder_config->number_of_streams);
2226 encoder_config->streams[0].temporal_layer_thresholds_bps.resize( 2312 encoder_config->encoder_stream_factory =
2227 vp9_settings_.numberOfTemporalLayers - 1); 2313 new rtc::RefCountedObject<VideoStreamFactory>(
2314 vp9_settings_.numberOfTemporalLayers);
2228 encoder_config_ = encoder_config->Copy(); 2315 encoder_config_ = encoder_config->Copy();
2229 } 2316 }
2230 2317
2318 void ModifyVideoCaptureStartResolution(int* width,
2319 int* height,
2320 int* frame_rate) override {
2321 expected_width_ = *width;
2322 expected_height_ = *height;
2323 }
2324
2231 void PerformTest() override { 2325 void PerformTest() override {
2232 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet, num frames " 2326 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet, num frames "
2233 << frames_sent_; 2327 << frames_sent_;
2234 } 2328 }
2235 2329
2236 Action OnSendRtp(const uint8_t* packet, size_t length) override { 2330 Action OnSendRtp(const uint8_t* packet, size_t length) override {
2237 RTPHeader header; 2331 RTPHeader header;
2238 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 2332 EXPECT_TRUE(parser_->Parse(packet, length, &header));
2239 2333
2240 EXPECT_EQ(kVp9PayloadType, header.payloadType); 2334 EXPECT_EQ(kVp9PayloadType, header.payloadType);
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
2410 // +-+-+-+-+-+-+-+-+ 2504 // +-+-+-+-+-+-+-+-+
2411 // N_G: | T |U| R |-|-| N_G times 2505 // N_G: | T |U| R |-|-| N_G times
2412 // +-+-+-+-+-+-+-+-+ 2506 // +-+-+-+-+-+-+-+-+
2413 // | P_DIFF | R times 2507 // | P_DIFF | R times
2414 // +-+-+-+-+-+-+-+-+ 2508 // +-+-+-+-+-+-+-+-+
2415 void VerifySsData(const RTPVideoHeaderVP9& vp9) const { 2509 void VerifySsData(const RTPVideoHeaderVP9& vp9) const {
2416 EXPECT_TRUE(vp9.ss_data_available); // V 2510 EXPECT_TRUE(vp9.ss_data_available); // V
2417 EXPECT_EQ(vp9_settings_.numberOfSpatialLayers, // N_S + 1 2511 EXPECT_EQ(vp9_settings_.numberOfSpatialLayers, // N_S + 1
2418 vp9.num_spatial_layers); 2512 vp9.num_spatial_layers);
2419 EXPECT_TRUE(vp9.spatial_layer_resolution_present); // Y:1 2513 EXPECT_TRUE(vp9.spatial_layer_resolution_present); // Y:1
2420 size_t expected_width = encoder_config_.streams[0].width; 2514 int expected_width = expected_width_;
2421 size_t expected_height = encoder_config_.streams[0].height; 2515 int expected_height = expected_height_;
2422 for (int i = static_cast<int>(vp9.num_spatial_layers) - 1; i >= 0; --i) { 2516 for (int i = static_cast<int>(vp9.num_spatial_layers) - 1; i >= 0; --i) {
2423 EXPECT_EQ(expected_width, vp9.width[i]); // WIDTH 2517 EXPECT_EQ(expected_width, vp9.width[i]); // WIDTH
2424 EXPECT_EQ(expected_height, vp9.height[i]); // HEIGHT 2518 EXPECT_EQ(expected_height, vp9.height[i]); // HEIGHT
2425 expected_width /= 2; 2519 expected_width /= 2;
2426 expected_height /= 2; 2520 expected_height /= 2;
2427 } 2521 }
2428 } 2522 }
2429 2523
2430 void CompareConsecutiveFrames(const RTPHeader& header, 2524 void CompareConsecutiveFrames(const RTPHeader& header,
2431 const RTPVideoHeader& video) const { 2525 const RTPVideoHeader& video) const {
(...skipping 23 matching lines...) Expand all
2455 VerifyTl0Idx(vp9); 2549 VerifyTl0Idx(vp9);
2456 } 2550 }
2457 2551
2458 std::unique_ptr<VP9Encoder> vp9_encoder_; 2552 std::unique_ptr<VP9Encoder> vp9_encoder_;
2459 VideoCodecVP9 vp9_settings_; 2553 VideoCodecVP9 vp9_settings_;
2460 webrtc::VideoEncoderConfig encoder_config_; 2554 webrtc::VideoEncoderConfig encoder_config_;
2461 RTPHeader last_header_; 2555 RTPHeader last_header_;
2462 RTPVideoHeaderVP9 last_vp9_; 2556 RTPVideoHeaderVP9 last_vp9_;
2463 size_t packets_sent_; 2557 size_t packets_sent_;
2464 size_t frames_sent_; 2558 size_t frames_sent_;
2559 int expected_width_;
2560 int expected_height_;
2465 }; 2561 };
2466 2562
2467 TEST_F(VideoSendStreamTest, Vp9NonFlexMode_1Tl1SLayers) { 2563 TEST_F(VideoSendStreamTest, Vp9NonFlexMode_1Tl1SLayers) {
2468 const uint8_t kNumTemporalLayers = 1; 2564 const uint8_t kNumTemporalLayers = 1;
2469 const uint8_t kNumSpatialLayers = 1; 2565 const uint8_t kNumSpatialLayers = 1;
2470 TestVp9NonFlexMode(kNumTemporalLayers, kNumSpatialLayers); 2566 TestVp9NonFlexMode(kNumTemporalLayers, kNumSpatialLayers);
2471 } 2567 }
2472 2568
2473 TEST_F(VideoSendStreamTest, Vp9NonFlexMode_2Tl1SLayers) { 2569 TEST_F(VideoSendStreamTest, Vp9NonFlexMode_2Tl1SLayers) {
2474 const uint8_t kNumTemporalLayers = 2; 2570 const uint8_t kNumTemporalLayers = 2;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2556 static const int kHeight = 4; 2652 static const int kHeight = 4;
2557 class NonFlexibleModeResolution : public Vp9HeaderObserver { 2653 class NonFlexibleModeResolution : public Vp9HeaderObserver {
2558 void ModifyVideoConfigsHook( 2654 void ModifyVideoConfigsHook(
2559 VideoSendStream::Config* send_config, 2655 VideoSendStream::Config* send_config,
2560 std::vector<VideoReceiveStream::Config>* receive_configs, 2656 std::vector<VideoReceiveStream::Config>* receive_configs,
2561 VideoEncoderConfig* encoder_config) override { 2657 VideoEncoderConfig* encoder_config) override {
2562 vp9_settings_.flexibleMode = false; 2658 vp9_settings_.flexibleMode = false;
2563 vp9_settings_.numberOfTemporalLayers = 1; 2659 vp9_settings_.numberOfTemporalLayers = 1;
2564 vp9_settings_.numberOfSpatialLayers = 1; 2660 vp9_settings_.numberOfSpatialLayers = 1;
2565 2661
2566 EXPECT_EQ(1u, encoder_config->streams.size()); 2662 EXPECT_EQ(1u, encoder_config->number_of_streams);
2567 encoder_config->streams[0].width = kWidth;
2568 encoder_config->streams[0].height = kHeight;
2569 } 2663 }
2570 2664
2571 void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override { 2665 void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override {
2572 if (frames_sent_ > kNumFramesToSend) 2666 if (frames_sent_ > kNumFramesToSend)
2573 observation_complete_.Set(); 2667 observation_complete_.Set();
2574 } 2668 }
2669
2670 void ModifyVideoCaptureStartResolution(int* width,
2671 int* height,
2672 int* frame_rate) override {
2673 expected_width_ = kWidth;
2674 expected_height_ = kHeight;
2675 *width = kWidth;
2676 *height = kHeight;
2677 }
2575 } test; 2678 } test;
2576 2679
2577 RunBaseTest(&test); 2680 RunBaseTest(&test);
2578 } 2681 }
2579 2682
2580 TEST_F(VideoSendStreamTest, Vp9FlexModeRefCount) { 2683 TEST_F(VideoSendStreamTest, Vp9FlexModeRefCount) {
2581 class FlexibleMode : public Vp9HeaderObserver { 2684 class FlexibleMode : public Vp9HeaderObserver {
2582 void ModifyVideoConfigsHook( 2685 void ModifyVideoConfigsHook(
2583 VideoSendStream::Config* send_config, 2686 VideoSendStream::Config* send_config,
2584 std::vector<VideoReceiveStream::Config>* receive_configs, 2687 std::vector<VideoReceiveStream::Config>* receive_configs,
(...skipping 12 matching lines...) Expand all
2597 observation_complete_.Set(); 2700 observation_complete_.Set();
2598 } 2701 }
2599 } 2702 }
2600 } test; 2703 } test;
2601 2704
2602 RunBaseTest(&test); 2705 RunBaseTest(&test);
2603 } 2706 }
2604 #endif // !defined(RTC_DISABLE_VP9) 2707 #endif // !defined(RTC_DISABLE_VP9)
2605 2708
2606 } // namespace webrtc 2709 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698