OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 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 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 expected_.num_ref_pics = 1; | 330 expected_.num_ref_pics = 1; |
331 expected_.pid_diff[0] = 3; | 331 expected_.pid_diff[0] = 3; |
332 Init(kFrameSize, kPacketSize); | 332 Init(kFrameSize, kPacketSize); |
333 | 333 |
334 const size_t kExpectedNum = 0; | 334 const size_t kExpectedNum = 0; |
335 CreateParseAndCheckPackets(NULL, NULL, kExpectedNum); | 335 CreateParseAndCheckPackets(NULL, NULL, kExpectedNum); |
336 } | 336 } |
337 | 337 |
338 TEST_F(RtpPacketizerVp9Test, TestSsDataWithoutSpatialResolutionPresent) { | 338 TEST_F(RtpPacketizerVp9Test, TestSsDataWithoutSpatialResolutionPresent) { |
339 const size_t kFrameSize = 21; | 339 const size_t kFrameSize = 21; |
340 const size_t kPacketSize = 25; | 340 const size_t kPacketSize = 26; |
341 | 341 |
342 expected_.ss_data_available = true; | 342 expected_.ss_data_available = true; |
343 expected_.num_spatial_layers = 1; | 343 expected_.num_spatial_layers = 1; |
344 expected_.spatial_layer_resolution_present = false; | 344 expected_.spatial_layer_resolution_present = false; |
345 expected_.gof.num_frames_in_gof = 1; | 345 expected_.gof.num_frames_in_gof = 1; |
346 expected_.gof.temporal_idx[0] = 0; | 346 expected_.gof.temporal_idx[0] = 0; |
347 expected_.gof.temporal_up_switch[0] = true; | 347 expected_.gof.temporal_up_switch[0] = true; |
348 expected_.gof.num_ref_pics[0] = 1; | 348 expected_.gof.num_ref_pics[0] = 1; |
349 expected_.gof.pid_diff[0][0] = 4; | 349 expected_.gof.pid_diff[0][0] = 4; |
350 Init(kFrameSize, kPacketSize); | 350 Init(kFrameSize, kPacketSize); |
351 | 351 |
352 // One packet: | 352 // One packet: |
353 // I:0, P:0, L:0, F:0, B:1, E:1, V:1 (4hdr + 21 payload) | 353 // I:0, P:0, L:0, F:0, B:1, E:1, V:1 (5hdr + 21 payload) |
354 // N_S:0, Y:0, N_G:0 | 354 // N_S:0, Y:0, G:1 |
| 355 // N_G:1 |
355 // T:0, U:1, R:1 | P_DIFF[0][0]:4 | 356 // T:0, U:1, R:1 | P_DIFF[0][0]:4 |
356 const size_t kExpectedHdrSizes[] = {4}; | 357 const size_t kExpectedHdrSizes[] = {5}; |
357 const size_t kExpectedSizes[] = {25}; | 358 const size_t kExpectedSizes[] = {26}; |
| 359 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); |
| 360 CreateParseAndCheckPackets(kExpectedHdrSizes, kExpectedSizes, kExpectedNum); |
| 361 } |
| 362 |
| 363 TEST_F(RtpPacketizerVp9Test, TestSsDataWithoutGbitPresent) { |
| 364 const size_t kFrameSize = 21; |
| 365 const size_t kPacketSize = 23; |
| 366 |
| 367 expected_.ss_data_available = true; |
| 368 expected_.num_spatial_layers = 1; |
| 369 expected_.spatial_layer_resolution_present = false; |
| 370 expected_.gof.num_frames_in_gof = 0; |
| 371 Init(kFrameSize, kPacketSize); |
| 372 |
| 373 // One packet: |
| 374 // I:0, P:0, L:0, F:0, B:1, E:1, V:1 (2hdr + 21 payload) |
| 375 // N_S:0, Y:0, G:0 |
| 376 const size_t kExpectedHdrSizes[] = {2}; |
| 377 const size_t kExpectedSizes[] = {23}; |
358 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); | 378 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); |
359 CreateParseAndCheckPackets(kExpectedHdrSizes, kExpectedSizes, kExpectedNum); | 379 CreateParseAndCheckPackets(kExpectedHdrSizes, kExpectedSizes, kExpectedNum); |
360 } | 380 } |
361 | 381 |
362 TEST_F(RtpPacketizerVp9Test, TestSsData) { | 382 TEST_F(RtpPacketizerVp9Test, TestSsData) { |
363 const size_t kFrameSize = 21; | 383 const size_t kFrameSize = 21; |
364 const size_t kPacketSize = 39; | 384 const size_t kPacketSize = 40; |
365 | 385 |
366 expected_.ss_data_available = true; | 386 expected_.ss_data_available = true; |
367 expected_.num_spatial_layers = 2; | 387 expected_.num_spatial_layers = 2; |
368 expected_.spatial_layer_resolution_present = true; | 388 expected_.spatial_layer_resolution_present = true; |
369 expected_.width[0] = 640; | 389 expected_.width[0] = 640; |
370 expected_.width[1] = 1280; | 390 expected_.width[1] = 1280; |
371 expected_.height[0] = 360; | 391 expected_.height[0] = 360; |
372 expected_.height[1] = 720; | 392 expected_.height[1] = 720; |
373 expected_.gof.num_frames_in_gof = 3; | 393 expected_.gof.num_frames_in_gof = 3; |
374 expected_.gof.temporal_idx[0] = 0; | 394 expected_.gof.temporal_idx[0] = 0; |
375 expected_.gof.temporal_idx[1] = 1; | 395 expected_.gof.temporal_idx[1] = 1; |
376 expected_.gof.temporal_idx[2] = 2; | 396 expected_.gof.temporal_idx[2] = 2; |
377 expected_.gof.temporal_up_switch[0] = true; | 397 expected_.gof.temporal_up_switch[0] = true; |
378 expected_.gof.temporal_up_switch[1] = true; | 398 expected_.gof.temporal_up_switch[1] = true; |
379 expected_.gof.temporal_up_switch[2] = false; | 399 expected_.gof.temporal_up_switch[2] = false; |
380 expected_.gof.num_ref_pics[0] = 0; | 400 expected_.gof.num_ref_pics[0] = 0; |
381 expected_.gof.num_ref_pics[1] = 3; | 401 expected_.gof.num_ref_pics[1] = 3; |
382 expected_.gof.num_ref_pics[2] = 2; | 402 expected_.gof.num_ref_pics[2] = 2; |
383 expected_.gof.pid_diff[1][0] = 5; | 403 expected_.gof.pid_diff[1][0] = 5; |
384 expected_.gof.pid_diff[1][1] = 6; | 404 expected_.gof.pid_diff[1][1] = 6; |
385 expected_.gof.pid_diff[1][2] = 7; | 405 expected_.gof.pid_diff[1][2] = 7; |
386 expected_.gof.pid_diff[2][0] = 8; | 406 expected_.gof.pid_diff[2][0] = 8; |
387 expected_.gof.pid_diff[2][1] = 9; | 407 expected_.gof.pid_diff[2][1] = 9; |
388 Init(kFrameSize, kPacketSize); | 408 Init(kFrameSize, kPacketSize); |
389 | 409 |
390 // One packet: | 410 // One packet: |
391 // I:0, P:0, L:0, F:0, B:1, E:1, V:1 (18hdr + 21 payload) | 411 // I:0, P:0, L:0, F:0, B:1, E:1, V:1 (19hdr + 21 payload) |
392 // N_S:1, Y:1, N_G:2 | 412 // N_S:1, Y:1, G:1 |
393 // WIDTH:640 // 2 bytes | 413 // WIDTH:640 // 2 bytes |
394 // HEIGHT:360 // 2 bytes | 414 // HEIGHT:360 // 2 bytes |
395 // WIDTH:1280 // 2 bytes | 415 // WIDTH:1280 // 2 bytes |
396 // HEIGHT:720 // 2 bytes | 416 // HEIGHT:720 // 2 bytes |
| 417 // N_G:3 |
397 // T:0, U:1, R:0 | 418 // T:0, U:1, R:0 |
398 // T:1, U:1, R:3 | P_DIFF[1][0]:5 | P_DIFF[1][1]:6 | P_DIFF[1][2]:7 | 419 // T:1, U:1, R:3 | P_DIFF[1][0]:5 | P_DIFF[1][1]:6 | P_DIFF[1][2]:7 |
399 // T:2, U:0, R:2 | P_DIFF[2][0]:8 | P_DIFF[2][0]:9 | 420 // T:2, U:0, R:2 | P_DIFF[2][0]:8 | P_DIFF[2][0]:9 |
400 const size_t kExpectedHdrSizes[] = {18}; | 421 const size_t kExpectedHdrSizes[] = {19}; |
401 const size_t kExpectedSizes[] = {39}; | 422 const size_t kExpectedSizes[] = {40}; |
402 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); | 423 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); |
403 CreateParseAndCheckPackets(kExpectedHdrSizes, kExpectedSizes, kExpectedNum); | 424 CreateParseAndCheckPackets(kExpectedHdrSizes, kExpectedSizes, kExpectedNum); |
404 } | 425 } |
405 | 426 |
406 TEST_F(RtpPacketizerVp9Test, TestBaseLayerProtectionAndStorageType) { | 427 TEST_F(RtpPacketizerVp9Test, TestBaseLayerProtectionAndStorageType) { |
407 const size_t kFrameSize = 10; | 428 const size_t kFrameSize = 10; |
408 const size_t kPacketSize = 12; | 429 const size_t kPacketSize = 12; |
409 | 430 |
410 // I:0, P:0, L:1, F:1, B:1, E:1, V:0 (2hdr + 10 payload) | 431 // I:0, P:0, L:1, F:1, B:1, E:1, V:0 (2hdr + 10 payload) |
411 // L: T:0, U:0, S:0, D:0 | 432 // L: T:0, U:0, S:0, D:0 |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 packet[2] = (kPdiff << 2) | (0 << 1) | 1; // P,F: P_DIFF:3 X:0 N:1 | 592 packet[2] = (kPdiff << 2) | (0 << 1) | 1; // P,F: P_DIFF:3 X:0 N:1 |
572 packet[3] = (kPdiff << 2) | (0 << 1) | 1; // P,F: P_DIFF:3 X:0 N:1 | 593 packet[3] = (kPdiff << 2) | (0 << 1) | 1; // P,F: P_DIFF:3 X:0 N:1 |
573 packet[4] = (kPdiff << 2) | (0 << 1) | 1; // P,F: P_DIFF:3 X:0 N:1 | 594 packet[4] = (kPdiff << 2) | (0 << 1) | 1; // P,F: P_DIFF:3 X:0 N:1 |
574 packet[5] = (kPdiff << 2) | (0 << 1) | 0; // P,F: P_DIFF:3 X:0 N:0 | 595 packet[5] = (kPdiff << 2) | (0 << 1) | 0; // P,F: P_DIFF:3 X:0 N:0 |
575 | 596 |
576 RtpDepacketizer::ParsedPayload parsed; | 597 RtpDepacketizer::ParsedPayload parsed; |
577 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); | 598 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); |
578 } | 599 } |
579 | 600 |
580 TEST_F(RtpDepacketizerVp9Test, ParseSsData) { | 601 TEST_F(RtpDepacketizerVp9Test, ParseSsData) { |
581 const uint8_t kHeaderLength = 5; | 602 const uint8_t kHeaderLength = 6; |
582 const uint8_t kYbit = 0; | 603 const uint8_t kYbit = 0; |
583 const size_t kNs = 2; | 604 const size_t kNs = 2; |
584 const size_t kNg = 2; | 605 const size_t kNg = 2; |
585 uint8_t packet[23] = {0}; | 606 uint8_t packet[23] = {0}; |
586 packet[0] = 0x0A; // I:0 P:0 L:0 F:0 B:1 E:0 V:1 R:0 | 607 packet[0] = 0x0A; // I:0 P:0 L:0 F:0 B:1 E:0 V:1 R:0 |
587 packet[1] = ((kNs - 1) << 5) | (kYbit << 4) | (kNg - 1); // N_S Y N_G | 608 packet[1] = ((kNs - 1) << 5) | (kYbit << 4) | (1 << 3); // N_S Y G:1 - |
588 packet[2] = (0 << 5) | (1 << 4) | (0 << 2) | 0; // T:0 U:1 R:0 - | 609 packet[2] = kNg; // N_G |
589 packet[3] = (2 << 5) | (0 << 4) | (1 << 2) | 0; // T:2 U:0 R:1 - | 610 packet[3] = (0 << 5) | (1 << 4) | (0 << 2) | 0; // T:0 U:1 R:0 - |
590 packet[4] = 33; | 611 packet[4] = (2 << 5) | (0 << 4) | (1 << 2) | 0; // T:2 U:0 R:1 - |
| 612 packet[5] = 33; |
591 | 613 |
592 expected_.beginning_of_frame = true; | 614 expected_.beginning_of_frame = true; |
593 expected_.ss_data_available = true; | 615 expected_.ss_data_available = true; |
594 expected_.num_spatial_layers = kNs; | 616 expected_.num_spatial_layers = kNs; |
595 expected_.spatial_layer_resolution_present = kYbit ? true : false; | 617 expected_.spatial_layer_resolution_present = kYbit ? true : false; |
596 expected_.gof.num_frames_in_gof = kNg; | 618 expected_.gof.num_frames_in_gof = kNg; |
597 expected_.gof.temporal_idx[0] = 0; | 619 expected_.gof.temporal_idx[0] = 0; |
598 expected_.gof.temporal_idx[1] = 2; | 620 expected_.gof.temporal_idx[1] = 2; |
599 expected_.gof.temporal_up_switch[0] = true; | 621 expected_.gof.temporal_up_switch[0] = true; |
600 expected_.gof.temporal_up_switch[1] = false; | 622 expected_.gof.temporal_up_switch[1] = false; |
(...skipping 21 matching lines...) Expand all Loading... |
622 ASSERT_TRUE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); | 644 ASSERT_TRUE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); |
623 EXPECT_EQ(kVideoFrameDelta, parsed.frame_type); | 645 EXPECT_EQ(kVideoFrameDelta, parsed.frame_type); |
624 EXPECT_FALSE(parsed.type.Video.isFirstPacket); | 646 EXPECT_FALSE(parsed.type.Video.isFirstPacket); |
625 } | 647 } |
626 | 648 |
627 TEST_F(RtpDepacketizerVp9Test, ParseResolution) { | 649 TEST_F(RtpDepacketizerVp9Test, ParseResolution) { |
628 const uint16_t kWidth[2] = {640, 1280}; | 650 const uint16_t kWidth[2] = {640, 1280}; |
629 const uint16_t kHeight[2] = {360, 720}; | 651 const uint16_t kHeight[2] = {360, 720}; |
630 uint8_t packet[20] = {0}; | 652 uint8_t packet[20] = {0}; |
631 packet[0] = 0x0A; // I:0 P:0 L:0 F:0 B:1 E:0 V:1 R:0 | 653 packet[0] = 0x0A; // I:0 P:0 L:0 F:0 B:1 E:0 V:1 R:0 |
632 packet[1] = (1 << 5) | (1 << 4) | 0; // N_S:1 Y:1 N_G:0 | 654 packet[1] = (1 << 5) | (1 << 4) | 0; // N_S:1 Y:1 G:0 |
633 packet[2] = kWidth[0] >> 8; | 655 packet[2] = kWidth[0] >> 8; |
634 packet[3] = kWidth[0] & 0xFF; | 656 packet[3] = kWidth[0] & 0xFF; |
635 packet[4] = kHeight[0] >> 8; | 657 packet[4] = kHeight[0] >> 8; |
636 packet[5] = kHeight[0] & 0xFF; | 658 packet[5] = kHeight[0] & 0xFF; |
637 packet[6] = kWidth[1] >> 8; | 659 packet[6] = kWidth[1] >> 8; |
638 packet[7] = kWidth[1] & 0xFF; | 660 packet[7] = kWidth[1] & 0xFF; |
639 packet[8] = kHeight[1] >> 8; | 661 packet[8] = kHeight[1] >> 8; |
640 packet[9] = kHeight[1] & 0xFF; | 662 packet[9] = kHeight[1] & 0xFF; |
641 packet[10] = 0; // T:0 U:0 R:0 - | |
642 | 663 |
643 RtpDepacketizer::ParsedPayload parsed; | 664 RtpDepacketizer::ParsedPayload parsed; |
644 ASSERT_TRUE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); | 665 ASSERT_TRUE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); |
645 EXPECT_EQ(kWidth[0], parsed.type.Video.width); | 666 EXPECT_EQ(kWidth[0], parsed.type.Video.width); |
646 EXPECT_EQ(kHeight[0], parsed.type.Video.height); | 667 EXPECT_EQ(kHeight[0], parsed.type.Video.height); |
647 } | 668 } |
648 | 669 |
649 TEST_F(RtpDepacketizerVp9Test, ParseFailsForNoPayloadLength) { | 670 TEST_F(RtpDepacketizerVp9Test, ParseFailsForNoPayloadLength) { |
650 uint8_t packet[1] = {0}; | 671 uint8_t packet[1] = {0}; |
651 RtpDepacketizer::ParsedPayload parsed; | 672 RtpDepacketizer::ParsedPayload parsed; |
652 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, 0)); | 673 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, 0)); |
653 } | 674 } |
654 | 675 |
655 TEST_F(RtpDepacketizerVp9Test, ParseFailsForTooShortBufferToFitPayload) { | 676 TEST_F(RtpDepacketizerVp9Test, ParseFailsForTooShortBufferToFitPayload) { |
656 const uint8_t kHeaderLength = 1; | 677 const uint8_t kHeaderLength = 1; |
657 uint8_t packet[kHeaderLength] = {0}; | 678 uint8_t packet[kHeaderLength] = {0}; |
658 RtpDepacketizer::ParsedPayload parsed; | 679 RtpDepacketizer::ParsedPayload parsed; |
659 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); | 680 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); |
660 } | 681 } |
661 | 682 |
662 } // namespace webrtc | 683 } // namespace webrtc |
OLD | NEW |