Chromium Code Reviews| Index: webrtc/video/end_to_end_tests.cc |
| diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc |
| index 6201e92220f0291085451ee6bb46bdb98ae8d9fd..a25d1824e1bc360ac36f87015109be059eb68dbb 100644 |
| --- a/webrtc/video/end_to_end_tests.cc |
| +++ b/webrtc/video/end_to_end_tests.cc |
| @@ -8,6 +8,7 @@ |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| #include <algorithm> |
| +#include <list> |
| #include <map> |
| #include <sstream> |
| #include <string> |
| @@ -2935,7 +2936,6 @@ TEST_F(EndToEndTest, DISABLED_RedundantPayloadsTransmittedOnAllSsrcs) { |
| } |
| void EndToEndTest::TestRtpStatePreservation(bool use_rtx) { |
| - static const uint32_t kMaxSequenceNumberGap = 100; |
| static const uint64_t kMaxTimestampGap = kDefaultTimeoutMs * 90; |
| class RtpSequenceObserver : public test::RtpRtcpObserver { |
| public: |
| @@ -2968,25 +2968,41 @@ void EndToEndTest::TestRtpStatePreservation(bool use_rtx) { |
| EXPECT_TRUE(configured_ssrcs_[ssrc]) |
| << "Received SSRC that wasn't configured: " << ssrc; |
| - std::map<uint32_t, uint16_t>::iterator it = |
| - last_observed_sequence_number_.find(header.ssrc); |
| - if (it == last_observed_sequence_number_.end()) { |
| - last_observed_sequence_number_[ssrc] = sequence_number; |
| - last_observed_timestamp_[ssrc] = timestamp; |
| + static const uint16_t kMaxSequenceNumberGap = 100; |
| + std::list<uint16_t>& seq_numbers = last_observed_seq_numbers_[ssrc]; |
|
pbos-webrtc
2016/02/03 13:03:27
pointer instead of reference here please.
danilchap
2016/02/03 14:04:48
Done.
|
| + if (seq_numbers.empty()) { |
| + seq_numbers.push_back(sequence_number); |
| } else { |
| + // We shouldn't get replays of previous sequence numbers. |
| + for (uint16_t observed : seq_numbers) { |
| + EXPECT_NE(observed, sequence_number) |
| + << "Received sequence number " << sequence_number |
| + << " for SSRC " << ssrc << " 2nd time."; |
| + } |
| // Verify sequence numbers are reasonably close. |
|
pbos-webrtc
2016/02/03 13:03:27
There should be some timediff function that does t
danilchap
2016/02/03 14:04:48
Failed to find it. Thank you for pointing where it
|
| - uint32_t extended_sequence_number = sequence_number; |
| - // Check for roll-over. |
| - if (sequence_number < last_observed_sequence_number_[ssrc]) |
| - extended_sequence_number += 0xFFFFu + 1; |
| - EXPECT_LE( |
| - extended_sequence_number - last_observed_sequence_number_[ssrc], |
| - kMaxSequenceNumberGap) |
| - << "Gap in sequence numbers (" |
| - << last_observed_sequence_number_[ssrc] << " -> " << sequence_number |
| - << ") too large for SSRC: " << ssrc << "."; |
| - last_observed_sequence_number_[ssrc] = sequence_number; |
| + uint16_t latest_observed = seq_numbers.back(); |
| + uint16_t diff = sequence_number - latest_observed; |
| + uint16_t abs_diff; |
| + if (diff < 0x8000) { // Positive difference. |
| + abs_diff = diff; |
| + } else { // Negative difference. |
| + abs_diff = (0xffff - diff) + 1; |
| + } |
| + EXPECT_LE(abs_diff, kMaxSequenceNumberGap) |
| + << "Gap in sequence numbers (" |
| + << latest_observed << " -> " << sequence_number |
| + << ") too large for SSRC: " << ssrc << "."; |
| + seq_numbers.push_back(sequence_number); |
| + if (seq_numbers.size() >= kMaxSequenceNumberGap) { |
| + seq_numbers.pop_front(); |
| + } |
| + } |
| + std::map<uint32_t, uint32_t>::iterator it = |
| + last_observed_timestamp_.find(ssrc); |
| + if (it == last_observed_timestamp_.end()) { |
| + last_observed_timestamp_[ssrc] = timestamp; |
| + } else { |
| // TODO(pbos): Remove this check if we ever have monotonically |
| // increasing timestamps. Right now padding packets add a delta which |
| // can cause reordering between padding packets and regular packets, |
| @@ -3016,7 +3032,7 @@ void EndToEndTest::TestRtpStatePreservation(bool use_rtx) { |
| return SEND_PACKET; |
| } |
| - std::map<uint32_t, uint16_t> last_observed_sequence_number_; |
| + std::map<uint32_t, std::list<uint16_t>> last_observed_seq_numbers_; |
| std::map<uint32_t, uint32_t> last_observed_timestamp_; |
| std::map<uint32_t, bool> configured_ssrcs_; |
| @@ -3115,7 +3131,7 @@ void EndToEndTest::TestRtpStatePreservation(bool use_rtx) { |
| DestroyStreams(); |
| } |
| -TEST_F(EndToEndTest, DISABLED_RestartingSendStreamPreservesRtpState) { |
| +TEST_F(EndToEndTest, RestartingSendStreamPreservesRtpState) { |
| TestRtpStatePreservation(false); |
| } |