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 |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "webrtc/config.h" | 13 #include "webrtc/config.h" |
14 #include "webrtc/modules/rtp_rtcp/include/flexfec_sender.h" | 14 #include "webrtc/modules/rtp_rtcp/include/flexfec_sender.h" |
15 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" | 15 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" |
16 #include "webrtc/modules/rtp_rtcp/source/fec_test_helper.h" | 16 #include "webrtc/modules/rtp_rtcp/source/fec_test_helper.h" |
17 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h" | 17 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h" |
18 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h" | 18 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h" |
19 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h" | |
20 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" | |
19 #include "webrtc/system_wrappers/include/clock.h" | 21 #include "webrtc/system_wrappers/include/clock.h" |
20 #include "webrtc/test/gtest.h" | 22 #include "webrtc/test/gtest.h" |
21 | 23 |
22 namespace webrtc { | 24 namespace webrtc { |
23 | 25 |
24 namespace { | 26 namespace { |
25 | 27 |
28 using RtpUtility::Word32Align; | |
26 using test::fec::AugmentedPacket; | 29 using test::fec::AugmentedPacket; |
27 using test::fec::AugmentedPacketGenerator; | 30 using test::fec::AugmentedPacketGenerator; |
28 | 31 |
29 constexpr int kFlexfecPayloadType = 123; | 32 constexpr int kFlexfecPayloadType = 123; |
30 constexpr uint32_t kMediaSsrc = 1234; | 33 constexpr uint32_t kMediaSsrc = 1234; |
31 constexpr uint32_t kFlexfecSsrc = 5678; | 34 constexpr uint32_t kFlexfecSsrc = 5678; |
32 const std::vector<RtpExtension> kNoRtpHeaderExtensions; | 35 const std::vector<RtpExtension> kNoRtpHeaderExtensions; |
36 const std::vector<RtpExtensionSize> kNoRtpHeaderExtensionSizes; | |
33 // Assume a single protected media SSRC. | 37 // Assume a single protected media SSRC. |
34 constexpr size_t kFlexfecMaxHeaderSize = 32; | 38 constexpr size_t kFlexfecMaxHeaderSize = 32; |
35 constexpr size_t kPayloadLength = 50; | 39 constexpr size_t kPayloadLength = 50; |
36 | 40 |
37 constexpr int64_t kInitialSimulatedClockTime = 1; | 41 constexpr int64_t kInitialSimulatedClockTime = 1; |
38 // These values are deterministically given by the PRNG, due to our fixed seed. | 42 // These values are deterministically given by the PRNG, due to our fixed seed. |
39 // They should be updated if the PRNG implementation changes. | 43 // They should be updated if the PRNG implementation changes. |
40 constexpr uint16_t kDeterministicSequenceNumber = 28732; | 44 constexpr uint16_t kDeterministicSequenceNumber = 28732; |
41 constexpr uint32_t kDeterministicTimestamp = 2305613085; | 45 constexpr uint32_t kDeterministicTimestamp = 2305613085; |
42 | 46 |
(...skipping 23 matching lines...) Expand all Loading... | |
66 EXPECT_EQ(1U, fec_packets.size()); | 70 EXPECT_EQ(1U, fec_packets.size()); |
67 | 71 |
68 return std::move(fec_packets.front()); | 72 return std::move(fec_packets.front()); |
69 } | 73 } |
70 | 74 |
71 } // namespace | 75 } // namespace |
72 | 76 |
73 TEST(FlexfecSenderTest, Ssrc) { | 77 TEST(FlexfecSenderTest, Ssrc) { |
74 SimulatedClock clock(kInitialSimulatedClockTime); | 78 SimulatedClock clock(kInitialSimulatedClockTime); |
75 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 79 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
76 kNoRtpHeaderExtensions, &clock); | 80 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
81 &clock); | |
77 | 82 |
78 EXPECT_EQ(kFlexfecSsrc, sender.ssrc()); | 83 EXPECT_EQ(kFlexfecSsrc, sender.ssrc()); |
79 } | 84 } |
80 | 85 |
81 TEST(FlexfecSenderTest, NoFecAvailableBeforeMediaAdded) { | 86 TEST(FlexfecSenderTest, NoFecAvailableBeforeMediaAdded) { |
82 SimulatedClock clock(kInitialSimulatedClockTime); | 87 SimulatedClock clock(kInitialSimulatedClockTime); |
83 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 88 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
84 kNoRtpHeaderExtensions, &clock); | 89 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
90 &clock); | |
85 | 91 |
86 EXPECT_FALSE(sender.FecAvailable()); | 92 EXPECT_FALSE(sender.FecAvailable()); |
87 auto fec_packets = sender.GetFecPackets(); | 93 auto fec_packets = sender.GetFecPackets(); |
88 EXPECT_EQ(0U, fec_packets.size()); | 94 EXPECT_EQ(0U, fec_packets.size()); |
89 } | 95 } |
90 | 96 |
91 TEST(FlexfecSenderTest, ProtectOneFrameWithOneFecPacket) { | 97 TEST(FlexfecSenderTest, ProtectOneFrameWithOneFecPacket) { |
92 SimulatedClock clock(kInitialSimulatedClockTime); | 98 SimulatedClock clock(kInitialSimulatedClockTime); |
93 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 99 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
94 kNoRtpHeaderExtensions, &clock); | 100 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
101 &clock); | |
95 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 102 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
96 | 103 |
97 EXPECT_EQ(kRtpHeaderSize, fec_packet->headers_size()); | 104 EXPECT_EQ(kRtpHeaderSize, fec_packet->headers_size()); |
98 EXPECT_FALSE(fec_packet->Marker()); | 105 EXPECT_FALSE(fec_packet->Marker()); |
99 EXPECT_EQ(kFlexfecPayloadType, fec_packet->PayloadType()); | 106 EXPECT_EQ(kFlexfecPayloadType, fec_packet->PayloadType()); |
100 EXPECT_EQ(kDeterministicSequenceNumber, fec_packet->SequenceNumber()); | 107 EXPECT_EQ(kDeterministicSequenceNumber, fec_packet->SequenceNumber()); |
101 EXPECT_EQ(kDeterministicTimestamp, fec_packet->Timestamp()); | 108 EXPECT_EQ(kDeterministicTimestamp, fec_packet->Timestamp()); |
102 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc()); | 109 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc()); |
103 EXPECT_LE(kPayloadLength, fec_packet->payload_size()); | 110 EXPECT_LE(kPayloadLength, fec_packet->payload_size()); |
104 } | 111 } |
105 | 112 |
106 TEST(FlexfecSenderTest, ProtectTwoFramesWithOneFecPacket) { | 113 TEST(FlexfecSenderTest, ProtectTwoFramesWithOneFecPacket) { |
107 // FEC parameters selected to generate a single FEC packet per frame. | 114 // FEC parameters selected to generate a single FEC packet per frame. |
108 FecProtectionParams params; | 115 FecProtectionParams params; |
109 params.fec_rate = 15; | 116 params.fec_rate = 15; |
110 params.max_fec_frames = 2; | 117 params.max_fec_frames = 2; |
111 params.fec_mask_type = kFecMaskRandom; | 118 params.fec_mask_type = kFecMaskRandom; |
112 constexpr size_t kNumFrames = 2; | 119 constexpr size_t kNumFrames = 2; |
113 constexpr size_t kNumPacketsPerFrame = 2; | 120 constexpr size_t kNumPacketsPerFrame = 2; |
114 SimulatedClock clock(kInitialSimulatedClockTime); | 121 SimulatedClock clock(kInitialSimulatedClockTime); |
115 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 122 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
116 kNoRtpHeaderExtensions, &clock); | 123 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
124 &clock); | |
117 sender.SetFecParameters(params); | 125 sender.SetFecParameters(params); |
118 | 126 |
119 AugmentedPacketGenerator packet_generator(kMediaSsrc); | 127 AugmentedPacketGenerator packet_generator(kMediaSsrc); |
120 for (size_t i = 0; i < kNumFrames; ++i) { | 128 for (size_t i = 0; i < kNumFrames; ++i) { |
121 packet_generator.NewFrame(kNumPacketsPerFrame); | 129 packet_generator.NewFrame(kNumPacketsPerFrame); |
122 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) { | 130 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) { |
123 std::unique_ptr<AugmentedPacket> packet = | 131 std::unique_ptr<AugmentedPacket> packet = |
124 packet_generator.NextPacket(i, kPayloadLength); | 132 packet_generator.NextPacket(i, kPayloadLength); |
125 RtpPacketToSend rtp_packet(nullptr); | 133 RtpPacketToSend rtp_packet(nullptr); |
126 rtp_packet.Parse(packet->data, packet->length); | 134 rtp_packet.Parse(packet->data, packet->length); |
(...skipping 18 matching lines...) Expand all Loading... | |
145 TEST(FlexfecSenderTest, ProtectTwoFramesWithTwoFecPackets) { | 153 TEST(FlexfecSenderTest, ProtectTwoFramesWithTwoFecPackets) { |
146 // FEC parameters selected to generate a single FEC packet per frame. | 154 // FEC parameters selected to generate a single FEC packet per frame. |
147 FecProtectionParams params; | 155 FecProtectionParams params; |
148 params.fec_rate = 30; | 156 params.fec_rate = 30; |
149 params.max_fec_frames = 1; | 157 params.max_fec_frames = 1; |
150 params.fec_mask_type = kFecMaskRandom; | 158 params.fec_mask_type = kFecMaskRandom; |
151 constexpr size_t kNumFrames = 2; | 159 constexpr size_t kNumFrames = 2; |
152 constexpr size_t kNumPacketsPerFrame = 2; | 160 constexpr size_t kNumPacketsPerFrame = 2; |
153 SimulatedClock clock(kInitialSimulatedClockTime); | 161 SimulatedClock clock(kInitialSimulatedClockTime); |
154 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 162 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
155 kNoRtpHeaderExtensions, &clock); | 163 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
164 &clock); | |
156 sender.SetFecParameters(params); | 165 sender.SetFecParameters(params); |
157 | 166 |
158 AugmentedPacketGenerator packet_generator(kMediaSsrc); | 167 AugmentedPacketGenerator packet_generator(kMediaSsrc); |
159 for (size_t i = 0; i < kNumFrames; ++i) { | 168 for (size_t i = 0; i < kNumFrames; ++i) { |
160 packet_generator.NewFrame(kNumPacketsPerFrame); | 169 packet_generator.NewFrame(kNumPacketsPerFrame); |
161 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) { | 170 for (size_t j = 0; j < kNumPacketsPerFrame; ++j) { |
162 std::unique_ptr<AugmentedPacket> packet = | 171 std::unique_ptr<AugmentedPacket> packet = |
163 packet_generator.NextPacket(i, kPayloadLength); | 172 packet_generator.NextPacket(i, kPayloadLength); |
164 RtpPacketToSend rtp_packet(nullptr); | 173 RtpPacketToSend rtp_packet(nullptr); |
165 rtp_packet.Parse(packet->data, packet->length); | 174 rtp_packet.Parse(packet->data, packet->length); |
(...skipping 14 matching lines...) Expand all Loading... | |
180 EXPECT_EQ(kDeterministicTimestamp, fec_packet->Timestamp()); | 189 EXPECT_EQ(kDeterministicTimestamp, fec_packet->Timestamp()); |
181 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc()); | 190 EXPECT_EQ(kFlexfecSsrc, fec_packet->Ssrc()); |
182 } | 191 } |
183 } | 192 } |
184 | 193 |
185 // In the tests, we only consider RTP header extensions that are useful for BWE. | 194 // In the tests, we only consider RTP header extensions that are useful for BWE. |
186 TEST(FlexfecSenderTest, NoRtpHeaderExtensionsForBweByDefault) { | 195 TEST(FlexfecSenderTest, NoRtpHeaderExtensionsForBweByDefault) { |
187 const std::vector<RtpExtension> kRtpHeaderExtensions{}; | 196 const std::vector<RtpExtension> kRtpHeaderExtensions{}; |
188 SimulatedClock clock(kInitialSimulatedClockTime); | 197 SimulatedClock clock(kInitialSimulatedClockTime); |
189 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 198 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
190 kRtpHeaderExtensions, &clock); | 199 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
200 &clock); | |
191 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 201 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
192 | 202 |
193 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); | 203 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); |
194 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); | 204 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); |
195 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); | 205 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); |
196 } | 206 } |
197 | 207 |
198 TEST(FlexfecSenderTest, RegisterAbsoluteSendTimeRtpHeaderExtension) { | 208 TEST(FlexfecSenderTest, RegisterAbsoluteSendTimeRtpHeaderExtension) { |
199 const std::vector<RtpExtension> kRtpHeaderExtensions{ | 209 const std::vector<RtpExtension> kRtpHeaderExtensions{ |
200 {RtpExtension::kAbsSendTimeUri, 1}}; | 210 {RtpExtension::kAbsSendTimeUri, 1}}; |
201 SimulatedClock clock(kInitialSimulatedClockTime); | 211 SimulatedClock clock(kInitialSimulatedClockTime); |
202 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 212 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
203 kRtpHeaderExtensions, &clock); | 213 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
214 &clock); | |
204 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 215 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
205 | 216 |
206 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); | 217 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); |
207 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); | 218 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); |
208 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); | 219 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); |
209 } | 220 } |
210 | 221 |
211 TEST(FlexfecSenderTest, RegisterTransmissionOffsetRtpHeaderExtension) { | 222 TEST(FlexfecSenderTest, RegisterTransmissionOffsetRtpHeaderExtension) { |
212 const std::vector<RtpExtension> kRtpHeaderExtensions{ | 223 const std::vector<RtpExtension> kRtpHeaderExtensions{ |
213 {RtpExtension::kTimestampOffsetUri, 1}}; | 224 {RtpExtension::kTimestampOffsetUri, 1}}; |
214 SimulatedClock clock(kInitialSimulatedClockTime); | 225 SimulatedClock clock(kInitialSimulatedClockTime); |
215 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 226 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
216 kRtpHeaderExtensions, &clock); | 227 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
228 &clock); | |
217 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 229 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
218 | 230 |
219 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); | 231 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); |
220 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); | 232 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); |
221 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); | 233 EXPECT_FALSE(fec_packet->HasExtension<TransportSequenceNumber>()); |
222 } | 234 } |
223 | 235 |
224 TEST(FlexfecSenderTest, RegisterTransportSequenceNumberRtpHeaderExtension) { | 236 TEST(FlexfecSenderTest, RegisterTransportSequenceNumberRtpHeaderExtension) { |
225 const std::vector<RtpExtension> kRtpHeaderExtensions{ | 237 const std::vector<RtpExtension> kRtpHeaderExtensions{ |
226 {RtpExtension::kTransportSequenceNumberUri, 1}}; | 238 {RtpExtension::kTransportSequenceNumberUri, 1}}; |
227 SimulatedClock clock(kInitialSimulatedClockTime); | 239 SimulatedClock clock(kInitialSimulatedClockTime); |
228 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 240 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
229 kRtpHeaderExtensions, &clock); | 241 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
242 &clock); | |
230 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 243 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
231 | 244 |
232 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); | 245 EXPECT_FALSE(fec_packet->HasExtension<AbsoluteSendTime>()); |
233 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); | 246 EXPECT_FALSE(fec_packet->HasExtension<TransmissionOffset>()); |
234 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); | 247 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); |
235 } | 248 } |
236 | 249 |
237 TEST(FlexfecSenderTest, RegisterAllRtpHeaderExtensionsForBwe) { | 250 TEST(FlexfecSenderTest, RegisterAllRtpHeaderExtensionsForBwe) { |
238 const std::vector<RtpExtension> kRtpHeaderExtensions{ | 251 const std::vector<RtpExtension> kRtpHeaderExtensions{ |
239 {RtpExtension::kAbsSendTimeUri, 1}, | 252 {RtpExtension::kAbsSendTimeUri, 1}, |
240 {RtpExtension::kTimestampOffsetUri, 2}, | 253 {RtpExtension::kTimestampOffsetUri, 2}, |
241 {RtpExtension::kTransportSequenceNumberUri, 3}}; | 254 {RtpExtension::kTransportSequenceNumberUri, 3}}; |
242 SimulatedClock clock(kInitialSimulatedClockTime); | 255 SimulatedClock clock(kInitialSimulatedClockTime); |
243 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 256 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
244 kRtpHeaderExtensions, &clock); | 257 kRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
258 &clock); | |
245 auto fec_packet = GenerateSingleFlexfecPacket(&sender); | 259 auto fec_packet = GenerateSingleFlexfecPacket(&sender); |
246 | 260 |
247 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); | 261 EXPECT_TRUE(fec_packet->HasExtension<AbsoluteSendTime>()); |
248 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); | 262 EXPECT_TRUE(fec_packet->HasExtension<TransmissionOffset>()); |
249 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); | 263 EXPECT_TRUE(fec_packet->HasExtension<TransportSequenceNumber>()); |
250 } | 264 } |
251 | 265 |
252 TEST(FlexfecSenderTest, MaxPacketOverhead) { | 266 TEST(FlexfecSenderTest, MaxPacketOverhead) { |
253 SimulatedClock clock(kInitialSimulatedClockTime); | 267 SimulatedClock clock(kInitialSimulatedClockTime); |
254 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | 268 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, |
255 kNoRtpHeaderExtensions, &clock); | 269 kNoRtpHeaderExtensions, kNoRtpHeaderExtensionSizes, |
270 &clock); | |
256 | 271 |
257 EXPECT_EQ(kFlexfecMaxHeaderSize, sender.MaxPacketOverhead()); | 272 EXPECT_EQ(kFlexfecMaxHeaderSize, sender.MaxPacketOverhead()); |
258 } | 273 } |
259 | 274 |
275 TEST(FlexfecSenderTest, MaxPacketOverheadWithExtensions) { | |
276 const std::vector<RtpExtension> kRtpHeaderExtensions{ | |
277 {RtpExtension::kAbsSendTimeUri, 1}, | |
278 {RtpExtension::kTimestampOffsetUri, 2}, | |
279 {RtpExtension::kTransportSequenceNumberUri, 3}}; | |
280 SimulatedClock clock(kInitialSimulatedClockTime); | |
281 const size_t kExtensionHeaderLength = 1; | |
282 const size_t kRtpOneByteHeaderLength = 4; | |
283 const size_t kExtensionsTotalSize = | |
284 Word32Align(AbsoluteSendTime::kValueSizeBytes + | |
285 TransmissionOffset::kValueSizeBytes + | |
286 TransportSequenceNumber::kValueSizeBytes + | |
287 kRtpOneByteHeaderLength + 3*kExtensionHeaderLength); | |
danilchap
2017/05/10 18:15:10
git cl format
to add spaces round *
brandtr
2017/05/10 19:23:06
Maybe put these constants in the order that they w
erikvarga1
2017/05/11 08:40:13
Done.
| |
288 FlexfecSender sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, | |
289 kRtpHeaderExtensions, RTPSender::FecExtensionSizes(), | |
290 &clock); | |
291 | |
292 EXPECT_EQ(kExtensionsTotalSize + kFlexfecMaxHeaderSize, | |
293 sender.MaxPacketOverhead()); | |
294 } | |
295 | |
260 } // namespace webrtc | 296 } // namespace webrtc |
OLD | NEW |