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 1115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1126 TEST_F(EndToEndTest, UsesRtcpCompoundMode) { | 1126 TEST_F(EndToEndTest, UsesRtcpCompoundMode) { |
1127 RespectsRtcpMode(newapi::kRtcpCompound); | 1127 RespectsRtcpMode(newapi::kRtcpCompound); |
1128 } | 1128 } |
1129 | 1129 |
1130 TEST_F(EndToEndTest, UsesRtcpReducedSizeMode) { | 1130 TEST_F(EndToEndTest, UsesRtcpReducedSizeMode) { |
1131 RespectsRtcpMode(newapi::kRtcpReducedSize); | 1131 RespectsRtcpMode(newapi::kRtcpReducedSize); |
1132 } | 1132 } |
1133 | 1133 |
1134 // Test sets up a Call multiple senders with different resolutions and SSRCs. | 1134 // Test sets up a Call multiple senders with different resolutions and SSRCs. |
1135 // Another is set up to receive all three of these with different renderers. | 1135 // Another is set up to receive all three of these with different renderers. |
1136 class MultiStreamTest { | |
1137 public: | |
1138 static const size_t kNumStreams = 3; | |
1139 struct CodecSettings { | |
1140 uint32_t ssrc; | |
1141 int width; | |
1142 int height; | |
1143 } codec_settings[kNumStreams]; | |
1144 | |
1145 MultiStreamTest() { | |
1146 // TODO(sprang): Cleanup when msvc supports explicit initializers for array. | |
stefan-webrtc
2015/07/22 10:49:01
Hehe... Do you expect that any time soon? :) I don
sprang_webrtc
2015/07/22 15:11:32
When chromium starts using msvc 2015? No idea what
| |
1147 codec_settings[0] = {1, 640, 480}; | |
1148 codec_settings[1] = {2, 320, 240}; | |
1149 codec_settings[2] = {3, 240, 160}; | |
1150 } | |
1151 | |
1152 virtual ~MultiStreamTest() {} | |
1153 | |
1154 void RunTest() { | |
1155 rtc::scoped_ptr<test::DirectTransport> sender_transport( | |
1156 CreateSendTransport()); | |
1157 rtc::scoped_ptr<test::DirectTransport> receiver_transport( | |
1158 CreateReceiveTransport()); | |
1159 | |
1160 rtc::scoped_ptr<Call> sender_call( | |
1161 Call::Create(Call::Config(sender_transport.get()))); | |
1162 rtc::scoped_ptr<Call> receiver_call( | |
1163 Call::Create(Call::Config(receiver_transport.get()))); | |
1164 sender_transport->SetReceiver(receiver_call->Receiver()); | |
1165 receiver_transport->SetReceiver(sender_call->Receiver()); | |
1166 | |
1167 rtc::scoped_ptr<VideoEncoder> encoders[kNumStreams]; | |
1168 for (size_t i = 0; i < kNumStreams; ++i) | |
1169 encoders[i].reset(VideoEncoder::Create(VideoEncoder::kVp8)); | |
1170 | |
1171 VideoSendStream* send_streams[kNumStreams]; | |
1172 VideoReceiveStream* receive_streams[kNumStreams]; | |
1173 | |
1174 test::FrameGeneratorCapturer* frame_generators[kNumStreams]; | |
1175 ScopedVector<VideoDecoder> allocated_decoders; | |
1176 for (size_t i = 0; i < kNumStreams; ++i) { | |
1177 uint32_t ssrc = codec_settings[i].ssrc; | |
1178 int width = codec_settings[i].width; | |
1179 int height = codec_settings[i].height; | |
1180 | |
1181 VideoSendStream::Config send_config; | |
1182 send_config.rtp.ssrcs.push_back(ssrc); | |
1183 send_config.encoder_settings.encoder = encoders[i].get(); | |
1184 send_config.encoder_settings.payload_name = "VP8"; | |
1185 send_config.encoder_settings.payload_type = 124; | |
1186 VideoEncoderConfig encoder_config; | |
1187 encoder_config.streams = test::CreateVideoStreams(1); | |
1188 VideoStream* stream = &encoder_config.streams[0]; | |
1189 stream->width = width; | |
1190 stream->height = height; | |
1191 stream->max_framerate = 5; | |
1192 stream->min_bitrate_bps = stream->target_bitrate_bps = | |
1193 stream->max_bitrate_bps = 100000; | |
1194 | |
1195 UpdateSendConfig(i, &send_config, &frame_generators[i]); | |
1196 | |
1197 send_streams[i] = | |
1198 sender_call->CreateVideoSendStream(send_config, encoder_config); | |
1199 send_streams[i]->Start(); | |
1200 | |
1201 VideoReceiveStream::Config receive_config; | |
1202 receive_config.rtp.remote_ssrc = ssrc; | |
1203 receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalSsrc; | |
1204 VideoReceiveStream::Decoder decoder = | |
1205 test::CreateMatchingDecoder(send_config.encoder_settings); | |
1206 allocated_decoders.push_back(decoder.decoder); | |
1207 receive_config.decoders.push_back(decoder); | |
1208 | |
1209 UpdateReceiveConfig(i, &receive_config); | |
1210 | |
1211 receive_streams[i] = | |
1212 receiver_call->CreateVideoReceiveStream(receive_config); | |
1213 receive_streams[i]->Start(); | |
1214 | |
1215 frame_generators[i] = test::FrameGeneratorCapturer::Create( | |
1216 send_streams[i]->Input(), width, height, 30, | |
1217 Clock::GetRealTimeClock()); | |
1218 frame_generators[i]->Start(); | |
1219 } | |
1220 | |
1221 Wait(); | |
1222 | |
1223 for (size_t i = 0; i < kNumStreams; ++i) { | |
1224 frame_generators[i]->Stop(); | |
1225 sender_call->DestroyVideoSendStream(send_streams[i]); | |
1226 receiver_call->DestroyVideoReceiveStream(receive_streams[i]); | |
1227 delete frame_generators[i]; | |
1228 } | |
1229 | |
1230 sender_transport->StopSending(); | |
1231 receiver_transport->StopSending(); | |
1232 } | |
1233 | |
1234 protected: | |
1235 virtual void Wait() = 0; | |
1236 // Note: frame_generator is a point-to-pointer, since the actual instance | |
1237 // hasn't been created at the time of this call. Only when packets/frames | |
1238 // start flowing should this be dereferenced. | |
1239 virtual void UpdateSendConfig( | |
1240 size_t stream_index, | |
1241 VideoSendStream::Config* send_config, | |
1242 test::FrameGeneratorCapturer** frame_generator) {} | |
1243 virtual void UpdateReceiveConfig(size_t stream_index, | |
1244 VideoReceiveStream::Config* receive_config) { | |
1245 } | |
1246 virtual test::DirectTransport* CreateSendTransport() { | |
1247 return new test::DirectTransport(); | |
1248 } | |
1249 virtual test::DirectTransport* CreateReceiveTransport() { | |
1250 return new test::DirectTransport(); | |
1251 } | |
1252 }; | |
1253 | |
1136 // Each renderer verifies that it receives the expected resolution, and as soon | 1254 // Each renderer verifies that it receives the expected resolution, and as soon |
1137 // as every renderer has received a frame, the test finishes. | 1255 // as every renderer has received a frame, the test finishes. |
1138 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { | 1256 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { |
1139 static const size_t kNumStreams = 3; | |
1140 | |
1141 class VideoOutputObserver : public VideoRenderer { | 1257 class VideoOutputObserver : public VideoRenderer { |
1142 public: | 1258 public: |
1143 VideoOutputObserver(test::FrameGeneratorCapturer** capturer, | 1259 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, |
1144 int width, | 1260 uint32_t ssrc, |
1145 int height) | 1261 test::FrameGeneratorCapturer** frame_generator) |
1146 : capturer_(capturer), | 1262 : settings_(settings), |
1147 width_(width), | 1263 ssrc_(ssrc), |
1148 height_(height), | 1264 frame_generator_(frame_generator), |
1149 done_(EventWrapper::Create()) {} | 1265 done_(EventWrapper::Create()) {} |
1150 | 1266 |
1151 void RenderFrame(const VideoFrame& video_frame, | 1267 void RenderFrame(const VideoFrame& video_frame, |
1152 int time_to_render_ms) override { | 1268 int time_to_render_ms) override { |
1153 EXPECT_EQ(width_, video_frame.width()); | 1269 EXPECT_EQ(settings_.width, video_frame.width()); |
1154 EXPECT_EQ(height_, video_frame.height()); | 1270 EXPECT_EQ(settings_.height, video_frame.height()); |
1155 (*capturer_)->Stop(); | 1271 (*frame_generator_)->Stop(); |
1156 done_->Set(); | 1272 done_->Set(); |
1157 } | 1273 } |
1158 | 1274 |
1275 uint32_t Ssrc() { return ssrc_; } | |
1276 | |
1159 bool IsTextureSupported() const override { return false; } | 1277 bool IsTextureSupported() const override { return false; } |
1160 | 1278 |
1161 EventTypeWrapper Wait() { return done_->Wait(kDefaultTimeoutMs); } | 1279 EventTypeWrapper Wait() { return done_->Wait(kDefaultTimeoutMs); } |
1162 | 1280 |
1163 private: | 1281 private: |
1164 test::FrameGeneratorCapturer** capturer_; | 1282 const MultiStreamTest::CodecSettings& settings_; |
1165 int width_; | 1283 const uint32_t ssrc_; |
1166 int height_; | 1284 test::FrameGeneratorCapturer** const frame_generator_; |
1167 rtc::scoped_ptr<EventWrapper> done_; | 1285 rtc::scoped_ptr<EventWrapper> done_; |
1168 }; | 1286 }; |
1169 | 1287 |
1170 struct { | 1288 class Tester : public MultiStreamTest { |
1171 uint32_t ssrc; | 1289 public: |
1172 int width; | 1290 Tester() {} |
1173 int height; | 1291 virtual ~Tester() {} |
1174 } codec_settings[kNumStreams] = {{1, 640, 480}, {2, 320, 240}, {3, 240, 160}}; | 1292 |
1175 | 1293 protected: |
1176 test::DirectTransport sender_transport, receiver_transport; | 1294 void Wait() override { |
1177 rtc::scoped_ptr<Call> sender_call( | 1295 for (const auto& observer : observers_) { |
1178 Call::Create(Call::Config(&sender_transport))); | 1296 EXPECT_EQ(EventTypeWrapper::kEventSignaled, observer->Wait()) |
1179 rtc::scoped_ptr<Call> receiver_call( | 1297 << "Time out waiting for from on ssrc " << observer->Ssrc(); |
1180 Call::Create(Call::Config(&receiver_transport))); | 1298 } |
1181 sender_transport.SetReceiver(receiver_call->Receiver()); | 1299 } |
1182 receiver_transport.SetReceiver(sender_call->Receiver()); | 1300 |
1183 | 1301 void UpdateSendConfig( |
1184 VideoSendStream* send_streams[kNumStreams]; | 1302 size_t stream_index, |
1185 VideoReceiveStream* receive_streams[kNumStreams]; | 1303 VideoSendStream::Config* send_config, |
1186 | 1304 test::FrameGeneratorCapturer** frame_generator) override { |
1187 VideoOutputObserver* observers[kNumStreams]; | 1305 observers_[stream_index].reset(new VideoOutputObserver( |
1188 test::FrameGeneratorCapturer* frame_generators[kNumStreams]; | 1306 codec_settings[stream_index], send_config->rtp.ssrcs.front(), |
1189 | 1307 frame_generator)); |
1190 rtc::scoped_ptr<VideoEncoder> encoders[kNumStreams]; | 1308 } |
1191 for (size_t i = 0; i < kNumStreams; ++i) | 1309 |
1192 encoders[i].reset(VideoEncoder::Create(VideoEncoder::kVp8)); | 1310 void UpdateReceiveConfig( |
1193 | 1311 size_t stream_index, |
1194 ScopedVector<VideoDecoder> allocated_decoders; | 1312 VideoReceiveStream::Config* receive_config) override { |
1195 for (size_t i = 0; i < kNumStreams; ++i) { | 1313 receive_config->renderer = observers_[stream_index].get(); |
1196 uint32_t ssrc = codec_settings[i].ssrc; | 1314 } |
1197 int width = codec_settings[i].width; | 1315 |
1198 int height = codec_settings[i].height; | 1316 private: |
1199 observers[i] = new VideoOutputObserver(&frame_generators[i], width, height); | 1317 rtc::scoped_ptr<VideoOutputObserver> observers_[kNumStreams]; |
1200 | 1318 } tester; |
1201 VideoSendStream::Config send_config; | 1319 |
1202 send_config.rtp.ssrcs.push_back(ssrc); | 1320 tester.RunTest(); |
1203 send_config.encoder_settings.encoder = encoders[i].get(); | |
1204 send_config.encoder_settings.payload_name = "VP8"; | |
1205 send_config.encoder_settings.payload_type = 124; | |
1206 VideoEncoderConfig encoder_config; | |
1207 encoder_config.streams = test::CreateVideoStreams(1); | |
1208 VideoStream* stream = &encoder_config.streams[0]; | |
1209 stream->width = width; | |
1210 stream->height = height; | |
1211 stream->max_framerate = 5; | |
1212 stream->min_bitrate_bps = stream->target_bitrate_bps = | |
1213 stream->max_bitrate_bps = 100000; | |
1214 send_streams[i] = | |
1215 sender_call->CreateVideoSendStream(send_config, encoder_config); | |
1216 send_streams[i]->Start(); | |
1217 | |
1218 VideoReceiveStream::Config receive_config; | |
1219 receive_config.renderer = observers[i]; | |
1220 receive_config.rtp.remote_ssrc = ssrc; | |
1221 receive_config.rtp.local_ssrc = kReceiverLocalSsrc; | |
1222 VideoReceiveStream::Decoder decoder = | |
1223 test::CreateMatchingDecoder(send_config.encoder_settings); | |
1224 allocated_decoders.push_back(decoder.decoder); | |
1225 receive_config.decoders.push_back(decoder); | |
1226 receive_streams[i] = | |
1227 receiver_call->CreateVideoReceiveStream(receive_config); | |
1228 receive_streams[i]->Start(); | |
1229 | |
1230 frame_generators[i] = test::FrameGeneratorCapturer::Create( | |
1231 send_streams[i]->Input(), width, height, 30, Clock::GetRealTimeClock()); | |
1232 frame_generators[i]->Start(); | |
1233 } | |
1234 | |
1235 for (size_t i = 0; i < kNumStreams; ++i) { | |
1236 EXPECT_EQ(kEventSignaled, observers[i]->Wait()) | |
1237 << "Timed out while waiting for observer " << i << " to render."; | |
1238 } | |
1239 | |
1240 for (size_t i = 0; i < kNumStreams; ++i) { | |
1241 frame_generators[i]->Stop(); | |
1242 sender_call->DestroyVideoSendStream(send_streams[i]); | |
1243 receiver_call->DestroyVideoReceiveStream(receive_streams[i]); | |
1244 delete frame_generators[i]; | |
1245 delete observers[i]; | |
1246 } | |
1247 | |
1248 sender_transport.StopSending(); | |
1249 receiver_transport.StopSending(); | |
1250 } | 1321 } |
1251 | 1322 |
1323 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { | |
1324 static const int kExtensionId = 5; | |
1325 | |
1326 // TODO(sprang): Extend this to verify received values once send-side BWE | |
1327 // is in place. | |
stefan-webrtc
2015/07/22 10:49:01
We could also do a test in rampup_tests.cc with th
sprang_webrtc
2015/07/22 15:11:32
Definately. When everything is in place that is mo
| |
1328 | |
1329 class RtpExtensionHeaderObserver : public test::DirectTransport { | |
1330 public: | |
1331 RtpExtensionHeaderObserver() | |
1332 : done_(EventWrapper::Create()), | |
1333 parser_(RtpHeaderParser::Create()), | |
1334 last_seq_(0) { | |
1335 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, | |
1336 kExtensionId); | |
1337 } | |
1338 virtual ~RtpExtensionHeaderObserver() {} | |
1339 | |
1340 bool SendRtp(const uint8_t* data, size_t length) override { | |
1341 RTPHeader header; | |
1342 EXPECT_TRUE(parser_->Parse(data, length, &header)); | |
1343 if (header.extension.hasTransportSequenceNumber) { | |
1344 if (!covered_streams_.empty()) { | |
1345 EXPECT_EQ(static_cast<uint16_t>(last_seq_ + 1), | |
1346 header.extension.transportSequenceNumber); | |
1347 } | |
1348 last_seq_ = header.extension.transportSequenceNumber; | |
1349 covered_streams_.insert(header.ssrc); | |
1350 if (covered_streams_.size() == MultiStreamTest::kNumStreams) | |
1351 done_->Set(); | |
1352 } | |
1353 return test::DirectTransport::SendRtp(data, length); | |
1354 } | |
1355 | |
1356 EventTypeWrapper Wait() { return done_->Wait(kDefaultTimeoutMs); } | |
1357 | |
1358 rtc::scoped_ptr<EventWrapper> done_; | |
1359 rtc::scoped_ptr<RtpHeaderParser> parser_; | |
1360 uint16_t last_seq_; | |
1361 std::set<uint32_t> covered_streams_; | |
1362 }; | |
1363 | |
1364 class Tester : public MultiStreamTest { | |
1365 public: | |
1366 Tester() : observer_(nullptr) {} | |
1367 virtual ~Tester() {} | |
1368 | |
1369 protected: | |
1370 void Wait() override { | |
1371 DCHECK(observer_ != nullptr); | |
1372 EXPECT_EQ(EventTypeWrapper::kEventSignaled, observer_->Wait()); | |
1373 } | |
1374 | |
1375 void UpdateSendConfig( | |
1376 size_t stream_index, | |
1377 VideoSendStream::Config* send_config, | |
1378 test::FrameGeneratorCapturer** frame_generator) override { | |
1379 send_config->rtp.extensions.clear(); | |
1380 send_config->rtp.extensions.push_back( | |
1381 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); | |
1382 } | |
1383 | |
1384 void UpdateReceiveConfig( | |
1385 size_t stream_index, | |
1386 VideoReceiveStream::Config* receive_config) override { | |
1387 receive_config->rtp.extensions.clear(); | |
1388 receive_config->rtp.extensions.push_back( | |
1389 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); | |
1390 } | |
1391 | |
1392 virtual test::DirectTransport* CreateSendTransport() { | |
1393 observer_ = new RtpExtensionHeaderObserver(); | |
1394 return observer_; | |
1395 } | |
1396 | |
1397 private: | |
1398 RtpExtensionHeaderObserver* observer_; | |
1399 } tester; | |
1400 | |
1401 tester.RunTest(); | |
1402 } | |
1403 | |
1252 TEST_F(EndToEndTest, ObserversEncodedFrames) { | 1404 TEST_F(EndToEndTest, ObserversEncodedFrames) { |
1253 class EncodedFrameTestObserver : public EncodedFrameObserver { | 1405 class EncodedFrameTestObserver : public EncodedFrameObserver { |
1254 public: | 1406 public: |
1255 EncodedFrameTestObserver() | 1407 EncodedFrameTestObserver() |
1256 : length_(0), | 1408 : length_(0), |
1257 frame_type_(kFrameEmpty), | 1409 frame_type_(kFrameEmpty), |
1258 called_(EventWrapper::Create()) {} | 1410 called_(EventWrapper::Create()) {} |
1259 virtual ~EncodedFrameTestObserver() {} | 1411 virtual ~EncodedFrameTestObserver() {} |
1260 | 1412 |
1261 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { | 1413 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1774 bool send_single_ssrc_first) { | 1926 bool send_single_ssrc_first) { |
1775 class SendsSetSsrcs : public test::EndToEndTest { | 1927 class SendsSetSsrcs : public test::EndToEndTest { |
1776 public: | 1928 public: |
1777 SendsSetSsrcs(const uint32_t* ssrcs, | 1929 SendsSetSsrcs(const uint32_t* ssrcs, |
1778 size_t num_ssrcs, | 1930 size_t num_ssrcs, |
1779 bool send_single_ssrc_first) | 1931 bool send_single_ssrc_first) |
1780 : EndToEndTest(kDefaultTimeoutMs), | 1932 : EndToEndTest(kDefaultTimeoutMs), |
1781 num_ssrcs_(num_ssrcs), | 1933 num_ssrcs_(num_ssrcs), |
1782 send_single_ssrc_first_(send_single_ssrc_first), | 1934 send_single_ssrc_first_(send_single_ssrc_first), |
1783 ssrcs_to_observe_(num_ssrcs), | 1935 ssrcs_to_observe_(num_ssrcs), |
1784 expect_single_ssrc_(send_single_ssrc_first) { | 1936 expect_single_ssrc_(send_single_ssrc_first), |
1937 send_stream_(nullptr) { | |
1785 for (size_t i = 0; i < num_ssrcs; ++i) | 1938 for (size_t i = 0; i < num_ssrcs; ++i) |
1786 valid_ssrcs_[ssrcs[i]] = true; | 1939 valid_ssrcs_[ssrcs[i]] = true; |
1787 } | 1940 } |
1788 | 1941 |
1789 private: | 1942 private: |
1790 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1943 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1791 RTPHeader header; | 1944 RTPHeader header; |
1792 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 1945 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
1793 | 1946 |
1794 EXPECT_TRUE(valid_ssrcs_[header.ssrc]) | 1947 EXPECT_TRUE(valid_ssrcs_[header.ssrc]) |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1866 | 2019 |
1867 RunBaseTest(&test); | 2020 RunBaseTest(&test); |
1868 } | 2021 } |
1869 | 2022 |
1870 TEST_F(EndToEndTest, ReportsSetEncoderRates) { | 2023 TEST_F(EndToEndTest, ReportsSetEncoderRates) { |
1871 class EncoderRateStatsTest : public test::EndToEndTest, | 2024 class EncoderRateStatsTest : public test::EndToEndTest, |
1872 public test::FakeEncoder { | 2025 public test::FakeEncoder { |
1873 public: | 2026 public: |
1874 EncoderRateStatsTest() | 2027 EncoderRateStatsTest() |
1875 : EndToEndTest(kDefaultTimeoutMs), | 2028 : EndToEndTest(kDefaultTimeoutMs), |
1876 FakeEncoder(Clock::GetRealTimeClock()) {} | 2029 FakeEncoder(Clock::GetRealTimeClock()), |
2030 send_stream_(nullptr), | |
2031 bitrate_kbps_(0) {} | |
1877 | 2032 |
1878 void OnStreamsCreated( | 2033 void OnStreamsCreated( |
1879 VideoSendStream* send_stream, | 2034 VideoSendStream* send_stream, |
1880 const std::vector<VideoReceiveStream*>& receive_streams) override { | 2035 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1881 send_stream_ = send_stream; | 2036 send_stream_ = send_stream; |
1882 } | 2037 } |
1883 | 2038 |
1884 void ModifyConfigs(VideoSendStream::Config* send_config, | 2039 void ModifyConfigs(VideoSendStream::Config* send_config, |
1885 std::vector<VideoReceiveStream::Config>* receive_configs, | 2040 std::vector<VideoReceiveStream::Config>* receive_configs, |
1886 VideoEncoderConfig* encoder_config) override { | 2041 VideoEncoderConfig* encoder_config) override { |
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2502 static const int kNumAcceptedDowntimeRtp = 5; | 2657 static const int kNumAcceptedDowntimeRtp = 5; |
2503 // A single RTCP may be in the pipeline. | 2658 // A single RTCP may be in the pipeline. |
2504 static const int kNumAcceptedDowntimeRtcp = 1; | 2659 static const int kNumAcceptedDowntimeRtcp = 1; |
2505 class NetworkStateTest : public test::EndToEndTest, public test::FakeEncoder { | 2660 class NetworkStateTest : public test::EndToEndTest, public test::FakeEncoder { |
2506 public: | 2661 public: |
2507 NetworkStateTest() | 2662 NetworkStateTest() |
2508 : EndToEndTest(kDefaultTimeoutMs), | 2663 : EndToEndTest(kDefaultTimeoutMs), |
2509 FakeEncoder(Clock::GetRealTimeClock()), | 2664 FakeEncoder(Clock::GetRealTimeClock()), |
2510 encoded_frames_(EventWrapper::Create()), | 2665 encoded_frames_(EventWrapper::Create()), |
2511 packet_event_(EventWrapper::Create()), | 2666 packet_event_(EventWrapper::Create()), |
2667 sender_call_(nullptr), | |
2668 receiver_call_(nullptr), | |
2512 sender_state_(kNetworkUp), | 2669 sender_state_(kNetworkUp), |
2513 sender_rtp_(0), | 2670 sender_rtp_(0), |
2514 sender_rtcp_(0), | 2671 sender_rtcp_(0), |
2515 receiver_rtcp_(0), | 2672 receiver_rtcp_(0), |
2516 down_frames_(0) {} | 2673 down_frames_(0) {} |
2517 | 2674 |
2518 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 2675 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
2519 rtc::CritScope lock(&test_crit_); | 2676 rtc::CritScope lock(&test_crit_); |
2520 ++sender_rtp_; | 2677 ++sender_rtp_; |
2521 packet_event_->Set(); | 2678 packet_event_->Set(); |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2831 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) | 2988 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) |
2832 << "Enabling RTX requires rtpmap: rtx negotiation."; | 2989 << "Enabling RTX requires rtpmap: rtx negotiation."; |
2833 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) | 2990 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) |
2834 << "Enabling RTP extensions require negotiation."; | 2991 << "Enabling RTP extensions require negotiation."; |
2835 | 2992 |
2836 VerifyEmptyNackConfig(default_receive_config.rtp.nack); | 2993 VerifyEmptyNackConfig(default_receive_config.rtp.nack); |
2837 VerifyEmptyFecConfig(default_receive_config.rtp.fec); | 2994 VerifyEmptyFecConfig(default_receive_config.rtp.fec); |
2838 } | 2995 } |
2839 | 2996 |
2840 } // namespace webrtc | 2997 } // namespace webrtc |
OLD | NEW |