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

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

Issue 2867713003: Remove hardcoded kValueSizeBytes values from variable-length header extensions. (Closed)
Patch Set: Patch 4 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) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 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 12 matching lines...) Expand all
23 23
24 namespace { 24 namespace {
25 25
26 using test::fec::AugmentedPacket; 26 using test::fec::AugmentedPacket;
27 using test::fec::AugmentedPacketGenerator; 27 using test::fec::AugmentedPacketGenerator;
28 28
29 constexpr int kFlexfecPayloadType = 123; 29 constexpr int kFlexfecPayloadType = 123;
30 constexpr uint32_t kMediaSsrc = 1234; 30 constexpr uint32_t kMediaSsrc = 1234;
31 constexpr uint32_t kFlexfecSsrc = 5678; 31 constexpr uint32_t kFlexfecSsrc = 5678;
32 const std::vector<RtpExtension> kNoRtpHeaderExtensions; 32 const std::vector<RtpExtension> kNoRtpHeaderExtensions;
33 const std::vector<RtpExtensionSize> kNoRtpHeaderExtensionSizes;
33 // Assume a single protected media SSRC. 34 // Assume a single protected media SSRC.
34 constexpr size_t kFlexfecMaxHeaderSize = 32; 35 constexpr size_t kFlexfecMaxHeaderSize = 32;
35 constexpr size_t kPayloadLength = 50; 36 constexpr size_t kPayloadLength = 50;
36 37
37 constexpr int64_t kInitialSimulatedClockTime = 1; 38 constexpr int64_t kInitialSimulatedClockTime = 1;
38 // These values are deterministically given by the PRNG, due to our fixed seed. 39 // These values are deterministically given by the PRNG, due to our fixed seed.
39 // They should be updated if the PRNG implementation changes. 40 // They should be updated if the PRNG implementation changes.
40 constexpr uint16_t kDeterministicSequenceNumber = 28732; 41 constexpr uint16_t kDeterministicSequenceNumber = 28732;
41 constexpr uint32_t kDeterministicTimestamp = 2305613085; 42 constexpr uint32_t kDeterministicTimestamp = 2305613085;
42 43
(...skipping 23 matching lines...) Expand all
66 EXPECT_EQ(1U, fec_packets.size()); 67 EXPECT_EQ(1U, fec_packets.size());
67 68
68 return std::move(fec_packets.front()); 69 return std::move(fec_packets.front());
69 } 70 }
70 71
71 } // namespace 72 } // namespace
72 73
73 TEST(FlexfecSenderTest, Ssrc) { 74 TEST(FlexfecSenderTest, Ssrc) {
74 SimulatedClock clock(kInitialSimulatedClockTime); 75 SimulatedClock clock(kInitialSimulatedClockTime);
75 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 76 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
76 kNoRtpHeaderExtensions, &clock); 77 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
78 &clock);
77 79
78 EXPECT_EQ(kFlexfecSsrc, sender.ssrc()); 80 EXPECT_EQ(kFlexfecSsrc, sender.ssrc());
79 } 81 }
80 82
81 TEST(FlexfecSenderTest, NoFecAvailableBeforeMediaAdded) { 83 TEST(FlexfecSenderTest, NoFecAvailableBeforeMediaAdded) {
82 SimulatedClock clock(kInitialSimulatedClockTime); 84 SimulatedClock clock(kInitialSimulatedClockTime);
83 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 85 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
84 kNoRtpHeaderExtensions, &clock); 86 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
87 &clock);
85 88
86 EXPECT_FALSE(sender.FecAvailable()); 89 EXPECT_FALSE(sender.FecAvailable());
87 auto fec_packets = sender.GetFecPackets(); 90 auto fec_packets = sender.GetFecPackets();
88 EXPECT_EQ(0U, fec_packets.size()); 91 EXPECT_EQ(0U, fec_packets.size());
89 } 92 }
90 93
91 TEST(FlexfecSenderTest, ProtectOneFrameWithOneFecPacket) { 94 TEST(FlexfecSenderTest, ProtectOneFrameWithOneFecPacket) {
92 SimulatedClock clock(kInitialSimulatedClockTime); 95 SimulatedClock clock(kInitialSimulatedClockTime);
93 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 96 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
94 kNoRtpHeaderExtensions, &clock); 97 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
98 &clock);
95 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 99 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
96 100
97 EXPECT_EQ(kRtpHeaderSize, fec_packet->headers_size()); 101 EXPECT_EQ(kRtpHeaderSize, fec_packet->headers_size());
98 EXPECT_FALSE(fec_packet->Marker()); 102 EXPECT_FALSE(fec_packet->Marker());
99 EXPECT_EQ(kFlexfecPayloadType, fec_packet->PayloadType()); 103 EXPECT_EQ(kFlexfecPayloadType, fec_packet->PayloadType());
100 EXPECT_EQ(kDeterministicSequenceNumber, fec_packet->SequenceNumber()); 104 EXPECT_EQ(kDeterministicSequenceNumber, fec_packet->SequenceNumber());
101 EXPECT_EQ(kDeterministicTimestamp, fec_packet->Timestamp()); 105 EXPECT_EQ(kDeterministicTimestamp, fec_packet->Timestamp());
102 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc()); 106 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc());
103 EXPECT_LE(kPayloadLength, fec_packet->payload_size()); 107 EXPECT_LE(kPayloadLength, fec_packet->payload_size());
104 } 108 }
105 109
106 TEST(FlexfecSenderTest, ProtectTwoFramesWithOneFecPacket) { 110 TEST(FlexfecSenderTest, ProtectTwoFramesWithOneFecPacket) {
107 // FEC parameters selected to generate a single FEC packet per frame. 111 // FEC parameters selected to generate a single FEC packet per frame.
108 FecProtectionParams params; 112 FecProtectionParams params;
109 params.fec_rate = 15; 113 params.fec_rate = 15;
110 params.max_fec_frames = 2; 114 params.max_fec_frames = 2;
111 params.fec_mask_type = kFecMaskRandom; 115 params.fec_mask_type = kFecMaskRandom;
112 constexpr size_t kNumFrames = 2; 116 constexpr size_t kNumFrames = 2;
113 constexpr size_t kNumPacketsPerFrame = 2; 117 constexpr size_t kNumPacketsPerFrame = 2;
114 SimulatedClock clock(kInitialSimulatedClockTime); 118 SimulatedClock clock(kInitialSimulatedClockTime);
115 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 119 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
116 kNoRtpHeaderExtensions, &clock); 120 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
121 &clock);
117 sender.SetFecParameters(params); 122 sender.SetFecParameters(params);
118 123
119 AugmentedPacketGenerator packet_generator(kMediaSsrc); 124 AugmentedPacketGenerator packet_generator(kMediaSsrc);
120 for (size_t i = 0; i < kNumFrames; ++i) { 125 for (size_t i = 0; i < kNumFrames; ++i) {
121 packet_generator.NewFrame(kNumPacketsPerFrame); 126 packet_generator.NewFrame(kNumPacketsPerFrame);
122 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) { 127 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) {
123 std::unique_ptr<AugmentedPacket> packet = 128 std::unique_ptr<AugmentedPacket> packet =
124 packet_generator.NextPacket(i, kPayloadLength); 129 packet_generator.NextPacket(i, kPayloadLength);
125 RtpPacketToSend rtp_packet(nullptr); 130 RtpPacketToSend rtp_packet(nullptr);
126 rtp_packet.Parse(packet->data, packet->length); 131 rtp_packet.Parse(packet->data, packet->length);
(...skipping 18 matching lines...) Expand all
145 TEST(FlexfecSenderTest, ProtectTwoFramesWithTwoFecPackets) { 150 TEST(FlexfecSenderTest, ProtectTwoFramesWithTwoFecPackets) {
146 // FEC parameters selected to generate a single FEC packet per frame. 151 // FEC parameters selected to generate a single FEC packet per frame.
147 FecProtectionParams params; 152 FecProtectionParams params;
148 params.fec_rate = 30; 153 params.fec_rate = 30;
149 params.max_fec_frames = 1; 154 params.max_fec_frames = 1;
150 params.fec_mask_type = kFecMaskRandom; 155 params.fec_mask_type = kFecMaskRandom;
151 constexpr size_t kNumFrames = 2; 156 constexpr size_t kNumFrames = 2;
152 constexpr size_t kNumPacketsPerFrame = 2; 157 constexpr size_t kNumPacketsPerFrame = 2;
153 SimulatedClock clock(kInitialSimulatedClockTime); 158 SimulatedClock clock(kInitialSimulatedClockTime);
154 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 159 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
155 kNoRtpHeaderExtensions, &clock); 160 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
161 &clock);
156 sender.SetFecParameters(params); 162 sender.SetFecParameters(params);
157 163
158 AugmentedPacketGenerator packet_generator(kMediaSsrc); 164 AugmentedPacketGenerator packet_generator(kMediaSsrc);
159 for (size_t i = 0; i < kNumFrames; ++i) { 165 for (size_t i = 0; i < kNumFrames; ++i) {
160 packet_generator.NewFrame(kNumPacketsPerFrame); 166 packet_generator.NewFrame(kNumPacketsPerFrame);
161 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) { 167 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) {
162 std::unique_ptr<AugmentedPacket> packet = 168 std::unique_ptr<AugmentedPacket> packet =
163 packet_generator.NextPacket(i, kPayloadLength); 169 packet_generator.NextPacket(i, kPayloadLength);
164 RtpPacketToSend rtp_packet(nullptr); 170 RtpPacketToSend rtp_packet(nullptr);
165 rtp_packet.Parse(packet->data, packet->length); 171 rtp_packet.Parse(packet->data, packet->length);
(...skipping 14 matching lines...) Expand all
180 EXPECT_EQ(kDeterministicTimestamp, fec_packet->Timestamp()); 186 EXPECT_EQ(kDeterministicTimestamp, fec_packet->Timestamp());
181 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc()); 187 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc());
182 } 188 }
183 } 189 }
184 190
185 // In the tests, we only consider RTP header extensions that are useful for BWE. 191 // In the tests, we only consider RTP header extensions that are useful for BWE.
186 TEST(FlexfecSenderTest, NoRtpHeaderExtensionsForBweByDefault) { 192 TEST(FlexfecSenderTest, NoRtpHeaderExtensionsForBweByDefault) {
187 const std::vector<RtpExtension> kRtpHeaderExtensions{}; 193 const std::vector<RtpExtension> kRtpHeaderExtensions{};
188 SimulatedClock clock(kInitialSimulatedClockTime); 194 SimulatedClock clock(kInitialSimulatedClockTime);
189 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 195 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
190 kRtpHeaderExtensions, &clock); 196 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
197 &clock);
191 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 198 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
192 199
193 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); 200 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>());
194 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); 201 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>());
195 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); 202 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>());
196 } 203 }
197 204
198 TEST(FlexfecSenderTest, RegisterAbsoluteSendTimeRtpHeaderExtension) { 205 TEST(FlexfecSenderTest, RegisterAbsoluteSendTimeRtpHeaderExtension) {
199 const std::vector<RtpExtension> kRtpHeaderExtensions{ 206 const std::vector<RtpExtension> kRtpHeaderExtensions{
200 {RtpExtension::kAbsSendTimeUri, 1}}; 207 {RtpExtension::kAbsSendTimeUri, 1}};
201 SimulatedClock clock(kInitialSimulatedClockTime); 208 SimulatedClock clock(kInitialSimulatedClockTime);
202 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 209 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
203 kRtpHeaderExtensions, &clock); 210 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
211 &clock);
204 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 212 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
205 213
206 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); 214 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>());
207 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); 215 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>());
208 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); 216 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>());
209 } 217 }
210 218
211 TEST(FlexfecSenderTest, RegisterTransmissionOffsetRtpHeaderExtension) { 219 TEST(FlexfecSenderTest, RegisterTransmissionOffsetRtpHeaderExtension) {
212 const std::vector<RtpExtension> kRtpHeaderExtensions{ 220 const std::vector<RtpExtension> kRtpHeaderExtensions{
213 {RtpExtension::kTimestampOffsetUri, 1}}; 221 {RtpExtension::kTimestampOffsetUri, 1}};
214 SimulatedClock clock(kInitialSimulatedClockTime); 222 SimulatedClock clock(kInitialSimulatedClockTime);
215 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 223 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
216 kRtpHeaderExtensions, &clock); 224 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
225 &clock);
217 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 226 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
218 227
219 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); 228 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>());
220 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); 229 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>());
221 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); 230 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>());
222 } 231 }
223 232
224 TEST(FlexfecSenderTest, RegisterTransportSequenceNumberRtpHeaderExtension) { 233 TEST(FlexfecSenderTest, RegisterTransportSequenceNumberRtpHeaderExtension) {
225 const std::vector<RtpExtension> kRtpHeaderExtensions{ 234 const std::vector<RtpExtension> kRtpHeaderExtensions{
226 {RtpExtension::kTransportSequenceNumberUri, 1}}; 235 {RtpExtension::kTransportSequenceNumberUri, 1}};
227 SimulatedClock clock(kInitialSimulatedClockTime); 236 SimulatedClock clock(kInitialSimulatedClockTime);
228 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 237 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
229 kRtpHeaderExtensions, &clock); 238 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
239 &clock);
230 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 240 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
231 241
232 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); 242 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>());
233 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); 243 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>());
234 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); 244 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>());
235 } 245 }
236 246
237 TEST(FlexfecSenderTest, RegisterAllRtpHeaderExtensionsForBwe) { 247 TEST(FlexfecSenderTest, RegisterAllRtpHeaderExtensionsForBwe) {
238 const std::vector<RtpExtension> kRtpHeaderExtensions{ 248 const std::vector<RtpExtension> kRtpHeaderExtensions{
239 {RtpExtension::kAbsSendTimeUri, 1}, 249 {RtpExtension::kAbsSendTimeUri, 1},
240 {RtpExtension::kTimestampOffsetUri, 2}, 250 {RtpExtension::kTimestampOffsetUri, 2},
241 {RtpExtension::kTransportSequenceNumberUri, 3}}; 251 {RtpExtension::kTransportSequenceNumberUri, 3}};
242 SimulatedClock clock(kInitialSimulatedClockTime); 252 SimulatedClock clock(kInitialSimulatedClockTime);
243 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 253 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
244 kRtpHeaderExtensions, &clock); 254 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
255 &clock);
245 auto fec_packet = GenerateSingleFlexfecPacket(&sender); 256 auto fec_packet = GenerateSingleFlexfecPacket(&sender);
246 257
247 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); 258 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>());
248 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); 259 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>());
249 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); 260 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>());
250 } 261 }
251 262
252 TEST(FlexfecSenderTest, MaxPacketOverhead) { 263 TEST(FlexfecSenderTest, MaxPacketOverhead) {
253 SimulatedClock clock(kInitialSimulatedClockTime); 264 SimulatedClock clock(kInitialSimulatedClockTime);
254 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 265 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
255 kNoRtpHeaderExtensions, &clock); 266 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes,
267 &clock);
256 268
257 EXPECT_EQ(kFlexfecMaxHeaderSize, sender.MaxPacketOverhead()); 269 EXPECT_EQ(kFlexfecMaxHeaderSize, sender.MaxPacketOverhead());
258 } 270 }
259 271
260 } // namespace webrtc 272 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698