| OLD | NEW |
| 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> | 10 #include <algorithm> |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 void ReceivesPliAndRecovers(int rtp_history_ms); | 75 void ReceivesPliAndRecovers(int rtp_history_ms); |
| 76 void RespectsRtcpMode(newapi::RtcpMode rtcp_mode); | 76 void RespectsRtcpMode(newapi::RtcpMode rtcp_mode); |
| 77 void TestXrReceiverReferenceTimeReport(bool enable_rrtr); | 77 void TestXrReceiverReferenceTimeReport(bool enable_rrtr); |
| 78 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); | 78 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); |
| 79 void TestRtpStatePreservation(bool use_rtx); | 79 void TestRtpStatePreservation(bool use_rtx); |
| 80 void TestReceivedFecPacketsNotNacked(const FakeNetworkPipe::Config& config); | 80 void TestReceivedFecPacketsNotNacked(const FakeNetworkPipe::Config& config); |
| 81 void VerifyHistogramStats(bool use_rtx, bool use_red); | 81 void VerifyHistogramStats(bool use_rtx, bool use_red); |
| 82 }; | 82 }; |
| 83 | 83 |
| 84 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { | 84 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { |
| 85 CreateCalls(Call::Config(), Call::Config()); |
| 86 |
| 85 test::NullTransport transport; | 87 test::NullTransport transport; |
| 86 CreateCalls(Call::Config(&transport), Call::Config(&transport)); | 88 CreateSendConfig(1, &transport); |
| 87 | 89 CreateMatchingReceiveConfigs(&transport); |
| 88 CreateSendConfig(1); | |
| 89 CreateMatchingReceiveConfigs(); | |
| 90 | 90 |
| 91 CreateStreams(); | 91 CreateStreams(); |
| 92 | 92 |
| 93 receive_streams_[0]->Start(); | 93 receive_streams_[0]->Start(); |
| 94 receive_streams_[0]->Start(); | 94 receive_streams_[0]->Start(); |
| 95 | 95 |
| 96 DestroyStreams(); | 96 DestroyStreams(); |
| 97 } | 97 } |
| 98 | 98 |
| 99 TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) { | 99 TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) { |
| 100 CreateCalls(Call::Config(), Call::Config()); |
| 101 |
| 100 test::NullTransport transport; | 102 test::NullTransport transport; |
| 101 CreateCalls(Call::Config(&transport), Call::Config(&transport)); | 103 CreateSendConfig(1, &transport); |
| 102 | 104 CreateMatchingReceiveConfigs(&transport); |
| 103 CreateSendConfig(1); | |
| 104 CreateMatchingReceiveConfigs(); | |
| 105 | 105 |
| 106 CreateStreams(); | 106 CreateStreams(); |
| 107 | 107 |
| 108 receive_streams_[0]->Stop(); | 108 receive_streams_[0]->Stop(); |
| 109 receive_streams_[0]->Stop(); | 109 receive_streams_[0]->Stop(); |
| 110 | 110 |
| 111 DestroyStreams(); | 111 DestroyStreams(); |
| 112 } | 112 } |
| 113 | 113 |
| 114 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { | 114 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 143 | 143 |
| 144 private: | 144 private: |
| 145 void FrameCallback(VideoFrame* frame) override { | 145 void FrameCallback(VideoFrame* frame) override { |
| 146 SleepMs(kDelayRenderCallbackMs); | 146 SleepMs(kDelayRenderCallbackMs); |
| 147 event_->Set(); | 147 event_->Set(); |
| 148 } | 148 } |
| 149 | 149 |
| 150 rtc::scoped_ptr<EventWrapper> event_; | 150 rtc::scoped_ptr<EventWrapper> event_; |
| 151 }; | 151 }; |
| 152 | 152 |
| 153 CreateCalls(Call::Config(), Call::Config()); |
| 154 |
| 153 test::DirectTransport sender_transport, receiver_transport; | 155 test::DirectTransport sender_transport, receiver_transport; |
| 154 | |
| 155 CreateCalls(Call::Config(&sender_transport), | |
| 156 Call::Config(&receiver_transport)); | |
| 157 | |
| 158 sender_transport.SetReceiver(receiver_call_->Receiver()); | 156 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 159 receiver_transport.SetReceiver(sender_call_->Receiver()); | 157 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 160 | 158 |
| 161 CreateSendConfig(1); | 159 CreateSendConfig(1, &sender_transport); |
| 162 CreateMatchingReceiveConfigs(); | 160 CreateMatchingReceiveConfigs(&receiver_transport); |
| 163 | 161 |
| 164 TestFrameCallback pre_render_callback; | 162 TestFrameCallback pre_render_callback; |
| 165 receive_configs_[0].pre_render_callback = &pre_render_callback; | 163 receive_configs_[0].pre_render_callback = &pre_render_callback; |
| 166 receive_configs_[0].renderer = &renderer; | 164 receive_configs_[0].renderer = &renderer; |
| 167 | 165 |
| 168 CreateStreams(); | 166 CreateStreams(); |
| 169 Start(); | 167 Start(); |
| 170 | 168 |
| 171 // Create frames that are smaller than the send width/height, this is done to | 169 // Create frames that are smaller than the send width/height, this is done to |
| 172 // check that the callbacks are done after processing video. | 170 // check that the callbacks are done after processing video. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 195 int /*time_to_render_ms*/) override { | 193 int /*time_to_render_ms*/) override { |
| 196 event_->Set(); | 194 event_->Set(); |
| 197 } | 195 } |
| 198 bool IsTextureSupported() const override { return false; } | 196 bool IsTextureSupported() const override { return false; } |
| 199 | 197 |
| 200 EventTypeWrapper Wait() { return event_->Wait(kDefaultTimeoutMs); } | 198 EventTypeWrapper Wait() { return event_->Wait(kDefaultTimeoutMs); } |
| 201 | 199 |
| 202 rtc::scoped_ptr<EventWrapper> event_; | 200 rtc::scoped_ptr<EventWrapper> event_; |
| 203 } renderer; | 201 } renderer; |
| 204 | 202 |
| 203 CreateCalls(Call::Config(), Call::Config()); |
| 204 |
| 205 test::DirectTransport sender_transport, receiver_transport; | 205 test::DirectTransport sender_transport, receiver_transport; |
| 206 | |
| 207 CreateCalls(Call::Config(&sender_transport), | |
| 208 Call::Config(&receiver_transport)); | |
| 209 | |
| 210 sender_transport.SetReceiver(receiver_call_->Receiver()); | 206 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 211 receiver_transport.SetReceiver(sender_call_->Receiver()); | 207 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 212 | 208 |
| 213 CreateSendConfig(1); | 209 CreateSendConfig(1, &sender_transport); |
| 214 CreateMatchingReceiveConfigs(); | 210 CreateMatchingReceiveConfigs(&receiver_transport); |
| 215 receive_configs_[0].renderer = &renderer; | 211 receive_configs_[0].renderer = &renderer; |
| 216 | 212 |
| 217 CreateStreams(); | 213 CreateStreams(); |
| 218 Start(); | 214 Start(); |
| 219 | 215 |
| 220 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 216 rtc::scoped_ptr<test::FrameGenerator> frame_generator( |
| 221 test::FrameGenerator::CreateChromaGenerator( | 217 test::FrameGenerator::CreateChromaGenerator( |
| 222 encoder_config_.streams[0].width, encoder_config_.streams[0].height)); | 218 encoder_config_.streams[0].width, encoder_config_.streams[0].height)); |
| 223 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); | 219 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); |
| 224 | 220 |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 nacks.begin(), nacks.end(), fec_sequence_number_) == nacks.end()); | 630 nacks.begin(), nacks.end(), fec_sequence_number_) == nacks.end()); |
| 635 observation_complete_->Set(); | 631 observation_complete_->Set(); |
| 636 } | 632 } |
| 637 } | 633 } |
| 638 return SEND_PACKET; | 634 return SEND_PACKET; |
| 639 } | 635 } |
| 640 | 636 |
| 641 // TODO(holmer): Investigate why we don't send FEC packets when the bitrate | 637 // TODO(holmer): Investigate why we don't send FEC packets when the bitrate |
| 642 // is 10 kbps. | 638 // is 10 kbps. |
| 643 Call::Config GetSenderCallConfig() override { | 639 Call::Config GetSenderCallConfig() override { |
| 644 Call::Config config(SendTransport()); | 640 Call::Config config; |
| 645 const int kMinBitrateBps = 30000; | 641 const int kMinBitrateBps = 30000; |
| 646 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; | 642 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; |
| 647 return config; | 643 return config; |
| 648 } | 644 } |
| 649 | 645 |
| 650 void ModifyConfigs(VideoSendStream::Config* send_config, | 646 void ModifyConfigs(VideoSendStream::Config* send_config, |
| 651 std::vector<VideoReceiveStream::Config>* receive_configs, | 647 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 652 VideoEncoderConfig* encoder_config) override { | 648 VideoEncoderConfig* encoder_config) override { |
| 653 // Configure hybrid NACK/FEC. | 649 // Configure hybrid NACK/FEC. |
| 654 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 650 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 840 } | 836 } |
| 841 | 837 |
| 842 rtc::scoped_ptr<EventWrapper> event_; | 838 rtc::scoped_ptr<EventWrapper> event_; |
| 843 int expected_luma_byte_; | 839 int expected_luma_byte_; |
| 844 int next_luma_byte_; | 840 int next_luma_byte_; |
| 845 }; | 841 }; |
| 846 | 842 |
| 847 TestFrameCallback pre_encode_callback(-1, 255); // Changes luma to 255. | 843 TestFrameCallback pre_encode_callback(-1, 255); // Changes luma to 255. |
| 848 TestFrameCallback pre_render_callback(255, 0); // Changes luma from 255 to 0. | 844 TestFrameCallback pre_render_callback(255, 0); // Changes luma from 255 to 0. |
| 849 | 845 |
| 846 CreateCalls(Call::Config(), Call::Config()); |
| 847 |
| 850 test::DirectTransport sender_transport, receiver_transport; | 848 test::DirectTransport sender_transport, receiver_transport; |
| 851 | |
| 852 CreateCalls(Call::Config(&sender_transport), | |
| 853 Call::Config(&receiver_transport)); | |
| 854 | |
| 855 sender_transport.SetReceiver(receiver_call_->Receiver()); | 849 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 856 receiver_transport.SetReceiver(sender_call_->Receiver()); | 850 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 857 | 851 |
| 858 CreateSendConfig(1); | 852 CreateSendConfig(1, &sender_transport); |
| 859 rtc::scoped_ptr<VideoEncoder> encoder( | 853 rtc::scoped_ptr<VideoEncoder> encoder( |
| 860 VideoEncoder::Create(VideoEncoder::kVp8)); | 854 VideoEncoder::Create(VideoEncoder::kVp8)); |
| 861 send_config_.encoder_settings.encoder = encoder.get(); | 855 send_config_.encoder_settings.encoder = encoder.get(); |
| 862 send_config_.encoder_settings.payload_name = "VP8"; | 856 send_config_.encoder_settings.payload_name = "VP8"; |
| 863 ASSERT_EQ(1u, encoder_config_.streams.size()) << "Test setup error."; | 857 ASSERT_EQ(1u, encoder_config_.streams.size()) << "Test setup error."; |
| 864 encoder_config_.streams[0].width = kWidth; | 858 encoder_config_.streams[0].width = kWidth; |
| 865 encoder_config_.streams[0].height = kHeight; | 859 encoder_config_.streams[0].height = kHeight; |
| 866 send_config_.pre_encode_callback = &pre_encode_callback; | 860 send_config_.pre_encode_callback = &pre_encode_callback; |
| 867 | 861 |
| 868 CreateMatchingReceiveConfigs(); | 862 CreateMatchingReceiveConfigs(&receiver_transport); |
| 869 receive_configs_[0].pre_render_callback = &pre_render_callback; | 863 receive_configs_[0].pre_render_callback = &pre_render_callback; |
| 870 receive_configs_[0].renderer = &renderer; | 864 receive_configs_[0].renderer = &renderer; |
| 871 | 865 |
| 872 CreateStreams(); | 866 CreateStreams(); |
| 873 Start(); | 867 Start(); |
| 874 | 868 |
| 875 // Create frames that are smaller than the send width/height, this is done to | 869 // Create frames that are smaller than the send width/height, this is done to |
| 876 // check that the callbacks are done after processing video. | 870 // check that the callbacks are done after processing video. |
| 877 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 871 rtc::scoped_ptr<test::FrameGenerator> frame_generator( |
| 878 test::FrameGenerator::CreateChromaGenerator(kWidth / 2, kHeight / 2)); | 872 test::FrameGenerator::CreateChromaGenerator(kWidth / 2, kHeight / 2)); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1009 EXPECT_EQ(DELIVERY_UNKNOWN_SSRC, delivery_status); | 1003 EXPECT_EQ(DELIVERY_UNKNOWN_SSRC, delivery_status); |
| 1010 delivered_packet_->Set(); | 1004 delivered_packet_->Set(); |
| 1011 return delivery_status; | 1005 return delivery_status; |
| 1012 } | 1006 } |
| 1013 } | 1007 } |
| 1014 | 1008 |
| 1015 PacketReceiver* receiver_; | 1009 PacketReceiver* receiver_; |
| 1016 rtc::scoped_ptr<EventWrapper> delivered_packet_; | 1010 rtc::scoped_ptr<EventWrapper> delivered_packet_; |
| 1017 }; | 1011 }; |
| 1018 | 1012 |
| 1013 CreateCalls(Call::Config(), Call::Config()); |
| 1014 |
| 1019 test::DirectTransport send_transport, receive_transport; | 1015 test::DirectTransport send_transport, receive_transport; |
| 1020 | |
| 1021 CreateCalls(Call::Config(&send_transport), Call::Config(&receive_transport)); | |
| 1022 PacketInputObserver input_observer(receiver_call_->Receiver()); | 1016 PacketInputObserver input_observer(receiver_call_->Receiver()); |
| 1023 | |
| 1024 send_transport.SetReceiver(&input_observer); | 1017 send_transport.SetReceiver(&input_observer); |
| 1025 receive_transport.SetReceiver(sender_call_->Receiver()); | 1018 receive_transport.SetReceiver(sender_call_->Receiver()); |
| 1026 | 1019 |
| 1027 CreateSendConfig(1); | 1020 CreateSendConfig(1, &send_transport); |
| 1028 CreateMatchingReceiveConfigs(); | 1021 CreateMatchingReceiveConfigs(&receive_transport); |
| 1029 | 1022 |
| 1030 CreateStreams(); | 1023 CreateStreams(); |
| 1031 CreateFrameGeneratorCapturer(); | 1024 CreateFrameGeneratorCapturer(); |
| 1032 Start(); | 1025 Start(); |
| 1033 | 1026 |
| 1034 receiver_call_->DestroyVideoReceiveStream(receive_streams_[0]); | 1027 receiver_call_->DestroyVideoReceiveStream(receive_streams_[0]); |
| 1035 receive_streams_.clear(); | 1028 receive_streams_.clear(); |
| 1036 | 1029 |
| 1037 // Wait() waits for a received packet. | 1030 // Wait() waits for a received packet. |
| 1038 EXPECT_EQ(kEventSignaled, input_observer.Wait()); | 1031 EXPECT_EQ(kEventSignaled, input_observer.Wait()); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1150 } | 1143 } |
| 1151 | 1144 |
| 1152 virtual ~MultiStreamTest() {} | 1145 virtual ~MultiStreamTest() {} |
| 1153 | 1146 |
| 1154 void RunTest() { | 1147 void RunTest() { |
| 1155 rtc::scoped_ptr<test::DirectTransport> sender_transport( | 1148 rtc::scoped_ptr<test::DirectTransport> sender_transport( |
| 1156 CreateSendTransport()); | 1149 CreateSendTransport()); |
| 1157 rtc::scoped_ptr<test::DirectTransport> receiver_transport( | 1150 rtc::scoped_ptr<test::DirectTransport> receiver_transport( |
| 1158 CreateReceiveTransport()); | 1151 CreateReceiveTransport()); |
| 1159 | 1152 |
| 1160 rtc::scoped_ptr<Call> sender_call( | 1153 rtc::scoped_ptr<Call> sender_call(Call::Create(Call::Config())); |
| 1161 Call::Create(Call::Config(sender_transport.get()))); | 1154 rtc::scoped_ptr<Call> receiver_call(Call::Create(Call::Config())); |
| 1162 rtc::scoped_ptr<Call> receiver_call( | |
| 1163 Call::Create(Call::Config(receiver_transport.get()))); | |
| 1164 sender_transport->SetReceiver(receiver_call->Receiver()); | 1155 sender_transport->SetReceiver(receiver_call->Receiver()); |
| 1165 receiver_transport->SetReceiver(sender_call->Receiver()); | 1156 receiver_transport->SetReceiver(sender_call->Receiver()); |
| 1166 | 1157 |
| 1167 rtc::scoped_ptr<VideoEncoder> encoders[kNumStreams]; | 1158 rtc::scoped_ptr<VideoEncoder> encoders[kNumStreams]; |
| 1168 for (size_t i = 0; i < kNumStreams; ++i) | 1159 for (size_t i = 0; i < kNumStreams; ++i) |
| 1169 encoders[i].reset(VideoEncoder::Create(VideoEncoder::kVp8)); | 1160 encoders[i].reset(VideoEncoder::Create(VideoEncoder::kVp8)); |
| 1170 | 1161 |
| 1171 VideoSendStream* send_streams[kNumStreams]; | 1162 VideoSendStream* send_streams[kNumStreams]; |
| 1172 VideoReceiveStream* receive_streams[kNumStreams]; | 1163 VideoReceiveStream* receive_streams[kNumStreams]; |
| 1173 | 1164 |
| 1174 test::FrameGeneratorCapturer* frame_generators[kNumStreams]; | 1165 test::FrameGeneratorCapturer* frame_generators[kNumStreams]; |
| 1175 ScopedVector<VideoDecoder> allocated_decoders; | 1166 ScopedVector<VideoDecoder> allocated_decoders; |
| 1176 for (size_t i = 0; i < kNumStreams; ++i) { | 1167 for (size_t i = 0; i < kNumStreams; ++i) { |
| 1177 uint32_t ssrc = codec_settings[i].ssrc; | 1168 uint32_t ssrc = codec_settings[i].ssrc; |
| 1178 int width = codec_settings[i].width; | 1169 int width = codec_settings[i].width; |
| 1179 int height = codec_settings[i].height; | 1170 int height = codec_settings[i].height; |
| 1180 | 1171 |
| 1181 VideoSendStream::Config send_config; | 1172 VideoSendStream::Config send_config(sender_transport.get()); |
| 1182 send_config.rtp.ssrcs.push_back(ssrc); | 1173 send_config.rtp.ssrcs.push_back(ssrc); |
| 1183 send_config.encoder_settings.encoder = encoders[i].get(); | 1174 send_config.encoder_settings.encoder = encoders[i].get(); |
| 1184 send_config.encoder_settings.payload_name = "VP8"; | 1175 send_config.encoder_settings.payload_name = "VP8"; |
| 1185 send_config.encoder_settings.payload_type = 124; | 1176 send_config.encoder_settings.payload_type = 124; |
| 1186 VideoEncoderConfig encoder_config; | 1177 VideoEncoderConfig encoder_config; |
| 1187 encoder_config.streams = test::CreateVideoStreams(1); | 1178 encoder_config.streams = test::CreateVideoStreams(1); |
| 1188 VideoStream* stream = &encoder_config.streams[0]; | 1179 VideoStream* stream = &encoder_config.streams[0]; |
| 1189 stream->width = width; | 1180 stream->width = width; |
| 1190 stream->height = height; | 1181 stream->height = height; |
| 1191 stream->max_framerate = 5; | 1182 stream->max_framerate = 5; |
| 1192 stream->min_bitrate_bps = stream->target_bitrate_bps = | 1183 stream->min_bitrate_bps = stream->target_bitrate_bps = |
| 1193 stream->max_bitrate_bps = 100000; | 1184 stream->max_bitrate_bps = 100000; |
| 1194 | 1185 |
| 1195 UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]); | 1186 UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]); |
| 1196 | 1187 |
| 1197 send_streams[i] = | 1188 send_streams[i] = |
| 1198 sender_call->CreateVideoSendStream(send_config, encoder_config); | 1189 sender_call->CreateVideoSendStream(send_config, encoder_config); |
| 1199 send_streams[i]->Start(); | 1190 send_streams[i]->Start(); |
| 1200 | 1191 |
| 1201 VideoReceiveStream::Config receive_config; | 1192 VideoReceiveStream::Config receive_config(receiver_transport.get()); |
| 1202 receive_config.rtp.remote_ssrc = ssrc; | 1193 receive_config.rtp.remote_ssrc = ssrc; |
| 1203 receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalSsrc; | 1194 receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalSsrc; |
| 1204 VideoReceiveStream::Decoder decoder = | 1195 VideoReceiveStream::Decoder decoder = |
| 1205 test::CreateMatchingDecoder(send_config.encoder_settings); | 1196 test::CreateMatchingDecoder(send_config.encoder_settings); |
| 1206 allocated_decoders.push_back(decoder.decoder); | 1197 allocated_decoders.push_back(decoder.decoder); |
| 1207 receive_config.decoders.push_back(decoder); | 1198 receive_config.decoders.push_back(decoder); |
| 1208 | 1199 |
| 1209 UpdateReceiveConfig(i, &receive_config); | 1200 UpdateReceiveConfig(i, &receive_config); |
| 1210 | 1201 |
| 1211 receive_streams[i] = | 1202 receive_streams[i] = |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1470 private: | 1461 private: |
| 1471 rtc::scoped_ptr<uint8_t[]> buffer_; | 1462 rtc::scoped_ptr<uint8_t[]> buffer_; |
| 1472 size_t length_; | 1463 size_t length_; |
| 1473 FrameType frame_type_; | 1464 FrameType frame_type_; |
| 1474 rtc::scoped_ptr<EventWrapper> called_; | 1465 rtc::scoped_ptr<EventWrapper> called_; |
| 1475 }; | 1466 }; |
| 1476 | 1467 |
| 1477 EncodedFrameTestObserver post_encode_observer; | 1468 EncodedFrameTestObserver post_encode_observer; |
| 1478 EncodedFrameTestObserver pre_decode_observer; | 1469 EncodedFrameTestObserver pre_decode_observer; |
| 1479 | 1470 |
| 1471 CreateCalls(Call::Config(), Call::Config()); |
| 1472 |
| 1480 test::DirectTransport sender_transport, receiver_transport; | 1473 test::DirectTransport sender_transport, receiver_transport; |
| 1481 | |
| 1482 CreateCalls(Call::Config(&sender_transport), | |
| 1483 Call::Config(&receiver_transport)); | |
| 1484 | |
| 1485 sender_transport.SetReceiver(receiver_call_->Receiver()); | 1474 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 1486 receiver_transport.SetReceiver(sender_call_->Receiver()); | 1475 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 1487 | 1476 |
| 1488 CreateSendConfig(1); | 1477 CreateSendConfig(1, &sender_transport); |
| 1489 CreateMatchingReceiveConfigs(); | 1478 CreateMatchingReceiveConfigs(&receiver_transport); |
| 1490 send_config_.post_encode_callback = &post_encode_observer; | 1479 send_config_.post_encode_callback = &post_encode_observer; |
| 1491 receive_configs_[0].pre_decode_callback = &pre_decode_observer; | 1480 receive_configs_[0].pre_decode_callback = &pre_decode_observer; |
| 1492 | 1481 |
| 1493 CreateStreams(); | 1482 CreateStreams(); |
| 1494 Start(); | 1483 Start(); |
| 1495 | 1484 |
| 1496 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 1485 rtc::scoped_ptr<test::FrameGenerator> frame_generator( |
| 1497 test::FrameGenerator::CreateChromaGenerator( | 1486 test::FrameGenerator::CreateChromaGenerator( |
| 1498 encoder_config_.streams[0].width, encoder_config_.streams[0].height)); | 1487 encoder_config_.streams[0].width, encoder_config_.streams[0].height)); |
| 1499 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); | 1488 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); |
| (...skipping 1111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2611 | 2600 |
| 2612 std::map<uint32_t, uint16_t> last_observed_sequence_number_; | 2601 std::map<uint32_t, uint16_t> last_observed_sequence_number_; |
| 2613 std::map<uint32_t, uint32_t> last_observed_timestamp_; | 2602 std::map<uint32_t, uint32_t> last_observed_timestamp_; |
| 2614 std::map<uint32_t, bool> configured_ssrcs_; | 2603 std::map<uint32_t, bool> configured_ssrcs_; |
| 2615 | 2604 |
| 2616 rtc::CriticalSection crit_; | 2605 rtc::CriticalSection crit_; |
| 2617 size_t ssrcs_to_observe_ GUARDED_BY(crit_); | 2606 size_t ssrcs_to_observe_ GUARDED_BY(crit_); |
| 2618 std::map<uint32_t, bool> ssrc_observed_ GUARDED_BY(crit_); | 2607 std::map<uint32_t, bool> ssrc_observed_ GUARDED_BY(crit_); |
| 2619 } observer(use_rtx); | 2608 } observer(use_rtx); |
| 2620 | 2609 |
| 2621 CreateCalls(Call::Config(observer.SendTransport()), | 2610 CreateCalls(Call::Config(), Call::Config()); |
| 2622 Call::Config(observer.ReceiveTransport())); | |
| 2623 observer.SetReceivers(sender_call_->Receiver(), nullptr); | 2611 observer.SetReceivers(sender_call_->Receiver(), nullptr); |
| 2624 | 2612 |
| 2625 CreateSendConfig(kNumSsrcs); | 2613 CreateSendConfig(kNumSsrcs, observer.SendTransport()); |
| 2626 | 2614 |
| 2627 if (use_rtx) { | 2615 if (use_rtx) { |
| 2628 for (size_t i = 0; i < kNumSsrcs; ++i) { | 2616 for (size_t i = 0; i < kNumSsrcs; ++i) { |
| 2629 send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]); | 2617 send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]); |
| 2630 } | 2618 } |
| 2631 send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; | 2619 send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; |
| 2632 } | 2620 } |
| 2633 | 2621 |
| 2634 // Lower bitrates so that all streams send initially. | 2622 // Lower bitrates so that all streams send initially. |
| 2635 for (size_t i = 0; i < encoder_config_.streams.size(); ++i) { | 2623 for (size_t i = 0; i < encoder_config_.streams.size(); ++i) { |
| 2636 encoder_config_.streams[i].min_bitrate_bps = 10000; | 2624 encoder_config_.streams[i].min_bitrate_bps = 10000; |
| 2637 encoder_config_.streams[i].target_bitrate_bps = 15000; | 2625 encoder_config_.streams[i].target_bitrate_bps = 15000; |
| 2638 encoder_config_.streams[i].max_bitrate_bps = 20000; | 2626 encoder_config_.streams[i].max_bitrate_bps = 20000; |
| 2639 } | 2627 } |
| 2640 | 2628 |
| 2641 // Use the same total bitrates when sending a single stream to avoid lowering | 2629 // Use the same total bitrates when sending a single stream to avoid lowering |
| 2642 // the bitrate estimate and requiring a subsequent rampup. | 2630 // the bitrate estimate and requiring a subsequent rampup. |
| 2643 VideoEncoderConfig one_stream = encoder_config_; | 2631 VideoEncoderConfig one_stream = encoder_config_; |
| 2644 one_stream.streams.resize(1); | 2632 one_stream.streams.resize(1); |
| 2645 for (size_t i = 1; i < encoder_config_.streams.size(); ++i) { | 2633 for (size_t i = 1; i < encoder_config_.streams.size(); ++i) { |
| 2646 one_stream.streams.front().min_bitrate_bps += | 2634 one_stream.streams.front().min_bitrate_bps += |
| 2647 encoder_config_.streams[i].min_bitrate_bps; | 2635 encoder_config_.streams[i].min_bitrate_bps; |
| 2648 one_stream.streams.front().target_bitrate_bps += | 2636 one_stream.streams.front().target_bitrate_bps += |
| 2649 encoder_config_.streams[i].target_bitrate_bps; | 2637 encoder_config_.streams[i].target_bitrate_bps; |
| 2650 one_stream.streams.front().max_bitrate_bps += | 2638 one_stream.streams.front().max_bitrate_bps += |
| 2651 encoder_config_.streams[i].max_bitrate_bps; | 2639 encoder_config_.streams[i].max_bitrate_bps; |
| 2652 } | 2640 } |
| 2653 | 2641 |
| 2654 CreateMatchingReceiveConfigs(); | 2642 CreateMatchingReceiveConfigs(observer.ReceiveTransport()); |
| 2655 | 2643 |
| 2656 CreateStreams(); | 2644 CreateStreams(); |
| 2657 CreateFrameGeneratorCapturer(); | 2645 CreateFrameGeneratorCapturer(); |
| 2658 | 2646 |
| 2659 Start(); | 2647 Start(); |
| 2660 EXPECT_EQ(kEventSignaled, observer.Wait()) | 2648 EXPECT_EQ(kEventSignaled, observer.Wait()) |
| 2661 << "Timed out waiting for all SSRCs to send packets."; | 2649 << "Timed out waiting for all SSRCs to send packets."; |
| 2662 | 2650 |
| 2663 // Test stream resetting more than once to make sure that the state doesn't | 2651 // Test stream resetting more than once to make sure that the state doesn't |
| 2664 // get set once (this could be due to using std::map::insert for instance). | 2652 // get set once (this could be due to using std::map::insert for instance). |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2882 int down_frames_ GUARDED_BY(test_crit_); | 2870 int down_frames_ GUARDED_BY(test_crit_); |
| 2883 } test; | 2871 } test; |
| 2884 | 2872 |
| 2885 RunBaseTest(&test); | 2873 RunBaseTest(&test); |
| 2886 } | 2874 } |
| 2887 | 2875 |
| 2888 TEST_F(EndToEndTest, CallReportsRttForSender) { | 2876 TEST_F(EndToEndTest, CallReportsRttForSender) { |
| 2889 static const int kSendDelayMs = 30; | 2877 static const int kSendDelayMs = 30; |
| 2890 static const int kReceiveDelayMs = 70; | 2878 static const int kReceiveDelayMs = 70; |
| 2891 | 2879 |
| 2880 CreateCalls(Call::Config(), Call::Config()); |
| 2881 |
| 2892 FakeNetworkPipe::Config config; | 2882 FakeNetworkPipe::Config config; |
| 2893 config.queue_delay_ms = kSendDelayMs; | 2883 config.queue_delay_ms = kSendDelayMs; |
| 2894 test::DirectTransport sender_transport(config); | 2884 test::DirectTransport sender_transport(config); |
| 2895 config.queue_delay_ms = kReceiveDelayMs; | 2885 config.queue_delay_ms = kReceiveDelayMs; |
| 2896 test::DirectTransport receiver_transport(config); | 2886 test::DirectTransport receiver_transport(config); |
| 2897 | |
| 2898 CreateCalls(Call::Config(&sender_transport), | |
| 2899 Call::Config(&receiver_transport)); | |
| 2900 | |
| 2901 sender_transport.SetReceiver(receiver_call_->Receiver()); | 2887 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 2902 receiver_transport.SetReceiver(sender_call_->Receiver()); | 2888 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 2903 | 2889 |
| 2904 CreateSendConfig(1); | 2890 CreateSendConfig(1, &sender_transport); |
| 2905 CreateMatchingReceiveConfigs(); | 2891 CreateMatchingReceiveConfigs(&receiver_transport); |
| 2906 | 2892 |
| 2907 CreateStreams(); | 2893 CreateStreams(); |
| 2908 CreateFrameGeneratorCapturer(); | 2894 CreateFrameGeneratorCapturer(); |
| 2909 Start(); | 2895 Start(); |
| 2910 | 2896 |
| 2911 int64_t start_time_ms = clock_->TimeInMilliseconds(); | 2897 int64_t start_time_ms = clock_->TimeInMilliseconds(); |
| 2912 while (true) { | 2898 while (true) { |
| 2913 Call::Stats stats = sender_call_->GetStats(); | 2899 Call::Stats stats = sender_call_->GetStats(); |
| 2914 ASSERT_GE(start_time_ms + kDefaultTimeoutMs, | 2900 ASSERT_GE(start_time_ms + kDefaultTimeoutMs, |
| 2915 clock_->TimeInMilliseconds()) | 2901 clock_->TimeInMilliseconds()) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2931 UnusedEncoder() : FakeEncoder(Clock::GetRealTimeClock()) {} | 2917 UnusedEncoder() : FakeEncoder(Clock::GetRealTimeClock()) {} |
| 2932 int32_t Encode(const VideoFrame& input_image, | 2918 int32_t Encode(const VideoFrame& input_image, |
| 2933 const CodecSpecificInfo* codec_specific_info, | 2919 const CodecSpecificInfo* codec_specific_info, |
| 2934 const std::vector<VideoFrameType>* frame_types) override { | 2920 const std::vector<VideoFrameType>* frame_types) override { |
| 2935 ADD_FAILURE() << "Unexpected frame encode."; | 2921 ADD_FAILURE() << "Unexpected frame encode."; |
| 2936 return test::FakeEncoder::Encode( | 2922 return test::FakeEncoder::Encode( |
| 2937 input_image, codec_specific_info, frame_types); | 2923 input_image, codec_specific_info, frame_types); |
| 2938 } | 2924 } |
| 2939 }; | 2925 }; |
| 2940 | 2926 |
| 2941 UnusedTransport transport; | 2927 CreateSenderCall(Call::Config()); |
| 2942 CreateSenderCall(Call::Config(&transport)); | |
| 2943 sender_call_->SignalNetworkState(kNetworkDown); | 2928 sender_call_->SignalNetworkState(kNetworkDown); |
| 2944 | 2929 |
| 2945 CreateSendConfig(1); | 2930 UnusedTransport transport; |
| 2931 CreateSendConfig(1, &transport); |
| 2946 UnusedEncoder unused_encoder; | 2932 UnusedEncoder unused_encoder; |
| 2947 send_config_.encoder_settings.encoder = &unused_encoder; | 2933 send_config_.encoder_settings.encoder = &unused_encoder; |
| 2948 CreateStreams(); | 2934 CreateStreams(); |
| 2949 CreateFrameGeneratorCapturer(); | 2935 CreateFrameGeneratorCapturer(); |
| 2950 | 2936 |
| 2951 Start(); | 2937 Start(); |
| 2952 SleepMs(kSilenceTimeoutMs); | 2938 SleepMs(kSilenceTimeoutMs); |
| 2953 Stop(); | 2939 Stop(); |
| 2954 | 2940 |
| 2955 DestroyStreams(); | 2941 DestroyStreams(); |
| 2956 } | 2942 } |
| 2957 | 2943 |
| 2958 TEST_F(EndToEndTest, NewReceiveStreamsRespectNetworkDown) { | 2944 TEST_F(EndToEndTest, NewReceiveStreamsRespectNetworkDown) { |
| 2959 test::DirectTransport sender_transport; | 2945 CreateCalls(Call::Config(), Call::Config()); |
| 2960 CreateSenderCall(Call::Config(&sender_transport)); | |
| 2961 UnusedTransport transport; | |
| 2962 CreateReceiverCall(Call::Config(&transport)); | |
| 2963 sender_transport.SetReceiver(receiver_call_->Receiver()); | |
| 2964 | |
| 2965 receiver_call_->SignalNetworkState(kNetworkDown); | 2946 receiver_call_->SignalNetworkState(kNetworkDown); |
| 2966 | 2947 |
| 2967 CreateSendConfig(1); | 2948 test::DirectTransport sender_transport; |
| 2968 CreateMatchingReceiveConfigs(); | 2949 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 2950 CreateSendConfig(1, &sender_transport); |
| 2951 UnusedTransport transport; |
| 2952 CreateMatchingReceiveConfigs(&transport); |
| 2969 CreateStreams(); | 2953 CreateStreams(); |
| 2970 CreateFrameGeneratorCapturer(); | 2954 CreateFrameGeneratorCapturer(); |
| 2971 | 2955 |
| 2972 Start(); | 2956 Start(); |
| 2973 SleepMs(kSilenceTimeoutMs); | 2957 SleepMs(kSilenceTimeoutMs); |
| 2974 Stop(); | 2958 Stop(); |
| 2975 | 2959 |
| 2976 sender_transport.StopSending(); | 2960 sender_transport.StopSending(); |
| 2977 | 2961 |
| 2978 DestroyStreams(); | 2962 DestroyStreams(); |
| 2979 } | 2963 } |
| 2980 | 2964 |
| 2981 // TODO(pbos): Remove this regression test when VideoEngine is no longer used as | 2965 // TODO(pbos): Remove this regression test when VideoEngine is no longer used as |
| 2982 // a backend. This is to test that we hand channels back properly. | 2966 // a backend. This is to test that we hand channels back properly. |
| 2983 TEST_F(EndToEndTest, CanCreateAndDestroyManyVideoStreams) { | 2967 TEST_F(EndToEndTest, CanCreateAndDestroyManyVideoStreams) { |
| 2984 test::NullTransport transport; | 2968 test::NullTransport transport; |
| 2985 rtc::scoped_ptr<Call> call(Call::Create(Call::Config(&transport))); | 2969 rtc::scoped_ptr<Call> call(Call::Create(Call::Config())); |
| 2986 test::FakeDecoder fake_decoder; | 2970 test::FakeDecoder fake_decoder; |
| 2987 test::FakeEncoder fake_encoder(Clock::GetRealTimeClock()); | 2971 test::FakeEncoder fake_encoder(Clock::GetRealTimeClock()); |
| 2988 for (size_t i = 0; i < 100; ++i) { | 2972 for (size_t i = 0; i < 100; ++i) { |
| 2989 VideoSendStream::Config send_config; | 2973 VideoSendStream::Config send_config(&transport); |
| 2990 send_config.encoder_settings.encoder = &fake_encoder; | 2974 send_config.encoder_settings.encoder = &fake_encoder; |
| 2991 send_config.encoder_settings.payload_name = "FAKE"; | 2975 send_config.encoder_settings.payload_name = "FAKE"; |
| 2992 send_config.encoder_settings.payload_type = 123; | 2976 send_config.encoder_settings.payload_type = 123; |
| 2993 | 2977 |
| 2994 VideoEncoderConfig encoder_config; | 2978 VideoEncoderConfig encoder_config; |
| 2995 encoder_config.streams = test::CreateVideoStreams(1); | 2979 encoder_config.streams = test::CreateVideoStreams(1); |
| 2996 send_config.rtp.ssrcs.push_back(1); | 2980 send_config.rtp.ssrcs.push_back(1); |
| 2997 VideoSendStream* send_stream = | 2981 VideoSendStream* send_stream = |
| 2998 call->CreateVideoSendStream(send_config, encoder_config); | 2982 call->CreateVideoSendStream(send_config, encoder_config); |
| 2999 call->DestroyVideoSendStream(send_stream); | 2983 call->DestroyVideoSendStream(send_stream); |
| 3000 | 2984 |
| 3001 VideoReceiveStream::Config receive_config; | 2985 VideoReceiveStream::Config receive_config(&transport); |
| 3002 receive_config.rtp.remote_ssrc = 1; | 2986 receive_config.rtp.remote_ssrc = 1; |
| 3003 receive_config.rtp.local_ssrc = kReceiverLocalSsrc; | 2987 receive_config.rtp.local_ssrc = kReceiverLocalSsrc; |
| 3004 VideoReceiveStream::Decoder decoder; | 2988 VideoReceiveStream::Decoder decoder; |
| 3005 decoder.decoder = &fake_decoder; | 2989 decoder.decoder = &fake_decoder; |
| 3006 decoder.payload_type = 123; | 2990 decoder.payload_type = 123; |
| 3007 decoder.payload_name = "FAKE"; | 2991 decoder.payload_name = "FAKE"; |
| 3008 receive_config.decoders.push_back(decoder); | 2992 receive_config.decoders.push_back(decoder); |
| 3009 VideoReceiveStream* receive_stream = | 2993 VideoReceiveStream* receive_stream = |
| 3010 call->CreateVideoReceiveStream(receive_config); | 2994 call->CreateVideoReceiveStream(receive_config); |
| 3011 call->DestroyVideoReceiveStream(receive_stream); | 2995 call->DestroyVideoReceiveStream(receive_stream); |
| 3012 } | 2996 } |
| 3013 } | 2997 } |
| 3014 | 2998 |
| 3015 void VerifyEmptyNackConfig(const NackConfig& config) { | 2999 void VerifyEmptyNackConfig(const NackConfig& config) { |
| 3016 EXPECT_EQ(0, config.rtp_history_ms) | 3000 EXPECT_EQ(0, config.rtp_history_ms) |
| 3017 << "Enabling NACK requires rtcp-fb: nack negotiation."; | 3001 << "Enabling NACK requires rtcp-fb: nack negotiation."; |
| 3018 } | 3002 } |
| 3019 | 3003 |
| 3020 void VerifyEmptyFecConfig(const FecConfig& config) { | 3004 void VerifyEmptyFecConfig(const FecConfig& config) { |
| 3021 EXPECT_EQ(-1, config.ulpfec_payload_type) | 3005 EXPECT_EQ(-1, config.ulpfec_payload_type) |
| 3022 << "Enabling FEC requires rtpmap: ulpfec negotiation."; | 3006 << "Enabling FEC requires rtpmap: ulpfec negotiation."; |
| 3023 EXPECT_EQ(-1, config.red_payload_type) | 3007 EXPECT_EQ(-1, config.red_payload_type) |
| 3024 << "Enabling FEC requires rtpmap: red negotiation."; | 3008 << "Enabling FEC requires rtpmap: red negotiation."; |
| 3025 EXPECT_EQ(-1, config.red_rtx_payload_type) | 3009 EXPECT_EQ(-1, config.red_rtx_payload_type) |
| 3026 << "Enabling RTX in FEC requires rtpmap: rtx negotiation."; | 3010 << "Enabling RTX in FEC requires rtpmap: rtx negotiation."; |
| 3027 } | 3011 } |
| 3028 | 3012 |
| 3029 TEST_F(EndToEndTest, VerifyDefaultSendConfigParameters) { | 3013 TEST_F(EndToEndTest, VerifyDefaultSendConfigParameters) { |
| 3030 VideoSendStream::Config default_send_config; | 3014 VideoSendStream::Config default_send_config(nullptr); |
| 3031 EXPECT_EQ(0, default_send_config.rtp.nack.rtp_history_ms) | 3015 EXPECT_EQ(0, default_send_config.rtp.nack.rtp_history_ms) |
| 3032 << "Enabling NACK require rtcp-fb: nack negotiation."; | 3016 << "Enabling NACK require rtcp-fb: nack negotiation."; |
| 3033 EXPECT_TRUE(default_send_config.rtp.rtx.ssrcs.empty()) | 3017 EXPECT_TRUE(default_send_config.rtp.rtx.ssrcs.empty()) |
| 3034 << "Enabling RTX requires rtpmap: rtx negotiation."; | 3018 << "Enabling RTX requires rtpmap: rtx negotiation."; |
| 3035 EXPECT_TRUE(default_send_config.rtp.extensions.empty()) | 3019 EXPECT_TRUE(default_send_config.rtp.extensions.empty()) |
| 3036 << "Enabling RTP extensions require negotiation."; | 3020 << "Enabling RTP extensions require negotiation."; |
| 3037 | 3021 |
| 3038 VerifyEmptyNackConfig(default_send_config.rtp.nack); | 3022 VerifyEmptyNackConfig(default_send_config.rtp.nack); |
| 3039 VerifyEmptyFecConfig(default_send_config.rtp.fec); | 3023 VerifyEmptyFecConfig(default_send_config.rtp.fec); |
| 3040 } | 3024 } |
| 3041 | 3025 |
| 3042 TEST_F(EndToEndTest, VerifyDefaultReceiveConfigParameters) { | 3026 TEST_F(EndToEndTest, VerifyDefaultReceiveConfigParameters) { |
| 3043 VideoReceiveStream::Config default_receive_config; | 3027 VideoReceiveStream::Config default_receive_config(nullptr); |
| 3044 EXPECT_EQ(newapi::kRtcpCompound, default_receive_config.rtp.rtcp_mode) | 3028 EXPECT_EQ(newapi::kRtcpCompound, default_receive_config.rtp.rtcp_mode) |
| 3045 << "Reduced-size RTCP require rtcp-rsize to be negotiated."; | 3029 << "Reduced-size RTCP require rtcp-rsize to be negotiated."; |
| 3046 EXPECT_FALSE(default_receive_config.rtp.remb) | 3030 EXPECT_FALSE(default_receive_config.rtp.remb) |
| 3047 << "REMB require rtcp-fb: goog-remb to be negotiated."; | 3031 << "REMB require rtcp-fb: goog-remb to be negotiated."; |
| 3048 EXPECT_FALSE( | 3032 EXPECT_FALSE( |
| 3049 default_receive_config.rtp.rtcp_xr.receiver_reference_time_report) | 3033 default_receive_config.rtp.rtcp_xr.receiver_reference_time_report) |
| 3050 << "RTCP XR settings require rtcp-xr to be negotiated."; | 3034 << "RTCP XR settings require rtcp-xr to be negotiated."; |
| 3051 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) | 3035 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) |
| 3052 << "Enabling RTX requires rtpmap: rtx negotiation."; | 3036 << "Enabling RTX requires rtpmap: rtx negotiation."; |
| 3053 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) | 3037 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) |
| 3054 << "Enabling RTP extensions require negotiation."; | 3038 << "Enabling RTP extensions require negotiation."; |
| 3055 | 3039 |
| 3056 VerifyEmptyNackConfig(default_receive_config.rtp.nack); | 3040 VerifyEmptyNackConfig(default_receive_config.rtp.nack); |
| 3057 VerifyEmptyFecConfig(default_receive_config.rtp.fec); | 3041 VerifyEmptyFecConfig(default_receive_config.rtp.fec); |
| 3058 } | 3042 } |
| 3059 | 3043 |
| 3060 } // namespace webrtc | 3044 } // namespace webrtc |
| OLD | NEW |