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 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |