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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_format_vp9_unittest.cc

Issue 1411923004: Update scalability structure data according to updates in the RTP payload profile. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_format_vp9.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 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
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
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
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
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_format_vp9.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698