OLD | NEW |
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 14 matching lines...) Expand all Loading... |
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 // Assume a single protected media SSRC. | 33 // Assume a single protected media SSRC. |
34 constexpr size_t kFlexfecMaxHeaderSize = 32; | 34 constexpr size_t kFlexfecMaxHeaderSize = 32; |
| 35 constexpr size_t kRtpHeaderExtensionBaseHeaderSize = 4; |
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 |
43 std::unique_ptr<RtpPacketToSend> GenerateSingleFlexfecPacket( | 44 std::unique_ptr<RtpPacketToSend> GenerateSingleFlexfecPacket( |
44 FlexfecSender* sender) { | 45 FlexfecSender* sender) { |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc()); | 174 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc()); |
174 } | 175 } |
175 } | 176 } |
176 | 177 |
177 // In the tests, we only consider RTP header extensions that are useful for BWE. | 178 // In the tests, we only consider RTP header extensions that are useful for BWE. |
178 TEST(FlexfecSenderTest, NoRtpHeaderExtensionsForBweByDefault) { | 179 TEST(FlexfecSenderTest, NoRtpHeaderExtensionsForBweByDefault) { |
179 const std::vector<RtpExtension> kRtpHeaderExtensions{}; | 180 const std::vector<RtpExtension> kRtpHeaderExtensions{}; |
180 SimulatedClock clock(kInitialSimulatedClockTime); | 181 SimulatedClock clock(kInitialSimulatedClockTime); |
181 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 182 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
182 kRtpHeaderExtensions, &clock); | 183 kRtpHeaderExtensions, &clock); |
| 184 EXPECT_EQ(kRtpHeaderSize, sender.RtpHeaderLength()); |
183 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 185 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
184 | 186 |
185 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); | 187 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); |
186 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); | 188 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); |
187 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); | 189 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); |
188 } | 190 } |
189 | 191 |
190 TEST(FlexfecSenderTest, RegisterAbsoluteSendTimeRtpHeaderExtension) { | 192 TEST(FlexfecSenderTest, RegisterAbsoluteSendTimeRtpHeaderExtension) { |
191 const std::vector<RtpExtension> kRtpHeaderExtensions{ | 193 const std::vector<RtpExtension> kRtpHeaderExtensions{ |
192 {RtpExtension::kAbsSendTimeUri, 1}}; | 194 {RtpExtension::kAbsSendTimeUri, 1}}; |
193 SimulatedClock clock(kInitialSimulatedClockTime); | 195 SimulatedClock clock(kInitialSimulatedClockTime); |
194 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 196 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
195 kRtpHeaderExtensions, &clock); | 197 kRtpHeaderExtensions, &clock); |
| 198 EXPECT_EQ(kRtpHeaderSize + kRtpHeaderExtensionBaseHeaderSize + 4U, |
| 199 sender.RtpHeaderLength()); |
196 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 200 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
197 | 201 |
198 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); | 202 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); |
199 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); | 203 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); |
200 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); | 204 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); |
201 } | 205 } |
202 | 206 |
203 TEST(FlexfecSenderTest, RegisterTransmissionOffsetRtpHeaderExtension) { | 207 TEST(FlexfecSenderTest, RegisterTransmissionOffsetRtpHeaderExtension) { |
204 const std::vector<RtpExtension> kRtpHeaderExtensions{ | 208 const std::vector<RtpExtension> kRtpHeaderExtensions{ |
205 {RtpExtension::kTimestampOffsetUri, 1}}; | 209 {RtpExtension::kTimestampOffsetUri, 1}}; |
206 SimulatedClock clock(kInitialSimulatedClockTime); | 210 SimulatedClock clock(kInitialSimulatedClockTime); |
207 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 211 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
208 kRtpHeaderExtensions, &clock); | 212 kRtpHeaderExtensions, &clock); |
| 213 EXPECT_EQ(kRtpHeaderSize + kRtpHeaderExtensionBaseHeaderSize + 4U, |
| 214 sender.RtpHeaderLength()); |
209 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 215 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
210 | 216 |
211 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); | 217 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); |
212 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); | 218 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); |
213 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); | 219 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); |
214 } | 220 } |
215 | 221 |
216 TEST(FlexfecSenderTest, RegisterTransportSequenceNumberRtpHeaderExtension) { | 222 TEST(FlexfecSenderTest, RegisterTransportSequenceNumberRtpHeaderExtension) { |
217 const std::vector<RtpExtension> kRtpHeaderExtensions{ | 223 const std::vector<RtpExtension> kRtpHeaderExtensions{ |
218 {RtpExtension::kTransportSequenceNumberUri, 1}}; | 224 {RtpExtension::kTransportSequenceNumberUri, 1}}; |
219 SimulatedClock clock(kInitialSimulatedClockTime); | 225 SimulatedClock clock(kInitialSimulatedClockTime); |
220 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 226 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
221 kRtpHeaderExtensions, &clock); | 227 kRtpHeaderExtensions, &clock); |
| 228 EXPECT_EQ(kRtpHeaderSize + kRtpHeaderExtensionBaseHeaderSize + 4U, |
| 229 sender.RtpHeaderLength()); |
222 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 230 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
223 | 231 |
224 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); | 232 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); |
225 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); | 233 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); |
226 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); | 234 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); |
227 } | 235 } |
228 | 236 |
229 TEST(FlexfecSenderTest, RegisterAllRtpHeaderExtensionsForBwe) { | 237 TEST(FlexfecSenderTest, RegisterAllRtpHeaderExtensionsForBwe) { |
230 const std::vector<RtpExtension> kRtpHeaderExtensions{ | 238 const std::vector<RtpExtension> kRtpHeaderExtensions{ |
231 {RtpExtension::kAbsSendTimeUri, 1}, | 239 {RtpExtension::kAbsSendTimeUri, 1}, |
232 {RtpExtension::kTimestampOffsetUri, 2}, | 240 {RtpExtension::kTimestampOffsetUri, 2}, |
233 {RtpExtension::kTransportSequenceNumberUri, 3}}; | 241 {RtpExtension::kTransportSequenceNumberUri, 3}}; |
234 SimulatedClock clock(kInitialSimulatedClockTime); | 242 SimulatedClock clock(kInitialSimulatedClockTime); |
235 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 243 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
236 kRtpHeaderExtensions, &clock); | 244 kRtpHeaderExtensions, &clock); |
| 245 EXPECT_EQ(kRtpHeaderSize + kRtpHeaderExtensionBaseHeaderSize + 3 * 4U, |
| 246 sender.RtpHeaderLength()); |
237 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 247 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
238 | 248 |
239 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); | 249 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); |
240 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); | 250 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); |
241 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); | 251 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); |
242 } | 252 } |
243 | 253 |
244 TEST(FlexfecSenderTest, MaxPacketOverhead) { | 254 TEST(FlexfecSenderTest, MaxPacketOverhead) { |
245 SimulatedClock clock(kInitialSimulatedClockTime); | 255 SimulatedClock clock(kInitialSimulatedClockTime); |
246 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 256 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
247 kNoRtpHeaderExtensions, &clock); | 257 kNoRtpHeaderExtensions, &clock); |
248 | 258 |
249 EXPECT_EQ(kFlexfecMaxHeaderSize, sender.MaxPacketOverhead()); | 259 EXPECT_EQ(kFlexfecMaxHeaderSize, sender.MaxPacketOverhead()); |
250 } | 260 } |
251 | 261 |
252 } // namespace webrtc | 262 } // namespace webrtc |
OLD | NEW |