Chromium Code Reviews| Index: webrtc/modules/video_coding/video_packet_buffer_unittest.cc |
| diff --git a/webrtc/modules/video_coding/video_packet_buffer_unittest.cc b/webrtc/modules/video_coding/video_packet_buffer_unittest.cc |
| index 7905e855b4172900101ec6f903c8fac097ff7994..4f7535ead1165c5ab9507ddeb1fc10aa7c48a2c3 100644 |
| --- a/webrtc/modules/video_coding/video_packet_buffer_unittest.cc |
| +++ b/webrtc/modules/video_coding/video_packet_buffer_unittest.cc |
| @@ -49,12 +49,12 @@ class TestPacketBuffer : public ::testing::Test, |
| enum IsFirst { kFirst, kNotFirst }; |
| enum IsLast { kLast, kNotLast }; |
| - void InsertPacket(uint16_t seq_num, // packet sequence number |
| - IsKeyFrame keyframe, // is keyframe |
| - IsFirst first, // is first packet of frame |
| - IsLast last, // is last packet of frame |
| - int data_size = 0, // size of data |
| - uint8_t* data = nullptr) { // data pointer |
| + bool Insert(uint16_t seq_num, // packet sequence number |
| + IsKeyFrame keyframe, // is keyframe |
| + IsFirst first, // is first packet of frame |
| + IsLast last, // is last packet of frame |
| + int data_size = 0, // size of data |
| + uint8_t* data = nullptr) { // data pointer |
| VCMPacket packet; |
| packet.codec = kVideoCodecGeneric; |
| packet.seqNum = seq_num; |
| @@ -64,7 +64,7 @@ class TestPacketBuffer : public ::testing::Test, |
| packet.sizeBytes = data_size; |
| packet.dataPtr = data; |
| - EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| + return packet_buffer_->InsertPacket(packet); |
| } |
| void CheckFrame(uint16_t first_seq_num) { |
| @@ -85,21 +85,43 @@ class TestPacketBuffer : public ::testing::Test, |
| TEST_F(TestPacketBuffer, InsertOnePacket) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); |
| } |
| TEST_F(TestPacketBuffer, InsertMultiplePackets) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kLast); |
| - InsertPacket(seq_num + 1, kKeyFrame, kFirst, kLast); |
| - InsertPacket(seq_num + 2, kKeyFrame, kFirst, kLast); |
| - InsertPacket(seq_num + 3, kKeyFrame, kFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kKeyFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 2, kKeyFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 3, kKeyFrame, kFirst, kLast)); |
| } |
| TEST_F(TestPacketBuffer, InsertDuplicatePacket) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kLast); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); |
| +} |
| + |
| +TEST_F(TestPacketBuffer, InsertOldPackets) { |
| + uint16_t seq_num = Rand(); |
|
danilchap
2016/10/07 18:25:37
add const:
const uint16_t seq_num = Rand();
seq_nu
philipel
2016/10/18 12:22:19
Done.
|
| + |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kKeyFrame, kNotFirst, kLast)); |
| + ASSERT_EQ(2UL, frames_from_callback_.size()); |
| + |
| + frames_from_callback_.erase(frames_from_callback_.find(seq_num + 2)); |
|
danilchap
2016/10/07 18:25:37
that is same as
frames_from_callback_.erase(seq_nu
philipel
2016/10/18 12:22:19
Done.
|
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast)); |
| + ASSERT_EQ(1UL, frames_from_callback_.size()); |
| + |
| + frames_from_callback_.erase(frames_from_callback_.find(seq_num)); |
| + ASSERT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kFirst, kLast)); |
| + |
| + packet_buffer_->ClearTo(seq_num + 2); |
| + EXPECT_FALSE(Insert(seq_num + 2, kDeltaFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 3, kDeltaFrame, kFirst, kLast)); |
| + ASSERT_EQ(2UL, frames_from_callback_.size()); |
| } |
| TEST_F(TestPacketBuffer, NackCount) { |
| @@ -129,7 +151,6 @@ TEST_F(TestPacketBuffer, NackCount) { |
| packet.timesNacked = 1; |
| packet_buffer_->InsertPacket(packet); |
| - |
| ASSERT_EQ(1UL, frames_from_callback_.size()); |
| RtpFrameObject* frame = frames_from_callback_.begin()->second.get(); |
| EXPECT_EQ(3, frame->times_nacked()); |
| @@ -139,10 +160,10 @@ TEST_F(TestPacketBuffer, FrameSize) { |
| uint16_t seq_num = Rand(); |
| uint8_t data[] = {1, 2, 3, 4, 5}; |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kNotLast, 5, data); |
| - InsertPacket(seq_num + 1, kKeyFrame, kNotFirst, kNotLast, 5, data); |
| - InsertPacket(seq_num + 2, kKeyFrame, kNotFirst, kNotLast, 5, data); |
| - InsertPacket(seq_num + 3, kKeyFrame, kNotFirst, kLast, 5, data); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast, 5, data)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kKeyFrame, kNotFirst, kNotLast, 5, data)); |
| + EXPECT_TRUE(Insert(seq_num + 2, kKeyFrame, kNotFirst, kNotLast, 5, data)); |
| + EXPECT_TRUE(Insert(seq_num + 3, kKeyFrame, kNotFirst, kLast, 5, data)); |
| ASSERT_EQ(1UL, frames_from_callback_.size()); |
| EXPECT_EQ(20UL, frames_from_callback_.begin()->second->size); |
| @@ -152,25 +173,33 @@ TEST_F(TestPacketBuffer, ExpandBuffer) { |
| uint16_t seq_num = Rand(); |
| for (int i = 0; i < kStartSize + 1; ++i) { |
| - InsertPacket(seq_num + i, kKeyFrame, kFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num + i, kKeyFrame, kFirst, kLast)); |
| } |
| } |
| -TEST_F(TestPacketBuffer, ExpandBufferOverflow) { |
| +TEST_F(TestPacketBuffer, SingleFrameExpandsBuffer) { |
| uint16_t seq_num = Rand(); |
| - for (int i = 0; i < kMaxSize; ++i) { |
| - InsertPacket(seq_num + i, kKeyFrame, kFirst, kLast); |
| - } |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast)); |
| + for (int i = 1; i < kStartSize; ++i) |
| + EXPECT_TRUE(Insert(seq_num + i, kKeyFrame, kNotFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + kStartSize, kKeyFrame, kNotFirst, kLast)); |
| - VCMPacket packet; |
| - packet.seqNum = seq_num + kMaxSize + 1; |
| - EXPECT_FALSE(packet_buffer_->InsertPacket(packet)); |
| + ASSERT_EQ(1UL, frames_from_callback_.size()); |
| + CheckFrame(seq_num); |
| +} |
| + |
| +TEST_F(TestPacketBuffer, ExpandBufferOverflow) { |
| + uint16_t seq_num = Rand(); |
| + |
| + for (int i = 0; i < kMaxSize; ++i) |
| + EXPECT_TRUE(Insert(seq_num + i, kKeyFrame, kFirst, kLast)); |
| + EXPECT_FALSE(Insert(seq_num + kMaxSize + 1, kKeyFrame, kFirst, kLast)); |
| } |
| TEST_F(TestPacketBuffer, OnePacketOneFrame) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); |
| ASSERT_EQ(1UL, frames_from_callback_.size()); |
| CheckFrame(seq_num); |
| } |
| @@ -178,8 +207,8 @@ TEST_F(TestPacketBuffer, OnePacketOneFrame) { |
| TEST_F(TestPacketBuffer, TwoPacketsTwoFrames) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kLast); |
| - InsertPacket(seq_num + 1, kKeyFrame, kFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kKeyFrame, kFirst, kLast)); |
| EXPECT_EQ(2UL, frames_from_callback_.size()); |
| CheckFrame(seq_num); |
| @@ -189,8 +218,8 @@ TEST_F(TestPacketBuffer, TwoPacketsTwoFrames) { |
| TEST_F(TestPacketBuffer, TwoPacketsOneFrames) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kNotLast); |
| - InsertPacket(seq_num + 1, kKeyFrame, kNotFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kKeyFrame, kNotFirst, kLast)); |
| EXPECT_EQ(1UL, frames_from_callback_.size()); |
| CheckFrame(seq_num); |
| @@ -199,78 +228,68 @@ TEST_F(TestPacketBuffer, TwoPacketsOneFrames) { |
| TEST_F(TestPacketBuffer, ThreePacketReorderingOneFrame) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kNotLast); |
| - InsertPacket(seq_num + 2, kKeyFrame, kNotFirst, kLast); |
| - InsertPacket(seq_num + 1, kKeyFrame, kNotFirst, kNotLast); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + 2, kKeyFrame, kNotFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kKeyFrame, kNotFirst, kNotLast)); |
| EXPECT_EQ(1UL, frames_from_callback_.size()); |
| CheckFrame(seq_num); |
| } |
| -TEST_F(TestPacketBuffer, DiscardOldPacket) { |
| - VCMPacket packet; |
| - packet.seqNum = Rand(); |
| - EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| - packet.seqNum += 2; |
| - EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| - |
| - for (int i = 3; i < kMaxSize; ++i) { |
| - ++packet.seqNum; |
| - EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| - } |
| +TEST_F(TestPacketBuffer, Frames) { |
| + uint16_t seq_num = Rand(); |
| - ++packet.seqNum; |
| - EXPECT_FALSE(packet_buffer_->InsertPacket(packet)); |
| - packet_buffer_->ClearTo(packet.seqNum + 1); |
| - EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kDeltaFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 3, kDeltaFrame, kFirst, kLast)); |
| + |
| + ASSERT_EQ(4UL, frames_from_callback_.size()); |
| + CheckFrame(seq_num); |
| + CheckFrame(seq_num + 1); |
| + CheckFrame(seq_num + 2); |
| + CheckFrame(seq_num + 3); |
| } |
| -TEST_F(TestPacketBuffer, DiscardMultipleOldPackets) { |
| +TEST_F(TestPacketBuffer, ClearSinglePacket) { |
| uint16_t seq_num = Rand(); |
| - VCMPacket packet; |
| - packet.seqNum = seq_num; |
| - EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| - packet.seqNum += 2; |
| - EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| - for (int i = 3; i < kMaxSize; ++i) { |
| - ++packet.seqNum; |
| - EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| - } |
| + for (int i = 0; i < kMaxSize; ++i) |
| + EXPECT_TRUE(Insert(seq_num + i, kDeltaFrame, kFirst, kLast)); |
| - packet_buffer_->ClearTo(seq_num + 15); |
| - for (int i = 0; i < 15; ++i) { |
| - ++packet.seqNum; |
| - EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| - } |
| - for (int i = 15; i < kMaxSize; ++i) { |
| - ++packet.seqNum; |
| - EXPECT_FALSE(packet_buffer_->InsertPacket(packet)); |
| - } |
| + packet_buffer_->ClearTo(seq_num); |
| + EXPECT_TRUE(Insert(seq_num + kMaxSize, kDeltaFrame, kFirst, kLast)); |
| } |
| -TEST_F(TestPacketBuffer, Frames) { |
| +TEST_F(TestPacketBuffer, OneIncompleteFrame) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kLast); |
| - InsertPacket(seq_num + 1, kDeltaFrame, kFirst, kLast); |
| - InsertPacket(seq_num + 2, kDeltaFrame, kFirst, kLast); |
| - InsertPacket(seq_num + 3, kDeltaFrame, kFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num, kDeltaFrame, kFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kDeltaFrame, kNotFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num - 1, kDeltaFrame, kNotFirst, kLast)); |
| - ASSERT_EQ(4UL, frames_from_callback_.size()); |
| + ASSERT_EQ(1UL, frames_from_callback_.size()); |
| CheckFrame(seq_num); |
| - CheckFrame(seq_num + 1); |
| - CheckFrame(seq_num + 2); |
| - CheckFrame(seq_num + 3); |
| +} |
| + |
| +TEST_F(TestPacketBuffer, TwoIncompleteFramesFullBuffer) { |
| + uint16_t seq_num = Rand(); |
| + |
| + for (int i = 1; i < kMaxSize - 1; ++i) |
| + EXPECT_TRUE(Insert(seq_num + i, kDeltaFrame, kNotFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num, kDeltaFrame, kFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num - 1, kDeltaFrame, kNotFirst, kLast)); |
| + |
| + ASSERT_EQ(0UL, frames_from_callback_.size()); |
| } |
| TEST_F(TestPacketBuffer, FramesReordered) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num + 1, kDeltaFrame, kFirst, kLast); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kLast); |
| - InsertPacket(seq_num + 3, kDeltaFrame, kFirst, kLast); |
| - InsertPacket(seq_num + 2, kDeltaFrame, kFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num + 1, kDeltaFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 3, kDeltaFrame, kFirst, kLast)); |
| + EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kFirst, kLast)); |
| ASSERT_EQ(4UL, frames_from_callback_.size()); |
| CheckFrame(seq_num); |
| @@ -291,12 +310,13 @@ TEST_F(TestPacketBuffer, GetBitstreamFromFrame) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kNotLast, sizeof(many), many); |
| - InsertPacket(seq_num + 1, kDeltaFrame, kNotFirst, kNotLast, sizeof(bitstream), |
| - bitstream); |
| - InsertPacket(seq_num + 2, kDeltaFrame, kNotFirst, kNotLast, sizeof(such), |
| - such); |
| - InsertPacket(seq_num + 3, kDeltaFrame, kNotFirst, kLast, sizeof(data), data); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast, sizeof(many), many)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kDeltaFrame, kNotFirst, kNotLast, |
| + sizeof(bitstream), bitstream)); |
| + EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kNotFirst, kNotLast, |
| + sizeof(such), such)); |
| + EXPECT_TRUE( |
| + Insert(seq_num + 3, kDeltaFrame, kNotFirst, kLast, sizeof(data), data)); |
| ASSERT_EQ(1UL, frames_from_callback_.size()); |
| CheckFrame(seq_num); |
| @@ -307,19 +327,19 @@ TEST_F(TestPacketBuffer, GetBitstreamFromFrame) { |
| TEST_F(TestPacketBuffer, FreeSlotsOnFrameDestruction) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kNotLast); |
| - InsertPacket(seq_num + 1, kDeltaFrame, kNotFirst, kNotLast); |
| - InsertPacket(seq_num + 2, kDeltaFrame, kNotFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kDeltaFrame, kNotFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kNotFirst, kLast)); |
| EXPECT_EQ(1UL, frames_from_callback_.size()); |
| CheckFrame(seq_num); |
| frames_from_callback_.clear(); |
| // Insert frame that fills the whole buffer. |
| - InsertPacket(seq_num + 3, kKeyFrame, kFirst, kNotLast); |
| + EXPECT_TRUE(Insert(seq_num + 3, kKeyFrame, kFirst, kNotLast)); |
| for (int i = 0; i < kMaxSize - 2; ++i) |
| - InsertPacket(seq_num + i + 4, kDeltaFrame, kNotFirst, kNotLast); |
| - InsertPacket(seq_num + kMaxSize + 2, kKeyFrame, kNotFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num + i + 4, kDeltaFrame, kNotFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + kMaxSize + 2, kKeyFrame, kNotFirst, kLast)); |
| EXPECT_EQ(1UL, frames_from_callback_.size()); |
| CheckFrame(seq_num + 3); |
| } |
| @@ -327,28 +347,26 @@ TEST_F(TestPacketBuffer, FreeSlotsOnFrameDestruction) { |
| TEST_F(TestPacketBuffer, Clear) { |
| uint16_t seq_num = Rand(); |
| - InsertPacket(seq_num, kKeyFrame, kFirst, kNotLast); |
| - InsertPacket(seq_num + 1, kDeltaFrame, kNotFirst, kNotLast); |
| - InsertPacket(seq_num + 2, kDeltaFrame, kNotFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + 1, kDeltaFrame, kNotFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + 2, kDeltaFrame, kNotFirst, kLast)); |
| EXPECT_EQ(1UL, frames_from_callback_.size()); |
| CheckFrame(seq_num); |
| packet_buffer_->Clear(); |
| - InsertPacket(seq_num + kStartSize, kKeyFrame, kFirst, kNotLast); |
| - InsertPacket(seq_num + kStartSize + 1, kDeltaFrame, kNotFirst, kNotLast); |
| - InsertPacket(seq_num + kStartSize + 2, kDeltaFrame, kNotFirst, kLast); |
| + EXPECT_TRUE(Insert(seq_num + kStartSize, kKeyFrame, kFirst, kNotLast)); |
| + EXPECT_TRUE( |
| + Insert(seq_num + kStartSize + 1, kDeltaFrame, kNotFirst, kNotLast)); |
| + EXPECT_TRUE(Insert(seq_num + kStartSize + 2, kDeltaFrame, kNotFirst, kLast)); |
| EXPECT_EQ(2UL, frames_from_callback_.size()); |
| CheckFrame(seq_num + kStartSize); |
| } |
| TEST_F(TestPacketBuffer, InvalidateFrameByClearing) { |
| - VCMPacket packet; |
| - packet.frameType = kVideoFrameKey; |
| - packet.isFirstPacket = true; |
| - packet.markerBit = true; |
| - packet.seqNum = Rand(); |
| - EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); |
| + uint16_t seq_num = Rand(); |
| + |
| + EXPECT_TRUE(Insert(seq_num, kKeyFrame, kFirst, kLast)); |
| ASSERT_EQ(1UL, frames_from_callback_.size()); |
| packet_buffer_->Clear(); |