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

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

Issue 2871173008: Fix packetization logic to leave space for extensions in the last packet (Closed)
Patch Set: Impelemented Danilchap@ comments Created 3 years, 7 months 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
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 virtual void SetUp() { 131 virtual void SetUp() {
132 expected_.InitRTPVideoHeaderVP9(); 132 expected_.InitRTPVideoHeaderVP9();
133 } 133 }
134 134
135 RtpPacketToSend packet_; 135 RtpPacketToSend packet_;
136 std::unique_ptr<uint8_t[]> payload_; 136 std::unique_ptr<uint8_t[]> payload_;
137 size_t payload_size_; 137 size_t payload_size_;
138 size_t payload_pos_; 138 size_t payload_pos_;
139 RTPVideoHeaderVP9 expected_; 139 RTPVideoHeaderVP9 expected_;
140 std::unique_ptr<RtpPacketizerVp9> packetizer_; 140 std::unique_ptr<RtpPacketizerVp9> packetizer_;
141 size_t num_packets_;
141 142
142 void Init(size_t payload_size, size_t packet_size) { 143 void Init(size_t payload_size, size_t packet_size) {
143 payload_.reset(new uint8_t[payload_size]); 144 payload_.reset(new uint8_t[payload_size]);
144 memset(payload_.get(), 7, payload_size); 145 memset(payload_.get(), 7, payload_size);
145 payload_size_ = payload_size; 146 payload_size_ = payload_size;
146 payload_pos_ = 0; 147 payload_pos_ = 0;
147 packetizer_.reset(new RtpPacketizerVp9(expected_, packet_size)); 148 packetizer_.reset(new RtpPacketizerVp9(expected_, packet_size, 0));
148 packetizer_->SetPayloadData(payload_.get(), payload_size_, NULL); 149 num_packets_ =
150 packetizer_->SetPayloadData(payload_.get(), payload_size_, NULL);
149 } 151 }
150 152
151 void CheckPayload(const uint8_t* packet, 153 void CheckPayload(const uint8_t* packet,
152 size_t start_pos, 154 size_t start_pos,
153 size_t end_pos, 155 size_t end_pos,
154 bool last) { 156 bool last) {
155 for (size_t i = start_pos; i < end_pos; ++i) { 157 for (size_t i = start_pos; i < end_pos; ++i) {
156 EXPECT_EQ(packet[i], payload_[payload_pos_++]); 158 EXPECT_EQ(packet[i], payload_[payload_pos_++]);
157 } 159 }
158 EXPECT_EQ(last, payload_pos_ == payload_size_); 160 EXPECT_EQ(last, payload_pos_ == payload_size_);
159 } 161 }
160 162
161 void CreateParseAndCheckPackets(const size_t* expected_hdr_sizes, 163 void CreateParseAndCheckPackets(const size_t* expected_hdr_sizes,
162 const size_t* expected_sizes, 164 const size_t* expected_sizes,
163 size_t expected_num_packets) { 165 size_t expected_num_packets) {
164 ASSERT_TRUE(packetizer_.get() != NULL); 166 ASSERT_TRUE(packetizer_.get() != NULL);
165 bool last = false;
166 if (expected_num_packets == 0) { 167 if (expected_num_packets == 0) {
167 EXPECT_FALSE(packetizer_->NextPacket(&packet_, &last)); 168 EXPECT_FALSE(packetizer_->NextPacket(&packet_));
168 return; 169 return;
169 } 170 }
171 EXPECT_EQ(expected_num_packets, num_packets_);
170 for (size_t i = 0; i < expected_num_packets; ++i) { 172 for (size_t i = 0; i < expected_num_packets; ++i) {
171 EXPECT_TRUE(packetizer_->NextPacket(&packet_, &last)); 173 EXPECT_TRUE(packetizer_->NextPacket(&packet_));
172 auto rtp_payload = packet_.payload(); 174 auto rtp_payload = packet_.payload();
173 EXPECT_EQ(expected_sizes[i], rtp_payload.size()); 175 EXPECT_EQ(expected_sizes[i], rtp_payload.size());
174 RTPVideoHeaderVP9 hdr = expected_; 176 RTPVideoHeaderVP9 hdr = expected_;
175 hdr.beginning_of_frame = (i == 0); 177 hdr.beginning_of_frame = (i == 0);
176 hdr.end_of_frame = last; 178 hdr.end_of_frame = (i + 1) == expected_num_packets;
177 ParseAndCheckPacket(rtp_payload.data(), hdr, expected_hdr_sizes[i], 179 ParseAndCheckPacket(rtp_payload.data(), hdr, expected_hdr_sizes[i],
178 rtp_payload.size()); 180 rtp_payload.size());
179 CheckPayload(rtp_payload.data(), expected_hdr_sizes[i], 181 CheckPayload(rtp_payload.data(), expected_hdr_sizes[i],
180 rtp_payload.size(), last); 182 rtp_payload.size(), (i + 1) == expected_num_packets);
181 } 183 }
182 EXPECT_TRUE(last);
183 } 184 }
184 }; 185 };
185 186
186 TEST_F(RtpPacketizerVp9Test, TestEqualSizedMode_OnePacket) { 187 TEST_F(RtpPacketizerVp9Test, TestEqualSizedMode_OnePacket) {
187 const size_t kFrameSize = 25; 188 const size_t kFrameSize = 25;
188 const size_t kPacketSize = 26; 189 const size_t kPacketSize = 26;
189 Init(kFrameSize, kPacketSize); 190 Init(kFrameSize, kPacketSize);
190 191
191 // One packet: 192 // One packet:
192 // I:0, P:0, L:0, F:0, B:1, E:1, V:0 (1hdr + 25 payload) 193 // I:0, P:0, L:0, F:0, B:1, E:1, V:0 (1hdr + 25 payload)
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 const size_t kPacketSize = 9; // 2 packet per frame. 438 const size_t kPacketSize = 9; // 2 packet per frame.
438 const uint8_t kFrame[kFrameSize] = {7}; 439 const uint8_t kFrame[kFrameSize] = {7};
439 const RTPFragmentationHeader* kNoFragmentation = nullptr; 440 const RTPFragmentationHeader* kNoFragmentation = nullptr;
440 441
441 RTPVideoHeaderVP9 vp9_header; 442 RTPVideoHeaderVP9 vp9_header;
442 vp9_header.InitRTPVideoHeaderVP9(); 443 vp9_header.InitRTPVideoHeaderVP9();
443 vp9_header.flexible_mode = true; 444 vp9_header.flexible_mode = true;
444 vp9_header.num_spatial_layers = 3; 445 vp9_header.num_spatial_layers = 3;
445 446
446 RtpPacketToSend packet(kNoExtensions); 447 RtpPacketToSend packet(kNoExtensions);
447 bool last;
448 448
449 vp9_header.spatial_idx = 0; 449 vp9_header.spatial_idx = 0;
450 RtpPacketizerVp9 packetizer0(vp9_header, kPacketSize); 450 RtpPacketizerVp9 packetizer0(vp9_header, kPacketSize, 0);
danilchap 2017/05/16 10:25:12 what is zero? can you name the constant or you con
ilnik 2017/05/16 12:24:08 Done.
451 packetizer0.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation); 451 EXPECT_EQ(
452 ASSERT_TRUE(packetizer0.NextPacket(&packet, &last)); 452 packetizer0.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation), 2u);
danilchap 2017/05/16 10:25:12 can you name the constant 2, preferably with comme
ilnik 2017/05/16 12:24:08 Done.
453 EXPECT_FALSE(last); 453 ASSERT_TRUE(packetizer0.NextPacket(&packet));
454 EXPECT_FALSE(packet.Marker()); 454 EXPECT_FALSE(packet.Marker());
455 ASSERT_TRUE(packetizer0.NextPacket(&packet, &last)); 455 ASSERT_TRUE(packetizer0.NextPacket(&packet));
456 EXPECT_TRUE(last);
457 EXPECT_FALSE(packet.Marker()); 456 EXPECT_FALSE(packet.Marker());
458 457
459 vp9_header.spatial_idx = 1; 458 vp9_header.spatial_idx = 1;
460 RtpPacketizerVp9 packetizer1(vp9_header, kPacketSize); 459 RtpPacketizerVp9 packetizer1(vp9_header, kPacketSize, 0);
461 packetizer1.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation); 460 EXPECT_EQ(
462 ASSERT_TRUE(packetizer1.NextPacket(&packet, &last)); 461 packetizer1.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation), 2u);
463 EXPECT_FALSE(last); 462 ASSERT_TRUE(packetizer1.NextPacket(&packet));
464 EXPECT_FALSE(packet.Marker()); 463 EXPECT_FALSE(packet.Marker());
465 ASSERT_TRUE(packetizer1.NextPacket(&packet, &last)); 464 ASSERT_TRUE(packetizer1.NextPacket(&packet));
466 EXPECT_TRUE(last);
467 EXPECT_FALSE(packet.Marker()); 465 EXPECT_FALSE(packet.Marker());
468 466
469 vp9_header.spatial_idx = 2; 467 vp9_header.spatial_idx = 2;
470 RtpPacketizerVp9 packetizer2(vp9_header, kPacketSize); 468 RtpPacketizerVp9 packetizer2(vp9_header, kPacketSize, 0);
471 packetizer2.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation); 469 EXPECT_EQ(
472 ASSERT_TRUE(packetizer2.NextPacket(&packet, &last)); 470 packetizer2.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation), 2u);
473 EXPECT_FALSE(last); 471 ASSERT_TRUE(packetizer2.NextPacket(&packet));
474 EXPECT_FALSE(packet.Marker()); 472 EXPECT_FALSE(packet.Marker());
475 ASSERT_TRUE(packetizer2.NextPacket(&packet, &last)); 473 ASSERT_TRUE(packetizer2.NextPacket(&packet));
476 EXPECT_TRUE(last);
477 EXPECT_TRUE(packet.Marker()); 474 EXPECT_TRUE(packet.Marker());
478 } 475 }
479 476
480 TEST_F(RtpPacketizerVp9Test, TestBaseLayerProtectionAndStorageType) { 477 TEST_F(RtpPacketizerVp9Test, TestBaseLayerProtectionAndStorageType) {
481 const size_t kFrameSize = 10; 478 const size_t kFrameSize = 10;
482 const size_t kPacketSize = 12; 479 const size_t kPacketSize = 12;
483 480
484 // I:0, P:0, L:1, F:1, B:1, E:1, V:0 (2hdr + 10 payload) 481 // I:0, P:0, L:1, F:1, B:1, E:1, V:0 (2hdr + 10 payload)
485 // L: T:0, U:0, S:0, D:0 482 // L: T:0, U:0, S:0, D:0
486 expected_.flexible_mode = true; 483 expected_.flexible_mode = true;
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 ASSERT_TRUE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); 718 ASSERT_TRUE(depacketizer_->Parse(&parsed, packet, sizeof(packet)));
722 EXPECT_EQ(kWidth[0], parsed.type.Video.width); 719 EXPECT_EQ(kWidth[0], parsed.type.Video.width);
723 EXPECT_EQ(kHeight[0], parsed.type.Video.height); 720 EXPECT_EQ(kHeight[0], parsed.type.Video.height);
724 } 721 }
725 722
726 TEST_F(RtpDepacketizerVp9Test, ParseFailsForNoPayloadLength) { 723 TEST_F(RtpDepacketizerVp9Test, ParseFailsForNoPayloadLength) {
727 uint8_t packet[1] = {0}; 724 uint8_t packet[1] = {0};
728 RtpDepacketizer::ParsedPayload parsed; 725 RtpDepacketizer::ParsedPayload parsed;
729 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, 0)); 726 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, 0));
730 } 727 }
731 728
danilchap 2017/05/16 10:25:12 Add test(s) where last_packet_reduction_len > 0
ilnik 2017/05/16 12:24:08 Done.
732 TEST_F(RtpDepacketizerVp9Test, ParseFailsForTooShortBufferToFitPayload) { 729 TEST_F(RtpDepacketizerVp9Test, ParseFailsForTooShortBufferToFitPayload) {
733 const uint8_t kHeaderLength = 1; 730 const uint8_t kHeaderLength = 1;
734 uint8_t packet[kHeaderLength] = {0}; 731 uint8_t packet[kHeaderLength] = {0};
735 RtpDepacketizer::ParsedPayload parsed; 732 RtpDepacketizer::ParsedPayload parsed;
736 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, sizeof(packet))); 733 EXPECT_FALSE(depacketizer_->Parse(&parsed, packet, sizeof(packet)));
737 } 734 }
738 735
739 } // namespace webrtc 736 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698