| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2004 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 1059 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1070 rtx_ssrcs.push_back(ssrc + kRtxSsrcOffset); | 1070 rtx_ssrcs.push_back(ssrc + kRtxSsrcOffset); |
| 1071 } | 1071 } |
| 1072 } | 1072 } |
| 1073 if (with_rtx) { | 1073 if (with_rtx) { |
| 1074 return AddSendStream( | 1074 return AddSendStream( |
| 1075 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); | 1075 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); |
| 1076 } | 1076 } |
| 1077 return AddSendStream(CreateSimStreamParams("cname", ssrcs)); | 1077 return AddSendStream(CreateSimStreamParams("cname", ssrcs)); |
| 1078 } | 1078 } |
| 1079 | 1079 |
| 1080 int GetMaxEncoderBitrate(cricket::FakeVideoCapturer& capturer) { | 1080 int GetMaxEncoderBitrate() { |
| 1081 EXPECT_TRUE(capturer.CaptureFrame()); | |
| 1082 | |
| 1083 std::vector<FakeVideoSendStream*> streams = | 1081 std::vector<FakeVideoSendStream*> streams = |
| 1084 fake_call_->GetVideoSendStreams(); | 1082 fake_call_->GetVideoSendStreams(); |
| 1085 EXPECT_TRUE(streams.size() > 0); | 1083 EXPECT_EQ(1u, streams.size()); |
| 1086 FakeVideoSendStream* stream = streams[streams.size() - 1]; | 1084 FakeVideoSendStream* stream = streams[streams.size() - 1]; |
| 1087 | 1085 EXPECT_EQ(1, stream->GetEncoderConfig().number_of_streams); |
| 1088 webrtc::VideoEncoderConfig encoder_config = | 1086 return stream->GetVideoStreams()[0].max_bitrate_bps; |
| 1089 stream->GetEncoderConfig().Copy(); | |
| 1090 EXPECT_EQ(1, encoder_config.streams.size()); | |
| 1091 return encoder_config.streams[0].max_bitrate_bps; | |
| 1092 } | 1087 } |
| 1093 | 1088 |
| 1094 void SetAndExpectMaxBitrate(cricket::FakeVideoCapturer& capturer, | 1089 void SetAndExpectMaxBitrate(int global_max, |
| 1095 int global_max, | |
| 1096 int stream_max, | 1090 int stream_max, |
| 1097 int expected_encoder_bitrate) { | 1091 int expected_encoder_bitrate) { |
| 1098 VideoSendParameters limited_send_params = send_parameters_; | 1092 VideoSendParameters limited_send_params = send_parameters_; |
| 1099 limited_send_params.max_bandwidth_bps = global_max; | 1093 limited_send_params.max_bandwidth_bps = global_max; |
| 1100 EXPECT_TRUE(channel_->SetSendParameters(limited_send_params)); | 1094 EXPECT_TRUE(channel_->SetSendParameters(limited_send_params)); |
| 1101 webrtc::RtpParameters parameters = | 1095 webrtc::RtpParameters parameters = |
| 1102 channel_->GetRtpSendParameters(last_ssrc_); | 1096 channel_->GetRtpSendParameters(last_ssrc_); |
| 1103 EXPECT_EQ(1UL, parameters.encodings.size()); | 1097 EXPECT_EQ(1UL, parameters.encodings.size()); |
| 1104 parameters.encodings[0].max_bitrate_bps = stream_max; | 1098 parameters.encodings[0].max_bitrate_bps = stream_max; |
| 1105 EXPECT_TRUE(channel_->SetRtpSendParameters(last_ssrc_, parameters)); | 1099 EXPECT_TRUE(channel_->SetRtpSendParameters(last_ssrc_, parameters)); |
| 1106 // Read back the parameteres and verify they have the correct value | 1100 // Read back the parameteres and verify they have the correct value |
| 1107 parameters = channel_->GetRtpSendParameters(last_ssrc_); | 1101 parameters = channel_->GetRtpSendParameters(last_ssrc_); |
| 1108 EXPECT_EQ(1UL, parameters.encodings.size()); | 1102 EXPECT_EQ(1UL, parameters.encodings.size()); |
| 1109 EXPECT_EQ(stream_max, parameters.encodings[0].max_bitrate_bps); | 1103 EXPECT_EQ(stream_max, parameters.encodings[0].max_bitrate_bps); |
| 1110 // Verify that the new value propagated down to the encoder | 1104 // Verify that the new value propagated down to the encoder |
| 1111 EXPECT_EQ(expected_encoder_bitrate, GetMaxEncoderBitrate(capturer)); | 1105 EXPECT_EQ(expected_encoder_bitrate, GetMaxEncoderBitrate()); |
| 1112 } | 1106 } |
| 1113 | 1107 |
| 1114 std::unique_ptr<FakeCall> fake_call_; | 1108 std::unique_ptr<FakeCall> fake_call_; |
| 1115 std::unique_ptr<VideoMediaChannel> channel_; | 1109 std::unique_ptr<VideoMediaChannel> channel_; |
| 1116 cricket::VideoSendParameters send_parameters_; | 1110 cricket::VideoSendParameters send_parameters_; |
| 1117 cricket::VideoRecvParameters recv_parameters_; | 1111 cricket::VideoRecvParameters recv_parameters_; |
| 1118 uint32_t last_ssrc_; | 1112 uint32_t last_ssrc_; |
| 1119 }; | 1113 }; |
| 1120 | 1114 |
| 1121 TEST_F(WebRtcVideoChannel2Test, SetsSyncGroupFromSyncLabel) { | 1115 TEST_F(WebRtcVideoChannel2Test, SetsSyncGroupFromSyncLabel) { |
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1505 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); | 1499 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); |
| 1506 send_stream = fake_call_->GetVideoSendStreams()[0]; | 1500 send_stream = fake_call_->GetVideoSendStreams()[0]; |
| 1507 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); | 1501 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); |
| 1508 } | 1502 } |
| 1509 | 1503 |
| 1510 // This test verifies that new frame sizes reconfigures encoders even though not | 1504 // This test verifies that new frame sizes reconfigures encoders even though not |
| 1511 // (yet) sending. The purpose of this is to permit encoding as quickly as | 1505 // (yet) sending. The purpose of this is to permit encoding as quickly as |
| 1512 // possible once we start sending. Likely the frames being input are from the | 1506 // possible once we start sending. Likely the frames being input are from the |
| 1513 // same source that will be sent later, which just means that we're ready | 1507 // same source that will be sent later, which just means that we're ready |
| 1514 // earlier. | 1508 // earlier. |
| 1509 |
| 1510 // TODO now! Add similar test to VideoSendStreams tests to test actuall |
| 1511 // implementation. |
| 1515 TEST_F(WebRtcVideoChannel2Test, ReconfiguresEncodersWhenNotSending) { | 1512 TEST_F(WebRtcVideoChannel2Test, ReconfiguresEncodersWhenNotSending) { |
| 1516 cricket::VideoSendParameters parameters; | 1513 cricket::VideoSendParameters parameters; |
| 1517 parameters.codecs.push_back(kVp8Codec720p); | 1514 parameters.codecs.push_back(kVp8Codec720p); |
| 1518 ASSERT_TRUE(channel_->SetSendParameters(parameters)); | 1515 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
| 1519 channel_->SetSend(false); | 1516 channel_->SetSend(false); |
| 1520 | 1517 |
| 1521 FakeVideoSendStream* stream = AddSendStream(); | 1518 FakeVideoSendStream* stream = AddSendStream(); |
| 1522 | 1519 |
| 1523 // No frames entered, using default dimensions. | 1520 // No frames entered. |
| 1524 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); | 1521 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); |
| 1525 EXPECT_EQ(176u, streams[0].width); | 1522 EXPECT_EQ(0u, streams[0].width); |
| 1526 EXPECT_EQ(144u, streams[0].height); | 1523 EXPECT_EQ(0u, streams[0].height); |
| 1527 | 1524 |
| 1528 cricket::FakeVideoCapturer capturer; | 1525 cricket::FakeVideoCapturer capturer; |
| 1529 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); | 1526 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); |
| 1530 EXPECT_EQ(cricket::CS_RUNNING, | 1527 EXPECT_EQ(cricket::CS_RUNNING, |
| 1531 capturer.Start(capturer.GetSupportedFormats()->front())); | 1528 capturer.Start(capturer.GetSupportedFormats()->front())); |
| 1532 EXPECT_TRUE(capturer.CaptureFrame()); | 1529 EXPECT_TRUE(capturer.CaptureFrame()); |
| 1533 | 1530 |
| 1534 // Frame entered, should be reconfigured to new dimensions. | 1531 // Frame entered, should be reconfigured to new dimensions. |
| 1535 streams = stream->GetVideoStreams(); | 1532 streams = stream->GetVideoStreams(); |
| 1536 EXPECT_EQ(kVp8Codec720p.width, streams[0].width); | 1533 EXPECT_EQ(kVp8Codec720p.width, streams[0].width); |
| 1537 EXPECT_EQ(kVp8Codec720p.height, streams[0].height); | 1534 EXPECT_EQ(kVp8Codec720p.height, streams[0].height); |
| 1538 // No frames should have been actually put in there though. | |
| 1539 EXPECT_EQ(0, stream->GetNumberOfSwappedFrames()); | |
| 1540 | 1535 |
| 1541 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 1536 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
| 1542 } | 1537 } |
| 1543 | 1538 |
| 1544 TEST_F(WebRtcVideoChannel2Test, UsesCorrectSettingsForScreencast) { | 1539 TEST_F(WebRtcVideoChannel2Test, UsesCorrectSettingsForScreencast) { |
| 1545 static const int kScreenshareMinBitrateKbps = 800; | 1540 static const int kScreenshareMinBitrateKbps = 800; |
| 1546 cricket::VideoCodec codec = kVp8Codec360p; | 1541 cricket::VideoCodec codec = kVp8Codec360p; |
| 1547 cricket::VideoSendParameters parameters; | 1542 cricket::VideoSendParameters parameters; |
| 1548 parameters.codecs.push_back(codec); | 1543 parameters.codecs.push_back(codec); |
| 1549 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1544 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1567 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | 1562 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
| 1568 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); | 1563 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
| 1569 | 1564 |
| 1570 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); | 1565 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
| 1571 | 1566 |
| 1572 // Verify non-screencast settings. | 1567 // Verify non-screencast settings. |
| 1573 webrtc::VideoEncoderConfig encoder_config = | 1568 webrtc::VideoEncoderConfig encoder_config = |
| 1574 send_stream->GetEncoderConfig().Copy(); | 1569 send_stream->GetEncoderConfig().Copy(); |
| 1575 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo, | 1570 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo, |
| 1576 encoder_config.content_type); | 1571 encoder_config.content_type); |
| 1577 EXPECT_EQ(codec.width, encoder_config.streams.front().width); | 1572 std::vector<webrtc::VideoStream> streams = send_stream->GetVideoStreams(); |
| 1578 EXPECT_EQ(codec.height, encoder_config.streams.front().height); | 1573 EXPECT_EQ(capture_format_hd.width, streams.front().width); |
| 1574 EXPECT_EQ(capture_format_hd.height, streams.front().height); |
| 1579 EXPECT_EQ(0, encoder_config.min_transmit_bitrate_bps) | 1575 EXPECT_EQ(0, encoder_config.min_transmit_bitrate_bps) |
| 1580 << "Non-screenshare shouldn't use min-transmit bitrate."; | 1576 << "Non-screenshare shouldn't use min-transmit bitrate."; |
| 1581 | 1577 |
| 1582 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 1578 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
| 1583 // Removing a capturer triggers a black frame to be sent. | 1579 // Removing a capturer triggers a black frame to be sent. |
| 1584 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); | 1580 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); |
| 1585 VideoOptions screencast_options; | 1581 VideoOptions screencast_options; |
| 1586 screencast_options.is_screencast = rtc::Optional<bool>(true); | 1582 screencast_options.is_screencast = rtc::Optional<bool>(true); |
| 1587 EXPECT_TRUE( | 1583 EXPECT_TRUE( |
| 1588 channel_->SetVideoSend(last_ssrc_, true, &screencast_options, &capturer)); | 1584 channel_->SetVideoSend(last_ssrc_, true, &screencast_options, &capturer)); |
| 1589 EXPECT_TRUE(capturer.CaptureFrame()); | 1585 EXPECT_TRUE(capturer.CaptureFrame()); |
| 1590 // Send stream not recreated after option change. | 1586 // Send stream not recreated after option change. |
| 1591 ASSERT_EQ(send_stream, fake_call_->GetVideoSendStreams().front()); | 1587 ASSERT_EQ(send_stream, fake_call_->GetVideoSendStreams().front()); |
| 1592 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); | 1588 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); |
| 1593 | 1589 |
| 1594 // Verify screencast settings. | 1590 // Verify screencast settings. |
| 1595 encoder_config = send_stream->GetEncoderConfig().Copy(); | 1591 encoder_config = send_stream->GetEncoderConfig().Copy(); |
| 1596 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen, | 1592 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen, |
| 1597 encoder_config.content_type); | 1593 encoder_config.content_type); |
| 1598 EXPECT_EQ(kScreenshareMinBitrateKbps * 1000, | 1594 EXPECT_EQ(kScreenshareMinBitrateKbps * 1000, |
| 1599 encoder_config.min_transmit_bitrate_bps); | 1595 encoder_config.min_transmit_bitrate_bps); |
| 1600 | 1596 |
| 1601 EXPECT_EQ(capture_format_hd.width, encoder_config.streams.front().width); | 1597 streams = send_stream->GetVideoStreams(); |
| 1602 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height); | 1598 EXPECT_EQ(capture_format_hd.width, streams.front().width); |
| 1603 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty()); | 1599 EXPECT_EQ(capture_format_hd.height, streams.front().height); |
| 1604 | 1600 EXPECT_TRUE(streams[0].temporal_layer_thresholds_bps.empty()); |
| 1605 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 1601 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
| 1606 } | 1602 } |
| 1607 | 1603 |
| 1608 TEST_F(WebRtcVideoChannel2Test, NoRecreateStreamForScreencast) { | 1604 TEST_F(WebRtcVideoChannel2Test, NoRecreateStreamForScreencast) { |
| 1609 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 1605 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
| 1610 ASSERT_TRUE( | 1606 ASSERT_TRUE( |
| 1611 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 1607 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
| 1612 EXPECT_TRUE(channel_->SetSend(true)); | 1608 EXPECT_TRUE(channel_->SetSend(true)); |
| 1613 | 1609 |
| 1614 cricket::FakeVideoCapturer capturer; | 1610 cricket::FakeVideoCapturer capturer; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1678 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | 1674 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
| 1679 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); | 1675 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
| 1680 | 1676 |
| 1681 webrtc::VideoEncoderConfig encoder_config = | 1677 webrtc::VideoEncoderConfig encoder_config = |
| 1682 send_stream->GetEncoderConfig().Copy(); | 1678 send_stream->GetEncoderConfig().Copy(); |
| 1683 | 1679 |
| 1684 // Verify screencast settings. | 1680 // Verify screencast settings. |
| 1685 encoder_config = send_stream->GetEncoderConfig().Copy(); | 1681 encoder_config = send_stream->GetEncoderConfig().Copy(); |
| 1686 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen, | 1682 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen, |
| 1687 encoder_config.content_type); | 1683 encoder_config.content_type); |
| 1688 ASSERT_EQ(1u, encoder_config.streams.size()); | 1684 |
| 1689 ASSERT_EQ(1u, encoder_config.streams[0].temporal_layer_thresholds_bps.size()); | 1685 std::vector<webrtc::VideoStream> streams = send_stream->GetVideoStreams(); |
| 1686 ASSERT_EQ(1u, streams.size()); |
| 1687 ASSERT_EQ(1u, streams[0].temporal_layer_thresholds_bps.size()); |
| 1690 EXPECT_EQ(kConferenceScreencastTemporalBitrateBps, | 1688 EXPECT_EQ(kConferenceScreencastTemporalBitrateBps, |
| 1691 encoder_config.streams[0].temporal_layer_thresholds_bps[0]); | 1689 streams[0].temporal_layer_thresholds_bps[0]); |
| 1692 | 1690 |
| 1693 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 1691 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
| 1694 } | 1692 } |
| 1695 | 1693 |
| 1696 TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) { | 1694 TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) { |
| 1697 FakeVideoSendStream* stream = AddSendStream(); | 1695 FakeVideoSendStream* stream = AddSendStream(); |
| 1698 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate); | 1696 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate); |
| 1699 } | 1697 } |
| 1700 | 1698 |
| 1701 TEST_F(WebRtcVideoChannel2Test, SetMediaConfigSuspendBelowMinBitrate) { | 1699 TEST_F(WebRtcVideoChannel2Test, SetMediaConfigSuspendBelowMinBitrate) { |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1802 | 1800 |
| 1803 // Test that setting the same options doesn't result in the encoder being | 1801 // Test that setting the same options doesn't result in the encoder being |
| 1804 // reconfigured. | 1802 // reconfigured. |
| 1805 TEST_F(WebRtcVideoChannel2Test, SetIdenticalOptionsDoesntReconfigureEncoder) { | 1803 TEST_F(WebRtcVideoChannel2Test, SetIdenticalOptionsDoesntReconfigureEncoder) { |
| 1806 VideoOptions options; | 1804 VideoOptions options; |
| 1807 cricket::FakeVideoCapturer capturer; | 1805 cricket::FakeVideoCapturer capturer; |
| 1808 | 1806 |
| 1809 FakeVideoSendStream* send_stream = AddSendStream(); | 1807 FakeVideoSendStream* send_stream = AddSendStream(); |
| 1810 EXPECT_EQ(cricket::CS_RUNNING, | 1808 EXPECT_EQ(cricket::CS_RUNNING, |
| 1811 capturer.Start(capturer.GetSupportedFormats()->front())); | 1809 capturer.Start(capturer.GetSupportedFormats()->front())); |
| 1810 cricket::VideoSendParameters parameters; |
| 1811 parameters.codecs.push_back(kVp8Codec720p); |
| 1812 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
| 1813 |
| 1814 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); |
| 1812 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); | 1815 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); |
| 1813 EXPECT_TRUE(capturer.CaptureFrame()); | 1816 EXPECT_TRUE(capturer.CaptureFrame()); |
| 1814 // Expect 2 reconfigurations at this point, from the initial configuration | 1817 // Expect 1 reconfigurations at this point from the initial configuration. |
| 1815 // and from the dimensions of the first frame. | 1818 EXPECT_EQ(1, send_stream->num_encoder_reconfigurations()); |
| 1816 EXPECT_EQ(2, send_stream->num_encoder_reconfigurations()); | |
| 1817 | 1819 |
| 1818 // Set the options one more time and expect no additional reconfigurations. | 1820 // Set the options one more time and expect no additional reconfigurations. |
| 1819 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); | 1821 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); |
| 1820 EXPECT_TRUE(capturer.CaptureFrame()); | 1822 EXPECT_EQ(1, send_stream->num_encoder_reconfigurations()); |
| 1823 |
| 1824 // Change |options| and expect 2 reconfigurations. |
| 1825 options.is_screencast = rtc::Optional<bool>(true); |
| 1826 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); |
| 1821 EXPECT_EQ(2, send_stream->num_encoder_reconfigurations()); | 1827 EXPECT_EQ(2, send_stream->num_encoder_reconfigurations()); |
| 1822 | 1828 |
| 1823 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 1829 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
| 1824 } | 1830 } |
| 1825 | 1831 |
| 1826 class Vp9SettingsTest : public WebRtcVideoChannel2Test { | 1832 class Vp9SettingsTest : public WebRtcVideoChannel2Test { |
| 1827 public: | 1833 public: |
| 1828 Vp9SettingsTest() : Vp9SettingsTest("") {} | 1834 Vp9SettingsTest() : Vp9SettingsTest("") {} |
| 1829 explicit Vp9SettingsTest(const char* field_trials) | 1835 explicit Vp9SettingsTest(const char* field_trials) |
| 1830 : WebRtcVideoChannel2Test(field_trials) { | 1836 : WebRtcVideoChannel2Test(field_trials) { |
| (...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2303 ASSERT_TRUE(channel_->SetSendParameters(parameters)); | 2309 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
| 2304 stream = fake_call_->GetVideoSendStreams()[0]; | 2310 stream = fake_call_->GetVideoSendStreams()[0]; |
| 2305 ASSERT_TRUE(stream != NULL); | 2311 ASSERT_TRUE(stream != NULL); |
| 2306 config = stream->GetConfig().Copy(); | 2312 config = stream->GetConfig().Copy(); |
| 2307 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type) | 2313 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type) |
| 2308 << "SetSendCodec without FEC should disable current FEC."; | 2314 << "SetSendCodec without FEC should disable current FEC."; |
| 2309 } | 2315 } |
| 2310 | 2316 |
| 2311 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) { | 2317 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) { |
| 2312 cricket::VideoSendParameters parameters; | 2318 cricket::VideoSendParameters parameters; |
| 2313 parameters.codecs.push_back(kVp8Codec720p); | 2319 cricket::VideoCodec codec720p(100, "VP8", 1280, 720, 30); |
| 2320 codec720p.SetParam(kCodecParamMaxQuantization, kDefaultQpMax); |
| 2321 parameters.codecs.push_back(codec720p); |
| 2322 |
| 2314 ASSERT_TRUE(channel_->SetSendParameters(parameters)); | 2323 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
| 2315 channel_->SetSend(true); | 2324 channel_->SetSend(true); |
| 2316 | 2325 |
| 2317 FakeVideoSendStream* stream = AddSendStream(); | 2326 FakeVideoSendStream* stream = AddSendStream(); |
| 2318 | |
| 2319 cricket::FakeVideoCapturer capturer; | 2327 cricket::FakeVideoCapturer capturer; |
| 2320 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); | 2328 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); |
| 2321 EXPECT_EQ(cricket::CS_RUNNING, | |
| 2322 capturer.Start(capturer.GetSupportedFormats()->front())); | |
| 2323 EXPECT_TRUE(capturer.CaptureFrame()); | |
| 2324 | 2329 |
| 2325 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); | 2330 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); |
| 2326 EXPECT_EQ(kVp8Codec720p.width, streams[0].width); | 2331 EXPECT_EQ(kDefaultQpMax, streams[0].max_qp); |
| 2327 EXPECT_EQ(kVp8Codec720p.height, streams[0].height); | |
| 2328 | 2332 |
| 2329 parameters.codecs.clear(); | 2333 parameters.codecs.clear(); |
| 2330 parameters.codecs.push_back(kVp8Codec360p); | 2334 codec720p.SetParam(kCodecParamMaxQuantization, kDefaultQpMax + 1); |
| 2335 parameters.codecs.push_back(codec720p); |
| 2331 ASSERT_TRUE(channel_->SetSendParameters(parameters)); | 2336 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
| 2332 streams = fake_call_->GetVideoSendStreams()[0]->GetVideoStreams(); | 2337 streams = stream->GetVideoStreams(); |
| 2333 EXPECT_EQ(kVp8Codec360p.width, streams[0].width); | 2338 EXPECT_EQ(kDefaultQpMax + 1, streams[0].max_qp); |
| 2334 EXPECT_EQ(kVp8Codec360p.height, streams[0].height); | |
| 2335 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 2339 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
| 2336 } | 2340 } |
| 2337 | 2341 |
| 2338 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) { | 2342 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) { |
| 2339 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", | 2343 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", |
| 2340 200000); | 2344 200000); |
| 2341 } | 2345 } |
| 2342 | 2346 |
| 2343 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) { | 2347 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) { |
| 2344 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); | 2348 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); |
| (...skipping 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3409 AddSendStream(); | 3413 AddSendStream(); |
| 3410 | 3414 |
| 3411 cricket::FakeVideoCapturer capturer; | 3415 cricket::FakeVideoCapturer capturer; |
| 3412 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); | 3416 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); |
| 3413 cricket::VideoFormat capture_format_hd = | 3417 cricket::VideoFormat capture_format_hd = |
| 3414 capturer.GetSupportedFormats()->front(); | 3418 capturer.GetSupportedFormats()->front(); |
| 3415 EXPECT_EQ(1280, capture_format_hd.width); | 3419 EXPECT_EQ(1280, capture_format_hd.width); |
| 3416 EXPECT_EQ(720, capture_format_hd.height); | 3420 EXPECT_EQ(720, capture_format_hd.height); |
| 3417 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); | 3421 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); |
| 3418 EXPECT_TRUE(channel_->SetSend(true)); | 3422 EXPECT_TRUE(channel_->SetSend(true)); |
| 3423 capturer.CaptureFrame(); |
| 3419 | 3424 |
| 3420 int default_encoder_bitrate = GetMaxEncoderBitrate(capturer); | 3425 int default_encoder_bitrate = GetMaxEncoderBitrate(); |
| 3421 EXPECT_TRUE(default_encoder_bitrate > 1000); | 3426 EXPECT_TRUE(default_encoder_bitrate > 1000); |
| 3422 | 3427 |
| 3423 // TODO(skvlad): Resolve the inconsistency between the interpretation | 3428 // TODO(skvlad): Resolve the inconsistency between the interpretation |
| 3424 // of the global bitrate limit for audio and video: | 3429 // of the global bitrate limit for audio and video: |
| 3425 // - Audio: max_bandwidth_bps = 0 - fail the operation, | 3430 // - Audio: max_bandwidth_bps = 0 - fail the operation, |
| 3426 // max_bandwidth_bps = -1 - remove the bandwidth limit | 3431 // max_bandwidth_bps = -1 - remove the bandwidth limit |
| 3427 // - Video: max_bandwidth_bps = 0 - remove the bandwidth limit, | 3432 // - Video: max_bandwidth_bps = 0 - remove the bandwidth limit, |
| 3428 // max_bandwidth_bps = -1 - do not change the previously set | 3433 // max_bandwidth_bps = -1 - do not change the previously set |
| 3429 // limit. | 3434 // limit. |
| 3430 | 3435 |
| 3431 SetAndExpectMaxBitrate(capturer, 1000, 0, 1000); | 3436 SetAndExpectMaxBitrate(1000, 0, 1000); |
| 3432 SetAndExpectMaxBitrate(capturer, 1000, 800, 800); | 3437 SetAndExpectMaxBitrate(1000, 800, 800); |
| 3433 SetAndExpectMaxBitrate(capturer, 600, 800, 600); | 3438 SetAndExpectMaxBitrate(600, 800, 600); |
| 3434 SetAndExpectMaxBitrate(capturer, 0, 800, 800); | 3439 SetAndExpectMaxBitrate(0, 800, 800); |
| 3435 SetAndExpectMaxBitrate(capturer, 0, 0, default_encoder_bitrate); | 3440 SetAndExpectMaxBitrate(0, 0, default_encoder_bitrate); |
| 3436 | 3441 |
| 3437 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); | 3442 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); |
| 3438 } | 3443 } |
| 3439 | 3444 |
| 3440 TEST_F(WebRtcVideoChannel2Test, CannotSetMaxBitrateForNonexistentStream) { | 3445 TEST_F(WebRtcVideoChannel2Test, CannotSetMaxBitrateForNonexistentStream) { |
| 3441 webrtc::RtpParameters nonexistent_parameters = | 3446 webrtc::RtpParameters nonexistent_parameters = |
| 3442 channel_->GetRtpSendParameters(last_ssrc_); | 3447 channel_->GetRtpSendParameters(last_ssrc_); |
| 3443 EXPECT_EQ(0, nonexistent_parameters.encodings.size()); | 3448 EXPECT_EQ(0, nonexistent_parameters.encodings.size()); |
| 3444 | 3449 |
| 3445 nonexistent_parameters.encodings.push_back(webrtc::RtpEncodingParameters()); | 3450 nonexistent_parameters.encodings.push_back(webrtc::RtpEncodingParameters()); |
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3831 } | 3836 } |
| 3832 | 3837 |
| 3833 // Test that we normalize send codec format size in simulcast. | 3838 // Test that we normalize send codec format size in simulcast. |
| 3834 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { | 3839 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { |
| 3835 cricket::VideoCodec codec(kVp8Codec270p); | 3840 cricket::VideoCodec codec(kVp8Codec270p); |
| 3836 codec.width += 1; | 3841 codec.width += 1; |
| 3837 codec.height += 1; | 3842 codec.height += 1; |
| 3838 VerifySimulcastSettings(codec, 2, 2); | 3843 VerifySimulcastSettings(codec, 2, 2); |
| 3839 } | 3844 } |
| 3840 } // namespace cricket | 3845 } // namespace cricket |
| OLD | NEW |