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 c53a2ca5a2f112097060eca3b79af1077ecc4ea6..261638fc4171e2ec3b032e337ccd4201de0e0f82 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_format_vp9_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_format_vp9_unittest.cc |
@@ -138,14 +138,17 @@ class RtpPacketizerVp9Test : public ::testing::Test { |
size_t payload_pos_; |
RTPVideoHeaderVP9 expected_; |
std::unique_ptr<RtpPacketizerVp9> packetizer_; |
+ size_t num_packets_; |
void Init(size_t payload_size, size_t packet_size) { |
payload_.reset(new uint8_t[payload_size]); |
memset(payload_.get(), 7, payload_size); |
payload_size_ = payload_size; |
payload_pos_ = 0; |
- packetizer_.reset(new RtpPacketizerVp9(expected_, packet_size)); |
- packetizer_->SetPayloadData(payload_.get(), payload_size_, NULL); |
+ packetizer_.reset(new RtpPacketizerVp9(expected_, packet_size, |
+ /*last_packet_reduction_len=*/0)); |
+ num_packets_ = |
+ packetizer_->SetPayloadData(payload_.get(), payload_size_, NULL); |
danilchap
2017/05/17 10:31:20
since you are touching this line anyway, replace N
ilnik
2017/05/17 12:30:55
Done.
|
} |
void CheckPayload(const uint8_t* packet, |
@@ -162,24 +165,23 @@ class RtpPacketizerVp9Test : public ::testing::Test { |
const size_t* expected_sizes, |
size_t expected_num_packets) { |
ASSERT_TRUE(packetizer_.get() != NULL); |
- bool last = false; |
if (expected_num_packets == 0) { |
- EXPECT_FALSE(packetizer_->NextPacket(&packet_, &last)); |
+ EXPECT_FALSE(packetizer_->NextPacket(&packet_)); |
return; |
} |
+ EXPECT_EQ(expected_num_packets, num_packets_); |
for (size_t i = 0; i < expected_num_packets; ++i) { |
- EXPECT_TRUE(packetizer_->NextPacket(&packet_, &last)); |
+ EXPECT_TRUE(packetizer_->NextPacket(&packet_)); |
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; |
+ hdr.end_of_frame = (i + 1) == expected_num_packets; |
ParseAndCheckPacket(rtp_payload.data(), hdr, expected_hdr_sizes[i], |
rtp_payload.size()); |
CheckPayload(rtp_payload.data(), expected_hdr_sizes[i], |
- rtp_payload.size(), last); |
+ rtp_payload.size(), (i + 1) == expected_num_packets); |
} |
- EXPECT_TRUE(last); |
} |
}; |
@@ -434,7 +436,12 @@ TEST_F(RtpPacketizerVp9Test, TestSsData) { |
TEST_F(RtpPacketizerVp9Test, TestOnlyHighestSpatialLayerSetMarker) { |
const size_t kFrameSize = 10; |
- const size_t kPacketSize = 9; // 2 packet per frame. |
+ const size_t kPacketSize = 8; |
+ const size_t kExtensionsLen = 0; |
danilchap
2017/05/17 10:31:20
prefer kLastPacketReudctionLen name
to avoid false
ilnik
2017/05/17 12:30:56
Done.
|
+ // Calculated by hand. Headers are 2 bytes. One packet would be 2+10 bytes |
danilchap
2017/05/17 10:31:20
may be mention which headers (since there are so m
ilnik
2017/05/17 12:30:55
Done.
|
+ // which is more than packet size. But two packets are enough, since they have |
+ // capacity of 2*(8-2)=12 bytes. |
danilchap
2017/05/17 10:31:20
May be:
One packet can contain |kPacketSize| - |kV
ilnik
2017/05/17 12:30:55
Done.
|
+ const size_t kMinNumberOfPackets = 2; |
const uint8_t kFrame[kFrameSize] = {7}; |
const RTPFragmentationHeader* kNoFragmentation = nullptr; |
@@ -444,39 +451,68 @@ TEST_F(RtpPacketizerVp9Test, TestOnlyHighestSpatialLayerSetMarker) { |
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); |
+ RtpPacketizerVp9 packetizer0(vp9_header, kPacketSize, kExtensionsLen); |
+ EXPECT_EQ( |
+ packetizer0.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation), |
+ kMinNumberOfPackets); |
danilchap
2017/05/17 10:31:20
may be rather than hijacking test designed to chec
ilnik
2017/05/17 12:30:56
Done.
|
+ ASSERT_TRUE(packetizer0.NextPacket(&packet)); |
EXPECT_FALSE(packet.Marker()); |
- ASSERT_TRUE(packetizer0.NextPacket(&packet, &last)); |
- EXPECT_TRUE(last); |
+ ASSERT_TRUE(packetizer0.NextPacket(&packet)); |
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); |
+ RtpPacketizerVp9 packetizer1(vp9_header, kPacketSize, kExtensionsLen); |
+ EXPECT_EQ( |
+ packetizer1.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation), |
+ kMinNumberOfPackets); |
+ ASSERT_TRUE(packetizer1.NextPacket(&packet)); |
EXPECT_FALSE(packet.Marker()); |
- ASSERT_TRUE(packetizer1.NextPacket(&packet, &last)); |
- EXPECT_TRUE(last); |
+ ASSERT_TRUE(packetizer1.NextPacket(&packet)); |
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); |
+ RtpPacketizerVp9 packetizer2(vp9_header, kPacketSize, kExtensionsLen); |
+ EXPECT_EQ( |
+ packetizer2.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation), |
+ kMinNumberOfPackets); |
+ ASSERT_TRUE(packetizer2.NextPacket(&packet)); |
EXPECT_FALSE(packet.Marker()); |
- ASSERT_TRUE(packetizer2.NextPacket(&packet, &last)); |
- EXPECT_TRUE(last); |
+ ASSERT_TRUE(packetizer2.NextPacket(&packet)); |
EXPECT_TRUE(packet.Marker()); |
} |
+TEST_F(RtpPacketizerVp9Test, TestRespectsLastPacketReduction) { |
+ const size_t kFrameSize = 10; |
+ const size_t kPacketSize = 8; |
+ const size_t kExtensionsLen = 5; |
+ // Calculated by hand. Headers are 2 bytes. Like in the test above, 1 packet |
+ // is not enough. 2 packets would have capacity of (8-2)+(8-2-5)=7 because the |
+ // last packet has reserved space for extensions. But three packets are |
+ // enough, since they have capacity of 3*(8-2)-5=13 bytes. |
+ const size_t kMinNumberOfPackets = 3; |
+ 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; |
danilchap
2017/05/17 10:31:20
is number of spatial layers (or presence of this f
ilnik
2017/05/17 12:30:56
No, it's from copy-paste. Removed.
|
+ |
+ RtpPacketToSend packet(kNoExtensions); |
+ |
+ vp9_header.spatial_idx = 0; |
+ RtpPacketizerVp9 packetizer0(vp9_header, kPacketSize, kExtensionsLen); |
+ EXPECT_EQ( |
+ packetizer0.SetPayloadData(kFrame, sizeof(kFrame), kNoFragmentation), |
+ kMinNumberOfPackets); |
+ ASSERT_TRUE(packetizer0.NextPacket(&packet)); |
+ EXPECT_FALSE(packet.Marker()); |
+ ASSERT_TRUE(packetizer0.NextPacket(&packet)); |
+ EXPECT_FALSE(packet.Marker()); |
+} |
+ |
TEST_F(RtpPacketizerVp9Test, TestBaseLayerProtectionAndStorageType) { |
const size_t kFrameSize = 10; |
const size_t kPacketSize = 12; |