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

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

Issue 2985283002: Unwrap picture ids in the RtpFrameReferencerFinder. (Closed)
Patch Set: . Created 3 years, 4 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
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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 packets_.erase(frame->first_seq_num()); 47 packets_.erase(frame->first_seq_num());
48 } 48 }
49 49
50 private: 50 private:
51 std::map<uint16_t, VCMPacket> packets_; 51 std::map<uint16_t, VCMPacket> packets_;
52 }; 52 };
53 53
54 class TestRtpFrameReferenceFinder : public ::testing::Test, 54 class TestRtpFrameReferenceFinder : public ::testing::Test,
55 public OnCompleteFrameCallback { 55 public OnCompleteFrameCallback {
56 protected: 56 protected:
57 static constexpr int64_t kUnwrappedSequenceStart = 100000;
58
57 TestRtpFrameReferenceFinder() 59 TestRtpFrameReferenceFinder()
58 : rand_(0x8739211), 60 : rand_(0x8739211),
59 ref_packet_buffer_(new FakePacketBuffer()), 61 ref_packet_buffer_(new FakePacketBuffer()),
60 reference_finder_(new RtpFrameReferenceFinder(this)), 62 reference_finder_(new RtpFrameReferenceFinder(this)),
61 frames_from_callback_(FrameComp()) {} 63 frames_from_callback_(FrameComp()) {}
62 64
63 uint16_t Rand() { return rand_.Rand(std::numeric_limits<uint16_t>::max()); } 65 uint16_t Rand() { return rand_.Rand<uint16_t>(); }
64 66
65 void OnCompleteFrame(std::unique_ptr<FrameObject> frame) override { 67 void OnCompleteFrame(std::unique_ptr<FrameObject> frame) override {
66 uint16_t pid = frame->picture_id; 68 int64_t pid = frame->picture_id;
67 uint16_t sidx = frame->spatial_layer; 69 uint16_t sidx = frame->spatial_layer;
68 auto frame_it = frames_from_callback_.find(std::make_pair(pid, sidx)); 70 auto frame_it = frames_from_callback_.find(std::make_pair(pid, sidx));
69 if (frame_it != frames_from_callback_.end()) { 71 if (frame_it != frames_from_callback_.end()) {
70 ADD_FAILURE() << "Already received frame with (pid:sidx): (" << pid << ":" 72 ADD_FAILURE() << "Already received frame with (pid:sidx): (" << pid << ":"
71 << sidx << ")"; 73 << sidx << ")";
72 return; 74 return;
73 } 75 }
74 76
75 frames_from_callback_.insert( 77 frames_from_callback_.insert(
76 std::make_pair(std::make_pair(pid, sidx), std::move(frame))); 78 std::make_pair(std::make_pair(pid, sidx), std::move(frame)));
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 198
197 std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject( 199 std::unique_ptr<RtpFrameObject> frame(new RtpFrameObject(
198 ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0)); 200 ref_packet_buffer_, seq_num_start, seq_num_end, 0, 0, 0));
199 reference_finder_->ManageFrame(std::move(frame)); 201 reference_finder_->ManageFrame(std::move(frame));
200 } 202 }
201 203
202 // Check if a frame with picture id |pid| and spatial index |sidx| has been 204 // Check if a frame with picture id |pid| and spatial index |sidx| has been
203 // delivered from the packet buffer, and if so, if it has the references 205 // delivered from the packet buffer, and if so, if it has the references
204 // specified by |refs|. 206 // specified by |refs|.
205 template <typename... T> 207 template <typename... T>
206 void CheckReferences(uint16_t pid, uint16_t sidx, T... refs) const { 208 void CheckReferences(int64_t picture_id_offset,
209 uint16_t sidx,
210 T... refs) const {
211 int64_t pid = kUnwrappedSequenceStart + picture_id_offset;
207 auto frame_it = frames_from_callback_.find(std::make_pair(pid, sidx)); 212 auto frame_it = frames_from_callback_.find(std::make_pair(pid, sidx));
208 if (frame_it == frames_from_callback_.end()) { 213 if (frame_it == frames_from_callback_.end()) {
209 ADD_FAILURE() << "Could not find frame with (pid:sidx): (" << pid << ":" 214 ADD_FAILURE() << "Could not find frame with (pid:sidx): (" << pid << ":"
210 << sidx << ")"; 215 << sidx << ")";
211 return; 216 return;
212 } 217 }
213 218
214 std::set<uint16_t> actual_refs; 219 std::set<int64_t> actual_refs;
terelius 2017/08/18 11:53:16 You could consider typedefing PictureId to int64_t
philipel 2017/08/24 10:46:10 I think that might be a good idea, but I think it
215 for (uint8_t r = 0; r < frame_it->second->num_references; ++r) { 220 for (uint8_t r = 0; r < frame_it->second->num_references; ++r)
216 actual_refs.insert(frame_it->second->references[r]); 221 actual_refs.insert(frame_it->second->references[r]);
217 }
218 222
219 std::set<uint16_t> expected_refs; 223 std::set<int64_t> expected_refs;
220 RefsToSet(&expected_refs, refs...); 224 RefsToSet(&expected_refs, refs...);
221 225
222 ASSERT_EQ(expected_refs, actual_refs); 226 ASSERT_EQ(expected_refs, actual_refs);
223 } 227 }
224 228
225 template <typename... T> 229 template <typename... T>
226 void CheckReferencesGeneric(uint16_t pid, T... refs) const { 230 void CheckReferencesGeneric(int64_t pid, T... refs) const {
227 CheckReferences(pid, 0, refs...); 231 CheckReferences(pid, 0, refs...);
228 } 232 }
229 233
230 template <typename... T> 234 template <typename... T>
231 void CheckReferencesVp8(uint16_t pid, T... refs) const { 235 void CheckReferencesVp8(int64_t pid, T... refs) const {
232 CheckReferences(pid, 0, refs...); 236 CheckReferences(pid, 0, refs...);
233 } 237 }
234 238
235 template <typename... T> 239 template <typename... T>
236 void CheckReferencesVp9(uint16_t pid, uint8_t sidx, T... refs) const { 240 void CheckReferencesVp9(int64_t pid, uint8_t sidx, T... refs) const {
237 CheckReferences(pid, sidx, refs...); 241 CheckReferences(pid, sidx, refs...);
238 } 242 }
239 243
240 template <typename... T> 244 template <typename... T>
241 void RefsToSet(std::set<uint16_t>* m, uint16_t ref, T... refs) const { 245 void RefsToSet(std::set<int64_t>* m, int64_t ref, T... refs) const {
242 m->insert(ref); 246 m->insert(ref + kUnwrappedSequenceStart);
243 RefsToSet(m, refs...); 247 RefsToSet(m, refs...);
244 } 248 }
245 249
246 void RefsToSet(std::set<uint16_t>* m) const {} 250 void RefsToSet(std::set<int64_t>* m) const {}
247 251
248 Random rand_; 252 Random rand_;
249 rtc::scoped_refptr<FakePacketBuffer> ref_packet_buffer_; 253 rtc::scoped_refptr<FakePacketBuffer> ref_packet_buffer_;
250 std::unique_ptr<RtpFrameReferenceFinder> reference_finder_; 254 std::unique_ptr<RtpFrameReferenceFinder> reference_finder_;
251 struct FrameComp { 255 struct FrameComp {
252 bool operator()(const std::pair<uint16_t, uint8_t> f1, 256 bool operator()(const std::pair<int64_t, uint8_t> f1,
253 const std::pair<uint16_t, uint8_t> f2) const { 257 const std::pair<int64_t, uint8_t> f2) const {
254 if (f1.first == f2.first) 258 if (f1.first == f2.first)
255 return f1.second < f2.second; 259 return f1.second < f2.second;
256 return f1.first < f2.first; 260 return f1.first < f2.first;
257 } 261 }
258 }; 262 };
259 std::map<std::pair<uint16_t, uint8_t>, 263 std::map<std::pair<int64_t, uint8_t>, std::unique_ptr<FrameObject>, FrameComp>
260 std::unique_ptr<FrameObject>,
261 FrameComp>
262 frames_from_callback_; 264 frames_from_callback_;
263 }; 265 };
264 266
265 TEST_F(TestRtpFrameReferenceFinder, PaddingPackets) { 267 TEST_F(TestRtpFrameReferenceFinder, PaddingPackets) {
266 uint16_t sn = Rand(); 268 uint16_t sn = Rand();
267 269
268 InsertGeneric(sn, sn, true); 270 InsertGeneric(sn, sn, true);
269 InsertGeneric(sn + 2, sn + 2, false); 271 InsertGeneric(sn + 2, sn + 2, false);
270 EXPECT_EQ(1UL, frames_from_callback_.size()); 272 EXPECT_EQ(1UL, frames_from_callback_.size());
271 reference_finder_->PaddingReceived(sn + 1); 273 reference_finder_->PaddingReceived(sn + 1);
272 EXPECT_EQ(2UL, frames_from_callback_.size()); 274 EXPECT_EQ(2UL, frames_from_callback_.size());
273 } 275 }
274 276
275 TEST_F(TestRtpFrameReferenceFinder, PaddingPacketsReordered) { 277 TEST_F(TestRtpFrameReferenceFinder, PaddingPacketsReordered) {
276 uint16_t sn = Rand(); 278 uint16_t sn = Rand();
277 279
278 InsertGeneric(sn, sn, true); 280 InsertGeneric(sn, sn, true);
279 reference_finder_->PaddingReceived(sn + 1); 281 reference_finder_->PaddingReceived(sn + 1);
280 reference_finder_->PaddingReceived(sn + 4); 282 reference_finder_->PaddingReceived(sn + 4);
281 InsertGeneric(sn + 2, sn + 3, false); 283 InsertGeneric(sn + 2, sn + 3, false);
282 284
283 EXPECT_EQ(2UL, frames_from_callback_.size()); 285 EXPECT_EQ(2UL, frames_from_callback_.size());
284 CheckReferencesGeneric(sn); 286 CheckReferencesGeneric(0);
285 CheckReferencesGeneric(sn + 3, sn); 287 CheckReferencesGeneric(3, 0);
286 } 288 }
287 289
288 TEST_F(TestRtpFrameReferenceFinder, PaddingPacketsReorderedMultipleKeyframes) { 290 TEST_F(TestRtpFrameReferenceFinder, PaddingPacketsReorderedMultipleKeyframes) {
289 uint16_t sn = Rand(); 291 uint16_t sn = Rand();
290 292
291 InsertGeneric(sn, sn, true); 293 InsertGeneric(sn, sn, true);
292 reference_finder_->PaddingReceived(sn + 1); 294 reference_finder_->PaddingReceived(sn + 1);
293 reference_finder_->PaddingReceived(sn + 4); 295 reference_finder_->PaddingReceived(sn + 4);
294 InsertGeneric(sn + 2, sn + 3, false); 296 InsertGeneric(sn + 2, sn + 3, false);
295 InsertGeneric(sn + 5, sn + 5, true); 297 InsertGeneric(sn + 5, sn + 5, true);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 359
358 InsertVp8(sn + 18, sn + 18, false); 360 InsertVp8(sn + 18, sn + 18, false);
359 ASSERT_EQ(8UL, frames_from_callback_.size()); 361 ASSERT_EQ(8UL, frames_from_callback_.size());
360 362
361 InsertVp8(sn + 19, sn + 20, false); 363 InsertVp8(sn + 19, sn + 20, false);
362 ASSERT_EQ(9UL, frames_from_callback_.size()); 364 ASSERT_EQ(9UL, frames_from_callback_.size());
363 365
364 InsertVp8(sn + 21, sn + 21, false); 366 InsertVp8(sn + 21, sn + 21, false);
365 367
366 ASSERT_EQ(10UL, frames_from_callback_.size()); 368 ASSERT_EQ(10UL, frames_from_callback_.size());
367 CheckReferencesVp8(sn + 2); 369 CheckReferencesVp8(0);
368 CheckReferencesVp8(sn + 4, sn + 2); 370 CheckReferencesVp8(2, 0);
369 CheckReferencesVp8(sn + 8, sn + 4); 371 CheckReferencesVp8(6, 2);
370 CheckReferencesVp8(sn + 9, sn + 8); 372 CheckReferencesVp8(7, 6);
371 CheckReferencesVp8(sn + 11, sn + 9); 373 CheckReferencesVp8(9, 7);
372 CheckReferencesVp8(sn + 12); 374 CheckReferencesVp8(10);
373 CheckReferencesVp8(sn + 17, sn + 12); 375 CheckReferencesVp8(15, 10);
374 CheckReferencesVp8(sn + 18, sn + 17); 376 CheckReferencesVp8(16, 15);
375 CheckReferencesVp8(sn + 20, sn + 18); 377 CheckReferencesVp8(18, 16);
376 CheckReferencesVp8(sn + 21, sn + 20); 378 CheckReferencesVp8(19, 18);
377 } 379 }
378 380
379 TEST_F(TestRtpFrameReferenceFinder, Vp8NoPictureIdReordered) { 381 TEST_F(TestRtpFrameReferenceFinder, Vp8NoPictureIdReordered) {
380 uint16_t sn = 0xfffa; 382 uint16_t sn = 0xfffa;
381 383
382 InsertVp8(sn, sn + 2, true); 384 InsertVp8(sn, sn + 2, true);
383 InsertVp8(sn + 3, sn + 4, false); 385 InsertVp8(sn + 3, sn + 4, false);
384 InsertVp8(sn + 5, sn + 8, false); 386 InsertVp8(sn + 5, sn + 8, false);
385 InsertVp8(sn + 9, sn + 9, false); 387 InsertVp8(sn + 9, sn + 9, false);
386 InsertVp8(sn + 10, sn + 11, false); 388 InsertVp8(sn + 10, sn + 11, false);
387 InsertVp8(sn + 12, sn + 12, true); 389 InsertVp8(sn + 12, sn + 12, true);
388 InsertVp8(sn + 13, sn + 17, false); 390 InsertVp8(sn + 13, sn + 17, false);
389 InsertVp8(sn + 18, sn + 18, false); 391 InsertVp8(sn + 18, sn + 18, false);
390 InsertVp8(sn + 19, sn + 20, false); 392 InsertVp8(sn + 19, sn + 20, false);
391 InsertVp8(sn + 21, sn + 21, false); 393 InsertVp8(sn + 21, sn + 21, false);
392 394
393 ASSERT_EQ(10UL, frames_from_callback_.size()); 395 ASSERT_EQ(10UL, frames_from_callback_.size());
394 CheckReferencesVp8(sn + 2); 396 CheckReferencesVp8(0);
395 CheckReferencesVp8(sn + 4, sn + 2); 397 CheckReferencesVp8(2, 0);
396 CheckReferencesVp8(sn + 8, sn + 4); 398 CheckReferencesVp8(6, 2);
397 CheckReferencesVp8(sn + 9, sn + 8); 399 CheckReferencesVp8(7, 6);
398 CheckReferencesVp8(sn + 11, sn + 9); 400 CheckReferencesVp8(9, 7);
399 CheckReferencesVp8(sn + 12); 401 CheckReferencesVp8(10);
400 CheckReferencesVp8(sn + 17, sn + 12); 402 CheckReferencesVp8(15, 10);
401 CheckReferencesVp8(sn + 18, sn + 17); 403 CheckReferencesVp8(16, 15);
402 CheckReferencesVp8(sn + 20, sn + 18); 404 CheckReferencesVp8(18, 16);
403 CheckReferencesVp8(sn + 21, sn + 20); 405 CheckReferencesVp8(19, 18);
404 } 406 }
405 407
406 TEST_F(TestRtpFrameReferenceFinder, Vp8KeyFrameReferences) { 408 TEST_F(TestRtpFrameReferenceFinder, Vp8KeyFrameReferences) {
407 uint16_t sn = Rand(); 409 uint16_t sn = Rand();
408 InsertVp8(sn, sn, true); 410 InsertVp8(sn, sn, true);
409 411
410 ASSERT_EQ(1UL, frames_from_callback_.size()); 412 ASSERT_EQ(1UL, frames_from_callback_.size());
411 CheckReferencesVp8(sn); 413 CheckReferencesVp8(0);
412 } 414 }
413 415
414 // Test with 1 temporal layer. 416 // Test with 1 temporal layer.
415 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayers_0) { 417 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayers_0) {
416 uint16_t pid = Rand(); 418 uint16_t pid = Rand();
417 uint16_t sn = Rand(); 419 uint16_t sn = Rand();
418 420
419 InsertVp8(sn, sn, true, pid, 0, 1); 421 InsertVp8(sn, sn, true, pid, 0, 1);
420 InsertVp8(sn + 1, sn + 1, false, pid + 1, 0, 2); 422 InsertVp8(sn + 1, sn + 1, false, pid + 1, 0, 2);
421 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 3); 423 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 3);
422 InsertVp8(sn + 3, sn + 3, false, pid + 3, 0, 4); 424 InsertVp8(sn + 3, sn + 3, false, pid + 3, 0, 4);
423 425
424 ASSERT_EQ(4UL, frames_from_callback_.size()); 426 ASSERT_EQ(4UL, frames_from_callback_.size());
425 CheckReferencesVp8(pid); 427 CheckReferencesVp8(0);
426 CheckReferencesVp8(pid + 1, pid); 428 CheckReferencesVp8(1, 0);
427 CheckReferencesVp8(pid + 2, pid + 1); 429 CheckReferencesVp8(2, 1);
428 CheckReferencesVp8(pid + 3, pid + 2); 430 CheckReferencesVp8(3, 2);
429 } 431 }
430 432
431 TEST_F(TestRtpFrameReferenceFinder, Vp8DuplicateTl1Frames) { 433 TEST_F(TestRtpFrameReferenceFinder, Vp8DuplicateTl1Frames) {
432 uint16_t pid = Rand(); 434 uint16_t pid = Rand();
433 uint16_t sn = Rand(); 435 uint16_t sn = Rand();
434 436
435 InsertVp8(sn, sn, true, pid, 0, 0); 437 InsertVp8(sn, sn, true, pid, 0, 0);
436 InsertVp8(sn + 1, sn + 1, false, pid + 1, 1, 0, true); 438 InsertVp8(sn + 1, sn + 1, false, pid + 1, 1, 0, true);
437 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 1); 439 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 1);
438 InsertVp8(sn + 3, sn + 3, false, pid + 3, 1, 1); 440 InsertVp8(sn + 3, sn + 3, false, pid + 3, 1, 1);
439 InsertVp8(sn + 3, sn + 3, false, pid + 3, 1, 1); 441 InsertVp8(sn + 3, sn + 3, false, pid + 3, 1, 1);
440 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 2); 442 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 2);
441 InsertVp8(sn + 5, sn + 5, false, pid + 5, 1, 2); 443 InsertVp8(sn + 5, sn + 5, false, pid + 5, 1, 2);
442 444
443 ASSERT_EQ(6UL, frames_from_callback_.size()); 445 ASSERT_EQ(6UL, frames_from_callback_.size());
444 CheckReferencesVp8(pid); 446 CheckReferencesVp8(0);
445 CheckReferencesVp8(pid + 1, pid); 447 CheckReferencesVp8(1, 0);
446 CheckReferencesVp8(pid + 2, pid); 448 CheckReferencesVp8(2, 0);
447 CheckReferencesVp8(pid + 3, pid + 1, pid + 2); 449 CheckReferencesVp8(3, 1, 2);
448 CheckReferencesVp8(pid + 4, pid + 2); 450 CheckReferencesVp8(4, 2);
449 CheckReferencesVp8(pid + 5, pid + 3, pid + 4); 451 CheckReferencesVp8(5, 3, 4);
450 } 452 }
451 453
452 // Test with 1 temporal layer. 454 // Test with 1 temporal layer.
453 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayersReordering_0) { 455 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayersReordering_0) {
454 uint16_t pid = Rand(); 456 uint16_t pid = Rand();
455 uint16_t sn = Rand(); 457 uint16_t sn = Rand();
456 458
457 InsertVp8(sn, sn, true, pid, 0, 1); 459 InsertVp8(sn, sn, true, pid, 0, 1);
458 InsertVp8(sn + 1, sn + 1, false, pid + 1, 0, 2); 460 InsertVp8(sn + 1, sn + 1, false, pid + 1, 0, 2);
459 InsertVp8(sn + 3, sn + 3, false, pid + 3, 0, 4); 461 InsertVp8(sn + 3, sn + 3, false, pid + 3, 0, 4);
460 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 3); 462 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 3);
461 InsertVp8(sn + 5, sn + 5, false, pid + 5, 0, 6); 463 InsertVp8(sn + 5, sn + 5, false, pid + 5, 0, 6);
462 InsertVp8(sn + 6, sn + 6, false, pid + 6, 0, 7); 464 InsertVp8(sn + 6, sn + 6, false, pid + 6, 0, 7);
463 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 5); 465 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 5);
464 466
465 ASSERT_EQ(7UL, frames_from_callback_.size()); 467 ASSERT_EQ(7UL, frames_from_callback_.size());
466 CheckReferencesVp8(pid); 468 CheckReferencesVp8(0);
467 CheckReferencesVp8(pid + 1, pid); 469 CheckReferencesVp8(1, 0);
468 CheckReferencesVp8(pid + 2, pid + 1); 470 CheckReferencesVp8(2, 1);
469 CheckReferencesVp8(pid + 3, pid + 2); 471 CheckReferencesVp8(3, 2);
470 CheckReferencesVp8(pid + 4, pid + 3); 472 CheckReferencesVp8(4, 3);
471 CheckReferencesVp8(pid + 5, pid + 4); 473 CheckReferencesVp8(5, 4);
472 CheckReferencesVp8(pid + 6, pid + 5); 474 CheckReferencesVp8(6, 5);
473 } 475 }
474 476
475 // Test with 2 temporal layers in a 01 pattern. 477 // Test with 2 temporal layers in a 01 pattern.
476 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayers_01) { 478 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayers_01) {
477 uint16_t pid = Rand(); 479 uint16_t pid = Rand();
478 uint16_t sn = Rand(); 480 uint16_t sn = Rand();
479 481
480 InsertVp8(sn, sn, true, pid, 0, 255); 482 InsertVp8(sn, sn, true, pid, 0, 255);
481 InsertVp8(sn + 1, sn + 1, false, pid + 1, 1, 255, true); 483 InsertVp8(sn + 1, sn + 1, false, pid + 1, 1, 255, true);
482 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 0); 484 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 0);
483 InsertVp8(sn + 3, sn + 3, false, pid + 3, 1, 0); 485 InsertVp8(sn + 3, sn + 3, false, pid + 3, 1, 0);
484 486
485 ASSERT_EQ(4UL, frames_from_callback_.size()); 487 ASSERT_EQ(4UL, frames_from_callback_.size());
486 CheckReferencesVp8(pid); 488 CheckReferencesVp8(0);
487 CheckReferencesVp8(pid + 1, pid); 489 CheckReferencesVp8(1, 0);
488 CheckReferencesVp8(pid + 2, pid); 490 CheckReferencesVp8(2, 0);
489 CheckReferencesVp8(pid + 3, pid + 1, pid + 2); 491 CheckReferencesVp8(3, 1, 2);
490 } 492 }
491 493
492 // Test with 2 temporal layers in a 01 pattern. 494 // Test with 2 temporal layers in a 01 pattern.
493 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayersReordering_01) { 495 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayersReordering_01) {
494 uint16_t pid = Rand(); 496 uint16_t pid = Rand();
495 uint16_t sn = Rand(); 497 uint16_t sn = Rand();
496 498
497 InsertVp8(sn + 1, sn + 1, false, pid + 1, 1, 255, true); 499 InsertVp8(sn + 1, sn + 1, false, pid + 1, 1, 255, true);
498 InsertVp8(sn, sn, true, pid, 0, 255); 500 InsertVp8(sn, sn, true, pid, 0, 255);
499 InsertVp8(sn + 3, sn + 3, false, pid + 3, 1, 0); 501 InsertVp8(sn + 3, sn + 3, false, pid + 3, 1, 0);
500 InsertVp8(sn + 5, sn + 5, false, pid + 5, 1, 1); 502 InsertVp8(sn + 5, sn + 5, false, pid + 5, 1, 1);
501 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 0); 503 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 0);
502 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 1); 504 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 1);
503 InsertVp8(sn + 6, sn + 6, false, pid + 6, 0, 2); 505 InsertVp8(sn + 6, sn + 6, false, pid + 6, 0, 2);
504 InsertVp8(sn + 7, sn + 7, false, pid + 7, 1, 2); 506 InsertVp8(sn + 7, sn + 7, false, pid + 7, 1, 2);
505 507
506 ASSERT_EQ(8UL, frames_from_callback_.size()); 508 ASSERT_EQ(8UL, frames_from_callback_.size());
507 CheckReferencesVp8(pid); 509 CheckReferencesVp8(0);
508 CheckReferencesVp8(pid + 1, pid); 510 CheckReferencesVp8(1, 0);
509 CheckReferencesVp8(pid + 2, pid); 511 CheckReferencesVp8(2, 0);
510 CheckReferencesVp8(pid + 3, pid + 1, pid + 2); 512 CheckReferencesVp8(3, 1, 2);
511 CheckReferencesVp8(pid + 4, pid + 2); 513 CheckReferencesVp8(4, 2);
512 CheckReferencesVp8(pid + 5, pid + 3, pid + 4); 514 CheckReferencesVp8(5, 3, 4);
513 CheckReferencesVp8(pid + 6, pid + 4); 515 CheckReferencesVp8(6, 4);
514 CheckReferencesVp8(pid + 7, pid + 5, pid + 6); 516 CheckReferencesVp8(7, 5, 6);
515 } 517 }
516 518
517 // Test with 3 temporal layers in a 0212 pattern. 519 // Test with 3 temporal layers in a 0212 pattern.
518 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayers_0212) { 520 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayers_0212) {
519 uint16_t pid = Rand(); 521 uint16_t pid = Rand();
520 uint16_t sn = Rand(); 522 uint16_t sn = Rand();
521 523
522 InsertVp8(sn, sn, true, pid, 0, 55); 524 InsertVp8(sn, sn, true, pid, 0, 55);
523 InsertVp8(sn + 1, sn + 1, false, pid + 1, 2, 55, true); 525 InsertVp8(sn + 1, sn + 1, false, pid + 1, 2, 55, true);
524 InsertVp8(sn + 2, sn + 2, false, pid + 2, 1, 55, true); 526 InsertVp8(sn + 2, sn + 2, false, pid + 2, 1, 55, true);
525 InsertVp8(sn + 3, sn + 3, false, pid + 3, 2, 55); 527 InsertVp8(sn + 3, sn + 3, false, pid + 3, 2, 55);
526 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 56); 528 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 56);
527 InsertVp8(sn + 5, sn + 5, false, pid + 5, 2, 56); 529 InsertVp8(sn + 5, sn + 5, false, pid + 5, 2, 56);
528 InsertVp8(sn + 6, sn + 6, false, pid + 6, 1, 56); 530 InsertVp8(sn + 6, sn + 6, false, pid + 6, 1, 56);
529 InsertVp8(sn + 7, sn + 7, false, pid + 7, 2, 56); 531 InsertVp8(sn + 7, sn + 7, false, pid + 7, 2, 56);
530 InsertVp8(sn + 8, sn + 8, false, pid + 8, 0, 57); 532 InsertVp8(sn + 8, sn + 8, false, pid + 8, 0, 57);
531 InsertVp8(sn + 9, sn + 9, false, pid + 9, 2, 57, true); 533 InsertVp8(sn + 9, sn + 9, false, pid + 9, 2, 57, true);
532 InsertVp8(sn + 10, sn + 10, false, pid + 10, 1, 57, true); 534 InsertVp8(sn + 10, sn + 10, false, pid + 10, 1, 57, true);
533 InsertVp8(sn + 11, sn + 11, false, pid + 11, 2, 57); 535 InsertVp8(sn + 11, sn + 11, false, pid + 11, 2, 57);
534 536
535 ASSERT_EQ(12UL, frames_from_callback_.size()); 537 ASSERT_EQ(12UL, frames_from_callback_.size());
536 CheckReferencesVp8(pid); 538 CheckReferencesVp8(0);
537 CheckReferencesVp8(pid + 1, pid); 539 CheckReferencesVp8(1, 0);
538 CheckReferencesVp8(pid + 2, pid); 540 CheckReferencesVp8(2, 0);
539 CheckReferencesVp8(pid + 3, pid, pid + 1, pid + 2); 541 CheckReferencesVp8(3, 0, 1, 2);
540 CheckReferencesVp8(pid + 4, pid); 542 CheckReferencesVp8(4, 0);
541 CheckReferencesVp8(pid + 5, pid + 2, pid + 3, pid + 4); 543 CheckReferencesVp8(5, 2, 3, 4);
542 CheckReferencesVp8(pid + 6, pid + 2, pid + 4); 544 CheckReferencesVp8(6, 2, 4);
543 CheckReferencesVp8(pid + 7, pid + 4, pid + 5, pid + 6); 545 CheckReferencesVp8(7, 4, 5, 6);
544 CheckReferencesVp8(pid + 8, pid + 4); 546 CheckReferencesVp8(8, 4);
545 CheckReferencesVp8(pid + 9, pid + 8); 547 CheckReferencesVp8(9, 8);
546 CheckReferencesVp8(pid + 10, pid + 8); 548 CheckReferencesVp8(10, 8);
547 CheckReferencesVp8(pid + 11, pid + 8, pid + 9, pid + 10); 549 CheckReferencesVp8(11, 8, 9, 10);
548 } 550 }
549 551
550 // Test with 3 temporal layers in a 0212 pattern. 552 // Test with 3 temporal layers in a 0212 pattern.
551 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayersMissingFrame_0212) { 553 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayersMissingFrame_0212) {
552 uint16_t pid = Rand(); 554 uint16_t pid = Rand();
553 uint16_t sn = Rand(); 555 uint16_t sn = Rand();
554 556
555 InsertVp8(sn, sn, true, pid, 0, 55, false); 557 InsertVp8(sn, sn, true, pid, 0, 55, false);
556 InsertVp8(sn + 2, sn + 2, false, pid + 2, 1, 55, true); 558 InsertVp8(sn + 2, sn + 2, false, pid + 2, 1, 55, true);
557 InsertVp8(sn + 3, sn + 3, false, pid + 3, 2, 55, false); 559 InsertVp8(sn + 3, sn + 3, false, pid + 3, 2, 55, false);
558 560
559 ASSERT_EQ(2UL, frames_from_callback_.size()); 561 ASSERT_EQ(2UL, frames_from_callback_.size());
560 CheckReferencesVp8(pid); 562 CheckReferencesVp8(0);
561 CheckReferencesVp8(pid + 2, pid); 563 CheckReferencesVp8(2, 0);
562 } 564 }
563 565
564 // Test with 3 temporal layers in a 0212 pattern. 566 // Test with 3 temporal layers in a 0212 pattern.
565 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayersReordering_0212) { 567 TEST_F(TestRtpFrameReferenceFinder, Vp8TemporalLayersReordering_0212) {
566 uint16_t pid = 126; 568 uint16_t pid = 126;
567 uint16_t sn = Rand(); 569 uint16_t sn = Rand();
568 570
569 InsertVp8(sn + 1, sn + 1, false, pid + 1, 2, 55, true); 571 InsertVp8(sn + 1, sn + 1, false, pid + 1, 2, 55, true);
570 InsertVp8(sn, sn, true, pid, 0, 55, false); 572 InsertVp8(sn, sn, true, pid, 0, 55, false);
571 InsertVp8(sn + 2, sn + 2, false, pid + 2, 1, 55, true); 573 InsertVp8(sn + 2, sn + 2, false, pid + 2, 1, 55, true);
572 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 56, false); 574 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 56, false);
573 InsertVp8(sn + 5, sn + 5, false, pid + 5, 2, 56, false); 575 InsertVp8(sn + 5, sn + 5, false, pid + 5, 2, 56, false);
574 InsertVp8(sn + 3, sn + 3, false, pid + 3, 2, 55, false); 576 InsertVp8(sn + 3, sn + 3, false, pid + 3, 2, 55, false);
575 InsertVp8(sn + 7, sn + 7, false, pid + 7, 2, 56, false); 577 InsertVp8(sn + 7, sn + 7, false, pid + 7, 2, 56, false);
576 InsertVp8(sn + 9, sn + 9, false, pid + 9, 2, 57, true); 578 InsertVp8(sn + 9, sn + 9, false, pid + 9, 2, 57, true);
577 InsertVp8(sn + 6, sn + 6, false, pid + 6, 1, 56, false); 579 InsertVp8(sn + 6, sn + 6, false, pid + 6, 1, 56, false);
578 InsertVp8(sn + 8, sn + 8, false, pid + 8, 0, 57, false); 580 InsertVp8(sn + 8, sn + 8, false, pid + 8, 0, 57, false);
579 InsertVp8(sn + 11, sn + 11, false, pid + 11, 2, 57, false); 581 InsertVp8(sn + 11, sn + 11, false, pid + 11, 2, 57, false);
580 InsertVp8(sn + 10, sn + 10, false, pid + 10, 1, 57, true); 582 InsertVp8(sn + 10, sn + 10, false, pid + 10, 1, 57, true);
581 583
582 ASSERT_EQ(12UL, frames_from_callback_.size()); 584 ASSERT_EQ(12UL, frames_from_callback_.size());
583 CheckReferencesVp8(pid); 585 CheckReferencesVp8(0);
584 CheckReferencesVp8(pid + 1, pid); 586 CheckReferencesVp8(1, 0);
585 CheckReferencesVp8(pid + 2, pid); 587 CheckReferencesVp8(2, 0);
586 CheckReferencesVp8(pid + 3, pid, pid + 1, pid + 2); 588 CheckReferencesVp8(3, 0, 1, 2);
587 CheckReferencesVp8(pid + 4, pid); 589 CheckReferencesVp8(4, 0);
588 CheckReferencesVp8(pid + 5, pid + 2, pid + 3, pid + 4); 590 CheckReferencesVp8(5, 2, 3, 4);
589 CheckReferencesVp8(pid + 6, pid + 2, pid + 4); 591 CheckReferencesVp8(6, 2, 4);
590 CheckReferencesVp8(pid + 7, pid + 4, pid + 5, pid + 6); 592 CheckReferencesVp8(7, 4, 5, 6);
591 CheckReferencesVp8(pid + 8, pid + 4); 593 CheckReferencesVp8(8, 4);
592 CheckReferencesVp8(pid + 9, pid + 8); 594 CheckReferencesVp8(9, 8);
593 CheckReferencesVp8(pid + 10, pid + 8); 595 CheckReferencesVp8(10, 8);
594 CheckReferencesVp8(pid + 11, pid + 8, pid + 9, pid + 10); 596 CheckReferencesVp8(11, 8, 9, 10);
595 } 597 }
596 598
597 TEST_F(TestRtpFrameReferenceFinder, Vp8InsertManyFrames_0212) { 599 TEST_F(TestRtpFrameReferenceFinder, Vp8InsertManyFrames_0212) {
598 uint16_t pid = Rand(); 600 uint16_t pid = Rand();
599 uint16_t sn = Rand(); 601 uint16_t sn = Rand();
600 602
601 const int keyframes_to_insert = 50; 603 const int keyframes_to_insert = 50;
602 const int frames_per_keyframe = 120; // Should be a multiple of 4. 604 const int frames_per_keyframe = 120; // Should be a multiple of 4.
605 int64_t offset = 0;
603 uint8_t tl0 = 128; 606 uint8_t tl0 = 128;
604 607
605 for (int k = 0; k < keyframes_to_insert; ++k) { 608 for (int k = 0; k < keyframes_to_insert; ++k) {
606 InsertVp8(sn, sn, true, pid, 0, tl0, false); 609 InsertVp8(sn, sn, true, pid, 0, tl0, false);
607 InsertVp8(sn + 1, sn + 1, false, pid + 1, 2, tl0, true); 610 InsertVp8(sn + 1, sn + 1, false, pid + 1, 2, tl0, true);
608 InsertVp8(sn + 2, sn + 2, false, pid + 2, 1, tl0, true); 611 InsertVp8(sn + 2, sn + 2, false, pid + 2, 1, tl0, true);
609 InsertVp8(sn + 3, sn + 3, false, pid + 3, 2, tl0, false); 612 InsertVp8(sn + 3, sn + 3, false, pid + 3, 2, tl0, false);
610 CheckReferencesVp8(pid); 613 CheckReferencesVp8(offset);
611 CheckReferencesVp8(pid + 1, pid); 614 CheckReferencesVp8(offset + 1, offset);
612 CheckReferencesVp8(pid + 2, pid); 615 CheckReferencesVp8(offset + 2, offset);
613 CheckReferencesVp8(pid + 3, pid, pid + 1, pid + 2); 616 CheckReferencesVp8(offset + 3, offset, offset + 1, offset + 2);
614 frames_from_callback_.clear(); 617 frames_from_callback_.clear();
615 ++tl0; 618 ++tl0;
616 619
617 for (int f = 4; f < frames_per_keyframe; f += 4) { 620 for (int f = 4; f < frames_per_keyframe; f += 4) {
618 uint16_t sf = sn + f; 621 uint16_t sf = sn + f;
619 uint16_t pidf = pid + f; 622 uint16_t pidf = pid + f;
623 int64_t offsetf = offset + f;
620 624
621 InsertVp8(sf, sf, false, pidf, 0, tl0, false); 625 InsertVp8(sf, sf, false, pidf, 0, tl0, false);
622 InsertVp8(sf + 1, sf + 1, false, pidf + 1, 2, tl0, false); 626 InsertVp8(sf + 1, sf + 1, false, pidf + 1, 2, tl0, false);
623 InsertVp8(sf + 2, sf + 2, false, pidf + 2, 1, tl0, false); 627 InsertVp8(sf + 2, sf + 2, false, pidf + 2, 1, tl0, false);
624 InsertVp8(sf + 3, sf + 3, false, pidf + 3, 2, tl0, false); 628 InsertVp8(sf + 3, sf + 3, false, pidf + 3, 2, tl0, false);
625 CheckReferencesVp8(pidf, pidf - 4); 629 CheckReferencesVp8(offsetf, offsetf - 4);
626 CheckReferencesVp8(pidf + 1, pidf, pidf - 1, pidf - 2); 630 CheckReferencesVp8(offsetf + 1, offsetf, offsetf - 1, offsetf - 2);
627 CheckReferencesVp8(pidf + 2, pidf, pidf - 2); 631 CheckReferencesVp8(offsetf + 2, offsetf, offsetf - 2);
628 CheckReferencesVp8(pidf + 3, pidf, pidf + 1, pidf + 2); 632 CheckReferencesVp8(offsetf + 3, offsetf, offsetf + 1, offsetf + 2);
629 frames_from_callback_.clear(); 633 frames_from_callback_.clear();
630 ++tl0; 634 ++tl0;
631 } 635 }
632 636
637 offset += frames_per_keyframe;
633 pid += frames_per_keyframe; 638 pid += frames_per_keyframe;
634 sn += frames_per_keyframe; 639 sn += frames_per_keyframe;
635 } 640 }
636 } 641 }
637 642
638 TEST_F(TestRtpFrameReferenceFinder, Vp8LayerSync) { 643 TEST_F(TestRtpFrameReferenceFinder, Vp8LayerSync) {
639 uint16_t pid = Rand(); 644 uint16_t pid = Rand();
640 uint16_t sn = Rand(); 645 uint16_t sn = Rand();
641 646
642 InsertVp8(sn, sn, true, pid, 0, 0, false); 647 InsertVp8(sn, sn, true, pid, 0, 0, false);
643 InsertVp8(sn + 1, sn + 1, false, pid + 1, 1, 0, true); 648 InsertVp8(sn + 1, sn + 1, false, pid + 1, 1, 0, true);
644 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 1, false); 649 InsertVp8(sn + 2, sn + 2, false, pid + 2, 0, 1, false);
645 ASSERT_EQ(3UL, frames_from_callback_.size()); 650 ASSERT_EQ(3UL, frames_from_callback_.size());
646 651
647 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 2, false); 652 InsertVp8(sn + 4, sn + 4, false, pid + 4, 0, 2, false);
648 InsertVp8(sn + 5, sn + 5, false, pid + 5, 1, 2, true); 653 InsertVp8(sn + 5, sn + 5, false, pid + 5, 1, 2, true);
649 InsertVp8(sn + 6, sn + 6, false, pid + 6, 0, 3, false); 654 InsertVp8(sn + 6, sn + 6, false, pid + 6, 0, 3, false);
650 InsertVp8(sn + 7, sn + 7, false, pid + 7, 1, 3, false); 655 InsertVp8(sn + 7, sn + 7, false, pid + 7, 1, 3, false);
651 656
652 ASSERT_EQ(7UL, frames_from_callback_.size()); 657 ASSERT_EQ(7UL, frames_from_callback_.size());
653 CheckReferencesVp8(pid); 658 CheckReferencesVp8(0);
654 CheckReferencesVp8(pid + 1, pid); 659 CheckReferencesVp8(1, 0);
655 CheckReferencesVp8(pid + 2, pid); 660 CheckReferencesVp8(2, 0);
656 CheckReferencesVp8(pid + 4, pid + 2); 661 CheckReferencesVp8(4, 2);
657 CheckReferencesVp8(pid + 5, pid + 4); 662 CheckReferencesVp8(5, 4);
658 CheckReferencesVp8(pid + 6, pid + 4); 663 CheckReferencesVp8(6, 4);
659 CheckReferencesVp8(pid + 7, pid + 6, pid + 5); 664 CheckReferencesVp8(7, 6, 5);
660 } 665 }
661 666
662 TEST_F(TestRtpFrameReferenceFinder, Vp8Tl1SyncFrameAfterTl1Frame) { 667 TEST_F(TestRtpFrameReferenceFinder, Vp8Tl1SyncFrameAfterTl1Frame) {
663 InsertVp8(1000, 1000, true, 1, 0, 247, true); 668 InsertVp8(1000, 1000, true, 1, 0, 247, true);
664 InsertVp8(1001, 1001, false, 3, 0, 248, false); 669 InsertVp8(1001, 1001, false, 3, 0, 248, false);
665 InsertVp8(1002, 1002, false, 4, 1, 248, false); // Will be dropped 670 InsertVp8(1002, 1002, false, 4, 1, 248, false); // Will be dropped
666 InsertVp8(1003, 1003, false, 5, 1, 248, true); // due to this frame. 671 InsertVp8(1003, 1003, false, 5, 1, 248, true); // due to this frame.
667 672
668 ASSERT_EQ(3UL, frames_from_callback_.size()); 673 ASSERT_EQ(3UL, frames_from_callback_.size());
669 CheckReferencesVp8(1); 674 CheckReferencesVp8(0);
670 CheckReferencesVp8(3, 1); 675 CheckReferencesVp8(2, 0);
671 CheckReferencesVp8(5, 3); 676 CheckReferencesVp8(4, 2);
672 } 677 }
673 678
674 TEST_F(TestRtpFrameReferenceFinder, Vp8DetectMissingFrame_0212) { 679 TEST_F(TestRtpFrameReferenceFinder, Vp8DetectMissingFrame_0212) {
675 InsertVp8(1, 1, true, 1, 0, 1, false); 680 InsertVp8(1, 1, true, 1, 0, 1, false);
676 InsertVp8(2, 2, false, 2, 2, 1, true); 681 InsertVp8(2, 2, false, 2, 2, 1, true);
677 InsertVp8(3, 3, false, 3, 1, 1, true); 682 InsertVp8(3, 3, false, 3, 1, 1, true);
678 InsertVp8(4, 4, false, 4, 2, 1, false); 683 InsertVp8(4, 4, false, 4, 2, 1, false);
679 684
680 InsertVp8(6, 6, false, 6, 2, 2, false); 685 InsertVp8(6, 6, false, 6, 2, 2, false);
681 InsertVp8(7, 7, false, 7, 1, 2, false); 686 InsertVp8(7, 7, false, 7, 1, 2, false);
682 InsertVp8(8, 8, false, 8, 2, 2, false); 687 InsertVp8(8, 8, false, 8, 2, 2, false);
683 ASSERT_EQ(4UL, frames_from_callback_.size()); 688 ASSERT_EQ(4UL, frames_from_callback_.size());
684 689
685 InsertVp8(5, 5, false, 5, 0, 2, false); 690 InsertVp8(5, 5, false, 5, 0, 2, false);
686 ASSERT_EQ(8UL, frames_from_callback_.size()); 691 ASSERT_EQ(8UL, frames_from_callback_.size());
687 692
688 CheckReferencesVp8(1); 693 CheckReferencesVp8(0);
689 CheckReferencesVp8(2, 1); 694 CheckReferencesVp8(1, 0);
690 CheckReferencesVp8(3, 1); 695 CheckReferencesVp8(2, 0);
691 CheckReferencesVp8(4, 3, 2, 1); 696 CheckReferencesVp8(3, 2, 1, 0);
692 697
693 CheckReferencesVp8(5, 1); 698 CheckReferencesVp8(4, 0);
694 CheckReferencesVp8(6, 5, 4, 3); 699 CheckReferencesVp8(5, 4, 3, 2);
695 CheckReferencesVp8(7, 5, 3); 700 CheckReferencesVp8(6, 4, 2);
696 CheckReferencesVp8(8, 7, 6, 5); 701 CheckReferencesVp8(7, 6, 5, 4);
697 } 702 }
698 703
699 TEST_F(TestRtpFrameReferenceFinder, Vp9GofInsertOneFrame) { 704 TEST_F(TestRtpFrameReferenceFinder, Vp9GofInsertOneFrame) {
700 uint16_t pid = Rand(); 705 uint16_t pid = Rand();
701 uint16_t sn = Rand(); 706 uint16_t sn = Rand();
702 GofInfoVP9 ss; 707 GofInfoVP9 ss;
703 ss.SetGofInfoVP9(kTemporalStructureMode1); 708 ss.SetGofInfoVP9(kTemporalStructureMode1);
704 709
705 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss); 710 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
706 711
707 CheckReferencesVp9(pid, 0); 712 CheckReferencesVp9(0, 0);
708 } 713 }
709 714
710 TEST_F(TestRtpFrameReferenceFinder, Vp9NoPictureIdReordered) { 715 TEST_F(TestRtpFrameReferenceFinder, Vp9NoPictureIdReordered) {
711 uint16_t sn = 0xfffa; 716 uint16_t sn = 0xfffa;
712 717
713 InsertVp9Gof(sn, sn + 2, true); 718 InsertVp9Gof(sn, sn + 2, true);
714 InsertVp9Gof(sn + 3, sn + 4, false); 719 InsertVp9Gof(sn + 3, sn + 4, false);
715 InsertVp9Gof(sn + 9, sn + 9, false); 720 InsertVp9Gof(sn + 9, sn + 9, false);
716 InsertVp9Gof(sn + 5, sn + 8, false); 721 InsertVp9Gof(sn + 5, sn + 8, false);
717 InsertVp9Gof(sn + 12, sn + 12, true); 722 InsertVp9Gof(sn + 12, sn + 12, true);
718 InsertVp9Gof(sn + 10, sn + 11, false); 723 InsertVp9Gof(sn + 10, sn + 11, false);
719 InsertVp9Gof(sn + 13, sn + 17, false); 724 InsertVp9Gof(sn + 13, sn + 17, false);
720 InsertVp9Gof(sn + 19, sn + 20, false); 725 InsertVp9Gof(sn + 19, sn + 20, false);
721 InsertVp9Gof(sn + 21, sn + 21, false); 726 InsertVp9Gof(sn + 21, sn + 21, false);
722 InsertVp9Gof(sn + 18, sn + 18, false); 727 InsertVp9Gof(sn + 18, sn + 18, false);
723 728
724 ASSERT_EQ(10UL, frames_from_callback_.size()); 729 ASSERT_EQ(10UL, frames_from_callback_.size());
725 CheckReferencesVp9(sn + 2, 0); 730 CheckReferencesVp9(0, 0);
726 CheckReferencesVp9(sn + 4, 0, sn + 2); 731 CheckReferencesVp9(2, 0, 0);
727 CheckReferencesVp9(sn + 8, 0, sn + 4); 732 CheckReferencesVp9(6, 0, 2);
728 CheckReferencesVp9(sn + 9, 0, sn + 8); 733 CheckReferencesVp9(7, 0, 6);
729 CheckReferencesVp9(sn + 11, 0, sn + 9); 734 CheckReferencesVp9(9, 0, 7);
730 CheckReferencesVp9(sn + 12, 0); 735 CheckReferencesVp9(10, 0);
731 CheckReferencesVp9(sn + 17, 0, sn + 12); 736 CheckReferencesVp9(15, 0, 10);
732 CheckReferencesVp9(sn + 18, 0, sn + 17); 737 CheckReferencesVp9(16, 0, 15);
733 CheckReferencesVp9(sn + 20, 0, sn + 18); 738 CheckReferencesVp9(18, 0, 16);
734 CheckReferencesVp9(sn + 21, 0, sn + 20); 739 CheckReferencesVp9(19, 0, 18);
735 } 740 }
736 741
737 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayers_0) { 742 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayers_0) {
738 uint16_t pid = Rand(); 743 uint16_t pid = Rand();
739 uint16_t sn = Rand(); 744 uint16_t sn = Rand();
740 GofInfoVP9 ss; 745 GofInfoVP9 ss;
741 ss.SetGofInfoVP9(kTemporalStructureMode1); // Only 1 spatial layer. 746 ss.SetGofInfoVP9(kTemporalStructureMode1); // Only 1 spatial layer.
742 747
743 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss); 748 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
744 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 0, 1, false); 749 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 0, 1, false);
(...skipping 10 matching lines...) Expand all
755 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 12, false); 760 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 12, false);
756 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 0, 13, false); 761 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 0, 13, false);
757 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 0, 14, false); 762 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 0, 14, false);
758 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 0, 15, false); 763 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 0, 15, false);
759 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 16, false); 764 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 16, false);
760 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 0, 17, false); 765 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 0, 17, false);
761 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 0, 18, false); 766 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 0, 18, false);
762 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 0, 19, false); 767 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 0, 19, false);
763 768
764 ASSERT_EQ(20UL, frames_from_callback_.size()); 769 ASSERT_EQ(20UL, frames_from_callback_.size());
765 CheckReferencesVp9(pid, 0); 770 CheckReferencesVp9(0, 0);
766 CheckReferencesVp9(pid + 1, 0, pid); 771 CheckReferencesVp9(1, 0, 0);
767 CheckReferencesVp9(pid + 2, 0, pid + 1); 772 CheckReferencesVp9(2, 0, 1);
768 CheckReferencesVp9(pid + 3, 0, pid + 2); 773 CheckReferencesVp9(3, 0, 2);
769 CheckReferencesVp9(pid + 4, 0, pid + 3); 774 CheckReferencesVp9(4, 0, 3);
770 CheckReferencesVp9(pid + 5, 0, pid + 4); 775 CheckReferencesVp9(5, 0, 4);
771 CheckReferencesVp9(pid + 6, 0, pid + 5); 776 CheckReferencesVp9(6, 0, 5);
772 CheckReferencesVp9(pid + 7, 0, pid + 6); 777 CheckReferencesVp9(7, 0, 6);
773 CheckReferencesVp9(pid + 8, 0, pid + 7); 778 CheckReferencesVp9(8, 0, 7);
774 CheckReferencesVp9(pid + 9, 0, pid + 8); 779 CheckReferencesVp9(9, 0, 8);
775 CheckReferencesVp9(pid + 10, 0, pid + 9); 780 CheckReferencesVp9(10, 0, 9);
776 CheckReferencesVp9(pid + 11, 0, pid + 10); 781 CheckReferencesVp9(11, 0, 10);
777 CheckReferencesVp9(pid + 12, 0, pid + 11); 782 CheckReferencesVp9(12, 0, 11);
778 CheckReferencesVp9(pid + 13, 0, pid + 12); 783 CheckReferencesVp9(13, 0, 12);
779 CheckReferencesVp9(pid + 14, 0, pid + 13); 784 CheckReferencesVp9(14, 0, 13);
780 CheckReferencesVp9(pid + 15, 0, pid + 14); 785 CheckReferencesVp9(15, 0, 14);
781 CheckReferencesVp9(pid + 16, 0, pid + 15); 786 CheckReferencesVp9(16, 0, 15);
782 CheckReferencesVp9(pid + 17, 0, pid + 16); 787 CheckReferencesVp9(17, 0, 16);
783 CheckReferencesVp9(pid + 18, 0, pid + 17); 788 CheckReferencesVp9(18, 0, 17);
784 CheckReferencesVp9(pid + 19, 0, pid + 18); 789 CheckReferencesVp9(19, 0, 18);
785 } 790 }
786 791
787 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayersReordered_0) { 792 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayersReordered_0) {
788 uint16_t pid = Rand(); 793 uint16_t pid = Rand();
789 uint16_t sn = Rand(); 794 uint16_t sn = Rand();
790 GofInfoVP9 ss; 795 GofInfoVP9 ss;
791 ss.SetGofInfoVP9(kTemporalStructureMode1); // Only 1 spatial layer. 796 ss.SetGofInfoVP9(kTemporalStructureMode1); // Only 1 spatial layer.
792 797
793 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 0, 2, false); 798 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 0, 2, false);
794 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 0, 1, false); 799 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 0, 1, false);
(...skipping 10 matching lines...) Expand all
805 InsertVp9Gof(sn + 9, sn + 9, false, pid + 9, 0, 0, 9, false); 810 InsertVp9Gof(sn + 9, sn + 9, false, pid + 9, 0, 0, 9, false);
806 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 16, false); 811 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 16, false);
807 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 0, 14, false); 812 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 0, 14, false);
808 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 0, 15, false); 813 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 0, 15, false);
809 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 12, false); 814 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 12, false);
810 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 0, 17, false); 815 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 0, 17, false);
811 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 0, 19, false); 816 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 0, 19, false);
812 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 0, 18, false); 817 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 0, 18, false);
813 818
814 ASSERT_EQ(20UL, frames_from_callback_.size()); 819 ASSERT_EQ(20UL, frames_from_callback_.size());
815 CheckReferencesVp9(pid, 0); 820 CheckReferencesVp9(0, 0);
816 CheckReferencesVp9(pid + 1, 0, pid); 821 CheckReferencesVp9(1, 0, 0);
817 CheckReferencesVp9(pid + 2, 0, pid + 1); 822 CheckReferencesVp9(2, 0, 1);
818 CheckReferencesVp9(pid + 3, 0, pid + 2); 823 CheckReferencesVp9(3, 0, 2);
819 CheckReferencesVp9(pid + 4, 0, pid + 3); 824 CheckReferencesVp9(4, 0, 3);
820 CheckReferencesVp9(pid + 5, 0, pid + 4); 825 CheckReferencesVp9(5, 0, 4);
821 CheckReferencesVp9(pid + 6, 0, pid + 5); 826 CheckReferencesVp9(6, 0, 5);
822 CheckReferencesVp9(pid + 7, 0, pid + 6); 827 CheckReferencesVp9(7, 0, 6);
823 CheckReferencesVp9(pid + 8, 0, pid + 7); 828 CheckReferencesVp9(8, 0, 7);
824 CheckReferencesVp9(pid + 9, 0, pid + 8); 829 CheckReferencesVp9(9, 0, 8);
825 CheckReferencesVp9(pid + 10, 0, pid + 9); 830 CheckReferencesVp9(10, 0, 9);
826 CheckReferencesVp9(pid + 11, 0, pid + 10); 831 CheckReferencesVp9(11, 0, 10);
827 CheckReferencesVp9(pid + 12, 0, pid + 11); 832 CheckReferencesVp9(12, 0, 11);
828 CheckReferencesVp9(pid + 13, 0, pid + 12); 833 CheckReferencesVp9(13, 0, 12);
829 CheckReferencesVp9(pid + 14, 0, pid + 13); 834 CheckReferencesVp9(14, 0, 13);
830 CheckReferencesVp9(pid + 15, 0, pid + 14); 835 CheckReferencesVp9(15, 0, 14);
831 CheckReferencesVp9(pid + 16, 0, pid + 15); 836 CheckReferencesVp9(16, 0, 15);
832 CheckReferencesVp9(pid + 17, 0, pid + 16); 837 CheckReferencesVp9(17, 0, 16);
833 CheckReferencesVp9(pid + 18, 0, pid + 17); 838 CheckReferencesVp9(18, 0, 17);
834 CheckReferencesVp9(pid + 19, 0, pid + 18); 839 CheckReferencesVp9(19, 0, 18);
835 } 840 }
836 841
837 TEST_F(TestRtpFrameReferenceFinder, Vp9GofSkipFramesTemporalLayers_01) { 842 TEST_F(TestRtpFrameReferenceFinder, Vp9GofSkipFramesTemporalLayers_01) {
838 uint16_t pid = Rand(); 843 uint16_t pid = Rand();
839 uint16_t sn = Rand(); 844 uint16_t sn = Rand();
840 GofInfoVP9 ss; 845 GofInfoVP9 ss;
841 ss.SetGofInfoVP9(kTemporalStructureMode2); // 0101 pattern 846 ss.SetGofInfoVP9(kTemporalStructureMode2); // 0101 pattern
842 847
843 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss); 848 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
844 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 1, 0, false); 849 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 1, 0, false);
845 // Skip GOF with tl0 1 850 // Skip GOF with tl0 1
846 InsertVp9Gof(sn + 4, sn + 4, true, pid + 4, 0, 0, 2, false, &ss); 851 InsertVp9Gof(sn + 4, sn + 4, true, pid + 4, 0, 0, 2, false, &ss);
847 InsertVp9Gof(sn + 5, sn + 5, false, pid + 5, 0, 1, 2, false); 852 InsertVp9Gof(sn + 5, sn + 5, false, pid + 5, 0, 1, 2, false);
848 // Skip GOF with tl0 3 853 // Skip GOF with tl0 3
849 // Skip GOF with tl0 4 854 // Skip GOF with tl0 4
850 InsertVp9Gof(sn + 10, sn + 10, false, pid + 10, 0, 0, 5, false, &ss); 855 InsertVp9Gof(sn + 10, sn + 10, false, pid + 10, 0, 0, 5, false, &ss);
851 InsertVp9Gof(sn + 11, sn + 11, false, pid + 11, 0, 1, 5, false); 856 InsertVp9Gof(sn + 11, sn + 11, false, pid + 11, 0, 1, 5, false);
852 857
853 ASSERT_EQ(6UL, frames_from_callback_.size()); 858 ASSERT_EQ(6UL, frames_from_callback_.size());
854 CheckReferencesVp9(pid, 0); 859 CheckReferencesVp9(0, 0);
855 CheckReferencesVp9(pid + 1, 0, pid); 860 CheckReferencesVp9(1, 0, 0);
856 CheckReferencesVp9(pid + 4, 0); 861 CheckReferencesVp9(4, 0);
857 CheckReferencesVp9(pid + 5, 0, pid + 4); 862 CheckReferencesVp9(5, 0, 4);
858 CheckReferencesVp9(pid + 10, 0, pid + 8); 863 CheckReferencesVp9(10, 0, 8);
859 CheckReferencesVp9(pid + 11, 0, pid + 10); 864 CheckReferencesVp9(11, 0, 10);
860 } 865 }
861 866
862 TEST_F(TestRtpFrameReferenceFinder, Vp9GofSkipFramesTemporalLayers_0212) { 867 TEST_F(TestRtpFrameReferenceFinder, Vp9GofSkipFramesTemporalLayers_0212) {
863 uint16_t pid = Rand(); 868 uint16_t pid = Rand();
864 uint16_t sn = Rand(); 869 uint16_t sn = Rand();
865 GofInfoVP9 ss; 870 GofInfoVP9 ss;
866 ss.SetGofInfoVP9(kTemporalStructureMode3); // 02120212 pattern 871 ss.SetGofInfoVP9(kTemporalStructureMode3); // 02120212 pattern
867 872
868 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss); 873 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
869 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 2, 0, false); 874 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 2, 0, false);
870 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 1, 0, false); 875 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 1, 0, false);
871 InsertVp9Gof(sn + 3, sn + 3, false, pid + 3, 0, 2, 0, false); 876 InsertVp9Gof(sn + 3, sn + 3, false, pid + 3, 0, 2, 0, false);
872 877
873 ASSERT_EQ(4UL, frames_from_callback_.size()); 878 ASSERT_EQ(4UL, frames_from_callback_.size());
874 CheckReferencesVp9(pid, 0); 879 CheckReferencesVp9(0, 0);
875 CheckReferencesVp9(pid + 1, 0, pid); 880 CheckReferencesVp9(1, 0, 0);
876 CheckReferencesVp9(pid + 2, 0, pid); 881 CheckReferencesVp9(2, 0, 0);
877 CheckReferencesVp9(pid + 3, 0, pid + 1, pid + 2); 882 CheckReferencesVp9(3, 0, 1, 2);
878 883
879 // Skip frames with tl0 = 1 884 // Skip frames with tl0 = 1
880 885
881 InsertVp9Gof(sn + 8, sn + 8, true, pid + 8, 0, 0, 2, false, &ss); 886 InsertVp9Gof(sn + 8, sn + 8, true, pid + 8, 0, 0, 2, false, &ss);
882 InsertVp9Gof(sn + 9, sn + 9, false, pid + 9, 0, 2, 2, false); 887 InsertVp9Gof(sn + 9, sn + 9, false, pid + 9, 0, 2, 2, false);
883 InsertVp9Gof(sn + 10, sn + 10, false, pid + 10, 0, 1, 2, false); 888 InsertVp9Gof(sn + 10, sn + 10, false, pid + 10, 0, 1, 2, false);
884 InsertVp9Gof(sn + 11, sn + 11, false, pid + 11, 0, 2, 2, false); 889 InsertVp9Gof(sn + 11, sn + 11, false, pid + 11, 0, 2, 2, false);
885 890
886 ASSERT_EQ(8UL, frames_from_callback_.size()); 891 ASSERT_EQ(8UL, frames_from_callback_.size());
887 CheckReferencesVp9(pid + 8, 0); 892 CheckReferencesVp9(8, 0);
888 CheckReferencesVp9(pid + 9, 0, pid + 8); 893 CheckReferencesVp9(9, 0, 8);
889 CheckReferencesVp9(pid + 10, 0, pid + 8); 894 CheckReferencesVp9(10, 0, 8);
890 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); 895 CheckReferencesVp9(11, 0, 9, 10);
891 896
892 // Now insert frames with tl0 = 1 897 // Now insert frames with tl0 = 1
893 InsertVp9Gof(sn + 4, sn + 4, true, pid + 4, 0, 0, 1, false, &ss); 898 InsertVp9Gof(sn + 4, sn + 4, true, pid + 4, 0, 0, 1, false, &ss);
894 InsertVp9Gof(sn + 7, sn + 7, false, pid + 7, 0, 2, 1, false); 899 InsertVp9Gof(sn + 7, sn + 7, false, pid + 7, 0, 2, 1, false);
895 900
896 ASSERT_EQ(9UL, frames_from_callback_.size()); 901 ASSERT_EQ(9UL, frames_from_callback_.size());
897 CheckReferencesVp9(pid + 4, 0); 902 CheckReferencesVp9(4, 0);
898 903
899 // Rest of frames belonging to tl0 = 1 904 // Rest of frames belonging to tl0 = 1
900 InsertVp9Gof(sn + 5, sn + 5, false, pid + 5, 0, 2, 1, false); 905 InsertVp9Gof(sn + 5, sn + 5, false, pid + 5, 0, 2, 1, false);
901 InsertVp9Gof(sn + 6, sn + 6, false, pid + 6, 0, 1, 1, true); // up-switch 906 InsertVp9Gof(sn + 6, sn + 6, false, pid + 6, 0, 1, 1, true); // up-switch
902 907
903 ASSERT_EQ(12UL, frames_from_callback_.size()); 908 ASSERT_EQ(12UL, frames_from_callback_.size());
904 CheckReferencesVp9(pid + 5, 0, pid + 4); 909 CheckReferencesVp9(5, 0, 4);
905 CheckReferencesVp9(pid + 6, 0, pid + 4); 910 CheckReferencesVp9(6, 0, 4);
906 CheckReferencesVp9(pid + 7, 0, pid + 6); 911 CheckReferencesVp9(7, 0, 6);
907 } 912 }
908 913
909 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayers_01) { 914 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayers_01) {
910 uint16_t pid = Rand(); 915 uint16_t pid = Rand();
911 uint16_t sn = Rand(); 916 uint16_t sn = Rand();
912 GofInfoVP9 ss; 917 GofInfoVP9 ss;
913 ss.SetGofInfoVP9(kTemporalStructureMode2); // 0101 pattern 918 ss.SetGofInfoVP9(kTemporalStructureMode2); // 0101 pattern
914 919
915 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss); 920 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
916 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 1, 0, false); 921 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 1, 0, false);
(...skipping 10 matching lines...) Expand all
927 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 6, false); 932 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 6, false);
928 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 1, 6, false); 933 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 1, 6, false);
929 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 0, 7, false); 934 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 0, 7, false);
930 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 1, 7, false); 935 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 1, 7, false);
931 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 8, false); 936 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 8, false);
932 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 1, 8, false); 937 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 1, 8, false);
933 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 0, 9, false); 938 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 0, 9, false);
934 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 1, 9, false); 939 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 1, 9, false);
935 940
936 ASSERT_EQ(20UL, frames_from_callback_.size()); 941 ASSERT_EQ(20UL, frames_from_callback_.size());
937 CheckReferencesVp9(pid, 0); 942 CheckReferencesVp9(0, 0);
938 CheckReferencesVp9(pid + 1, 0, pid); 943 CheckReferencesVp9(1, 0, 0);
939 CheckReferencesVp9(pid + 2, 0, pid); 944 CheckReferencesVp9(2, 0, 0);
940 CheckReferencesVp9(pid + 3, 0, pid + 2); 945 CheckReferencesVp9(3, 0, 2);
941 CheckReferencesVp9(pid + 4, 0, pid + 2); 946 CheckReferencesVp9(4, 0, 2);
942 CheckReferencesVp9(pid + 5, 0, pid + 4); 947 CheckReferencesVp9(5, 0, 4);
943 CheckReferencesVp9(pid + 6, 0, pid + 4); 948 CheckReferencesVp9(6, 0, 4);
944 CheckReferencesVp9(pid + 7, 0, pid + 6); 949 CheckReferencesVp9(7, 0, 6);
945 CheckReferencesVp9(pid + 8, 0, pid + 6); 950 CheckReferencesVp9(8, 0, 6);
946 CheckReferencesVp9(pid + 9, 0, pid + 8); 951 CheckReferencesVp9(9, 0, 8);
947 CheckReferencesVp9(pid + 10, 0, pid + 8); 952 CheckReferencesVp9(10, 0, 8);
948 CheckReferencesVp9(pid + 11, 0, pid + 10); 953 CheckReferencesVp9(11, 0, 10);
949 CheckReferencesVp9(pid + 12, 0, pid + 10); 954 CheckReferencesVp9(12, 0, 10);
950 CheckReferencesVp9(pid + 13, 0, pid + 12); 955 CheckReferencesVp9(13, 0, 12);
951 CheckReferencesVp9(pid + 14, 0, pid + 12); 956 CheckReferencesVp9(14, 0, 12);
952 CheckReferencesVp9(pid + 15, 0, pid + 14); 957 CheckReferencesVp9(15, 0, 14);
953 CheckReferencesVp9(pid + 16, 0, pid + 14); 958 CheckReferencesVp9(16, 0, 14);
954 CheckReferencesVp9(pid + 17, 0, pid + 16); 959 CheckReferencesVp9(17, 0, 16);
955 CheckReferencesVp9(pid + 18, 0, pid + 16); 960 CheckReferencesVp9(18, 0, 16);
956 CheckReferencesVp9(pid + 19, 0, pid + 18); 961 CheckReferencesVp9(19, 0, 18);
957 } 962 }
958 963
959 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayersReordered_01) { 964 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayersReordered_01) {
960 uint16_t pid = Rand(); 965 uint16_t pid = Rand();
961 uint16_t sn = Rand(); 966 uint16_t sn = Rand();
962 GofInfoVP9 ss; 967 GofInfoVP9 ss;
963 ss.SetGofInfoVP9(kTemporalStructureMode2); // 01 pattern 968 ss.SetGofInfoVP9(kTemporalStructureMode2); // 01 pattern
964 969
965 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 1, 0, false); 970 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 1, 0, false);
966 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss); 971 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
(...skipping 10 matching lines...) Expand all
977 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 1, 6, false); 982 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 1, 6, false);
978 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 8, false); 983 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 8, false);
979 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 6, false); 984 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 6, false);
980 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 0, 7, false); 985 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 0, 7, false);
981 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 1, 8, false); 986 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 1, 8, false);
982 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 1, 9, false); 987 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 1, 9, false);
983 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 1, 7, false); 988 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 1, 7, false);
984 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 0, 9, false); 989 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 0, 9, false);
985 990
986 ASSERT_EQ(20UL, frames_from_callback_.size()); 991 ASSERT_EQ(20UL, frames_from_callback_.size());
987 CheckReferencesVp9(pid, 0); 992 CheckReferencesVp9(0, 0);
988 CheckReferencesVp9(pid + 1, 0, pid); 993 CheckReferencesVp9(1, 0, 0);
989 CheckReferencesVp9(pid + 2, 0, pid); 994 CheckReferencesVp9(2, 0, 0);
990 CheckReferencesVp9(pid + 3, 0, pid + 2); 995 CheckReferencesVp9(3, 0, 2);
991 CheckReferencesVp9(pid + 4, 0, pid + 2); 996 CheckReferencesVp9(4, 0, 2);
992 CheckReferencesVp9(pid + 5, 0, pid + 4); 997 CheckReferencesVp9(5, 0, 4);
993 CheckReferencesVp9(pid + 6, 0, pid + 4); 998 CheckReferencesVp9(6, 0, 4);
994 CheckReferencesVp9(pid + 7, 0, pid + 6); 999 CheckReferencesVp9(7, 0, 6);
995 CheckReferencesVp9(pid + 8, 0, pid + 6); 1000 CheckReferencesVp9(8, 0, 6);
996 CheckReferencesVp9(pid + 9, 0, pid + 8); 1001 CheckReferencesVp9(9, 0, 8);
997 CheckReferencesVp9(pid + 10, 0, pid + 8); 1002 CheckReferencesVp9(10, 0, 8);
998 CheckReferencesVp9(pid + 11, 0, pid + 10); 1003 CheckReferencesVp9(11, 0, 10);
999 CheckReferencesVp9(pid + 12, 0, pid + 10); 1004 CheckReferencesVp9(12, 0, 10);
1000 CheckReferencesVp9(pid + 13, 0, pid + 12); 1005 CheckReferencesVp9(13, 0, 12);
1001 CheckReferencesVp9(pid + 14, 0, pid + 12); 1006 CheckReferencesVp9(14, 0, 12);
1002 CheckReferencesVp9(pid + 15, 0, pid + 14); 1007 CheckReferencesVp9(15, 0, 14);
1003 CheckReferencesVp9(pid + 16, 0, pid + 14); 1008 CheckReferencesVp9(16, 0, 14);
1004 CheckReferencesVp9(pid + 17, 0, pid + 16); 1009 CheckReferencesVp9(17, 0, 16);
1005 CheckReferencesVp9(pid + 18, 0, pid + 16); 1010 CheckReferencesVp9(18, 0, 16);
1006 CheckReferencesVp9(pid + 19, 0, pid + 18); 1011 CheckReferencesVp9(19, 0, 18);
1007 } 1012 }
1008 1013
1009 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayers_0212) { 1014 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayers_0212) {
1010 uint16_t pid = Rand(); 1015 uint16_t pid = Rand();
1011 uint16_t sn = Rand(); 1016 uint16_t sn = Rand();
1012 GofInfoVP9 ss; 1017 GofInfoVP9 ss;
1013 ss.SetGofInfoVP9(kTemporalStructureMode3); // 0212 pattern 1018 ss.SetGofInfoVP9(kTemporalStructureMode3); // 0212 pattern
1014 1019
1015 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss); 1020 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
1016 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 2, 0, false); 1021 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 2, 0, false);
(...skipping 10 matching lines...) Expand all
1027 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 3, false); 1032 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 3, false);
1028 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 2, 3, false); 1033 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 2, 3, false);
1029 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 1, 3, false); 1034 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 1, 3, false);
1030 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 2, 3, false); 1035 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 2, 3, false);
1031 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 4, false); 1036 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 4, false);
1032 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 2, 4, false); 1037 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 2, 4, false);
1033 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 1, 4, false); 1038 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 1, 4, false);
1034 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 2, 4, false); 1039 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 2, 4, false);
1035 1040
1036 ASSERT_EQ(20UL, frames_from_callback_.size()); 1041 ASSERT_EQ(20UL, frames_from_callback_.size());
1037 CheckReferencesVp9(pid, 0); 1042 CheckReferencesVp9(0, 0);
1038 CheckReferencesVp9(pid + 1, 0, pid); 1043 CheckReferencesVp9(1, 0, 0);
1039 CheckReferencesVp9(pid + 2, 0, pid); 1044 CheckReferencesVp9(2, 0, 0);
1040 CheckReferencesVp9(pid + 3, 0, pid + 1, pid + 2); 1045 CheckReferencesVp9(3, 0, 1, 2);
1041 CheckReferencesVp9(pid + 4, 0, pid); 1046 CheckReferencesVp9(4, 0, 0);
1042 CheckReferencesVp9(pid + 5, 0, pid + 4); 1047 CheckReferencesVp9(5, 0, 4);
1043 CheckReferencesVp9(pid + 6, 0, pid + 4); 1048 CheckReferencesVp9(6, 0, 4);
1044 CheckReferencesVp9(pid + 7, 0, pid + 5, pid + 6); 1049 CheckReferencesVp9(7, 0, 5, 6);
1045 CheckReferencesVp9(pid + 8, 0, pid + 4); 1050 CheckReferencesVp9(8, 0, 4);
1046 CheckReferencesVp9(pid + 9, 0, pid + 8); 1051 CheckReferencesVp9(9, 0, 8);
1047 CheckReferencesVp9(pid + 10, 0, pid + 8); 1052 CheckReferencesVp9(10, 0, 8);
1048 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); 1053 CheckReferencesVp9(11, 0, 9, 10);
1049 CheckReferencesVp9(pid + 12, 0, pid + 8); 1054 CheckReferencesVp9(12, 0, 8);
1050 CheckReferencesVp9(pid + 13, 0, pid + 12); 1055 CheckReferencesVp9(13, 0, 12);
1051 CheckReferencesVp9(pid + 14, 0, pid + 12); 1056 CheckReferencesVp9(14, 0, 12);
1052 CheckReferencesVp9(pid + 15, 0, pid + 13, pid + 14); 1057 CheckReferencesVp9(15, 0, 13, 14);
1053 CheckReferencesVp9(pid + 16, 0, pid + 12); 1058 CheckReferencesVp9(16, 0, 12);
1054 CheckReferencesVp9(pid + 17, 0, pid + 16); 1059 CheckReferencesVp9(17, 0, 16);
1055 CheckReferencesVp9(pid + 18, 0, pid + 16); 1060 CheckReferencesVp9(18, 0, 16);
1056 CheckReferencesVp9(pid + 19, 0, pid + 17, pid + 18); 1061 CheckReferencesVp9(19, 0, 17, 18);
1057 } 1062 }
1058 1063
1059 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayersReordered_0212) { 1064 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayersReordered_0212) {
1060 uint16_t pid = Rand(); 1065 uint16_t pid = Rand();
1061 uint16_t sn = Rand(); 1066 uint16_t sn = Rand();
1062 GofInfoVP9 ss; 1067 GofInfoVP9 ss;
1063 ss.SetGofInfoVP9(kTemporalStructureMode3); // 0212 pattern 1068 ss.SetGofInfoVP9(kTemporalStructureMode3); // 0212 pattern
1064 1069
1065 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 1, 0, false); 1070 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 1, 0, false);
1066 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 2, 0, false); 1071 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 2, 0, false);
(...skipping 10 matching lines...) Expand all
1077 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 2, 3, false); 1082 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 2, 3, false);
1078 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 3, false); 1083 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 3, false);
1079 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 1, 3, false); 1084 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 1, 3, false);
1080 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 4, false); 1085 InsertVp9Gof(sn + 16, sn + 16, false, pid + 16, 0, 0, 4, false);
1081 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 2, 3, false); 1086 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 2, 3, false);
1082 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 2, 4, false); 1087 InsertVp9Gof(sn + 17, sn + 17, false, pid + 17, 0, 2, 4, false);
1083 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 2, 4, false); 1088 InsertVp9Gof(sn + 19, sn + 19, false, pid + 19, 0, 2, 4, false);
1084 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 1, 4, false); 1089 InsertVp9Gof(sn + 18, sn + 18, false, pid + 18, 0, 1, 4, false);
1085 1090
1086 ASSERT_EQ(20UL, frames_from_callback_.size()); 1091 ASSERT_EQ(20UL, frames_from_callback_.size());
1087 CheckReferencesVp9(pid, 0); 1092 CheckReferencesVp9(0, 0);
1088 CheckReferencesVp9(pid + 1, 0, pid); 1093 CheckReferencesVp9(1, 0, 0);
1089 CheckReferencesVp9(pid + 2, 0, pid); 1094 CheckReferencesVp9(2, 0, 0);
1090 CheckReferencesVp9(pid + 3, 0, pid + 1, pid + 2); 1095 CheckReferencesVp9(3, 0, 1, 2);
1091 CheckReferencesVp9(pid + 4, 0, pid); 1096 CheckReferencesVp9(4, 0, 0);
1092 CheckReferencesVp9(pid + 5, 0, pid + 4); 1097 CheckReferencesVp9(5, 0, 4);
1093 CheckReferencesVp9(pid + 6, 0, pid + 4); 1098 CheckReferencesVp9(6, 0, 4);
1094 CheckReferencesVp9(pid + 7, 0, pid + 5, pid + 6); 1099 CheckReferencesVp9(7, 0, 5, 6);
1095 CheckReferencesVp9(pid + 8, 0, pid + 4); 1100 CheckReferencesVp9(8, 0, 4);
1096 CheckReferencesVp9(pid + 9, 0, pid + 8); 1101 CheckReferencesVp9(9, 0, 8);
1097 CheckReferencesVp9(pid + 10, 0, pid + 8); 1102 CheckReferencesVp9(10, 0, 8);
1098 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); 1103 CheckReferencesVp9(11, 0, 9, 10);
1099 CheckReferencesVp9(pid + 12, 0, pid + 8); 1104 CheckReferencesVp9(12, 0, 8);
1100 CheckReferencesVp9(pid + 13, 0, pid + 12); 1105 CheckReferencesVp9(13, 0, 12);
1101 CheckReferencesVp9(pid + 14, 0, pid + 12); 1106 CheckReferencesVp9(14, 0, 12);
1102 CheckReferencesVp9(pid + 15, 0, pid + 13, pid + 14); 1107 CheckReferencesVp9(15, 0, 13, 14);
1103 CheckReferencesVp9(pid + 16, 0, pid + 12); 1108 CheckReferencesVp9(16, 0, 12);
1104 CheckReferencesVp9(pid + 17, 0, pid + 16); 1109 CheckReferencesVp9(17, 0, 16);
1105 CheckReferencesVp9(pid + 18, 0, pid + 16); 1110 CheckReferencesVp9(18, 0, 16);
1106 CheckReferencesVp9(pid + 19, 0, pid + 17, pid + 18); 1111 CheckReferencesVp9(19, 0, 17, 18);
1107 } 1112 }
1108 1113
1109 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayersUpSwitch_02120212) { 1114 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayersUpSwitch_02120212) {
1110 uint16_t pid = Rand(); 1115 uint16_t pid = Rand();
1111 uint16_t sn = Rand(); 1116 uint16_t sn = Rand();
1112 GofInfoVP9 ss; 1117 GofInfoVP9 ss;
1113 ss.SetGofInfoVP9(kTemporalStructureMode4); // 02120212 pattern 1118 ss.SetGofInfoVP9(kTemporalStructureMode4); // 02120212 pattern
1114 1119
1115 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss); 1120 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
1116 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 2, 0, false); 1121 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 2, 0, false);
1117 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 1, 0, false); 1122 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 1, 0, false);
1118 InsertVp9Gof(sn + 3, sn + 3, false, pid + 3, 0, 2, 0, false); 1123 InsertVp9Gof(sn + 3, sn + 3, false, pid + 3, 0, 2, 0, false);
1119 InsertVp9Gof(sn + 4, sn + 4, false, pid + 4, 0, 0, 1, false); 1124 InsertVp9Gof(sn + 4, sn + 4, false, pid + 4, 0, 0, 1, false);
1120 InsertVp9Gof(sn + 5, sn + 5, false, pid + 5, 0, 2, 1, false); 1125 InsertVp9Gof(sn + 5, sn + 5, false, pid + 5, 0, 2, 1, false);
1121 InsertVp9Gof(sn + 6, sn + 6, false, pid + 6, 0, 1, 1, true); 1126 InsertVp9Gof(sn + 6, sn + 6, false, pid + 6, 0, 1, 1, true);
1122 InsertVp9Gof(sn + 7, sn + 7, false, pid + 7, 0, 2, 1, false); 1127 InsertVp9Gof(sn + 7, sn + 7, false, pid + 7, 0, 2, 1, false);
1123 InsertVp9Gof(sn + 8, sn + 8, false, pid + 8, 0, 0, 2, true); 1128 InsertVp9Gof(sn + 8, sn + 8, false, pid + 8, 0, 0, 2, true);
1124 InsertVp9Gof(sn + 9, sn + 9, false, pid + 9, 0, 2, 2, false); 1129 InsertVp9Gof(sn + 9, sn + 9, false, pid + 9, 0, 2, 2, false);
1125 InsertVp9Gof(sn + 10, sn + 10, false, pid + 10, 0, 1, 2, false); 1130 InsertVp9Gof(sn + 10, sn + 10, false, pid + 10, 0, 1, 2, false);
1126 InsertVp9Gof(sn + 11, sn + 11, false, pid + 11, 0, 2, 2, true); 1131 InsertVp9Gof(sn + 11, sn + 11, false, pid + 11, 0, 2, 2, true);
1127 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 3, false); 1132 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 3, false);
1128 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 2, 3, false); 1133 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 2, 3, false);
1129 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 1, 3, false); 1134 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 1, 3, false);
1130 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 2, 3, false); 1135 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 2, 3, false);
1131 1136
1132 ASSERT_EQ(16UL, frames_from_callback_.size()); 1137 ASSERT_EQ(16UL, frames_from_callback_.size());
1133 CheckReferencesVp9(pid, 0); 1138 CheckReferencesVp9(0, 0);
1134 CheckReferencesVp9(pid + 1, 0, pid); 1139 CheckReferencesVp9(1, 0, 0);
1135 CheckReferencesVp9(pid + 2, 0, pid); 1140 CheckReferencesVp9(2, 0, 0);
1136 CheckReferencesVp9(pid + 3, 0, pid + 1, pid + 2); 1141 CheckReferencesVp9(3, 0, 1, 2);
1137 CheckReferencesVp9(pid + 4, 0, pid); 1142 CheckReferencesVp9(4, 0, 0);
1138 CheckReferencesVp9(pid + 5, 0, pid + 3, pid + 4); 1143 CheckReferencesVp9(5, 0, 3, 4);
1139 CheckReferencesVp9(pid + 6, 0, pid + 2, pid + 4); 1144 CheckReferencesVp9(6, 0, 2, 4);
1140 CheckReferencesVp9(pid + 7, 0, pid + 6); 1145 CheckReferencesVp9(7, 0, 6);
1141 CheckReferencesVp9(pid + 8, 0, pid + 4); 1146 CheckReferencesVp9(8, 0, 4);
1142 CheckReferencesVp9(pid + 9, 0, pid + 8); 1147 CheckReferencesVp9(9, 0, 8);
1143 CheckReferencesVp9(pid + 10, 0, pid + 8); 1148 CheckReferencesVp9(10, 0, 8);
1144 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); 1149 CheckReferencesVp9(11, 0, 9, 10);
1145 CheckReferencesVp9(pid + 12, 0, pid + 8); 1150 CheckReferencesVp9(12, 0, 8);
1146 CheckReferencesVp9(pid + 13, 0, pid + 11, pid + 12); 1151 CheckReferencesVp9(13, 0, 11, 12);
1147 CheckReferencesVp9(pid + 14, 0, pid + 10, pid + 12); 1152 CheckReferencesVp9(14, 0, 10, 12);
1148 CheckReferencesVp9(pid + 15, 0, pid + 13, pid + 14); 1153 CheckReferencesVp9(15, 0, 13, 14);
1149 } 1154 }
1150 1155
1151 TEST_F(TestRtpFrameReferenceFinder, 1156 TEST_F(TestRtpFrameReferenceFinder,
1152 Vp9GofTemporalLayersUpSwitchReordered_02120212) { 1157 Vp9GofTemporalLayersUpSwitchReordered_02120212) {
1153 uint16_t pid = Rand(); 1158 uint16_t pid = Rand();
1154 uint16_t sn = Rand(); 1159 uint16_t sn = Rand();
1155 GofInfoVP9 ss; 1160 GofInfoVP9 ss;
1156 ss.SetGofInfoVP9(kTemporalStructureMode4); // 02120212 pattern 1161 ss.SetGofInfoVP9(kTemporalStructureMode4); // 02120212 pattern
1157 1162
1158 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 2, 0, false); 1163 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 2, 0, false);
1159 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss); 1164 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
1160 InsertVp9Gof(sn + 4, sn + 4, false, pid + 4, 0, 0, 1, false); 1165 InsertVp9Gof(sn + 4, sn + 4, false, pid + 4, 0, 0, 1, false);
1161 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 1, 0, false); 1166 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 1, 0, false);
1162 InsertVp9Gof(sn + 5, sn + 5, false, pid + 5, 0, 2, 1, false); 1167 InsertVp9Gof(sn + 5, sn + 5, false, pid + 5, 0, 2, 1, false);
1163 InsertVp9Gof(sn + 3, sn + 3, false, pid + 3, 0, 2, 0, false); 1168 InsertVp9Gof(sn + 3, sn + 3, false, pid + 3, 0, 2, 0, false);
1164 InsertVp9Gof(sn + 7, sn + 7, false, pid + 7, 0, 2, 1, false); 1169 InsertVp9Gof(sn + 7, sn + 7, false, pid + 7, 0, 2, 1, false);
1165 InsertVp9Gof(sn + 9, sn + 9, false, pid + 9, 0, 2, 2, false); 1170 InsertVp9Gof(sn + 9, sn + 9, false, pid + 9, 0, 2, 2, false);
1166 InsertVp9Gof(sn + 6, sn + 6, false, pid + 6, 0, 1, 1, true); 1171 InsertVp9Gof(sn + 6, sn + 6, false, pid + 6, 0, 1, 1, true);
1167 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 3, false); 1172 InsertVp9Gof(sn + 12, sn + 12, false, pid + 12, 0, 0, 3, false);
1168 InsertVp9Gof(sn + 10, sn + 10, false, pid + 10, 0, 1, 2, false); 1173 InsertVp9Gof(sn + 10, sn + 10, false, pid + 10, 0, 1, 2, false);
1169 InsertVp9Gof(sn + 8, sn + 8, false, pid + 8, 0, 0, 2, true); 1174 InsertVp9Gof(sn + 8, sn + 8, false, pid + 8, 0, 0, 2, true);
1170 InsertVp9Gof(sn + 11, sn + 11, false, pid + 11, 0, 2, 2, true); 1175 InsertVp9Gof(sn + 11, sn + 11, false, pid + 11, 0, 2, 2, true);
1171 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 2, 3, false); 1176 InsertVp9Gof(sn + 13, sn + 13, false, pid + 13, 0, 2, 3, false);
1172 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 2, 3, false); 1177 InsertVp9Gof(sn + 15, sn + 15, false, pid + 15, 0, 2, 3, false);
1173 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 1, 3, false); 1178 InsertVp9Gof(sn + 14, sn + 14, false, pid + 14, 0, 1, 3, false);
1174 1179
1175 ASSERT_EQ(16UL, frames_from_callback_.size()); 1180 ASSERT_EQ(16UL, frames_from_callback_.size());
1176 CheckReferencesVp9(pid, 0); 1181 CheckReferencesVp9(0, 0);
1177 CheckReferencesVp9(pid + 1, 0, pid); 1182 CheckReferencesVp9(1, 0, 0);
1178 CheckReferencesVp9(pid + 2, 0, pid); 1183 CheckReferencesVp9(2, 0, 0);
1179 CheckReferencesVp9(pid + 3, 0, pid + 1, pid + 2); 1184 CheckReferencesVp9(3, 0, 1, 2);
1180 CheckReferencesVp9(pid + 4, 0, pid); 1185 CheckReferencesVp9(4, 0, 0);
1181 CheckReferencesVp9(pid + 5, 0, pid + 3, pid + 4); 1186 CheckReferencesVp9(5, 0, 3, 4);
1182 CheckReferencesVp9(pid + 6, 0, pid + 2, pid + 4); 1187 CheckReferencesVp9(6, 0, 2, 4);
1183 CheckReferencesVp9(pid + 7, 0, pid + 6); 1188 CheckReferencesVp9(7, 0, 6);
1184 CheckReferencesVp9(pid + 8, 0, pid + 4); 1189 CheckReferencesVp9(8, 0, 4);
1185 CheckReferencesVp9(pid + 9, 0, pid + 8); 1190 CheckReferencesVp9(9, 0, 8);
1186 CheckReferencesVp9(pid + 10, 0, pid + 8); 1191 CheckReferencesVp9(10, 0, 8);
1187 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); 1192 CheckReferencesVp9(11, 0, 9, 10);
1188 CheckReferencesVp9(pid + 12, 0, pid + 8); 1193 CheckReferencesVp9(12, 0, 8);
1189 CheckReferencesVp9(pid + 13, 0, pid + 11, pid + 12); 1194 CheckReferencesVp9(13, 0, 11, 12);
1190 CheckReferencesVp9(pid + 14, 0, pid + 10, pid + 12); 1195 CheckReferencesVp9(14, 0, 10, 12);
1191 CheckReferencesVp9(pid + 15, 0, pid + 13, pid + 14); 1196 CheckReferencesVp9(15, 0, 13, 14);
1192 } 1197 }
1193 1198
1194 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayersReordered_01_0212) { 1199 TEST_F(TestRtpFrameReferenceFinder, Vp9GofTemporalLayersReordered_01_0212) {
1195 uint16_t pid = Rand(); 1200 uint16_t pid = Rand();
1196 uint16_t sn = Rand(); 1201 uint16_t sn = Rand();
1197 GofInfoVP9 ss; 1202 GofInfoVP9 ss;
1198 ss.SetGofInfoVP9(kTemporalStructureMode2); // 01 pattern 1203 ss.SetGofInfoVP9(kTemporalStructureMode2); // 01 pattern
1199 1204
1200 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 1, 0, false); 1205 InsertVp9Gof(sn + 1, sn + 1, false, pid + 1, 0, 1, 0, false);
1201 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss); 1206 InsertVp9Gof(sn, sn, true, pid, 0, 0, 0, false, &ss);
1202 InsertVp9Gof(sn + 3, sn + 3, false, pid + 3, 0, 1, 1, false); 1207 InsertVp9Gof(sn + 3, sn + 3, false, pid + 3, 0, 1, 1, false);
1203 InsertVp9Gof(sn + 6, sn + 6, false, pid + 6, 0, 1, 2, false); 1208 InsertVp9Gof(sn + 6, sn + 6, false, pid + 6, 0, 1, 2, false);
1204 ss.SetGofInfoVP9(kTemporalStructureMode3); // 0212 pattern 1209 ss.SetGofInfoVP9(kTemporalStructureMode3); // 0212 pattern
1205 InsertVp9Gof(sn + 4, sn + 4, false, pid + 4, 0, 0, 2, false, &ss); 1210 InsertVp9Gof(sn + 4, sn + 4, false, pid + 4, 0, 0, 2, false, &ss);
1206 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 0, 1, false); 1211 InsertVp9Gof(sn + 2, sn + 2, false, pid + 2, 0, 0, 1, false);
1207 InsertVp9Gof(sn + 5, sn + 5, false, pid + 5, 0, 2, 2, false); 1212 InsertVp9Gof(sn + 5, sn + 5, false, pid + 5, 0, 2, 2, false);
1208 InsertVp9Gof(sn + 8, sn + 8, false, pid + 8, 0, 0, 3, false); 1213 InsertVp9Gof(sn + 8, sn + 8, false, pid + 8, 0, 0, 3, false);
1209 InsertVp9Gof(sn + 10, sn + 10, false, pid + 10, 0, 1, 3, false); 1214 InsertVp9Gof(sn + 10, sn + 10, false, pid + 10, 0, 1, 3, false);
1210 InsertVp9Gof(sn + 7, sn + 7, false, pid + 7, 0, 2, 2, false); 1215 InsertVp9Gof(sn + 7, sn + 7, false, pid + 7, 0, 2, 2, false);
1211 InsertVp9Gof(sn + 11, sn + 11, false, pid + 11, 0, 2, 3, false); 1216 InsertVp9Gof(sn + 11, sn + 11, false, pid + 11, 0, 2, 3, false);
1212 InsertVp9Gof(sn + 9, sn + 9, false, pid + 9, 0, 2, 3, false); 1217 InsertVp9Gof(sn + 9, sn + 9, false, pid + 9, 0, 2, 3, false);
1213 1218
1214 ASSERT_EQ(12UL, frames_from_callback_.size()); 1219 ASSERT_EQ(12UL, frames_from_callback_.size());
1215 CheckReferencesVp9(pid, 0); 1220 CheckReferencesVp9(0, 0);
1216 CheckReferencesVp9(pid + 1, 0, pid); 1221 CheckReferencesVp9(1, 0, 0);
1217 CheckReferencesVp9(pid + 2, 0, pid); 1222 CheckReferencesVp9(2, 0, 0);
1218 CheckReferencesVp9(pid + 3, 0, pid + 2); 1223 CheckReferencesVp9(3, 0, 2);
1219 CheckReferencesVp9(pid + 4, 0, pid); 1224 CheckReferencesVp9(4, 0, 0);
1220 CheckReferencesVp9(pid + 5, 0, pid + 4); 1225 CheckReferencesVp9(5, 0, 4);
1221 CheckReferencesVp9(pid + 6, 0, pid + 4); 1226 CheckReferencesVp9(6, 0, 4);
1222 CheckReferencesVp9(pid + 7, 0, pid + 5, pid + 6); 1227 CheckReferencesVp9(7, 0, 5, 6);
1223 CheckReferencesVp9(pid + 8, 0, pid + 4); 1228 CheckReferencesVp9(8, 0, 4);
1224 CheckReferencesVp9(pid + 9, 0, pid + 8); 1229 CheckReferencesVp9(9, 0, 8);
1225 CheckReferencesVp9(pid + 10, 0, pid + 8); 1230 CheckReferencesVp9(10, 0, 8);
1226 CheckReferencesVp9(pid + 11, 0, pid + 9, pid + 10); 1231 CheckReferencesVp9(11, 0, 9, 10);
1227 } 1232 }
1228 1233
1229 TEST_F(TestRtpFrameReferenceFinder, Vp9FlexibleModeOneFrame) { 1234 TEST_F(TestRtpFrameReferenceFinder, Vp9FlexibleModeOneFrame) {
1230 uint16_t pid = Rand(); 1235 uint16_t pid = Rand();
1231 uint16_t sn = Rand(); 1236 uint16_t sn = Rand();
1232 1237
1233 InsertVp9Flex(sn, sn, true, pid, 0, 0, 0, false); 1238 InsertVp9Flex(sn, sn, true, pid, 0, 0, 0, false);
1234 1239
1235 ASSERT_EQ(1UL, frames_from_callback_.size()); 1240 ASSERT_EQ(1UL, frames_from_callback_.size());
1236 CheckReferencesVp9(pid, 0); 1241 CheckReferencesVp9(0, 0);
1237 } 1242 }
1238 1243
1239 TEST_F(TestRtpFrameReferenceFinder, Vp9FlexibleModeTwoSpatialLayers) { 1244 TEST_F(TestRtpFrameReferenceFinder, Vp9FlexibleModeTwoSpatialLayers) {
1240 uint16_t pid = Rand(); 1245 uint16_t pid = Rand();
1241 uint16_t sn = Rand(); 1246 uint16_t sn = Rand();
1242 1247
1243 InsertVp9Flex(sn, sn, true, pid, 0, 0, 0, false); 1248 InsertVp9Flex(sn, sn, true, pid, 0, 0, 0, false);
1244 InsertVp9Flex(sn + 1, sn + 1, true, pid, 1, 0, 0, true); 1249 InsertVp9Flex(sn + 1, sn + 1, true, pid, 1, 0, 0, true);
1245 InsertVp9Flex(sn + 2, sn + 2, false, pid + 1, 1, 0, 0, false, {1}); 1250 InsertVp9Flex(sn + 2, sn + 2, false, pid + 1, 1, 0, 0, false, {1});
1246 InsertVp9Flex(sn + 3, sn + 3, false, pid + 2, 0, 0, 1, false, {2}); 1251 InsertVp9Flex(sn + 3, sn + 3, false, pid + 2, 0, 0, 1, false, {2});
1247 InsertVp9Flex(sn + 4, sn + 4, false, pid + 2, 1, 0, 1, false, {1}); 1252 InsertVp9Flex(sn + 4, sn + 4, false, pid + 2, 1, 0, 1, false, {1});
1248 InsertVp9Flex(sn + 5, sn + 5, false, pid + 3, 1, 0, 1, false, {1}); 1253 InsertVp9Flex(sn + 5, sn + 5, false, pid + 3, 1, 0, 1, false, {1});
1249 InsertVp9Flex(sn + 6, sn + 6, false, pid + 4, 0, 0, 2, false, {2}); 1254 InsertVp9Flex(sn + 6, sn + 6, false, pid + 4, 0, 0, 2, false, {2});
1250 InsertVp9Flex(sn + 7, sn + 7, false, pid + 4, 1, 0, 2, false, {1}); 1255 InsertVp9Flex(sn + 7, sn + 7, false, pid + 4, 1, 0, 2, false, {1});
1251 InsertVp9Flex(sn + 8, sn + 8, false, pid + 5, 1, 0, 2, false, {1}); 1256 InsertVp9Flex(sn + 8, sn + 8, false, pid + 5, 1, 0, 2, false, {1});
1252 InsertVp9Flex(sn + 9, sn + 9, false, pid + 6, 0, 0, 3, false, {2}); 1257 InsertVp9Flex(sn + 9, sn + 9, false, pid + 6, 0, 0, 3, false, {2});
1253 InsertVp9Flex(sn + 10, sn + 10, false, pid + 6, 1, 0, 3, false, {1}); 1258 InsertVp9Flex(sn + 10, sn + 10, false, pid + 6, 1, 0, 3, false, {1});
1254 InsertVp9Flex(sn + 11, sn + 11, false, pid + 7, 1, 0, 3, false, {1}); 1259 InsertVp9Flex(sn + 11, sn + 11, false, pid + 7, 1, 0, 3, false, {1});
1255 InsertVp9Flex(sn + 12, sn + 12, false, pid + 8, 0, 0, 4, false, {2}); 1260 InsertVp9Flex(sn + 12, sn + 12, false, pid + 8, 0, 0, 4, false, {2});
1256 InsertVp9Flex(sn + 13, sn + 13, false, pid + 8, 1, 0, 4, false, {1}); 1261 InsertVp9Flex(sn + 13, sn + 13, false, pid + 8, 1, 0, 4, false, {1});
1257 1262
1258 ASSERT_EQ(14UL, frames_from_callback_.size()); 1263 ASSERT_EQ(14UL, frames_from_callback_.size());
1259 CheckReferencesVp9(pid, 0); 1264 CheckReferencesVp9(0, 0);
1260 CheckReferencesVp9(pid, 1); 1265 CheckReferencesVp9(0, 1);
1261 CheckReferencesVp9(pid + 1, 1, pid); 1266 CheckReferencesVp9(1, 1, 0);
1262 CheckReferencesVp9(pid + 2, 0, pid); 1267 CheckReferencesVp9(2, 0, 0);
1263 CheckReferencesVp9(pid + 2, 1, pid + 1); 1268 CheckReferencesVp9(2, 1, 1);
1264 CheckReferencesVp9(pid + 3, 1, pid + 2); 1269 CheckReferencesVp9(3, 1, 2);
1265 CheckReferencesVp9(pid + 4, 0, pid + 2); 1270 CheckReferencesVp9(4, 0, 2);
1266 CheckReferencesVp9(pid + 4, 1, pid + 3); 1271 CheckReferencesVp9(4, 1, 3);
1267 CheckReferencesVp9(pid + 5, 1, pid + 4); 1272 CheckReferencesVp9(5, 1, 4);
1268 CheckReferencesVp9(pid + 6, 0, pid + 4); 1273 CheckReferencesVp9(6, 0, 4);
1269 CheckReferencesVp9(pid + 6, 1, pid + 5); 1274 CheckReferencesVp9(6, 1, 5);
1270 CheckReferencesVp9(pid + 7, 1, pid + 6); 1275 CheckReferencesVp9(7, 1, 6);
1271 CheckReferencesVp9(pid + 8, 0, pid + 6); 1276 CheckReferencesVp9(8, 0, 6);
1272 CheckReferencesVp9(pid + 8, 1, pid + 7); 1277 CheckReferencesVp9(8, 1, 7);
1273 } 1278 }
1274 1279
1275 TEST_F(TestRtpFrameReferenceFinder, Vp9FlexibleModeTwoSpatialLayersReordered) { 1280 TEST_F(TestRtpFrameReferenceFinder, Vp9FlexibleModeTwoSpatialLayersReordered) {
1276 uint16_t pid = Rand(); 1281 uint16_t pid = Rand();
1277 uint16_t sn = Rand(); 1282 uint16_t sn = Rand();
1278 1283
1279 InsertVp9Flex(sn + 1, sn + 1, true, pid, 1, 0, 0, true); 1284 InsertVp9Flex(sn + 1, sn + 1, true, pid, 1, 0, 0, true);
1280 InsertVp9Flex(sn + 2, sn + 2, false, pid + 1, 1, 0, 0, false, {1}); 1285 InsertVp9Flex(sn + 2, sn + 2, false, pid + 1, 1, 0, 0, false, {1});
1281 InsertVp9Flex(sn, sn, true, pid, 0, 0, 0, false); 1286 InsertVp9Flex(sn, sn, true, pid, 0, 0, 0, false);
1282 InsertVp9Flex(sn + 4, sn + 4, false, pid + 2, 1, 0, 1, false, {1}); 1287 InsertVp9Flex(sn + 4, sn + 4, false, pid + 2, 1, 0, 1, false, {1});
1283 InsertVp9Flex(sn + 5, sn + 5, false, pid + 3, 1, 0, 1, false, {1}); 1288 InsertVp9Flex(sn + 5, sn + 5, false, pid + 3, 1, 0, 1, false, {1});
1284 InsertVp9Flex(sn + 3, sn + 3, false, pid + 2, 0, 0, 1, false, {2}); 1289 InsertVp9Flex(sn + 3, sn + 3, false, pid + 2, 0, 0, 1, false, {2});
1285 InsertVp9Flex(sn + 7, sn + 7, false, pid + 4, 1, 0, 2, false, {1}); 1290 InsertVp9Flex(sn + 7, sn + 7, false, pid + 4, 1, 0, 2, false, {1});
1286 InsertVp9Flex(sn + 6, sn + 6, false, pid + 4, 0, 0, 2, false, {2}); 1291 InsertVp9Flex(sn + 6, sn + 6, false, pid + 4, 0, 0, 2, false, {2});
1287 InsertVp9Flex(sn + 8, sn + 8, false, pid + 5, 1, 0, 2, false, {1}); 1292 InsertVp9Flex(sn + 8, sn + 8, false, pid + 5, 1, 0, 2, false, {1});
1288 InsertVp9Flex(sn + 9, sn + 9, false, pid + 6, 0, 0, 3, false, {2}); 1293 InsertVp9Flex(sn + 9, sn + 9, false, pid + 6, 0, 0, 3, false, {2});
1289 InsertVp9Flex(sn + 11, sn + 11, false, pid + 7, 1, 0, 3, false, {1}); 1294 InsertVp9Flex(sn + 11, sn + 11, false, pid + 7, 1, 0, 3, false, {1});
1290 InsertVp9Flex(sn + 10, sn + 10, false, pid + 6, 1, 0, 3, false, {1}); 1295 InsertVp9Flex(sn + 10, sn + 10, false, pid + 6, 1, 0, 3, false, {1});
1291 InsertVp9Flex(sn + 13, sn + 13, false, pid + 8, 1, 0, 4, false, {1}); 1296 InsertVp9Flex(sn + 13, sn + 13, false, pid + 8, 1, 0, 4, false, {1});
1292 InsertVp9Flex(sn + 12, sn + 12, false, pid + 8, 0, 0, 4, false, {2}); 1297 InsertVp9Flex(sn + 12, sn + 12, false, pid + 8, 0, 0, 4, false, {2});
1293 1298
1294 ASSERT_EQ(14UL, frames_from_callback_.size()); 1299 ASSERT_EQ(14UL, frames_from_callback_.size());
1295 CheckReferencesVp9(pid, 0); 1300 CheckReferencesVp9(0, 0);
1296 CheckReferencesVp9(pid, 1); 1301 CheckReferencesVp9(0, 1);
1297 CheckReferencesVp9(pid + 1, 1, pid); 1302 CheckReferencesVp9(1, 1, 0);
1298 CheckReferencesVp9(pid + 2, 0, pid); 1303 CheckReferencesVp9(2, 0, 0);
1299 CheckReferencesVp9(pid + 2, 1, pid + 1); 1304 CheckReferencesVp9(2, 1, 1);
1300 CheckReferencesVp9(pid + 3, 1, pid + 2); 1305 CheckReferencesVp9(3, 1, 2);
1301 CheckReferencesVp9(pid + 4, 0, pid + 2); 1306 CheckReferencesVp9(4, 0, 2);
1302 CheckReferencesVp9(pid + 4, 1, pid + 3); 1307 CheckReferencesVp9(4, 1, 3);
1303 CheckReferencesVp9(pid + 5, 1, pid + 4); 1308 CheckReferencesVp9(5, 1, 4);
1304 CheckReferencesVp9(pid + 6, 0, pid + 4); 1309 CheckReferencesVp9(6, 0, 4);
1305 CheckReferencesVp9(pid + 6, 1, pid + 5); 1310 CheckReferencesVp9(6, 1, 5);
1306 CheckReferencesVp9(pid + 7, 1, pid + 6); 1311 CheckReferencesVp9(7, 1, 6);
1307 CheckReferencesVp9(pid + 8, 0, pid + 6); 1312 CheckReferencesVp9(8, 0, 6);
1308 CheckReferencesVp9(pid + 8, 1, pid + 7); 1313 CheckReferencesVp9(8, 1, 7);
1309 } 1314 }
1310 1315
1311 } // namespace video_coding 1316 } // namespace video_coding
1312 } // namespace webrtc 1317 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698