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

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

Issue 1512493002: [rtp_rtcp] lint whitespace warning removed from most source/ files (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years 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) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 const PacketOptions& options) override { 83 const PacketOptions& options) override {
84 packets_sent_++; 84 packets_sent_++;
85 rtc::Buffer* buffer = 85 rtc::Buffer* buffer =
86 new rtc::Buffer(reinterpret_cast<const uint8_t*>(data), len); 86 new rtc::Buffer(reinterpret_cast<const uint8_t*>(data), len);
87 last_sent_packet_ = buffer->data(); 87 last_sent_packet_ = buffer->data();
88 last_sent_packet_len_ = len; 88 last_sent_packet_len_ = len;
89 total_bytes_sent_ += len; 89 total_bytes_sent_ += len;
90 sent_packets_.push_back(buffer); 90 sent_packets_.push_back(buffer);
91 return true; 91 return true;
92 } 92 }
93 bool SendRtcp(const uint8_t* data, size_t len) override { 93 bool SendRtcp(const uint8_t* data, size_t len) override { return false; }
94 return false;
95 }
96 int packets_sent_; 94 int packets_sent_;
97 size_t last_sent_packet_len_; 95 size_t last_sent_packet_len_;
98 size_t total_bytes_sent_; 96 size_t total_bytes_sent_;
99 uint8_t* last_sent_packet_; 97 uint8_t* last_sent_packet_;
100 std::vector<rtc::Buffer*> sent_packets_; 98 std::vector<rtc::Buffer*> sent_packets_;
101 }; 99 };
102 100
103 } // namespace 101 } // namespace
104 102
105 class MockRtpPacketSender : public RtpPacketSender { 103 class MockRtpPacketSender : public RtpPacketSender {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 EXPECT_EQ(payload_, rtp_header.payloadType); 154 EXPECT_EQ(payload_, rtp_header.payloadType);
157 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber); 155 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber);
158 EXPECT_EQ(kTimestamp, rtp_header.timestamp); 156 EXPECT_EQ(kTimestamp, rtp_header.timestamp);
159 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); 157 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc);
160 EXPECT_EQ(0, rtp_header.numCSRCs); 158 EXPECT_EQ(0, rtp_header.numCSRCs);
161 EXPECT_EQ(0U, rtp_header.paddingLength); 159 EXPECT_EQ(0U, rtp_header.paddingLength);
162 } 160 }
163 161
164 void SendPacket(int64_t capture_time_ms, int payload_length) { 162 void SendPacket(int64_t capture_time_ms, int payload_length) {
165 uint32_t timestamp = capture_time_ms * 90; 163 uint32_t timestamp = capture_time_ms * 90;
166 int32_t rtp_length = rtp_sender_->BuildRTPheader(packet_, 164 int32_t rtp_length = rtp_sender_->BuildRTPheader(
167 kPayload, 165 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms);
168 kMarkerBit,
169 timestamp,
170 capture_time_ms);
171 ASSERT_GE(rtp_length, 0); 166 ASSERT_GE(rtp_length, 0);
172 167
173 // Packet should be stored in a send bucket. 168 // Packet should be stored in a send bucket.
174 EXPECT_EQ(0, rtp_sender_->SendToNetwork( 169 EXPECT_EQ(0, rtp_sender_->SendToNetwork(
175 packet_, payload_length, rtp_length, capture_time_ms, 170 packet_, payload_length, rtp_length, capture_time_ms,
176 kAllowRetransmission, RtpPacketSender::kNormalPriority)); 171 kAllowRetransmission, RtpPacketSender::kNormalPriority));
177 } 172 }
178 }; 173 };
179 174
180 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our 175 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our
181 // default code path. 176 // default code path.
182 class RtpSenderTestWithoutPacer : public RtpSenderTest { 177 class RtpSenderTestWithoutPacer : public RtpSenderTest {
183 public: 178 public:
184 void SetUp() override { SetUpRtpSender(false); } 179 void SetUp() override { SetUpRtpSender(false); }
185 }; 180 };
186 181
187 class RtpSenderVideoTest : public RtpSenderTest { 182 class RtpSenderVideoTest : public RtpSenderTest {
188 protected: 183 protected:
189 virtual void SetUp() override { 184 void SetUp() override {
190 // TODO(pbos): Set up to use pacer. 185 // TODO(pbos): Set up to use pacer.
191 SetUpRtpSender(false); 186 SetUpRtpSender(false);
192 rtp_sender_video_.reset( 187 rtp_sender_video_.reset(
193 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); 188 new RTPSenderVideo(&fake_clock_, rtp_sender_.get()));
194 } 189 }
195 rtc::scoped_ptr<RTPSenderVideo> rtp_sender_video_; 190 rtc::scoped_ptr<RTPSenderVideo> rtp_sender_video_;
196 191
197 void VerifyCVOPacket(uint8_t* data, 192 void VerifyCVOPacket(uint8_t* data,
198 size_t len, 193 size_t len,
199 bool expect_cvo, 194 bool expect_cvo,
(...skipping 21 matching lines...) Expand all
221 EXPECT_EQ(0U, rtp_header.paddingLength); 216 EXPECT_EQ(0U, rtp_header.paddingLength);
222 EXPECT_EQ(ConvertVideoRotationToCVOByte(rotation), 217 EXPECT_EQ(ConvertVideoRotationToCVOByte(rotation),
223 rtp_header.extension.videoRotation); 218 rtp_header.extension.videoRotation);
224 } 219 }
225 }; 220 };
226 221
227 TEST_F(RtpSenderTestWithoutPacer, 222 TEST_F(RtpSenderTestWithoutPacer,
228 RegisterRtpTransmissionTimeOffsetHeaderExtension) { 223 RegisterRtpTransmissionTimeOffsetHeaderExtension) {
229 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); 224 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength());
230 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 225 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
231 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 226 kRtpExtensionTransmissionTimeOffset,
227 kTransmissionTimeOffsetExtensionId));
232 EXPECT_EQ(kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength, 228 EXPECT_EQ(kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength,
233 rtp_sender_->RtpHeaderExtensionTotalLength()); 229 rtp_sender_->RtpHeaderExtensionTotalLength());
234 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( 230 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension(
235 kRtpExtensionTransmissionTimeOffset)); 231 kRtpExtensionTransmissionTimeOffset));
236 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); 232 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength());
237 } 233 }
238 234
239 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpAbsoluteSendTimeHeaderExtension) { 235 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpAbsoluteSendTimeHeaderExtension) {
240 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); 236 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength());
241 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 237 EXPECT_EQ(
242 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 238 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
239 kAbsoluteSendTimeExtensionId));
243 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + 240 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength +
244 kAbsoluteSendTimeLength), 241 kAbsoluteSendTimeLength),
245 rtp_sender_->RtpHeaderExtensionTotalLength()); 242 rtp_sender_->RtpHeaderExtensionTotalLength());
246 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( 243 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension(
247 kRtpExtensionAbsoluteSendTime)); 244 kRtpExtensionAbsoluteSendTime));
248 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); 245 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength());
249 } 246 }
250 247
251 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpAudioLevelHeaderExtension) { 248 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpAudioLevelHeaderExtension) {
252 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); 249 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength());
253 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 250 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
254 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); 251 kAudioLevelExtensionId));
255 EXPECT_EQ( 252 EXPECT_EQ(
256 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kAudioLevelLength), 253 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kAudioLevelLength),
257 rtp_sender_->RtpHeaderExtensionTotalLength()); 254 rtp_sender_->RtpHeaderExtensionTotalLength());
258 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( 255 EXPECT_EQ(0,
259 kRtpExtensionAudioLevel)); 256 rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionAudioLevel));
260 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); 257 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength());
261 } 258 }
262 259
263 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpHeaderExtensions) { 260 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpHeaderExtensions) {
264 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); 261 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength());
265 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 262 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
266 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 263 kRtpExtensionTransmissionTimeOffset,
264 kTransmissionTimeOffsetExtensionId));
267 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + 265 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength +
268 kTransmissionTimeOffsetLength), 266 kTransmissionTimeOffsetLength),
269 rtp_sender_->RtpHeaderExtensionTotalLength()); 267 rtp_sender_->RtpHeaderExtensionTotalLength());
270 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 268 EXPECT_EQ(
271 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 269 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
270 kAbsoluteSendTimeExtensionId));
272 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + 271 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength +
273 kTransmissionTimeOffsetLength + 272 kTransmissionTimeOffsetLength +
274 kAbsoluteSendTimeLength), 273 kAbsoluteSendTimeLength),
275 rtp_sender_->RtpHeaderExtensionTotalLength()); 274 rtp_sender_->RtpHeaderExtensionTotalLength());
276 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 275 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
277 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); 276 kAudioLevelExtensionId));
278 EXPECT_EQ(RtpUtility::Word32Align( 277 EXPECT_EQ(RtpUtility::Word32Align(
279 kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength + 278 kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength +
280 kAbsoluteSendTimeLength + kAudioLevelLength), 279 kAbsoluteSendTimeLength + kAudioLevelLength),
281 rtp_sender_->RtpHeaderExtensionTotalLength()); 280 rtp_sender_->RtpHeaderExtensionTotalLength());
282 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 281 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
283 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 282 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
284 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); 283 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
285 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + 284 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength +
286 kTransmissionTimeOffsetLength + 285 kTransmissionTimeOffsetLength +
287 kAbsoluteSendTimeLength + 286 kAbsoluteSendTimeLength +
288 kAudioLevelLength + kVideoRotationLength), 287 kAudioLevelLength + kVideoRotationLength),
289 rtp_sender_->RtpHeaderExtensionTotalLength()); 288 rtp_sender_->RtpHeaderExtensionTotalLength());
290 289
291 // Deregister starts. 290 // Deregister starts.
292 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( 291 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension(
293 kRtpExtensionTransmissionTimeOffset)); 292 kRtpExtensionTransmissionTimeOffset));
294 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + 293 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength +
295 kAbsoluteSendTimeLength + 294 kAbsoluteSendTimeLength +
296 kAudioLevelLength + kVideoRotationLength), 295 kAudioLevelLength + kVideoRotationLength),
297 rtp_sender_->RtpHeaderExtensionTotalLength()); 296 rtp_sender_->RtpHeaderExtensionTotalLength());
298 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( 297 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension(
299 kRtpExtensionAbsoluteSendTime)); 298 kRtpExtensionAbsoluteSendTime));
300 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + 299 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength +
301 kAudioLevelLength + kVideoRotationLength), 300 kAudioLevelLength + kVideoRotationLength),
302 rtp_sender_->RtpHeaderExtensionTotalLength()); 301 rtp_sender_->RtpHeaderExtensionTotalLength());
303 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( 302 EXPECT_EQ(0,
304 kRtpExtensionAudioLevel)); 303 rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionAudioLevel));
305 EXPECT_EQ( 304 EXPECT_EQ(
306 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), 305 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength),
307 rtp_sender_->RtpHeaderExtensionTotalLength()); 306 rtp_sender_->RtpHeaderExtensionTotalLength());
308 EXPECT_EQ( 307 EXPECT_EQ(
309 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation)); 308 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation));
310 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); 309 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength());
311 } 310 }
312 311
313 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpVideoRotationHeaderExtension) { 312 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpVideoRotationHeaderExtension) {
314 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength()); 313 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionTotalLength());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime); 346 EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime);
348 EXPECT_FALSE(rtp_header.extension.voiceActivity); 347 EXPECT_FALSE(rtp_header.extension.voiceActivity);
349 EXPECT_EQ(0u, rtp_header.extension.audioLevel); 348 EXPECT_EQ(0u, rtp_header.extension.audioLevel);
350 EXPECT_EQ(0u, rtp_header.extension.videoRotation); 349 EXPECT_EQ(0u, rtp_header.extension.videoRotation);
351 } 350 }
352 351
353 TEST_F(RtpSenderTestWithoutPacer, 352 TEST_F(RtpSenderTestWithoutPacer,
354 BuildRTPPacketWithTransmissionOffsetExtension) { 353 BuildRTPPacketWithTransmissionOffsetExtension) {
355 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); 354 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset));
356 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 355 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
357 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 356 kRtpExtensionTransmissionTimeOffset,
357 kTransmissionTimeOffsetExtensionId));
358 358
359 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( 359 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader(
360 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 360 packet_, kPayload, kMarkerBit, kTimestamp, 0));
361 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), 361 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(),
362 length); 362 length);
363 363
364 // Verify 364 // Verify
365 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 365 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
366 webrtc::RTPHeader rtp_header; 366 webrtc::RTPHeader rtp_header;
367 367
(...skipping 18 matching lines...) Expand all
386 EXPECT_EQ(length, rtp_header2.headerLength); 386 EXPECT_EQ(length, rtp_header2.headerLength);
387 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset); 387 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
388 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); 388 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
389 } 389 }
390 390
391 TEST_F(RtpSenderTestWithoutPacer, 391 TEST_F(RtpSenderTestWithoutPacer,
392 BuildRTPPacketWithNegativeTransmissionOffsetExtension) { 392 BuildRTPPacketWithNegativeTransmissionOffsetExtension) {
393 const int kNegTimeOffset = -500; 393 const int kNegTimeOffset = -500;
394 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset)); 394 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset));
395 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 395 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
396 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 396 kRtpExtensionTransmissionTimeOffset,
397 kTransmissionTimeOffsetExtensionId));
397 398
398 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( 399 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader(
399 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 400 packet_, kPayload, kMarkerBit, kTimestamp, 0));
400 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), 401 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(),
401 length); 402 length);
402 403
403 // Verify 404 // Verify
404 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 405 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
405 webrtc::RTPHeader rtp_header; 406 webrtc::RTPHeader rtp_header;
406 407
407 RtpHeaderExtensionMap map; 408 RtpHeaderExtensionMap map;
408 map.Register(kRtpExtensionTransmissionTimeOffset, 409 map.Register(kRtpExtensionTransmissionTimeOffset,
409 kTransmissionTimeOffsetExtensionId); 410 kTransmissionTimeOffsetExtensionId);
410 const bool valid_rtp_header = rtp_parser.Parse(rtp_header, &map); 411 const bool valid_rtp_header = rtp_parser.Parse(rtp_header, &map);
411 412
412 ASSERT_TRUE(valid_rtp_header); 413 ASSERT_TRUE(valid_rtp_header);
413 ASSERT_FALSE(rtp_parser.RTCP()); 414 ASSERT_FALSE(rtp_parser.RTCP());
414 VerifyRTPHeaderCommon(rtp_header); 415 VerifyRTPHeaderCommon(rtp_header);
415 EXPECT_EQ(length, rtp_header.headerLength); 416 EXPECT_EQ(length, rtp_header.headerLength);
416 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); 417 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
417 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset); 418 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset);
418 } 419 }
419 420
420 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) { 421 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) {
421 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime)); 422 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime));
422 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 423 EXPECT_EQ(
423 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 424 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
425 kAbsoluteSendTimeExtensionId));
424 426
425 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( 427 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader(
426 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 428 packet_, kPayload, kMarkerBit, kTimestamp, 0));
427 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), 429 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(),
428 length); 430 length);
429 431
430 // Verify 432 // Verify
431 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 433 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
432 webrtc::RTPHeader rtp_header; 434 webrtc::RTPHeader rtp_header;
433 435
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 webrtc::RTPHeader rtp_header; 503 webrtc::RTPHeader rtp_header;
502 504
503 ASSERT_TRUE(rtp_parser.Parse(rtp_header, &map)); 505 ASSERT_TRUE(rtp_parser.Parse(rtp_header, &map));
504 ASSERT_FALSE(rtp_parser.RTCP()); 506 ASSERT_FALSE(rtp_parser.RTCP());
505 VerifyRTPHeaderCommon(rtp_header, false); 507 VerifyRTPHeaderCommon(rtp_header, false);
506 EXPECT_EQ(length, rtp_header.headerLength); 508 EXPECT_EQ(length, rtp_header.headerLength);
507 EXPECT_FALSE(rtp_header.extension.hasVideoRotation); 509 EXPECT_FALSE(rtp_header.extension.hasVideoRotation);
508 } 510 }
509 511
510 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) { 512 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) {
511 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 513 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
512 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); 514 kAudioLevelExtensionId));
513 515
514 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( 516 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader(
515 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 517 packet_, kPayload, kMarkerBit, kTimestamp, 0));
516 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), 518 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(),
517 length); 519 length);
518 520
519 // Verify 521 // Verify
520 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 522 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length);
521 webrtc::RTPHeader rtp_header; 523 webrtc::RTPHeader rtp_header;
522 524
(...skipping 24 matching lines...) Expand all
547 EXPECT_FALSE(rtp_header2.extension.voiceActivity); 549 EXPECT_FALSE(rtp_header2.extension.voiceActivity);
548 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); 550 EXPECT_EQ(0u, rtp_header2.extension.audioLevel);
549 } 551 }
550 552
551 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) { 553 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) {
552 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); 554 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset));
553 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime)); 555 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime));
554 EXPECT_EQ(0, 556 EXPECT_EQ(0,
555 rtp_sender_->SetTransportSequenceNumber(kTransportSequenceNumber)); 557 rtp_sender_->SetTransportSequenceNumber(kTransportSequenceNumber));
556 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 558 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
557 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 559 kRtpExtensionTransmissionTimeOffset,
558 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 560 kTransmissionTimeOffsetExtensionId));
559 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 561 EXPECT_EQ(
560 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 562 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
561 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); 563 kAbsoluteSendTimeExtensionId));
564 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
565 kAudioLevelExtensionId));
562 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 566 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
563 kRtpExtensionTransportSequenceNumber, 567 kRtpExtensionTransportSequenceNumber,
564 kTransportSequenceNumberExtensionId)); 568 kTransportSequenceNumberExtensionId));
565 569
566 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( 570 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader(
567 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 571 packet_, kPayload, kMarkerBit, kTimestamp, 0));
568 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(), 572 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionTotalLength(),
569 length); 573 length);
570 574
571 // Verify 575 // Verify
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber); 623 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber);
620 } 624 }
621 625
622 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { 626 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
623 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 627 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
624 _, kSeqNum, _, _, _)) 628 _, kSeqNum, _, _, _))
625 .WillRepeatedly(testing::Return()); 629 .WillRepeatedly(testing::Return());
626 630
627 rtp_sender_->SetStorePacketsStatus(true, 10); 631 rtp_sender_->SetStorePacketsStatus(true, 10);
628 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 632 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
629 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 633 kRtpExtensionTransmissionTimeOffset,
630 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 634 kTransmissionTimeOffsetExtensionId));
631 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 635 EXPECT_EQ(
636 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
637 kAbsoluteSendTimeExtensionId));
632 rtp_sender_->SetTargetBitrate(300000); 638 rtp_sender_->SetTargetBitrate(300000);
633 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 639 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
634 int rtp_length_int = rtp_sender_->BuildRTPheader( 640 int rtp_length_int = rtp_sender_->BuildRTPheader(
635 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); 641 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms);
636 ASSERT_NE(-1, rtp_length_int); 642 ASSERT_NE(-1, rtp_length_int);
637 size_t rtp_length = static_cast<size_t>(rtp_length_int); 643 size_t rtp_length = static_cast<size_t>(rtp_length_int);
638 644
639 // Packet should be stored in a send bucket. 645 // Packet should be stored in a send bucket.
640 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 646 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
641 capture_time_ms, kAllowRetransmission, 647 capture_time_ms, kAllowRetransmission,
(...skipping 27 matching lines...) Expand all
669 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 675 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
670 } 676 }
671 677
672 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { 678 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
673 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 679 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
674 _, kSeqNum, _, _, _)) 680 _, kSeqNum, _, _, _))
675 .WillRepeatedly(testing::Return()); 681 .WillRepeatedly(testing::Return());
676 682
677 rtp_sender_->SetStorePacketsStatus(true, 10); 683 rtp_sender_->SetStorePacketsStatus(true, 10);
678 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 684 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
679 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 685 kRtpExtensionTransmissionTimeOffset,
680 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 686 kTransmissionTimeOffsetExtensionId));
681 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 687 EXPECT_EQ(
688 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
689 kAbsoluteSendTimeExtensionId));
682 rtp_sender_->SetTargetBitrate(300000); 690 rtp_sender_->SetTargetBitrate(300000);
683 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 691 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
684 int rtp_length_int = rtp_sender_->BuildRTPheader( 692 int rtp_length_int = rtp_sender_->BuildRTPheader(
685 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); 693 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms);
686 ASSERT_NE(-1, rtp_length_int); 694 ASSERT_NE(-1, rtp_length_int);
687 size_t rtp_length = static_cast<size_t>(rtp_length_int); 695 size_t rtp_length = static_cast<size_t>(rtp_length_int);
688 696
689 // Packet should be stored in a send bucket. 697 // Packet should be stored in a send bucket.
690 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 698 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
691 capture_time_ms, kAllowRetransmission, 699 capture_time_ms, kAllowRetransmission,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 // Make all (non-padding) packets go to send queue. 741 // Make all (non-padding) packets go to send queue.
734 EXPECT_CALL(mock_paced_sender_, 742 EXPECT_CALL(mock_paced_sender_,
735 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) 743 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _))
736 .WillRepeatedly(testing::Return()); 744 .WillRepeatedly(testing::Return());
737 745
738 uint16_t seq_num = kSeqNum; 746 uint16_t seq_num = kSeqNum;
739 uint32_t timestamp = kTimestamp; 747 uint32_t timestamp = kTimestamp;
740 rtp_sender_->SetStorePacketsStatus(true, 10); 748 rtp_sender_->SetStorePacketsStatus(true, 10);
741 size_t rtp_header_len = kRtpHeaderSize; 749 size_t rtp_header_len = kRtpHeaderSize;
742 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 750 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
743 kRtpExtensionTransmissionTimeOffset, kTransmissionTimeOffsetExtensionId)); 751 kRtpExtensionTransmissionTimeOffset,
752 kTransmissionTimeOffsetExtensionId));
744 rtp_header_len += 4; // 4 bytes extension. 753 rtp_header_len += 4; // 4 bytes extension.
745 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 754 EXPECT_EQ(
746 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 755 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
756 kAbsoluteSendTimeExtensionId));
747 rtp_header_len += 4; // 4 bytes extension. 757 rtp_header_len += 4; // 4 bytes extension.
748 rtp_header_len += 4; // 4 extra bytes common to all extension headers. 758 rtp_header_len += 4; // 4 extra bytes common to all extension headers.
749 759
750 // Create and set up parser. 760 // Create and set up parser.
751 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( 761 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser(
752 webrtc::RtpHeaderParser::Create()); 762 webrtc::RtpHeaderParser::Create());
753 ASSERT_TRUE(rtp_parser.get() != nullptr); 763 ASSERT_TRUE(rtp_parser.get() != nullptr);
754 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, 764 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,
755 kTransmissionTimeOffsetExtensionId); 765 kTransmissionTimeOffsetExtensionId);
756 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 766 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset); 818 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset);
809 uint64_t expected_send_time = 819 uint64_t expected_send_time =
810 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 820 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
811 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 821 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
812 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs); 822 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs);
813 timestamp += 90 * kPaddingPeriodMs; 823 timestamp += 90 * kPaddingPeriodMs;
814 } 824 }
815 825
816 // Send a regular video packet again. 826 // Send a regular video packet again.
817 capture_time_ms = fake_clock_.TimeInMilliseconds(); 827 capture_time_ms = fake_clock_.TimeInMilliseconds();
818 rtp_length_int = rtp_sender_->BuildRTPheader( 828 rtp_length_int = rtp_sender_->BuildRTPheader(packet_, kPayload, kMarkerBit,
819 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); 829 timestamp, capture_time_ms);
820 ASSERT_NE(-1, rtp_length_int); 830 ASSERT_NE(-1, rtp_length_int);
821 rtp_length = static_cast<size_t>(rtp_length_int); 831 rtp_length = static_cast<size_t>(rtp_length_int);
822 832
823 // Packet should be stored in a send bucket. 833 // Packet should be stored in a send bucket.
824 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 834 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
825 capture_time_ms, kAllowRetransmission, 835 capture_time_ms, kAllowRetransmission,
826 RtpPacketSender::kNormalPriority)); 836 RtpPacketSender::kNormalPriority));
827 837
828 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false); 838 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false);
829 // Process send bucket. 839 // Process send bucket.
830 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); 840 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_);
831 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); 841 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_);
832 // Parse sent packet. 842 // Parse sent packet.
833 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, 843 ASSERT_TRUE(
834 &rtp_header)); 844 rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, &rtp_header));
835 845
836 // Verify sequence number and timestamp. 846 // Verify sequence number and timestamp.
837 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); 847 EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
838 EXPECT_EQ(timestamp, rtp_header.timestamp); 848 EXPECT_EQ(timestamp, rtp_header.timestamp);
839 // Verify transmission time offset. This packet is sent without delay. 849 // Verify transmission time offset. This packet is sent without delay.
840 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 850 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
841 uint64_t expected_send_time = 851 uint64_t expected_send_time =
842 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 852 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
843 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 853 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
844 } 854 }
845 855
846 TEST_F(RtpSenderTest, SendRedundantPayloads) { 856 TEST_F(RtpSenderTest, SendRedundantPayloads) {
847 MockTransport transport; 857 MockTransport transport;
848 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport, nullptr, 858 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport, nullptr,
849 &mock_paced_sender_, nullptr, nullptr, 859 &mock_paced_sender_, nullptr, nullptr,
850 nullptr, nullptr, nullptr)); 860 nullptr, nullptr, nullptr));
851 rtp_sender_->SetSequenceNumber(kSeqNum); 861 rtp_sender_->SetSequenceNumber(kSeqNum);
852 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); 862 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
853 // Make all packets go through the pacer. 863 // Make all packets go through the pacer.
854 EXPECT_CALL(mock_paced_sender_, 864 EXPECT_CALL(mock_paced_sender_,
855 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) 865 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _))
856 .WillRepeatedly(testing::Return()); 866 .WillRepeatedly(testing::Return());
857 867
858 uint16_t seq_num = kSeqNum; 868 uint16_t seq_num = kSeqNum;
859 rtp_sender_->SetStorePacketsStatus(true, 10); 869 rtp_sender_->SetStorePacketsStatus(true, 10);
860 int32_t rtp_header_len = kRtpHeaderSize; 870 int32_t rtp_header_len = kRtpHeaderSize;
861 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 871 EXPECT_EQ(
862 kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId)); 872 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
873 kAbsoluteSendTimeExtensionId));
863 rtp_header_len += 4; // 4 bytes extension. 874 rtp_header_len += 4; // 4 bytes extension.
864 rtp_header_len += 4; // 4 extra bytes common to all extension headers. 875 rtp_header_len += 4; // 4 extra bytes common to all extension headers.
865 876
866 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); 877 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
867 rtp_sender_->SetRtxSsrc(1234); 878 rtp_sender_->SetRtxSsrc(1234);
868 879
869 // Create and set up parser. 880 // Create and set up parser.
870 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( 881 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser(
871 webrtc::RtpHeaderParser::Create()); 882 webrtc::RtpHeaderParser::Create());
872 ASSERT_TRUE(rtp_parser.get() != nullptr); 883 ASSERT_TRUE(rtp_parser.get() != nullptr);
873 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, 884 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,
874 kTransmissionTimeOffsetExtensionId); 885 kTransmissionTimeOffsetExtensionId);
875 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 886 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
876 kAbsoluteSendTimeExtensionId); 887 kAbsoluteSendTimeExtensionId);
877 rtp_sender_->SetTargetBitrate(300000); 888 rtp_sender_->SetTargetBitrate(300000);
878 const size_t kNumPayloadSizes = 10; 889 const size_t kNumPayloadSizes = 10;
879 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, 750, 890 const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700,
880 800, 850, 900, 950}; 891 750, 800, 850, 900, 950};
881 // Send 10 packets of increasing size. 892 // Send 10 packets of increasing size.
882 for (size_t i = 0; i < kNumPayloadSizes; ++i) { 893 for (size_t i = 0; i < kNumPayloadSizes; ++i) {
883 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 894 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
884 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true)); 895 EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true));
885 SendPacket(capture_time_ms, kPayloadSizes[i]); 896 SendPacket(capture_time_ms, kPayloadSizes[i]);
886 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false); 897 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false);
887 fake_clock_.AdvanceTimeMilliseconds(33); 898 fake_clock_.AdvanceTimeMilliseconds(33);
888 } 899 }
889 // The amount of padding to send it too small to send a payload packet. 900 // The amount of padding to send it too small to send a payload packet.
890 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) 901 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _))
(...skipping 25 matching lines...) Expand all
916 // Send keyframe 927 // Send keyframe
917 ASSERT_EQ( 928 ASSERT_EQ(
918 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, 929 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321,
919 payload, sizeof(payload), nullptr)); 930 payload, sizeof(payload), nullptr));
920 931
921 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 932 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
922 transport_.last_sent_packet_len_); 933 transport_.last_sent_packet_len_);
923 webrtc::RTPHeader rtp_header; 934 webrtc::RTPHeader rtp_header;
924 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); 935 ASSERT_TRUE(rtp_parser.Parse(rtp_header));
925 936
926 const uint8_t* payload_data = GetPayloadData(rtp_header, 937 const uint8_t* payload_data =
927 transport_.last_sent_packet_); 938 GetPayloadData(rtp_header, transport_.last_sent_packet_);
928 uint8_t generic_header = *payload_data++; 939 uint8_t generic_header = *payload_data++;
929 940
930 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), 941 ASSERT_EQ(sizeof(payload) + sizeof(generic_header),
931 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); 942 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_));
932 943
933 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); 944 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
934 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); 945 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
935 946
936 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 947 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
937 948
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 nullptr)); 1047 nullptr));
1037 1048
1038 // Simulate kNumPackets sent with kPacketInterval ms intervals. 1049 // Simulate kNumPackets sent with kPacketInterval ms intervals.
1039 const uint32_t kNumPackets = 15; 1050 const uint32_t kNumPackets = 15;
1040 const uint32_t kPacketInterval = 20; 1051 const uint32_t kPacketInterval = 20;
1041 // Overhead = 12 bytes RTP header + 1 byte generic header. 1052 // Overhead = 12 bytes RTP header + 1 byte generic header.
1042 const uint32_t kPacketOverhead = 13; 1053 const uint32_t kPacketOverhead = 13;
1043 1054
1044 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 1055 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
1045 const uint8_t payload_type = 127; 1056 const uint8_t payload_type = 127;
1046 ASSERT_EQ( 1057 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
1047 0, 1058 0, 1500));
1048 rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 0, 1500));
1049 uint8_t payload[] = {47, 11, 32, 93, 89}; 1059 uint8_t payload[] = {47, 11, 32, 93, 89};
1050 rtp_sender_->SetStorePacketsStatus(true, 1); 1060 rtp_sender_->SetStorePacketsStatus(true, 1);
1051 uint32_t ssrc = rtp_sender_->SSRC(); 1061 uint32_t ssrc = rtp_sender_->SSRC();
1052 1062
1053 // Initial process call so we get a new time window. 1063 // Initial process call so we get a new time window.
1054 rtp_sender_->ProcessBitrate(); 1064 rtp_sender_->ProcessBitrate();
1055 uint64_t start_time = fake_clock_.CurrentNtpInMilliseconds(); 1065 uint64_t start_time = fake_clock_.CurrentNtpInMilliseconds();
1056 1066
1057 // Send a few frames. 1067 // Send a few frames.
1058 for (uint32_t i = 0; i < kNumPackets; ++i) { 1068 for (uint32_t i = 0; i < kNumPackets; ++i) {
1059 ASSERT_EQ(0, 1069 ASSERT_EQ(0,
1060 rtp_sender_->SendOutgoingData(kVideoFrameKey, 1070 rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234,
1061 payload_type, 1071 4321, payload, sizeof(payload), 0));
1062 1234,
1063 4321,
1064 payload,
1065 sizeof(payload),
1066 0));
1067 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); 1072 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval);
1068 } 1073 }
1069 1074
1070 rtp_sender_->ProcessBitrate(); 1075 rtp_sender_->ProcessBitrate();
1071 1076
1072 const uint32_t expected_packet_rate = 1000 / kPacketInterval; 1077 const uint32_t expected_packet_rate = 1000 / kPacketInterval;
1073 1078
1074 // We get one call for every stats updated, thus two calls since both the 1079 // We get one call for every stats updated, thus two calls since both the
1075 // stream stats and the retransmit stats are updated once. 1080 // stream stats and the retransmit stats are updated once.
1076 EXPECT_EQ(2u, callback.num_calls_); 1081 EXPECT_EQ(2u, callback.num_calls_);
(...skipping 16 matching lines...) Expand all
1093 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, 1098 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr,
1094 nullptr, nullptr, nullptr, nullptr, nullptr, 1099 nullptr, nullptr, nullptr, nullptr, nullptr,
1095 nullptr)); 1100 nullptr));
1096 rtp_sender_->SetSequenceNumber(kSeqNum); 1101 rtp_sender_->SetSequenceNumber(kSeqNum);
1097 } 1102 }
1098 }; 1103 };
1099 1104
1100 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { 1105 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) {
1101 class TestCallback : public StreamDataCountersCallback { 1106 class TestCallback : public StreamDataCountersCallback {
1102 public: 1107 public:
1103 TestCallback() 1108 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {}
1104 : StreamDataCountersCallback(), ssrc_(0), counters_() {}
1105 virtual ~TestCallback() {} 1109 virtual ~TestCallback() {}
1106 1110
1107 void DataCountersUpdated(const StreamDataCounters& counters, 1111 void DataCountersUpdated(const StreamDataCounters& counters,
1108 uint32_t ssrc) override { 1112 uint32_t ssrc) override {
1109 ssrc_ = ssrc; 1113 ssrc_ = ssrc;
1110 counters_ = counters; 1114 counters_ = counters;
1111 } 1115 }
1112 1116
1113 uint32_t ssrc_; 1117 uint32_t ssrc_;
1114 StreamDataCounters counters_; 1118 StreamDataCounters counters_;
1115 1119
1116 void MatchPacketCounter(const RtpPacketCounter& expected, 1120 void MatchPacketCounter(const RtpPacketCounter& expected,
1117 const RtpPacketCounter& actual) { 1121 const RtpPacketCounter& actual) {
1118 EXPECT_EQ(expected.payload_bytes, actual.payload_bytes); 1122 EXPECT_EQ(expected.payload_bytes, actual.payload_bytes);
1119 EXPECT_EQ(expected.header_bytes, actual.header_bytes); 1123 EXPECT_EQ(expected.header_bytes, actual.header_bytes);
1120 EXPECT_EQ(expected.padding_bytes, actual.padding_bytes); 1124 EXPECT_EQ(expected.padding_bytes, actual.padding_bytes);
1121 EXPECT_EQ(expected.packets, actual.packets); 1125 EXPECT_EQ(expected.packets, actual.packets);
1122 } 1126 }
1123 1127
1124 void Matches(uint32_t ssrc, const StreamDataCounters& counters) { 1128 void Matches(uint32_t ssrc, const StreamDataCounters& counters) {
1125 EXPECT_EQ(ssrc, ssrc_); 1129 EXPECT_EQ(ssrc, ssrc_);
1126 MatchPacketCounter(counters.transmitted, counters_.transmitted); 1130 MatchPacketCounter(counters.transmitted, counters_.transmitted);
1127 MatchPacketCounter(counters.retransmitted, counters_.retransmitted); 1131 MatchPacketCounter(counters.retransmitted, counters_.retransmitted);
1128 EXPECT_EQ(counters.fec.packets, counters_.fec.packets); 1132 EXPECT_EQ(counters.fec.packets, counters_.fec.packets);
1129 } 1133 }
1130
1131 } callback; 1134 } callback;
1132 1135
1133 const uint8_t kRedPayloadType = 96; 1136 const uint8_t kRedPayloadType = 96;
1134 const uint8_t kUlpfecPayloadType = 97; 1137 const uint8_t kUlpfecPayloadType = 97;
1135 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 1138 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
1136 const uint8_t payload_type = 127; 1139 const uint8_t payload_type = 127;
1137 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 1140 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
1138 0, 1500)); 1141 0, 1500));
1139 uint8_t payload[] = {47, 11, 32, 93, 89}; 1142 uint8_t payload[] = {47, 11, 32, 93, 89};
1140 rtp_sender_->SetStorePacketsStatus(true, 1); 1143 rtp_sender_->SetStorePacketsStatus(true, 1);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 1210
1208 ASSERT_EQ( 1211 ASSERT_EQ(
1209 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, 1212 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321,
1210 payload, sizeof(payload), nullptr)); 1213 payload, sizeof(payload), nullptr));
1211 1214
1212 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 1215 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
1213 transport_.last_sent_packet_len_); 1216 transport_.last_sent_packet_len_);
1214 webrtc::RTPHeader rtp_header; 1217 webrtc::RTPHeader rtp_header;
1215 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); 1218 ASSERT_TRUE(rtp_parser.Parse(rtp_header));
1216 1219
1217 const uint8_t* payload_data = GetPayloadData(rtp_header, 1220 const uint8_t* payload_data =
1218 transport_.last_sent_packet_); 1221 GetPayloadData(rtp_header, transport_.last_sent_packet_);
1219 1222
1220 ASSERT_EQ(sizeof(payload), 1223 ASSERT_EQ(sizeof(payload),
1221 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); 1224 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_));
1222 1225
1223 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 1226 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
1224 } 1227 }
1225 1228
1226 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { 1229 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) {
1227 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); 1230 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel));
1228 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1231 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
1229 kRtpExtensionAudioLevel, kAudioLevelExtensionId)); 1232 kAudioLevelExtensionId));
1230 1233
1231 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1234 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1232 const uint8_t payload_type = 127; 1235 const uint8_t payload_type = 127;
1233 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1236 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1234 0, 1500)); 1237 0, 1500));
1235 uint8_t payload[] = {47, 11, 32, 93, 89}; 1238 uint8_t payload[] = {47, 11, 32, 93, 89};
1236 1239
1237 ASSERT_EQ( 1240 ASSERT_EQ(
1238 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, 1241 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321,
1239 payload, sizeof(payload), nullptr)); 1242 payload, sizeof(payload), nullptr));
1240 1243
1241 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 1244 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
1242 transport_.last_sent_packet_len_); 1245 transport_.last_sent_packet_len_);
1243 webrtc::RTPHeader rtp_header; 1246 webrtc::RTPHeader rtp_header;
1244 ASSERT_TRUE(rtp_parser.Parse(rtp_header)); 1247 ASSERT_TRUE(rtp_parser.Parse(rtp_header));
1245 1248
1246 const uint8_t* payload_data = GetPayloadData(rtp_header, 1249 const uint8_t* payload_data =
1247 transport_.last_sent_packet_); 1250 GetPayloadData(rtp_header, transport_.last_sent_packet_);
1248 1251
1249 ASSERT_EQ(sizeof(payload), 1252 ASSERT_EQ(sizeof(payload),
1250 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); 1253 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_));
1251 1254
1252 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 1255 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
1253 1256
1254 uint8_t extension[] = { 0xbe, 0xde, 0x00, 0x01, 1257 uint8_t extension[] = {
1255 (kAudioLevelExtensionId << 4) + 0, // ID + length. 1258 0xbe, 0xde, 0x00, 0x01,
1256 kAudioLevel, // Data. 1259 (kAudioLevelExtensionId << 4) + 0, // ID + length.
1257 0x00, 0x00 // Padding. 1260 kAudioLevel, // Data.
1258 }; 1261 0x00, 0x00 // Padding.
1262 };
1259 1263
1260 EXPECT_EQ(0, memcmp(extension, payload_data - sizeof(extension), 1264 EXPECT_EQ(0, memcmp(extension, payload_data - sizeof(extension),
1261 sizeof(extension))); 1265 sizeof(extension)));
1262 } 1266 }
1263 1267
1264 // As RFC4733, named telephone events are carried as part of the audio stream 1268 // As RFC4733, named telephone events are carried as part of the audio stream
1265 // and must use the same sequence number and timestamp base as the regular 1269 // and must use the same sequence number and timestamp base as the regular
1266 // audio channel. 1270 // audio channel.
1267 // This test checks the marker bit for the first packet and the consequent 1271 // This test checks the marker bit for the first packet and the consequent
1268 // packets of the same telephone event. Since it is specifically for DTMF 1272 // packets of the same telephone event. Since it is specifically for DTMF
1269 // events, ignoring audio packets and sending kEmptyFrame instead of those. 1273 // events, ignoring audio packets and sending kEmptyFrame instead of those.
1270 TEST_F(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) { 1274 TEST_F(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) {
1271 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "telephone-event"; 1275 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "telephone-event";
1272 uint8_t payload_type = 126; 1276 uint8_t payload_type = 126;
1273 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 0, 1277 ASSERT_EQ(0,
1274 0, 0)); 1278 rtp_sender_->RegisterPayload(payload_name, payload_type, 0, 0, 0));
1275 // For Telephone events, payload is not added to the registered payload list, 1279 // For Telephone events, payload is not added to the registered payload list,
1276 // it will register only the payload used for audio stream. 1280 // it will register only the payload used for audio stream.
1277 // Registering the payload again for audio stream with different payload name. 1281 // Registering the payload again for audio stream with different payload name.
1278 strcpy(payload_name, "payload_name"); 1282 strcpy(payload_name, "payload_name");
1279 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 8000, 1283 ASSERT_EQ(
1280 1, 0)); 1284 0, rtp_sender_->RegisterPayload(payload_name, payload_type, 8000, 1, 0));
1281 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 1285 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
1282 // DTMF event key=9, duration=500 and attenuationdB=10 1286 // DTMF event key=9, duration=500 and attenuationdB=10
1283 rtp_sender_->SendTelephoneEvent(9, 500, 10); 1287 rtp_sender_->SendTelephoneEvent(9, 500, 10);
1284 // During start, it takes the starting timestamp as last sent timestamp. 1288 // During start, it takes the starting timestamp as last sent timestamp.
1285 // The duration is calculated as the difference of current and last sent 1289 // The duration is calculated as the difference of current and last sent
1286 // timestamp. So for first call it will skip since the duration is zero. 1290 // timestamp. So for first call it will skip since the duration is zero.
1287 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, 1291 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type,
1288 capture_time_ms, 0, nullptr, 0, 1292 capture_time_ms, 0, nullptr, 0,
1289 nullptr)); 1293 nullptr));
1290 // DTMF Sample Length is (Frequency/1000) * Duration. 1294 // DTMF Sample Length is (Frequency/1000) * Duration.
1291 // So in this case, it is (8000/1000) * 500 = 4000. 1295 // So in this case, it is (8000/1000) * 500 = 4000.
1292 // Sending it as two packets. 1296 // Sending it as two packets.
1293 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, 1297 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type,
1294 capture_time_ms + 2000, 0, nullptr, 1298 capture_time_ms + 2000, 0, nullptr,
1295 0, nullptr)); 1299 0, nullptr));
1296 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser( 1300 rtc::scoped_ptr<webrtc::RtpHeaderParser> rtp_parser(
1297 webrtc::RtpHeaderParser::Create()); 1301 webrtc::RtpHeaderParser::Create());
1298 ASSERT_TRUE(rtp_parser.get() != nullptr); 1302 ASSERT_TRUE(rtp_parser.get() != nullptr);
1299 webrtc::RTPHeader rtp_header; 1303 webrtc::RTPHeader rtp_header;
1300 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, 1304 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_,
1301 transport_.last_sent_packet_len_, 1305 transport_.last_sent_packet_len_, &rtp_header));
1302 &rtp_header));
1303 // Marker Bit should be set to 1 for first packet. 1306 // Marker Bit should be set to 1 for first packet.
1304 EXPECT_TRUE(rtp_header.markerBit); 1307 EXPECT_TRUE(rtp_header.markerBit);
1305 1308
1306 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, 1309 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type,
1307 capture_time_ms + 4000, 0, nullptr, 1310 capture_time_ms + 4000, 0, nullptr,
1308 0, nullptr)); 1311 0, nullptr));
1309 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, 1312 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_,
1310 transport_.last_sent_packet_len_, 1313 transport_.last_sent_packet_len_, &rtp_header));
1311 &rtp_header));
1312 // Marker Bit should be set to 0 for rest of the packets. 1314 // Marker Bit should be set to 0 for rest of the packets.
1313 EXPECT_FALSE(rtp_header.markerBit); 1315 EXPECT_FALSE(rtp_header.markerBit);
1314 } 1316 }
1315 1317
1316 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { 1318 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) {
1317 const char* kPayloadName = "GENERIC"; 1319 const char* kPayloadName = "GENERIC";
1318 const uint8_t kPayloadType = 127; 1320 const uint8_t kPayloadType = 127;
1319 rtp_sender_->SetSSRC(1234); 1321 rtp_sender_->SetSSRC(1234);
1320 rtp_sender_->SetRtxSsrc(4321); 1322 rtp_sender_->SetRtxSsrc(4321);
1321 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); 1323 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType);
1322 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); 1324 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
1323 1325
1324 ASSERT_EQ( 1326 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000,
1325 0, 1327 0, 1500));
1326 rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, 0, 1500));
1327 uint8_t payload[] = {47, 11, 32, 93, 89}; 1328 uint8_t payload[] = {47, 11, 32, 93, 89};
1328 1329
1329 ASSERT_EQ(0, 1330 ASSERT_EQ(
1330 rtp_sender_->SendOutgoingData(kVideoFrameKey, 1331 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, kPayloadType, 1234, 4321,
1331 kPayloadType, 1332 payload, sizeof(payload), 0));
1332 1234,
1333 4321,
1334 payload,
1335 sizeof(payload),
1336 0));
1337 1333
1338 // Will send 2 full-size padding packets. 1334 // Will send 2 full-size padding packets.
1339 rtp_sender_->TimeToSendPadding(1); 1335 rtp_sender_->TimeToSendPadding(1);
1340 rtp_sender_->TimeToSendPadding(1); 1336 rtp_sender_->TimeToSendPadding(1);
1341 1337
1342 StreamDataCounters rtp_stats; 1338 StreamDataCounters rtp_stats;
1343 StreamDataCounters rtx_stats; 1339 StreamDataCounters rtx_stats;
1344 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); 1340 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats);
1345 1341
1346 // Payload + 1-byte generic header. 1342 // Payload + 1-byte generic header.
1347 EXPECT_GT(rtp_stats.first_packet_time_ms, -1); 1343 EXPECT_GT(rtp_stats.first_packet_time_ms, -1);
1348 EXPECT_EQ(rtp_stats.transmitted.payload_bytes, sizeof(payload) + 1); 1344 EXPECT_EQ(rtp_stats.transmitted.payload_bytes, sizeof(payload) + 1);
1349 EXPECT_EQ(rtp_stats.transmitted.header_bytes, 12u); 1345 EXPECT_EQ(rtp_stats.transmitted.header_bytes, 12u);
1350 EXPECT_EQ(rtp_stats.transmitted.padding_bytes, 0u); 1346 EXPECT_EQ(rtp_stats.transmitted.padding_bytes, 0u);
1351 EXPECT_EQ(rtx_stats.transmitted.payload_bytes, 0u); 1347 EXPECT_EQ(rtx_stats.transmitted.payload_bytes, 0u);
1352 EXPECT_EQ(rtx_stats.transmitted.header_bytes, 24u); 1348 EXPECT_EQ(rtx_stats.transmitted.header_bytes, 24u);
1353 EXPECT_EQ(rtx_stats.transmitted.padding_bytes, 2 * kMaxPaddingSize); 1349 EXPECT_EQ(rtx_stats.transmitted.padding_bytes, 2 * kMaxPaddingSize);
1354 1350
1355 EXPECT_EQ(rtp_stats.transmitted.TotalBytes(), 1351 EXPECT_EQ(rtp_stats.transmitted.TotalBytes(),
1356 rtp_stats.transmitted.payload_bytes + 1352 rtp_stats.transmitted.payload_bytes +
1357 rtp_stats.transmitted.header_bytes + 1353 rtp_stats.transmitted.header_bytes +
1358 rtp_stats.transmitted.padding_bytes); 1354 rtp_stats.transmitted.padding_bytes);
1359 EXPECT_EQ(rtx_stats.transmitted.TotalBytes(), 1355 EXPECT_EQ(rtx_stats.transmitted.TotalBytes(),
1360 rtx_stats.transmitted.payload_bytes + 1356 rtx_stats.transmitted.payload_bytes +
1361 rtx_stats.transmitted.header_bytes + 1357 rtx_stats.transmitted.header_bytes +
1362 rtx_stats.transmitted.padding_bytes); 1358 rtx_stats.transmitted.padding_bytes);
1363 1359
1364 EXPECT_EQ(transport_.total_bytes_sent_, 1360 EXPECT_EQ(
1365 rtp_stats.transmitted.TotalBytes() + 1361 transport_.total_bytes_sent_,
1366 rtx_stats.transmitted.TotalBytes()); 1362 rtp_stats.transmitted.TotalBytes() + rtx_stats.transmitted.TotalBytes());
1367 } 1363 }
1368 1364
1369 TEST_F(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) { 1365 TEST_F(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) {
1370 const int32_t kPacketSize = 1400; 1366 const int32_t kPacketSize = 1400;
1371 const int32_t kNumPackets = 30; 1367 const int32_t kNumPackets = 30;
1372 1368
1373 rtp_sender_->SetStorePacketsStatus(true, kNumPackets); 1369 rtp_sender_->SetStorePacketsStatus(true, kNumPackets);
1374 // Set bitrate (in kbps) to fit kNumPackets á kPacketSize bytes in one second. 1370 // Set bitrate (in kbps) to fit kNumPackets á kPacketSize bytes in one second.
1375 rtp_sender_->SetTargetBitrate(kNumPackets * kPacketSize * 8); 1371 rtp_sender_->SetTargetBitrate(kNumPackets * kPacketSize * 8);
1376 const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber(); 1372 const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), 1416 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()),
1421 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); 1417 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation);
1422 1418
1423 // Verify that this packet does have CVO byte. 1419 // Verify that this packet does have CVO byte.
1424 VerifyCVOPacket( 1420 VerifyCVOPacket(
1425 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), 1421 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()),
1426 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, 1422 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1,
1427 hdr.rotation); 1423 hdr.rotation);
1428 } 1424 }
1429 } // namespace webrtc 1425 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc ('k') | webrtc/modules/rtp_rtcp/source/rtp_sender_video.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698