OLD | NEW |
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 Loading... |
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 uint64_t kUnwrappedSequenceStart = 10000000000000000000UL; |
| 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 Loading... |
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; |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |