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

Side by Side Diff: webrtc/modules/video_coding/video_packet_buffer_unittest.cc

Issue 2051453002: Padding is now used to check for continuity in the packet sequence. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Nit fix. Created 4 years, 5 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/video_coding/rtp_frame_reference_finder.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) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 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 11 matching lines...) Expand all
22 22
23 namespace webrtc { 23 namespace webrtc {
24 namespace video_coding { 24 namespace video_coding {
25 25
26 class TestPacketBuffer : public ::testing::Test, 26 class TestPacketBuffer : public ::testing::Test,
27 public OnCompleteFrameCallback { 27 public OnCompleteFrameCallback {
28 protected: 28 protected:
29 TestPacketBuffer() 29 TestPacketBuffer()
30 : rand_(0x8739211), 30 : rand_(0x8739211),
31 packet_buffer_(new PacketBuffer(kStartSize, kMaxSize, this)), 31 packet_buffer_(new PacketBuffer(kStartSize, kMaxSize, this)),
32 frames_from_callback_(FrameComp()) {} 32 frames_from_callback_(FrameComp()),
33 dummy_data_(new uint8_t[kDummyDataSize]()) {}
33 34
34 uint16_t Rand() { return rand_.Rand(std::numeric_limits<uint16_t>::max()); } 35 uint16_t Rand() { return rand_.Rand(std::numeric_limits<uint16_t>::max()); }
35 36
36 void OnCompleteFrame(std::unique_ptr<FrameObject> frame) override { 37 void OnCompleteFrame(std::unique_ptr<FrameObject> frame) override {
37 uint16_t pid = frame->picture_id; 38 uint16_t pid = frame->picture_id;
38 uint16_t sidx = frame->spatial_layer; 39 uint16_t sidx = frame->spatial_layer;
39 auto frame_it = frames_from_callback_.find(std::make_pair(pid, sidx)); 40 auto frame_it = frames_from_callback_.find(std::make_pair(pid, sidx));
40 if (frame_it != frames_from_callback_.end()) { 41 if (frame_it != frames_from_callback_.end()) {
41 ADD_FAILURE() << "Already received frame with (pid:sidx): (" 42 ADD_FAILURE() << "Already received frame with (pid:sidx): ("
42 << pid << ":" << sidx << ")"; 43 << pid << ":" << sidx << ")";
(...skipping 11 matching lines...) Expand all
54 frames_from_callback_.clear(); 55 frames_from_callback_.clear();
55 } 56 }
56 57
57 // Short version of true and false. 58 // Short version of true and false.
58 enum { 59 enum {
59 kT = true, 60 kT = true,
60 kF = false 61 kF = false
61 }; 62 };
62 63
63 // Insert a generic packet into the packet buffer. 64 // Insert a generic packet into the packet buffer.
64 void InsertGeneric(uint16_t seq_num, // packet sequence number 65 void InsertGeneric(uint16_t seq_num, // packet sequence number
65 bool keyframe, // is keyframe 66 bool keyframe, // is keyframe
66 bool first, // is first packet of frame 67 bool first, // is first packet of frame
67 bool last, // is last packet of frame 68 bool last, // is last packet of frame
68 size_t data_size = 0, // size of data 69 int data_size = -1, // size of data
69 uint8_t* data = nullptr) { // data pointer 70 uint8_t* data = nullptr) { // data pointer
71 if (data_size == -1) {
72 data_size = kDummyDataSize;
73 data = dummy_data_.get();
74 }
75
70 VCMPacket packet; 76 VCMPacket packet;
71 packet.codec = kVideoCodecGeneric; 77 packet.codec = kVideoCodecGeneric;
72 packet.seqNum = seq_num; 78 packet.seqNum = seq_num;
73 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; 79 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
74 packet.isFirstPacket = first; 80 packet.isFirstPacket = first;
75 packet.markerBit = last; 81 packet.markerBit = last;
76 packet.sizeBytes = data_size; 82 packet.sizeBytes = data_size;
77 packet.dataPtr = data; 83 packet.dataPtr = data;
78 84
79 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 85 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
80 } 86 }
81 87
82 // Insert a Vp8 packet into the packet buffer. 88 // Insert a Vp8 packet into the packet buffer.
83 void InsertVp8(uint16_t seq_num, // packet sequence number 89 void InsertVp8(uint16_t seq_num, // packet sequence number
84 bool keyframe, // is keyframe 90 bool keyframe, // is keyframe
85 bool first, // is first packet of frame 91 bool first, // is first packet of frame
86 bool last, // is last packet of frame 92 bool last, // is last packet of frame
87 bool sync = false, // is sync frame 93 bool sync = false, // is sync frame
88 int32_t pid = kNoPictureId, // picture id 94 int32_t pid = kNoPictureId, // picture id
89 uint8_t tid = kNoTemporalIdx, // temporal id 95 uint8_t tid = kNoTemporalIdx, // temporal id
90 int32_t tl0 = kNoTl0PicIdx, // tl0 pic index 96 int32_t tl0 = kNoTl0PicIdx, // tl0 pic index
91 size_t data_size = 0, // size of data 97 int data_size = -1, // size of data
92 uint8_t* data = nullptr) { // data pointer 98 uint8_t* data = nullptr) { // data pointer
99 if (data_size == -1) {
100 data_size = kDummyDataSize;
101 data = dummy_data_.get();
102 }
103
93 VCMPacket packet; 104 VCMPacket packet;
94 packet.codec = kVideoCodecVP8; 105 packet.codec = kVideoCodecVP8;
95 packet.seqNum = seq_num; 106 packet.seqNum = seq_num;
96 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; 107 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
97 packet.isFirstPacket = first; 108 packet.isFirstPacket = first;
98 packet.markerBit = last; 109 packet.markerBit = last;
99 packet.sizeBytes = data_size; 110 packet.sizeBytes = data_size;
100 packet.dataPtr = data; 111 packet.dataPtr = data;
101 packet.video_header.codecHeader.VP8.pictureId = pid % (1 << 15); 112 packet.video_header.codecHeader.VP8.pictureId = pid % (1 << 15);
102 packet.video_header.codecHeader.VP8.temporalIdx = tid; 113 packet.video_header.codecHeader.VP8.temporalIdx = tid;
103 packet.video_header.codecHeader.VP8.tl0PicIdx = tl0; 114 packet.video_header.codecHeader.VP8.tl0PicIdx = tl0;
104 packet.video_header.codecHeader.VP8.layerSync = sync; 115 packet.video_header.codecHeader.VP8.layerSync = sync;
105 116
106 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 117 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
107 } 118 }
108 119
109 // Insert a Vp9 packet into the packet buffer. 120 // Insert a Vp9 packet into the packet buffer.
110 void InsertVp9Gof(uint16_t seq_num, // packet sequence number 121 void InsertVp9Gof(uint16_t seq_num, // packet sequence number
111 bool keyframe, // is keyframe 122 bool keyframe, // is keyframe
112 bool first, // is first packet of frame 123 bool first, // is first packet of frame
113 bool last, // is last packet of frame 124 bool last, // is last packet of frame
114 bool up = false, // frame is up-switch point 125 bool up = false, // frame is up-switch point
115 int32_t pid = kNoPictureId, // picture id 126 int32_t pid = kNoPictureId, // picture id
116 uint8_t sid = kNoSpatialIdx, // spatial id 127 uint8_t sid = kNoSpatialIdx, // spatial id
117 uint8_t tid = kNoTemporalIdx, // temporal id 128 uint8_t tid = kNoTemporalIdx, // temporal id
118 int32_t tl0 = kNoTl0PicIdx, // tl0 pic index 129 int32_t tl0 = kNoTl0PicIdx, // tl0 pic index
119 GofInfoVP9* ss = nullptr, // scalability structure 130 GofInfoVP9* ss = nullptr, // scalability structure
120 size_t data_size = 0, // size of data 131 int data_size = -1, // size of data
121 uint8_t* data = nullptr) { // data pointer 132 uint8_t* data = nullptr) { // data pointer
133 if (data_size == -1) {
134 data_size = kDummyDataSize;
135 data = dummy_data_.get();
136 }
137
122 VCMPacket packet; 138 VCMPacket packet;
123 packet.codec = kVideoCodecVP9; 139 packet.codec = kVideoCodecVP9;
124 packet.seqNum = seq_num; 140 packet.seqNum = seq_num;
125 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; 141 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
126 packet.isFirstPacket = first; 142 packet.isFirstPacket = first;
127 packet.markerBit = last; 143 packet.markerBit = last;
128 packet.sizeBytes = data_size; 144 packet.sizeBytes = data_size;
129 packet.dataPtr = data; 145 packet.dataPtr = data;
130 packet.video_header.codecHeader.VP9.flexible_mode = false; 146 packet.video_header.codecHeader.VP9.flexible_mode = false;
131 packet.video_header.codecHeader.VP9.picture_id = pid % (1 << 15); 147 packet.video_header.codecHeader.VP9.picture_id = pid % (1 << 15);
132 packet.video_header.codecHeader.VP9.temporal_idx = tid; 148 packet.video_header.codecHeader.VP9.temporal_idx = tid;
133 packet.video_header.codecHeader.VP9.spatial_idx = sid; 149 packet.video_header.codecHeader.VP9.spatial_idx = sid;
134 packet.video_header.codecHeader.VP9.tl0_pic_idx = tl0; 150 packet.video_header.codecHeader.VP9.tl0_pic_idx = tl0;
135 packet.video_header.codecHeader.VP9.temporal_up_switch = up; 151 packet.video_header.codecHeader.VP9.temporal_up_switch = up;
136 if (ss != nullptr) { 152 if (ss != nullptr) {
137 packet.video_header.codecHeader.VP9.ss_data_available = true; 153 packet.video_header.codecHeader.VP9.ss_data_available = true;
138 packet.video_header.codecHeader.VP9.gof = *ss; 154 packet.video_header.codecHeader.VP9.gof = *ss;
139 } 155 }
140 156
141 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 157 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
142 } 158 }
143 159
144 // Insert a Vp9 packet into the packet buffer. 160 // Insert a Vp9 packet into the packet buffer.
145 void InsertVp9Flex(uint16_t seq_num, // packet sequence number 161 void InsertVp9Flex(
146 bool keyframe, // is keyframe 162 uint16_t seq_num, // packet sequence number
147 bool first, // is first packet of frame 163 bool keyframe, // is keyframe
148 bool last, // is last packet of frame 164 bool first, // is first packet of frame
149 bool inter, // depends on S-1 layer 165 bool last, // is last packet of frame
150 int32_t pid = kNoPictureId, // picture id 166 bool inter, // depends on S-1 layer
151 uint8_t sid = kNoSpatialIdx, // spatial id 167 int32_t pid = kNoPictureId, // picture id
152 uint8_t tid = kNoTemporalIdx, // temporal id 168 uint8_t sid = kNoSpatialIdx, // spatial id
153 int32_t tl0 = kNoTl0PicIdx, // tl0 pic index 169 uint8_t tid = kNoTemporalIdx, // temporal id
154 std::vector<uint8_t> refs = 170 int32_t tl0 = kNoTl0PicIdx, // tl0 pic index
155 std::vector<uint8_t>(), // frame references 171 std::vector<uint8_t> refs = std::vector<uint8_t>(), // frame references
156 size_t data_size = 0, // size of data 172 int data_size = -1, // size of data
157 uint8_t* data = nullptr) { // data pointer 173 uint8_t* data = nullptr) { // data pointer
174 if (data_size == -1) {
175 data_size = kDummyDataSize;
176 data = dummy_data_.get();
177 }
178
158 VCMPacket packet; 179 VCMPacket packet;
159 packet.codec = kVideoCodecVP9; 180 packet.codec = kVideoCodecVP9;
160 packet.seqNum = seq_num; 181 packet.seqNum = seq_num;
161 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta; 182 packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
162 packet.isFirstPacket = first; 183 packet.isFirstPacket = first;
163 packet.markerBit = last; 184 packet.markerBit = last;
164 packet.sizeBytes = data_size; 185 packet.sizeBytes = data_size;
165 packet.dataPtr = data; 186 packet.dataPtr = data;
166 packet.video_header.codecHeader.VP9.inter_layer_predicted = inter; 187 packet.video_header.codecHeader.VP9.inter_layer_predicted = inter;
167 packet.video_header.codecHeader.VP9.flexible_mode = true; 188 packet.video_header.codecHeader.VP9.flexible_mode = true;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 template <typename... T> 238 template <typename... T>
218 void RefsToSet(std::set<uint16_t>* m, uint16_t ref, T... refs) const { 239 void RefsToSet(std::set<uint16_t>* m, uint16_t ref, T... refs) const {
219 m->insert(ref); 240 m->insert(ref);
220 RefsToSet(m, refs...); 241 RefsToSet(m, refs...);
221 } 242 }
222 243
223 void RefsToSet(std::set<uint16_t>* m) const {} 244 void RefsToSet(std::set<uint16_t>* m) const {}
224 245
225 const int kStartSize = 16; 246 const int kStartSize = 16;
226 const int kMaxSize = 64; 247 const int kMaxSize = 64;
248 const int kDummyDataSize = 4;
227 249
228 Random rand_; 250 Random rand_;
229 std::unique_ptr<PacketBuffer> packet_buffer_; 251 std::unique_ptr<PacketBuffer> packet_buffer_;
230 struct FrameComp { 252 struct FrameComp {
231 bool operator()(const std::pair<uint16_t, uint8_t> f1, 253 bool operator()(const std::pair<uint16_t, uint8_t> f1,
232 const std::pair<uint16_t, uint8_t> f2) const { 254 const std::pair<uint16_t, uint8_t> f2) const {
233 if (f1.first == f2.first) 255 if (f1.first == f2.first)
234 return f1.second < f2.second; 256 return f1.second < f2.second;
235 return f1.first < f2.first; 257 return f1.first < f2.first;
236 } 258 }
237 }; 259 };
238 std::map<std::pair<uint16_t, uint8_t>, 260 std::map<std::pair<uint16_t, uint8_t>,
239 std::unique_ptr<FrameObject>, 261 std::unique_ptr<FrameObject>,
240 FrameComp> frames_from_callback_; 262 FrameComp> frames_from_callback_;
263
264 std::unique_ptr<uint8_t[]> dummy_data_;
241 }; 265 };
242 266
243 TEST_F(TestPacketBuffer, InsertOnePacket) { 267 TEST_F(TestPacketBuffer, InsertOnePacket) {
244 VCMPacket packet; 268 VCMPacket packet;
245 packet.seqNum = Rand(); 269 packet.seqNum = Rand();
246 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 270 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
247 } 271 }
248 272
249 TEST_F(TestPacketBuffer, InsertMultiplePackets) { 273 TEST_F(TestPacketBuffer, InsertMultiplePackets) {
250 VCMPacket packet; 274 VCMPacket packet;
(...skipping 16 matching lines...) Expand all
267 291
268 TEST_F(TestPacketBuffer, NackCount) { 292 TEST_F(TestPacketBuffer, NackCount) {
269 uint16_t seq_num = Rand(); 293 uint16_t seq_num = Rand();
270 294
271 VCMPacket packet; 295 VCMPacket packet;
272 packet.codec = kVideoCodecGeneric; 296 packet.codec = kVideoCodecGeneric;
273 packet.seqNum = seq_num; 297 packet.seqNum = seq_num;
274 packet.frameType = kVideoFrameKey; 298 packet.frameType = kVideoFrameKey;
275 packet.isFirstPacket = true; 299 packet.isFirstPacket = true;
276 packet.markerBit = false; 300 packet.markerBit = false;
277 packet.sizeBytes = 0; 301 packet.dataPtr = dummy_data_.get();
278 packet.dataPtr = nullptr; 302 packet.sizeBytes = kDummyDataSize;
279 packet.timesNacked = 0; 303 packet.timesNacked = 0;
280 304
281 packet_buffer_->InsertPacket(packet); 305 packet_buffer_->InsertPacket(packet);
282 306
283 packet.seqNum++; 307 packet.seqNum++;
284 packet.isFirstPacket = false; 308 packet.isFirstPacket = false;
285 packet.timesNacked = 1; 309 packet.timesNacked = 1;
286 packet_buffer_->InsertPacket(packet); 310 packet_buffer_->InsertPacket(packet);
287 311
288 packet.seqNum++; 312 packet.seqNum++;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 InsertGeneric(seq_num , kT, kT , kF); 395 InsertGeneric(seq_num , kT, kT , kF);
372 InsertGeneric(seq_num + 2, kT, kF , kT); 396 InsertGeneric(seq_num + 2, kT, kF , kT);
373 InsertGeneric(seq_num + 1, kT, kF , kF); 397 InsertGeneric(seq_num + 1, kT, kF , kF);
374 398
375 EXPECT_EQ(1UL, frames_from_callback_.size()); 399 EXPECT_EQ(1UL, frames_from_callback_.size());
376 } 400 }
377 401
378 TEST_F(TestPacketBuffer, DiscardOldPacket) { 402 TEST_F(TestPacketBuffer, DiscardOldPacket) {
379 uint16_t seq_num = Rand(); 403 uint16_t seq_num = Rand();
380 VCMPacket packet; 404 VCMPacket packet;
405 packet.dataPtr = dummy_data_.get();
406 packet.sizeBytes = kDummyDataSize;
381 packet.seqNum = Rand(); 407 packet.seqNum = Rand();
382 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 408 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
383 packet.seqNum += 2; 409 packet.seqNum += 2;
384 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 410 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
385 411
386 for (int i = 3; i < kMaxSize; ++i) { 412 for (int i = 3; i < kMaxSize; ++i) {
387 ++packet.seqNum; 413 ++packet.seqNum;
388 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 414 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
389 } 415 }
390 416
391 ++packet.seqNum; 417 ++packet.seqNum;
392 EXPECT_FALSE(packet_buffer_->InsertPacket(packet)); 418 EXPECT_FALSE(packet_buffer_->InsertPacket(packet));
393 packet_buffer_->ClearTo(seq_num + 1); 419 packet_buffer_->ClearTo(seq_num + 1);
394 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 420 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
395 } 421 }
396 422
397 TEST_F(TestPacketBuffer, DiscardMultipleOldPackets) { 423 TEST_F(TestPacketBuffer, DiscardMultipleOldPackets) {
398 uint16_t seq_num = Rand(); 424 uint16_t seq_num = Rand();
399 VCMPacket packet; 425 VCMPacket packet;
426 packet.dataPtr = dummy_data_.get();
427 packet.sizeBytes = kDummyDataSize;
400 packet.seqNum = seq_num; 428 packet.seqNum = seq_num;
401 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 429 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
402 packet.seqNum += 2; 430 packet.seqNum += 2;
403 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 431 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
404 432
405 for (int i = 3; i < kMaxSize; ++i) { 433 for (int i = 3; i < kMaxSize; ++i) {
406 ++packet.seqNum; 434 ++packet.seqNum;
407 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 435 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
408 } 436 }
409 437
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 // seq_num , kf, frst, lst, data_size , data 493 // seq_num , kf, frst, lst, data_size , data
466 InsertGeneric(seq_num , kT, kT , kF , sizeof(many) , many); 494 InsertGeneric(seq_num , kT, kT , kF , sizeof(many) , many);
467 InsertGeneric(seq_num + 1, kF, kF , kF , sizeof(bitstream), bitstream); 495 InsertGeneric(seq_num + 1, kF, kF , kF , sizeof(bitstream), bitstream);
468 InsertGeneric(seq_num + 2, kF, kF , kF , sizeof(such) , such); 496 InsertGeneric(seq_num + 2, kF, kF , kF , sizeof(such) , such);
469 InsertGeneric(seq_num + 3, kF, kF , kT , sizeof(data) , data); 497 InsertGeneric(seq_num + 3, kF, kF , kT , sizeof(data) , data);
470 498
471 ASSERT_EQ(1UL, frames_from_callback_.size()); 499 ASSERT_EQ(1UL, frames_from_callback_.size());
472 CheckReferencesVp8(seq_num + 3); 500 CheckReferencesVp8(seq_num + 3);
473 EXPECT_TRUE(frames_from_callback_[std::make_pair(seq_num + 3, 0)]-> 501 EXPECT_TRUE(frames_from_callback_[std::make_pair(seq_num + 3, 0)]->
474 GetBitstream(result)); 502 GetBitstream(result));
475 EXPECT_EQ(std::strcmp("many bitstream, such data", 503 EXPECT_EQ(memcmp(result, "many bitstream, such data", sizeof(result)), 0);
476 reinterpret_cast<char*>(result)),
477 0);
478 } 504 }
479 505
480 TEST_F(TestPacketBuffer, FreeSlotsOnFrameDestruction) { 506 TEST_F(TestPacketBuffer, FreeSlotsOnFrameDestruction) {
481 uint16_t seq_num = Rand(); 507 uint16_t seq_num = Rand();
482 508
483 // seq_num , kf, frst, lst 509 // seq_num , kf, frst, lst
484 InsertGeneric(seq_num , kT, kT , kF); 510 InsertGeneric(seq_num , kT, kT , kF);
485 InsertGeneric(seq_num + 1, kF, kF , kF); 511 InsertGeneric(seq_num + 1, kF, kF , kF);
486 InsertGeneric(seq_num + 2, kF, kF , kT); 512 InsertGeneric(seq_num + 2, kF, kF , kT);
487 EXPECT_EQ(1UL, frames_from_callback_.size()); 513 EXPECT_EQ(1UL, frames_from_callback_.size());
(...skipping 20 matching lines...) Expand all
508 534
509 // seq_num , kf, frst, lst 535 // seq_num , kf, frst, lst
510 InsertGeneric(seq_num + kStartSize , kT, kT , kF); 536 InsertGeneric(seq_num + kStartSize , kT, kT , kF);
511 InsertGeneric(seq_num + kStartSize + 1, kF, kF , kF); 537 InsertGeneric(seq_num + kStartSize + 1, kF, kF , kF);
512 InsertGeneric(seq_num + kStartSize + 2, kF, kF , kT); 538 InsertGeneric(seq_num + kStartSize + 2, kF, kF , kT);
513 EXPECT_EQ(2UL, frames_from_callback_.size()); 539 EXPECT_EQ(2UL, frames_from_callback_.size());
514 } 540 }
515 541
516 TEST_F(TestPacketBuffer, InvalidateFrameByClearing) { 542 TEST_F(TestPacketBuffer, InvalidateFrameByClearing) {
517 VCMPacket packet; 543 VCMPacket packet;
544 packet.dataPtr = dummy_data_.get();
545 packet.sizeBytes = kDummyDataSize;
518 packet.codec = kVideoCodecGeneric; 546 packet.codec = kVideoCodecGeneric;
519 packet.frameType = kVideoFrameKey; 547 packet.frameType = kVideoFrameKey;
520 packet.isFirstPacket = kT; 548 packet.isFirstPacket = kT;
521 packet.markerBit = kT; 549 packet.markerBit = kT;
522 packet.seqNum = Rand(); 550 packet.seqNum = Rand();
523 EXPECT_TRUE(packet_buffer_->InsertPacket(packet)); 551 EXPECT_TRUE(packet_buffer_->InsertPacket(packet));
524 ASSERT_EQ(1UL, frames_from_callback_.size()); 552 ASSERT_EQ(1UL, frames_from_callback_.size());
525 553
526 packet_buffer_->Clear(); 554 packet_buffer_->Clear();
527 EXPECT_FALSE(frames_from_callback_.begin()->second->GetBitstream(nullptr)); 555 EXPECT_FALSE(frames_from_callback_.begin()->second->GetBitstream(nullptr));
528 } 556 }
529 557
558 TEST_F(TestPacketBuffer, PaddingPackets) {
559 uint16_t seq_num = Rand();
560
561 // seq_num , kf, frst, lst
562 InsertGeneric(seq_num , kT, kT , kT);
563 InsertGeneric(seq_num + 1, kF, kF , kF, 0, nullptr);
564 InsertGeneric(seq_num + 3, kF, kT , kT);
565 EXPECT_EQ(1UL, frames_from_callback_.size());
566 InsertGeneric(seq_num + 2, kF, kF , kF, 0, nullptr);
567 EXPECT_EQ(2UL, frames_from_callback_.size());
568 }
569
570 TEST_F(TestPacketBuffer, PaddingPacketsReordered) {
571 uint16_t seq_num = Rand();
572
573 // seq_num , kf, frst, lst
574 InsertGeneric(seq_num , kT, kT , kT);
575 InsertGeneric(seq_num + 1, kF, kF , kF, 0, nullptr);
576 InsertGeneric(seq_num + 2, kF, kT , kF);
577 InsertGeneric(seq_num + 4, kF, kF , kF, 0, nullptr);
578 InsertGeneric(seq_num + 3, kF, kF , kT);
579 EXPECT_EQ(2UL, frames_from_callback_.size());
580 CheckReferencesGeneric(seq_num);
581 CheckReferencesGeneric(seq_num + 3, seq_num);
582 }
583
584 TEST_F(TestPacketBuffer, PaddingPacketsReorderedMultipleKeyframes) {
585 uint16_t seq_num = Rand();
586
587 // seq_num , kf, frst, lst
588 InsertGeneric(seq_num , kT, kT , kT);
589 InsertGeneric(seq_num + 2, kF, kT , kF);
590 InsertGeneric(seq_num + 1, kF, kF , kF, 0, nullptr);
591 InsertGeneric(seq_num + 4, kF, kF , kF, 0, nullptr);
592 InsertGeneric(seq_num + 5, kT, kT , kT);
593 InsertGeneric(seq_num + 3, kF, kF , kT);
594 InsertGeneric(seq_num + 6, kF, kF , kF, 0, nullptr);
595 InsertGeneric(seq_num + 9, kF, kF , kF, 0, nullptr);
596 InsertGeneric(seq_num + 8, kF, kF , kT);
597 InsertGeneric(seq_num + 7, kF, kT , kF);
598 EXPECT_EQ(4UL, frames_from_callback_.size());
599 }
600
530 TEST_F(TestPacketBuffer, Vp8NoPictureId) { 601 TEST_F(TestPacketBuffer, Vp8NoPictureId) {
531 uint16_t seq_num = Rand(); 602 uint16_t seq_num = Rand();
532 603
533 // seq_num , kf, frst, lst 604 // seq_num , kf, frst, lst
534 InsertVp8(seq_num , kT, kT , kF); 605 InsertVp8(seq_num , kT, kT , kF);
535 InsertVp8(seq_num + 1 , kF, kF , kF); 606 InsertVp8(seq_num + 1 , kF, kF , kF);
536 InsertVp8(seq_num + 2 , kF, kF , kT); 607 InsertVp8(seq_num + 2 , kF, kF , kT);
537 ASSERT_EQ(1UL, frames_from_callback_.size()); 608 ASSERT_EQ(1UL, frames_from_callback_.size());
538 609
539 InsertVp8(seq_num + 3 , kF, kT , kF); 610 InsertVp8(seq_num + 3 , kF, kT , kF);
(...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after
1448 CheckReferencesVp9(pid + 5, 1, pid + 4); 1519 CheckReferencesVp9(pid + 5, 1, pid + 4);
1449 CheckReferencesVp9(pid + 6, 0, pid + 4); 1520 CheckReferencesVp9(pid + 6, 0, pid + 4);
1450 CheckReferencesVp9(pid + 6, 1, pid + 5); 1521 CheckReferencesVp9(pid + 6, 1, pid + 5);
1451 CheckReferencesVp9(pid + 7, 1, pid + 6); 1522 CheckReferencesVp9(pid + 7, 1, pid + 6);
1452 CheckReferencesVp9(pid + 8, 0, pid + 6); 1523 CheckReferencesVp9(pid + 8, 0, pid + 6);
1453 CheckReferencesVp9(pid + 8, 1, pid + 7); 1524 CheckReferencesVp9(pid + 8, 1, pid + 7);
1454 } 1525 }
1455 1526
1456 } // namespace video_coding 1527 } // namespace video_coding
1457 } // namespace webrtc 1528 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/rtp_frame_reference_finder.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698