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

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

Issue 2522553002: RtpPacketizer::NextPacket fills RtpPacket instead of payload. (Closed)
Patch Set: Named kTheMagicSix Created 4 years 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
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
11 #include <memory> 11 #include <memory>
12 #include <vector> 12 #include <vector>
13 13
14 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h" 14 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h"
15 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h"
15 #include "webrtc/test/gmock.h" 16 #include "webrtc/test/gmock.h"
16 #include "webrtc/test/gtest.h" 17 #include "webrtc/test/gtest.h"
17 #include "webrtc/typedefs.h" 18 #include "webrtc/typedefs.h"
18 19
19 namespace webrtc { 20 namespace webrtc {
20 namespace { 21 namespace {
21 void VerifyHeader(const RTPVideoHeaderVP9& expected, 22 void VerifyHeader(const RTPVideoHeaderVP9& expected,
22 const RTPVideoHeaderVP9& actual) { 23 const RTPVideoHeaderVP9& actual) {
23 EXPECT_EQ(expected.inter_layer_predicted, actual.inter_layer_predicted); 24 EXPECT_EQ(expected.inter_layer_predicted, actual.inter_layer_predicted);
24 EXPECT_EQ(expected.inter_pic_predicted, actual.inter_pic_predicted); 25 EXPECT_EQ(expected.inter_pic_predicted, actual.inter_pic_predicted);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 // L: | T |U| S |D| (CONDITIONALLY RECOMMENDED) 117 // L: | T |U| S |D| (CONDITIONALLY RECOMMENDED)
117 // +-+-+-+-+-+-+-+-+ 118 // +-+-+-+-+-+-+-+-+
118 // | TL0PICIDX | (CONDITIONALLY REQUIRED) 119 // | TL0PICIDX | (CONDITIONALLY REQUIRED)
119 // +-+-+-+-+-+-+-+-+ 120 // +-+-+-+-+-+-+-+-+
120 // V: | SS | 121 // V: | SS |
121 // | .. | 122 // | .. |
122 // +-+-+-+-+-+-+-+-+ 123 // +-+-+-+-+-+-+-+-+
123 124
124 class RtpPacketizerVp9Test : public ::testing::Test { 125 class RtpPacketizerVp9Test : public ::testing::Test {
125 protected: 126 protected:
126 RtpPacketizerVp9Test() {} 127 static constexpr RtpPacketToSend::ExtensionManager* kNoExtensions = nullptr;
128 static constexpr size_t kMaxPacketSize = 1200;
129
130 RtpPacketizerVp9Test() : packet_(kNoExtensions, kMaxPacketSize) {}
127 virtual void SetUp() { 131 virtual void SetUp() {
128 expected_.InitRTPVideoHeaderVP9(); 132 expected_.InitRTPVideoHeaderVP9();
129 } 133 }
130 134
131 std::unique_ptr<uint8_t[]> packet_; 135 RtpPacketToSend packet_;
132 std::unique_ptr<uint8_t[]> payload_; 136 std::unique_ptr<uint8_t[]> payload_;
133 size_t payload_size_; 137 size_t payload_size_;
134 size_t payload_pos_; 138 size_t payload_pos_;
135 RTPVideoHeaderVP9 expected_; 139 RTPVideoHeaderVP9 expected_;
136 std::unique_ptr<RtpPacketizerVp9> packetizer_; 140 std::unique_ptr<RtpPacketizerVp9> packetizer_;
137 141
138 void Init(size_t payload_size, size_t packet_size) { 142 void Init(size_t payload_size, size_t packet_size) {
139 payload_.reset(new uint8_t[payload_size]); 143 payload_.reset(new uint8_t[payload_size]);
140 memset(payload_.get(), 7, payload_size); 144 memset(payload_.get(), 7, payload_size);
141 payload_size_ = payload_size; 145 payload_size_ = payload_size;
142 payload_pos_ = 0; 146 payload_pos_ = 0;
143 packetizer_.reset(new RtpPacketizerVp9(expected_, packet_size)); 147 packetizer_.reset(new RtpPacketizerVp9(expected_, packet_size));
144 packetizer_->SetPayloadData(payload_.get(), payload_size_, NULL); 148 packetizer_->SetPayloadData(payload_.get(), payload_size_, NULL);
145
146 const int kMaxPayloadDescriptorLength = 100;
147 packet_.reset(new uint8_t[payload_size_ + kMaxPayloadDescriptorLength]);
148 } 149 }
149 150
150 void CheckPayload(const uint8_t* packet, 151 void CheckPayload(const uint8_t* packet,
151 size_t start_pos, 152 size_t start_pos,
152 size_t end_pos, 153 size_t end_pos,
153 bool last) { 154 bool last) {
154 for (size_t i = start_pos; i < end_pos; ++i) { 155 for (size_t i = start_pos; i < end_pos; ++i) {
155 EXPECT_EQ(packet[i], payload_[payload_pos_++]); 156 EXPECT_EQ(packet[i], payload_[payload_pos_++]);
156 } 157 }
157 EXPECT_EQ(last, payload_pos_ == payload_size_); 158 EXPECT_EQ(last, payload_pos_ == payload_size_);
158 } 159 }
159 160
160 void CreateParseAndCheckPackets(const size_t* expected_hdr_sizes, 161 void CreateParseAndCheckPackets(const size_t* expected_hdr_sizes,
161 const size_t* expected_sizes, 162 const size_t* expected_sizes,
162 size_t expected_num_packets) { 163 size_t expected_num_packets) {
163 ASSERT_TRUE(packetizer_.get() != NULL); 164 ASSERT_TRUE(packetizer_.get() != NULL);
164 size_t length = 0;
165 bool last = false; 165 bool last = false;
166 if (expected_num_packets == 0) { 166 if (expected_num_packets == 0) {
167 EXPECT_FALSE(packetizer_->NextPacket(packet_.get(), &length, &last)); 167 EXPECT_FALSE(packetizer_->NextPacket(&packet_, &last));
168 return; 168 return;
169 } 169 }
170 for (size_t i = 0; i < expected_num_packets; ++i) { 170 for (size_t i = 0; i < expected_num_packets; ++i) {
171 EXPECT_TRUE(packetizer_->NextPacket(packet_.get(), &length, &last)); 171 EXPECT_TRUE(packetizer_->NextPacket(&packet_, &last));
172 EXPECT_EQ(expected_sizes[i], length); 172 auto rtp_payload = packet_.payload();
173 EXPECT_EQ(expected_sizes[i], rtp_payload.size());
173 RTPVideoHeaderVP9 hdr = expected_; 174 RTPVideoHeaderVP9 hdr = expected_;
174 hdr.beginning_of_frame = (i == 0); 175 hdr.beginning_of_frame = (i == 0);
175 hdr.end_of_frame = last; 176 hdr.end_of_frame = last;
176 ParseAndCheckPacket(packet_.get(), hdr, expected_hdr_sizes[i], length); 177 ParseAndCheckPacket(rtp_payload.data(), hdr, expected_hdr_sizes[i],
177 CheckPayload(packet_.get(), expected_hdr_sizes[i], length, last); 178 rtp_payload.size());
179 CheckPayload(rtp_payload.data(), expected_hdr_sizes[i],
180 rtp_payload.size(), last);
178 } 181 }
179 EXPECT_TRUE(last); 182 EXPECT_TRUE(last);
180 } 183 }
181 }; 184 };
182 185
183 TEST_F(RtpPacketizerVp9Test, TestEqualSizedMode_OnePacket) { 186 TEST_F(RtpPacketizerVp9Test, TestEqualSizedMode_OnePacket) {
184 const size_t kFrameSize = 25; 187 const size_t kFrameSize = 25;
185 const size_t kPacketSize = 26; 188 const size_t kPacketSize = 26;
186 Init(kFrameSize, kPacketSize); 189 Init(kFrameSize, kPacketSize);
187 190
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 // N_G:3 425 // N_G:3
423 // T:0, U:1, R:0 426 // T:0, U:1, R:0
424 // T:1, U:1, R:3 | P_DIFF[1][0]:5 | P_DIFF[1][1]:6 | P_DIFF[1][2]:7 427 // T:1, U:1, R:3 | P_DIFF[1][0]:5 | P_DIFF[1][1]:6 | P_DIFF[1][2]:7
425 // T:2, U:0, R:2 | P_DIFF[2][0]:8 | P_DIFF[2][0]:9 428 // T:2, U:0, R:2 | P_DIFF[2][0]:8 | P_DIFF[2][0]:9
426 const size_t kExpectedHdrSizes[] = {19}; 429 const size_t kExpectedHdrSizes[] = {19};
427 const size_t kExpectedSizes[] = {40}; 430 const size_t kExpectedSizes[] = {40};
428 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes); 431 const size_t kExpectedNum = GTEST_ARRAY_SIZE_(kExpectedSizes);
429 CreateParseAndCheckPackets(kExpectedHdrSizes, kExpectedSizes, kExpectedNum); 432 CreateParseAndCheckPackets(kExpectedHdrSizes, kExpectedSizes, kExpectedNum);
430 } 433 }
431 434
435 TEST_F(RtpPacketizerVp9Test, TestOnlyHighestSpatialLayerSetMarker) {
436 const size_t kFrameSize = 10;
437 const size_t kPacketSize = 9; // 2 packet per frame.
438 const uint8_t kFrame[kFrameSize] = {7};
439 const RTPFragmentationHeader* kNoFragmentation = nullptr;
440
441 RTPVideoHeaderVP9 vp9_header;
442 vp9_header.InitRTPVideoHeaderVP9();
443 vp9_header.flexible_mode = true;
444 vp9_header.num_spatial_layers = 3;
445
446 RtpPacketToSend packet(kNoExtensions);
447 bool last;
448
449 vp9_header.spatial_idx = 0;
450 RtpPacketizerVp9 packetizer0(vp9_header, kPacketSize);
451 packetizer0.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation);
452 ASSERT_TRUE(packetizer0.NextPacket(&packet, &last));
453 EXPECT_FALSE(last);
454 EXPECT_FALSE(packet.Marker());
455 ASSERT_TRUE(packetizer0.NextPacket(&packet, &last));
456 EXPECT_TRUE(last);
457 EXPECT_FALSE(packet.Marker());
458
459 vp9_header.spatial_idx = 1;
460 RtpPacketizerVp9 packetizer1(vp9_header, kPacketSize);
461 packetizer1.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation);
462 ASSERT_TRUE(packetizer1.NextPacket(&packet, &last));
463 EXPECT_FALSE(last);
464 EXPECT_FALSE(packet.Marker());
465 ASSERT_TRUE(packetizer1.NextPacket(&packet, &last));
466 EXPECT_TRUE(last);
467 EXPECT_FALSE(packet.Marker());
468
469 vp9_header.spatial_idx = 2;
470 RtpPacketizerVp9 packetizer2(vp9_header, kPacketSize);
471 packetizer2.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation);
472 ASSERT_TRUE(packetizer2.NextPacket(&packet, &last));
473 EXPECT_FALSE(last);
474 EXPECT_FALSE(packet.Marker());
475 ASSERT_TRUE(packetizer2.NextPacket(&packet, &last));
476 EXPECT_TRUE(last);
477 EXPECT_TRUE(packet.Marker());
478 }
479
432 TEST_F(RtpPacketizerVp9Test, TestBaseLayerProtectionAndStorageType) { 480 TEST_F(RtpPacketizerVp9Test, TestBaseLayerProtectionAndStorageType) {
433 const size_t kFrameSize = 10; 481 const size_t kFrameSize = 10;
434 const size_t kPacketSize = 12; 482 const size_t kPacketSize = 12;
435 483
436 // I:0, P:0, L:1, F:1, B:1, E:1, V:0 (2hdr + 10 payload) 484 // I:0, P:0, L:1, F:1, B:1, E:1, V:0 (2hdr + 10 payload)
437 // L: T:0, U:0, S:0, D:0 485 // L: T:0, U:0, S:0, D:0
438 expected_.flexible_mode = true; 486 expected_.flexible_mode = true;
439 expected_.temporal_idx = 0; 487 expected_.temporal_idx = 0;
440 Init(kFrameSize, kPacketSize); 488 Init(kFrameSize, kPacketSize);
441 EXPECT_EQ(kProtectedPacket, packetizer_->GetProtectionType()); 489 EXPECT_EQ(kProtectedPacket, packetizer_->GetProtectionType());
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 } 730 }
683 731
684 TEST_F(RtpDepacketizerVp9Test, ParseFailsForTooShortBufferToFitPayload) { 732 TEST_F(RtpDepacketizerVp9Test, ParseFailsForTooShortBufferToFitPayload) {
685 const uint8_t kHeaderLength = 1; 733 const uint8_t kHeaderLength = 1;
686 uint8_t packet[kHeaderLength] = {0}; 734 uint8_t packet[kHeaderLength] = {0};
687 RtpDepacketizer::ParsedPayload parsed; 735 RtpDepacketizer::ParsedPayload parsed;
688 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); 736 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, sizeof(packet)));
689 } 737 }
690 738
691 } // namespace webrtc 739 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_format_vp9.cc ('k') | webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698