Chromium Code Reviews| 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 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 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; |
|
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 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 |