| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |    2  *  Copyright (c) 2015 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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   46     std::unique_ptr<int64_t[]> temp_deltas; |   46     std::unique_ptr<int64_t[]> temp_deltas; | 
|   47     if (received_ts == nullptr) { |   47     if (received_ts == nullptr) { | 
|   48       temp_deltas.reset(new int64_t[length]); |   48       temp_deltas.reset(new int64_t[length]); | 
|   49       GenerateDeltas(received_seq, length, temp_deltas.get()); |   49       GenerateDeltas(received_seq, length, temp_deltas.get()); | 
|   50       received_ts = temp_deltas.get(); |   50       received_ts = temp_deltas.get(); | 
|   51     } |   51     } | 
|   52  |   52  | 
|   53     expected_seq_.clear(); |   53     expected_seq_.clear(); | 
|   54     expected_deltas_.clear(); |   54     expected_deltas_.clear(); | 
|   55     feedback_.reset(new TransportFeedback()); |   55     feedback_.reset(new TransportFeedback()); | 
 |   56     feedback_->SetBase(received_seq[0], received_ts[0]); | 
 |   57     ASSERT_TRUE(feedback_->IsConsistent()); | 
|   56  |   58  | 
|   57     feedback_->SetBase(received_seq[0], received_ts[0]); |  | 
|   58     int64_t last_time = feedback_->GetBaseTimeUs(); |   59     int64_t last_time = feedback_->GetBaseTimeUs(); | 
|   59     for (int i = 0; i < length; ++i) { |   60     for (int i = 0; i < length; ++i) { | 
|   60       int64_t time = received_ts[i]; |   61       int64_t time = received_ts[i]; | 
|   61       EXPECT_TRUE(feedback_->AddReceivedPacket(received_seq[i], time)); |   62       EXPECT_TRUE(feedback_->AddReceivedPacket(received_seq[i], time)); | 
|   62  |   63  | 
|   63       if (last_time != -1) { |   64       if (last_time != -1) { | 
|   64         int64_t delta = time - last_time; |   65         int64_t delta = time - last_time; | 
|   65         expected_deltas_.push_back(delta); |   66         expected_deltas_.push_back(delta); | 
|   66       } |   67       } | 
|   67       last_time = time; |   68       last_time = time; | 
|   68     } |   69     } | 
 |   70     ASSERT_TRUE(feedback_->IsConsistent()); | 
|   69     expected_seq_.insert(expected_seq_.begin(), &received_seq[0], |   71     expected_seq_.insert(expected_seq_.begin(), &received_seq[0], | 
|   70                          &received_seq[length]); |   72                          &received_seq[length]); | 
|   71   } |   73   } | 
|   72  |   74  | 
|   73   void VerifyPacket() { |   75   void VerifyPacket() { | 
 |   76     ASSERT_TRUE(feedback_->IsConsistent()); | 
|   74     serialized_ = feedback_->Build(); |   77     serialized_ = feedback_->Build(); | 
|   75     VerifyInternal(); |   78     VerifyInternal(); | 
|   76     feedback_ = TransportFeedback::ParseFrom(serialized_.data(), |   79     feedback_ = TransportFeedback::ParseFrom(serialized_.data(), | 
|   77                                              serialized_.size()); |   80                                              serialized_.size()); | 
 |   81     ASSERT_TRUE(feedback_->IsConsistent()); | 
|   78     ASSERT_NE(nullptr, feedback_.get()); |   82     ASSERT_NE(nullptr, feedback_.get()); | 
|   79     VerifyInternal(); |   83     VerifyInternal(); | 
|   80   } |   84   } | 
|   81  |   85  | 
|   82   static const size_t kAnySize = static_cast<size_t>(0) - 1; |   86   static const size_t kAnySize = static_cast<size_t>(0) - 1; | 
|   83  |   87  | 
|   84  private: |   88  private: | 
|   85   void VerifyInternal() { |   89   void VerifyInternal() { | 
|   86     if (expected_size_ != kAnySize) { |   90     if (expected_size_ != kAnySize) { | 
|   87       // Round up to whole 32-bit words. |   91       // Round up to whole 32-bit words. | 
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  364   packet.reset(new TransportFeedback()); |  368   packet.reset(new TransportFeedback()); | 
|  365   packet->SetBase(0, 0); |  369   packet->SetBase(0, 0); | 
|  366   EXPECT_TRUE(packet->AddReceivedPacket(0x0, 0)); |  370   EXPECT_TRUE(packet->AddReceivedPacket(0x0, 0)); | 
|  367   EXPECT_FALSE(packet->AddReceivedPacket(0x8000 + 1, 1000)); |  371   EXPECT_FALSE(packet->AddReceivedPacket(0x8000 + 1, 1000)); | 
|  368  |  372  | 
|  369   // Packet status count max 0xFFFF. |  373   // Packet status count max 0xFFFF. | 
|  370   packet.reset(new TransportFeedback()); |  374   packet.reset(new TransportFeedback()); | 
|  371   packet->SetBase(0, 0); |  375   packet->SetBase(0, 0); | 
|  372   EXPECT_TRUE(packet->AddReceivedPacket(0x0, 0)); |  376   EXPECT_TRUE(packet->AddReceivedPacket(0x0, 0)); | 
|  373   EXPECT_TRUE(packet->AddReceivedPacket(0x8000, 1000)); |  377   EXPECT_TRUE(packet->AddReceivedPacket(0x8000, 1000)); | 
|  374   EXPECT_TRUE(packet->AddReceivedPacket(0xFFFF, 2000)); |  378   EXPECT_TRUE(packet->AddReceivedPacket(0xFFFE, 2000)); | 
|  375   EXPECT_FALSE(packet->AddReceivedPacket(0, 3000)); |  379   EXPECT_FALSE(packet->AddReceivedPacket(0xFFFF, 3000)); | 
|  376  |  380  | 
|  377   // Too large delta. |  381   // Too large delta. | 
|  378   packet.reset(new TransportFeedback()); |  382   packet.reset(new TransportFeedback()); | 
|  379   packet->SetBase(0, 0); |  383   packet->SetBase(0, 0); | 
|  380   int64_t kMaxPositiveTimeDelta = std::numeric_limits<int16_t>::max() * |  384   int64_t kMaxPositiveTimeDelta = std::numeric_limits<int16_t>::max() * | 
|  381                                   TransportFeedback::kDeltaScaleFactor; |  385                                   TransportFeedback::kDeltaScaleFactor; | 
|  382   EXPECT_FALSE(packet->AddReceivedPacket( |  386   EXPECT_FALSE(packet->AddReceivedPacket( | 
|  383       1, kMaxPositiveTimeDelta + TransportFeedback::kDeltaScaleFactor)); |  387       1, kMaxPositiveTimeDelta + TransportFeedback::kDeltaScaleFactor)); | 
|  384   EXPECT_TRUE(packet->AddReceivedPacket(1, kMaxPositiveTimeDelta)); |  388   EXPECT_TRUE(packet->AddReceivedPacket(1, kMaxPositiveTimeDelta)); | 
|  385  |  389  | 
|  386   // Too large negative delta. |  390   // Too large negative delta. | 
|  387   packet.reset(new TransportFeedback()); |  391   packet.reset(new TransportFeedback()); | 
|  388   packet->SetBase(0, 0); |  392   packet->SetBase(0, 0); | 
|  389   int64_t kMaxNegativeTimeDelta = std::numeric_limits<int16_t>::min() * |  393   int64_t kMaxNegativeTimeDelta = std::numeric_limits<int16_t>::min() * | 
|  390                                   TransportFeedback::kDeltaScaleFactor; |  394                                   TransportFeedback::kDeltaScaleFactor; | 
|  391   EXPECT_FALSE(packet->AddReceivedPacket( |  395   EXPECT_FALSE(packet->AddReceivedPacket( | 
|  392       1, kMaxNegativeTimeDelta - TransportFeedback::kDeltaScaleFactor)); |  396       1, kMaxNegativeTimeDelta - TransportFeedback::kDeltaScaleFactor)); | 
|  393   EXPECT_TRUE(packet->AddReceivedPacket(1, kMaxNegativeTimeDelta)); |  397   EXPECT_TRUE(packet->AddReceivedPacket(1, kMaxNegativeTimeDelta)); | 
|  394  |  398  | 
|  395   // Base time at maximum value. |  399   // Base time at maximum value. | 
|  396   int64_t kMaxBaseTime = |  400   int64_t kMaxBaseTime = | 
|  397       static_cast<int64_t>(TransportFeedback::kDeltaScaleFactor) * (1L << 8) * |  401       static_cast<int64_t>(TransportFeedback::kDeltaScaleFactor) * (1L << 8) * | 
|  398       ((1L << 23) - 1); |  402       ((1L << 23) - 1); | 
|  399   packet.reset(new TransportFeedback()); |  403   packet.reset(new TransportFeedback()); | 
|  400   packet->SetBase(0, kMaxBaseTime); |  404   packet->SetBase(0, kMaxBaseTime); | 
|  401   packet->AddReceivedPacket(0, kMaxBaseTime); |  405   EXPECT_TRUE(packet->AddReceivedPacket(0, kMaxBaseTime)); | 
|  402   // Serialize and de-serialize (verify 24bit parsing). |  406   // Serialize and de-serialize (verify 24bit parsing). | 
|  403   rtc::Buffer raw_packet = packet->Build(); |  407   rtc::Buffer raw_packet = packet->Build(); | 
|  404   packet = TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size()); |  408   packet = TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size()); | 
|  405   EXPECT_EQ(kMaxBaseTime, packet->GetBaseTimeUs()); |  409   EXPECT_EQ(kMaxBaseTime, packet->GetBaseTimeUs()); | 
|  406  |  410  | 
|  407   // Base time above maximum value. |  411   // Base time above maximum value. | 
|  408   int64_t kTooLargeBaseTime = |  412   int64_t kTooLargeBaseTime = | 
|  409       kMaxBaseTime + (TransportFeedback::kDeltaScaleFactor * (1L << 8)); |  413       kMaxBaseTime + (TransportFeedback::kDeltaScaleFactor * (1L << 8)); | 
|  410   packet.reset(new TransportFeedback()); |  414   packet.reset(new TransportFeedback()); | 
|  411   packet->SetBase(0, kTooLargeBaseTime); |  415   packet->SetBase(0, kTooLargeBaseTime); | 
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  473     rtc::Buffer serialized_packet = feedback.Build(); |  477     rtc::Buffer serialized_packet = feedback.Build(); | 
|  474     std::unique_ptr<TransportFeedback> deserialized_packet = |  478     std::unique_ptr<TransportFeedback> deserialized_packet = | 
|  475         TransportFeedback::ParseFrom(serialized_packet.data(), |  479         TransportFeedback::ParseFrom(serialized_packet.data(), | 
|  476                                      serialized_packet.size()); |  480                                      serialized_packet.size()); | 
|  477     EXPECT_TRUE(deserialized_packet.get() != nullptr); |  481     EXPECT_TRUE(deserialized_packet.get() != nullptr); | 
|  478   } |  482   } | 
|  479 } |  483 } | 
|  480  |  484  | 
|  481 }  // namespace |  485 }  // namespace | 
|  482 }  // namespace webrtc |  486 }  // namespace webrtc | 
| OLD | NEW |