| Index: webrtc/modules/rtp_rtcp/source/rtp_format_vp9_unittest.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_format_vp9_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_format_vp9_unittest.cc
|
| index 2848ea0dd08201adbb14de23766e10044b02cd93..3f1ead87b53ecaea4cda6a36ac42789d00941601 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_format_vp9_unittest.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_format_vp9_unittest.cc
|
| @@ -12,6 +12,7 @@
|
| #include <vector>
|
|
|
| #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h"
|
| +#include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h"
|
| #include "webrtc/test/gmock.h"
|
| #include "webrtc/test/gtest.h"
|
| #include "webrtc/typedefs.h"
|
| @@ -123,12 +124,15 @@ void ParseAndCheckPacket(const uint8_t* packet,
|
|
|
| class RtpPacketizerVp9Test : public ::testing::Test {
|
| protected:
|
| - RtpPacketizerVp9Test() {}
|
| + static constexpr RtpPacketToSend::ExtensionManager* kNoExtensions = nullptr;
|
| + static constexpr size_t kMaxPacketSize = 1200;
|
| +
|
| + RtpPacketizerVp9Test() : packet_(kNoExtensions, kMaxPacketSize) {}
|
| virtual void SetUp() {
|
| expected_.InitRTPVideoHeaderVP9();
|
| }
|
|
|
| - std::unique_ptr<uint8_t[]> packet_;
|
| + RtpPacketToSend packet_;
|
| std::unique_ptr<uint8_t[]> payload_;
|
| size_t payload_size_;
|
| size_t payload_pos_;
|
| @@ -142,9 +146,6 @@ class RtpPacketizerVp9Test : public ::testing::Test {
|
| payload_pos_ = 0;
|
| packetizer_.reset(new RtpPacketizerVp9(expected_, packet_size));
|
| packetizer_->SetPayloadData(payload_.get(), payload_size_, NULL);
|
| -
|
| - const int kMaxPayloadDescriptorLength = 100;
|
| - packet_.reset(new uint8_t[payload_size_ + kMaxPayloadDescriptorLength]);
|
| }
|
|
|
| void CheckPayload(const uint8_t* packet,
|
| @@ -161,20 +162,22 @@ class RtpPacketizerVp9Test : public ::testing::Test {
|
| const size_t* expected_sizes,
|
| size_t expected_num_packets) {
|
| ASSERT_TRUE(packetizer_.get() != NULL);
|
| - size_t length = 0;
|
| bool last = false;
|
| if (expected_num_packets == 0) {
|
| - EXPECT_FALSE(packetizer_->NextPacket(packet_.get(), &length, &last));
|
| + EXPECT_FALSE(packetizer_->NextPacket(&packet_, &last));
|
| return;
|
| }
|
| for (size_t i = 0; i < expected_num_packets; ++i) {
|
| - EXPECT_TRUE(packetizer_->NextPacket(packet_.get(), &length, &last));
|
| - EXPECT_EQ(expected_sizes[i], length);
|
| + EXPECT_TRUE(packetizer_->NextPacket(&packet_, &last));
|
| + auto rtp_payload = packet_.payload();
|
| + EXPECT_EQ(expected_sizes[i], rtp_payload.size());
|
| RTPVideoHeaderVP9 hdr = expected_;
|
| hdr.beginning_of_frame = (i == 0);
|
| hdr.end_of_frame = last;
|
| - ParseAndCheckPacket(packet_.get(), hdr, expected_hdr_sizes[i], length);
|
| - CheckPayload(packet_.get(), expected_hdr_sizes[i], length, last);
|
| + ParseAndCheckPacket(rtp_payload.data(), hdr, expected_hdr_sizes[i],
|
| + rtp_payload.size());
|
| + CheckPayload(rtp_payload.data(), expected_hdr_sizes[i],
|
| + rtp_payload.size(), last);
|
| }
|
| EXPECT_TRUE(last);
|
| }
|
| @@ -429,6 +432,51 @@ TEST_F(RtpPacketizerVp9Test, TestSsData) {
|
| CreateParseAndCheckPackets(kExpectedHdrSizes, kExpectedSizes, kExpectedNum);
|
| }
|
|
|
| +TEST_F(RtpPacketizerVp9Test, TestOnlyHighestSpatialLayerSetMarker) {
|
| + const size_t kFrameSize = 10;
|
| + const size_t kPacketSize = 9; // 2 packet per frame.
|
| + const uint8_t kFrame[kFrameSize] = {7};
|
| + const RTPFragmentationHeader* kNoFragmentation = nullptr;
|
| +
|
| + RTPVideoHeaderVP9 vp9_header;
|
| + vp9_header.InitRTPVideoHeaderVP9();
|
| + vp9_header.flexible_mode = true;
|
| + vp9_header.num_spatial_layers = 3;
|
| +
|
| + RtpPacketToSend packet(kNoExtensions);
|
| + bool last;
|
| +
|
| + vp9_header.spatial_idx = 0;
|
| + RtpPacketizerVp9 packetizer0(vp9_header, kPacketSize);
|
| + packetizer0.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation);
|
| + ASSERT_TRUE(packetizer0.NextPacket(&packet, &last));
|
| + EXPECT_FALSE(last);
|
| + EXPECT_FALSE(packet.Marker());
|
| + ASSERT_TRUE(packetizer0.NextPacket(&packet, &last));
|
| + EXPECT_TRUE(last);
|
| + EXPECT_FALSE(packet.Marker());
|
| +
|
| + vp9_header.spatial_idx = 1;
|
| + RtpPacketizerVp9 packetizer1(vp9_header, kPacketSize);
|
| + packetizer1.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation);
|
| + ASSERT_TRUE(packetizer1.NextPacket(&packet, &last));
|
| + EXPECT_FALSE(last);
|
| + EXPECT_FALSE(packet.Marker());
|
| + ASSERT_TRUE(packetizer1.NextPacket(&packet, &last));
|
| + EXPECT_TRUE(last);
|
| + EXPECT_FALSE(packet.Marker());
|
| +
|
| + vp9_header.spatial_idx = 2;
|
| + RtpPacketizerVp9 packetizer2(vp9_header, kPacketSize);
|
| + packetizer2.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation);
|
| + ASSERT_TRUE(packetizer2.NextPacket(&packet, &last));
|
| + EXPECT_FALSE(last);
|
| + EXPECT_FALSE(packet.Marker());
|
| + ASSERT_TRUE(packetizer2.NextPacket(&packet, &last));
|
| + EXPECT_TRUE(last);
|
| + EXPECT_TRUE(packet.Marker());
|
| +}
|
| +
|
| TEST_F(RtpPacketizerVp9Test, TestBaseLayerProtectionAndStorageType) {
|
| const size_t kFrameSize = 10;
|
| const size_t kPacketSize = 12;
|
|
|