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

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

Issue 1393553003: Revert "Transport sequence number should be set also for retransmissions." (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <algorithm> 10 #include <algorithm>
11 #include <map> 11 #include <map>
12 #include <sstream> 12 #include <sstream>
13 #include <string> 13 #include <string>
14 14
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 #include "webrtc/base/checks.h" 17 #include "webrtc/base/checks.h"
18 #include "webrtc/base/event.h" 18 #include "webrtc/base/event.h"
19 #include "webrtc/base/scoped_ptr.h" 19 #include "webrtc/base/scoped_ptr.h"
20 #include "webrtc/call.h" 20 #include "webrtc/call.h"
21 #include "webrtc/call/transport_adapter.h" 21 #include "webrtc/call/transport_adapter.h"
22 #include "webrtc/frame_callback.h" 22 #include "webrtc/frame_callback.h"
23 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
25 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" 24 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
26 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" 25 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
27 #include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" 26 #include "webrtc/modules/video_coding/main/interface/video_coding_defines.h"
28 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 27 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
29 #include "webrtc/system_wrappers/interface/event_wrapper.h" 28 #include "webrtc/system_wrappers/interface/event_wrapper.h"
30 #include "webrtc/system_wrappers/interface/metrics.h" 29 #include "webrtc/system_wrappers/interface/metrics.h"
31 #include "webrtc/system_wrappers/interface/sleep.h" 30 #include "webrtc/system_wrappers/interface/sleep.h"
32 #include "webrtc/test/call_test.h" 31 #include "webrtc/test/call_test.h"
33 #include "webrtc/test/direct_transport.h" 32 #include "webrtc/test/direct_transport.h"
(...skipping 1295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 } 1328 }
1330 1329
1331 private: 1330 private:
1332 rtc::scoped_ptr<VideoOutputObserver> observers_[kNumStreams]; 1331 rtc::scoped_ptr<VideoOutputObserver> observers_[kNumStreams];
1333 } tester; 1332 } tester;
1334 1333
1335 tester.RunTest(); 1334 tester.RunTest();
1336 } 1335 }
1337 1336
1338 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { 1337 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) {
1338 // TODO(sprang): Extend this to verify received values once send-side BWE
1339 // is in place.
1340
1339 static const int kExtensionId = 5; 1341 static const int kExtensionId = 5;
1340 1342
1341 class RtpExtensionHeaderObserver : public test::DirectTransport { 1343 class RtpExtensionHeaderObserver : public test::DirectTransport {
1342 public: 1344 public:
1343 RtpExtensionHeaderObserver() 1345 RtpExtensionHeaderObserver()
1344 : done_(EventWrapper::Create()), 1346 : done_(EventWrapper::Create()),
1345 parser_(RtpHeaderParser::Create()), 1347 parser_(RtpHeaderParser::Create()),
1346 last_seq_(0), 1348 last_seq_(0),
1347 padding_observed_(false), 1349 padding_observed_(false),
1348 rtx_padding_observed_(false), 1350 rtx_padding_observed_(false) {
1349 retransmit_observed_(false) {
1350 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, 1351 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber,
1351 kExtensionId); 1352 kExtensionId);
1352 } 1353 }
1353 virtual ~RtpExtensionHeaderObserver() {} 1354 virtual ~RtpExtensionHeaderObserver() {}
1354 1355
1355 bool SendRtp(const uint8_t* data, 1356 bool SendRtp(const uint8_t* data,
1356 size_t length, 1357 size_t length,
1357 const PacketOptions& options) override { 1358 const PacketOptions& options) override {
1358 if (IsDone()) 1359 if (IsDone())
1359 return false; 1360 return false;
1360 1361
1361 RTPHeader header; 1362 RTPHeader header;
1362 EXPECT_TRUE(parser_->Parse(data, length, &header)); 1363 EXPECT_TRUE(parser_->Parse(data, length, &header));
1363 bool drop_packet = false;
1364
1365 if (header.extension.hasTransportSequenceNumber) { 1364 if (header.extension.hasTransportSequenceNumber) {
1366 EXPECT_EQ(options.packet_id, 1365 EXPECT_EQ(options.packet_id,
1367 header.extension.transportSequenceNumber); 1366 header.extension.transportSequenceNumber);
1368 if (!streams_observed_.empty()) { 1367 if (!streams_observed_.empty()) {
1369 EXPECT_EQ(static_cast<uint16_t>(last_seq_ + 1), 1368 EXPECT_EQ(static_cast<uint16_t>(last_seq_ + 1),
1370 header.extension.transportSequenceNumber); 1369 header.extension.transportSequenceNumber);
1371 } 1370 }
1372 last_seq_ = header.extension.transportSequenceNumber; 1371 last_seq_ = header.extension.transportSequenceNumber;
1373 1372
1374 // Drop every 20th packet, so we get retransmits.
1375 if (header.sequenceNumber % 20 == 0) {
1376 dropped_seq_.insert(header.sequenceNumber);
1377 drop_packet = true;
1378 }
1379
1380 size_t payload_length = 1373 size_t payload_length =
1381 length - (header.headerLength + header.paddingLength); 1374 length - (header.headerLength + header.paddingLength);
1382 if (payload_length == 0) { 1375 if (payload_length == 0) {
1383 padding_observed_ = true; 1376 padding_observed_ = true;
1384 } else if (header.payloadType == kSendRtxPayloadType) { 1377 } else if (header.payloadType == kSendRtxPayloadType) {
1385 uint16_t original_sequence_number = 1378 rtx_padding_observed_ = true;
1386 ByteReader<uint16_t>::ReadBigEndian(&data[header.headerLength]);
1387 if (dropped_seq_.find(original_sequence_number) !=
1388 dropped_seq_.end()) {
1389 retransmit_observed_ = true;
1390 } else {
1391 rtx_padding_observed_ = true;
1392 }
1393 } else { 1379 } else {
1394 streams_observed_.insert(header.ssrc); 1380 streams_observed_.insert(header.ssrc);
1395 } 1381 }
1396 1382
1397 if (IsDone()) 1383 if (IsDone())
1398 done_->Set(); 1384 done_->Set();
1399 } 1385 }
1400 if (drop_packet)
1401 return true;
1402 return test::DirectTransport::SendRtp(data, length, options); 1386 return test::DirectTransport::SendRtp(data, length, options);
1403 } 1387 }
1404 1388
1405 bool IsDone() { 1389 bool IsDone() {
1406 return streams_observed_.size() == MultiStreamTest::kNumStreams && 1390 return streams_observed_.size() == MultiStreamTest::kNumStreams &&
1407 padding_observed_ && retransmit_observed_ && rtx_padding_observed_; 1391 padding_observed_ && rtx_padding_observed_;
1408 } 1392 }
1409 1393
1410 EventTypeWrapper Wait() { return done_->Wait(kDefaultTimeoutMs); } 1394 EventTypeWrapper Wait() { return done_->Wait(kDefaultTimeoutMs); }
1411 1395
1412 rtc::scoped_ptr<EventWrapper> done_; 1396 rtc::scoped_ptr<EventWrapper> done_;
1413 rtc::scoped_ptr<RtpHeaderParser> parser_; 1397 rtc::scoped_ptr<RtpHeaderParser> parser_;
1414 uint16_t last_seq_; 1398 uint16_t last_seq_;
1415 std::set<uint32_t> streams_observed_; 1399 std::set<uint32_t> streams_observed_;
1416 std::set<uint16_t> dropped_seq_;
1417 bool padding_observed_; 1400 bool padding_observed_;
1418 bool rtx_padding_observed_; 1401 bool rtx_padding_observed_;
1419 bool retransmit_observed_;
1420 }; 1402 };
1421 1403
1422 class TransportSequenceNumberTester : public MultiStreamTest { 1404 class TransportSequenceNumberTester : public MultiStreamTest {
1423 public: 1405 public:
1424 TransportSequenceNumberTester() : observer_(nullptr) {} 1406 TransportSequenceNumberTester() : observer_(nullptr) {}
1425 virtual ~TransportSequenceNumberTester() {} 1407 virtual ~TransportSequenceNumberTester() {}
1426 1408
1427 protected: 1409 protected:
1428 void Wait() override { 1410 void Wait() override {
1429 RTC_DCHECK(observer_ != nullptr); 1411 RTC_DCHECK(observer_ != nullptr);
(...skipping 1719 matching lines...) Expand 10 before | Expand all | Expand 10 after
3149 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) 3131 EXPECT_TRUE(default_receive_config.rtp.rtx.empty())
3150 << "Enabling RTX requires rtpmap: rtx negotiation."; 3132 << "Enabling RTX requires rtpmap: rtx negotiation.";
3151 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) 3133 EXPECT_TRUE(default_receive_config.rtp.extensions.empty())
3152 << "Enabling RTP extensions require negotiation."; 3134 << "Enabling RTP extensions require negotiation.";
3153 3135
3154 VerifyEmptyNackConfig(default_receive_config.rtp.nack); 3136 VerifyEmptyNackConfig(default_receive_config.rtp.nack);
3155 VerifyEmptyFecConfig(default_receive_config.rtp.fec); 3137 VerifyEmptyFecConfig(default_receive_config.rtp.fec);
3156 } 3138 }
3157 3139
3158 } // namespace webrtc 3140 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698