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

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

Issue 2783743003: Making RtpSender tests cover BWE with overhead. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 }; 125 };
126 126
127 class MockTransportFeedbackObserver : public TransportFeedbackObserver { 127 class MockTransportFeedbackObserver : public TransportFeedbackObserver {
128 public: 128 public:
129 MOCK_METHOD4(AddPacket, 129 MOCK_METHOD4(AddPacket,
130 void(uint32_t, uint16_t, size_t, const PacedPacketInfo&)); 130 void(uint32_t, uint16_t, size_t, const PacedPacketInfo&));
131 MOCK_METHOD1(OnTransportFeedback, void(const rtcp::TransportFeedback&)); 131 MOCK_METHOD1(OnTransportFeedback, void(const rtcp::TransportFeedback&));
132 MOCK_CONST_METHOD0(GetTransportFeedbackVector, std::vector<PacketFeedback>()); 132 MOCK_CONST_METHOD0(GetTransportFeedbackVector, std::vector<PacketFeedback>());
133 }; 133 };
134 134
135 class RtpSenderTest : public ::testing::Test { 135 class MockOverheadObserver : public OverheadObserver {
136 public:
137 MOCK_METHOD1(OnOverheadChanged, void(size_t overhead_bytes_per_packet));
138 };
139
140 class RtpSenderTest : public ::testing::TestWithParam<bool> {
136 protected: 141 protected:
137 RtpSenderTest() 142 RtpSenderTest()
138 : fake_clock_(kStartTime), 143 : fake_clock_(kStartTime),
139 mock_rtc_event_log_(), 144 mock_rtc_event_log_(),
140 mock_paced_sender_(), 145 mock_paced_sender_(),
141 retransmission_rate_limiter_(&fake_clock_, 1000), 146 retransmission_rate_limiter_(&fake_clock_, 1000),
142 rtp_sender_(), 147 rtp_sender_(),
143 payload_(kPayload), 148 payload_(kPayload),
144 transport_(), 149 transport_(),
145 kMarkerBit(true) {} 150 kMarkerBit(true),
151 field_trials_(GetParam() ? "WebRTC-SendSideBwe-WithOverhead/Enabled/"
152 : "") {}
146 153
147 void SetUp() override { SetUpRtpSender(true); } 154 void SetUp() override { SetUpRtpSender(true); }
148 155
149 void SetUpRtpSender(bool pacer) { 156 void SetUpRtpSender(bool pacer) {
150 rtp_sender_.reset(new RTPSender( 157 rtp_sender_.reset(new RTPSender(
151 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, 158 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr,
152 nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, 159 nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr,
153 &mock_rtc_event_log_, &send_packet_observer_, 160 &mock_rtc_event_log_, &send_packet_observer_,
154 &retransmission_rate_limiter_, nullptr)); 161 &retransmission_rate_limiter_, nullptr));
155 rtp_sender_->SetSendPayloadType(kPayload); 162 rtp_sender_->SetSendPayloadType(kPayload);
156 rtp_sender_->SetSequenceNumber(kSeqNum); 163 rtp_sender_->SetSequenceNumber(kSeqNum);
157 rtp_sender_->SetTimestampOffset(0); 164 rtp_sender_->SetTimestampOffset(0);
158 rtp_sender_->SetSSRC(kSsrc); 165 rtp_sender_->SetSSRC(kSsrc);
159 } 166 }
160 167
161 SimulatedClock fake_clock_; 168 SimulatedClock fake_clock_;
162 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; 169 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_;
163 MockRtpPacketSender mock_paced_sender_; 170 MockRtpPacketSender mock_paced_sender_;
164 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_; 171 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_;
165 testing::StrictMock<MockSendPacketObserver> send_packet_observer_; 172 testing::StrictMock<MockSendPacketObserver> send_packet_observer_;
166 testing::StrictMock<MockTransportFeedbackObserver> feedback_observer_; 173 testing::StrictMock<MockTransportFeedbackObserver> feedback_observer_;
167 RateLimiter retransmission_rate_limiter_; 174 RateLimiter retransmission_rate_limiter_;
168 std::unique_ptr<RTPSender> rtp_sender_; 175 std::unique_ptr<RTPSender> rtp_sender_;
169 int payload_; 176 int payload_;
170 LoopbackTransportTest transport_; 177 LoopbackTransportTest transport_;
171 const bool kMarkerBit; 178 const bool kMarkerBit;
179 test::ScopedFieldTrials field_trials_;
172 180
173 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { 181 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) {
174 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); 182 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0);
175 } 183 }
176 184
177 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) { 185 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) {
178 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0); 186 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0);
179 } 187 }
180 188
181 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, 189 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 protected: 248 protected:
241 void SetUp() override { 249 void SetUp() override {
242 // TODO(pbos): Set up to use pacer. 250 // TODO(pbos): Set up to use pacer.
243 SetUpRtpSender(false); 251 SetUpRtpSender(false);
244 rtp_sender_video_.reset( 252 rtp_sender_video_.reset(
245 new RTPSenderVideo(&fake_clock_, rtp_sender_.get(), nullptr)); 253 new RTPSenderVideo(&fake_clock_, rtp_sender_.get(), nullptr));
246 } 254 }
247 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; 255 std::unique_ptr<RTPSenderVideo> rtp_sender_video_;
248 }; 256 };
249 257
250 TEST_F(RtpSenderTestWithoutPacer, AllocatePacketSetCsrc) { 258 TEST_P(RtpSenderTestWithoutPacer, AllocatePacketSetCsrc) {
251 // Configure rtp_sender with csrc. 259 // Configure rtp_sender with csrc.
252 std::vector<uint32_t> csrcs; 260 std::vector<uint32_t> csrcs;
253 csrcs.push_back(0x23456789); 261 csrcs.push_back(0x23456789);
254 rtp_sender_->SetCsrcs(csrcs); 262 rtp_sender_->SetCsrcs(csrcs);
255 263
256 auto packet = rtp_sender_->AllocatePacket(); 264 auto packet = rtp_sender_->AllocatePacket();
257 265
258 ASSERT_TRUE(packet); 266 ASSERT_TRUE(packet);
259 EXPECT_EQ(rtp_sender_->SSRC(), packet->Ssrc()); 267 EXPECT_EQ(rtp_sender_->SSRC(), packet->Ssrc());
260 EXPECT_EQ(csrcs, packet->Csrcs()); 268 EXPECT_EQ(csrcs, packet->Csrcs());
261 } 269 }
262 270
263 TEST_F(RtpSenderTestWithoutPacer, AllocatePacketReserveExtensions) { 271 TEST_P(RtpSenderTestWithoutPacer, AllocatePacketReserveExtensions) {
264 // Configure rtp_sender with extensions. 272 // Configure rtp_sender with extensions.
265 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 273 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
266 kRtpExtensionTransmissionTimeOffset, 274 kRtpExtensionTransmissionTimeOffset,
267 kTransmissionTimeOffsetExtensionId)); 275 kTransmissionTimeOffsetExtensionId));
268 ASSERT_EQ( 276 ASSERT_EQ(
269 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 277 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
270 kAbsoluteSendTimeExtensionId)); 278 kAbsoluteSendTimeExtensionId));
271 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, 279 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
272 kAudioLevelExtensionId)); 280 kAudioLevelExtensionId));
273 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 281 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
274 kRtpExtensionTransportSequenceNumber, 282 kRtpExtensionTransportSequenceNumber,
275 kTransportSequenceNumberExtensionId)); 283 kTransportSequenceNumberExtensionId));
276 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 284 ASSERT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
277 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 285 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
278 286
279 auto packet = rtp_sender_->AllocatePacket(); 287 auto packet = rtp_sender_->AllocatePacket();
280 288
281 ASSERT_TRUE(packet); 289 ASSERT_TRUE(packet);
282 // Preallocate BWE extensions RtpSender set itself. 290 // Preallocate BWE extensions RtpSender set itself.
283 EXPECT_TRUE(packet->HasExtension<TransmissionOffset>()); 291 EXPECT_TRUE(packet->HasExtension<TransmissionOffset>());
284 EXPECT_TRUE(packet->HasExtension<AbsoluteSendTime>()); 292 EXPECT_TRUE(packet->HasExtension<AbsoluteSendTime>());
285 EXPECT_TRUE(packet->HasExtension<TransportSequenceNumber>()); 293 EXPECT_TRUE(packet->HasExtension<TransportSequenceNumber>());
286 // Do not allocate media specific extensions. 294 // Do not allocate media specific extensions.
287 EXPECT_FALSE(packet->HasExtension<AudioLevel>()); 295 EXPECT_FALSE(packet->HasExtension<AudioLevel>());
288 EXPECT_FALSE(packet->HasExtension<VideoOrientation>()); 296 EXPECT_FALSE(packet->HasExtension<VideoOrientation>());
289 } 297 }
290 298
291 TEST_F(RtpSenderTestWithoutPacer, AssignSequenceNumberAdvanceSequenceNumber) { 299 TEST_P(RtpSenderTestWithoutPacer, AssignSequenceNumberAdvanceSequenceNumber) {
292 auto packet = rtp_sender_->AllocatePacket(); 300 auto packet = rtp_sender_->AllocatePacket();
293 ASSERT_TRUE(packet); 301 ASSERT_TRUE(packet);
294 const uint16_t sequence_number = rtp_sender_->SequenceNumber(); 302 const uint16_t sequence_number = rtp_sender_->SequenceNumber();
295 303
296 EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); 304 EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
297 305
298 EXPECT_EQ(sequence_number, packet->SequenceNumber()); 306 EXPECT_EQ(sequence_number, packet->SequenceNumber());
299 EXPECT_EQ(sequence_number + 1, rtp_sender_->SequenceNumber()); 307 EXPECT_EQ(sequence_number + 1, rtp_sender_->SequenceNumber());
300 } 308 }
301 309
302 TEST_F(RtpSenderTestWithoutPacer, AssignSequenceNumberFailsOnNotSending) { 310 TEST_P(RtpSenderTestWithoutPacer, AssignSequenceNumberFailsOnNotSending) {
303 auto packet = rtp_sender_->AllocatePacket(); 311 auto packet = rtp_sender_->AllocatePacket();
304 ASSERT_TRUE(packet); 312 ASSERT_TRUE(packet);
305 313
306 rtp_sender_->SetSendingMediaStatus(false); 314 rtp_sender_->SetSendingMediaStatus(false);
307 EXPECT_FALSE(rtp_sender_->AssignSequenceNumber(packet.get())); 315 EXPECT_FALSE(rtp_sender_->AssignSequenceNumber(packet.get()));
308 } 316 }
309 317
310 TEST_F(RtpSenderTestWithoutPacer, AssignSequenceNumberMayAllowPadding) { 318 TEST_P(RtpSenderTestWithoutPacer, AssignSequenceNumberMayAllowPadding) {
311 constexpr size_t kPaddingSize = 100; 319 constexpr size_t kPaddingSize = 100;
312 auto packet = rtp_sender_->AllocatePacket(); 320 auto packet = rtp_sender_->AllocatePacket();
313 ASSERT_TRUE(packet); 321 ASSERT_TRUE(packet);
314 322
315 ASSERT_FALSE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); 323 ASSERT_FALSE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo()));
316 packet->SetMarker(false); 324 packet->SetMarker(false);
317 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); 325 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
318 // Packet without marker bit doesn't allow padding. 326 // Packet without marker bit doesn't allow padding.
319 EXPECT_FALSE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); 327 EXPECT_FALSE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo()));
320 328
321 packet->SetMarker(true); 329 packet->SetMarker(true);
322 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); 330 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
323 // Packet with marker bit allows send padding. 331 // Packet with marker bit allows send padding.
324 EXPECT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); 332 EXPECT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo()));
325 } 333 }
326 334
327 TEST_F(RtpSenderTestWithoutPacer, AssignSequenceNumberSetPaddingTimestamps) { 335 TEST_P(RtpSenderTestWithoutPacer, AssignSequenceNumberSetPaddingTimestamps) {
328 constexpr size_t kPaddingSize = 100; 336 constexpr size_t kPaddingSize = 100;
329 auto packet = rtp_sender_->AllocatePacket(); 337 auto packet = rtp_sender_->AllocatePacket();
330 ASSERT_TRUE(packet); 338 ASSERT_TRUE(packet);
331 packet->SetMarker(true); 339 packet->SetMarker(true);
332 packet->SetTimestamp(kTimestamp); 340 packet->SetTimestamp(kTimestamp);
333 341
334 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); 342 ASSERT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get()));
335 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); 343 ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo()));
336 344
337 ASSERT_EQ(1u, transport_.sent_packets_.size()); 345 ASSERT_EQ(1u, transport_.sent_packets_.size());
338 // Verify padding packet timestamp. 346 // Verify padding packet timestamp.
339 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); 347 EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp());
340 } 348 }
341 349
342 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { 350 TEST_P(RtpSenderTestWithoutPacer,
351 TransportFeedbackObserverGetsCorrectByteCount) {
minyue-webrtc 2017/03/29 12:00:39 Add a reason whey moving this up: I removed the c
352 constexpr int kRtpOverheadBytesPerPacket = 12 + 8;
353 testing::NiceMock<MockOverheadObserver> mock_overhead_observer;
343 rtp_sender_.reset(new RTPSender( 354 rtp_sender_.reset(new RTPSender(
344 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, 355 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_,
345 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, 356 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_,
357 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer));
358 rtp_sender_->SetSSRC(kSsrc);
359 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
360 kRtpExtensionTransportSequenceNumber,
361 kTransportSequenceNumberExtensionId));
362 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
363 .WillOnce(testing::Return(kTransportSequenceNumber));
364
365 const size_t expected_bytes =
366 GetParam() ? sizeof(kPayloadData) + kGenericHeaderLength +
367 kRtpOverheadBytesPerPacket
368 : sizeof(kPayloadData) + kGenericHeaderLength;
369
370 EXPECT_CALL(feedback_observer_,
371 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber,
372 expected_bytes, PacedPacketInfo()))
373 .Times(1);
374 EXPECT_CALL(mock_overhead_observer,
375 OnOverheadChanged(kRtpOverheadBytesPerPacket))
376 .Times(1);
377 SendGenericPayload();
378 }
379
380 TEST_P(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) {
381 rtp_sender_.reset(new RTPSender(
382 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_,
383 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_,
346 &send_packet_observer_, &retransmission_rate_limiter_, nullptr)); 384 &send_packet_observer_, &retransmission_rate_limiter_, nullptr));
347 rtp_sender_->SetSSRC(kSsrc); 385 rtp_sender_->SetSSRC(kSsrc);
348 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 386 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
349 kRtpExtensionTransportSequenceNumber, 387 kRtpExtensionTransportSequenceNumber,
350 kTransportSequenceNumberExtensionId)); 388 kTransportSequenceNumberExtensionId));
351 389
352 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 390 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
353 .WillOnce(testing::Return(kTransportSequenceNumber)); 391 .WillOnce(testing::Return(kTransportSequenceNumber));
354 EXPECT_CALL(send_packet_observer_, 392 EXPECT_CALL(send_packet_observer_,
355 OnSendPacket(kTransportSequenceNumber, _, _)) 393 OnSendPacket(kTransportSequenceNumber, _, _))
356 .Times(1); 394 .Times(1);
357 EXPECT_CALL( 395
358 feedback_observer_, 396 EXPECT_CALL(feedback_observer_,
359 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber, 397 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber, _,
360 sizeof(kPayloadData) + kGenericHeaderLength, PacedPacketInfo())) 398 PacedPacketInfo()))
361 .Times(1); 399 .Times(1);
362 400
363 SendGenericPayload(); 401 SendGenericPayload();
364 402
365 const auto& packet = transport_.last_sent_packet(); 403 const auto& packet = transport_.last_sent_packet();
366 uint16_t transport_seq_no; 404 uint16_t transport_seq_no;
367 ASSERT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); 405 ASSERT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no));
368 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); 406 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no);
369 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); 407 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no);
370 } 408 }
371 409
372 TEST_F(RtpSenderTestWithoutPacer, NoAllocationIfNotRegistered) { 410 TEST_P(RtpSenderTestWithoutPacer, NoAllocationIfNotRegistered) {
373 SendGenericPayload(); 411 SendGenericPayload();
374 } 412 }
375 413
376 TEST_F(RtpSenderTestWithoutPacer, OnSendPacketUpdated) { 414 TEST_P(RtpSenderTestWithoutPacer, OnSendPacketUpdated) {
377 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 415 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
378 kRtpExtensionTransportSequenceNumber, 416 kRtpExtensionTransportSequenceNumber,
379 kTransportSequenceNumberExtensionId)); 417 kTransportSequenceNumberExtensionId));
380 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 418 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
381 .WillOnce(testing::Return(kTransportSequenceNumber)); 419 .WillOnce(testing::Return(kTransportSequenceNumber));
382 EXPECT_CALL(send_packet_observer_, 420 EXPECT_CALL(send_packet_observer_,
383 OnSendPacket(kTransportSequenceNumber, _, _)) 421 OnSendPacket(kTransportSequenceNumber, _, _))
384 .Times(1); 422 .Times(1);
385 423
386 SendGenericPayload(); 424 SendGenericPayload();
387 } 425 }
388 426
389 TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { 427 TEST_P(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) {
390 rtp_sender_.reset(new RTPSender( 428 rtp_sender_.reset(new RTPSender(
391 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, 429 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr,
392 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr, 430 &seq_num_allocator_, &feedback_observer_, nullptr, nullptr, nullptr,
393 &mock_rtc_event_log_, &send_packet_observer_, 431 &mock_rtc_event_log_, &send_packet_observer_,
394 &retransmission_rate_limiter_, nullptr)); 432 &retransmission_rate_limiter_, nullptr));
395 rtp_sender_->SetSequenceNumber(kSeqNum); 433 rtp_sender_->SetSequenceNumber(kSeqNum);
396 rtp_sender_->SetSSRC(kSsrc); 434 rtp_sender_->SetSSRC(kSsrc);
397 rtp_sender_->SetStorePacketsStatus(true, 10); 435 rtp_sender_->SetStorePacketsStatus(true, 10);
398 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 436 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
399 kRtpExtensionTransportSequenceNumber, 437 kRtpExtensionTransportSequenceNumber,
400 kTransportSequenceNumberExtensionId)); 438 kTransportSequenceNumberExtensionId));
401 439
402 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)); 440 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _));
403 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 441 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
404 .WillOnce(testing::Return(kTransportSequenceNumber)); 442 .WillOnce(testing::Return(kTransportSequenceNumber));
405 EXPECT_CALL(send_packet_observer_, 443 EXPECT_CALL(send_packet_observer_,
406 OnSendPacket(kTransportSequenceNumber, _, _)) 444 OnSendPacket(kTransportSequenceNumber, _, _))
407 .Times(1); 445 .Times(1);
408 EXPECT_CALL( 446 EXPECT_CALL(feedback_observer_,
409 feedback_observer_, 447 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber, _,
410 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber, 448 PacedPacketInfo()))
411 sizeof(kPayloadData) + kGenericHeaderLength, PacedPacketInfo()))
412 .Times(1); 449 .Times(1);
413 450
414 SendGenericPayload(); 451 SendGenericPayload();
415 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, 452 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum,
416 fake_clock_.TimeInMilliseconds(), false, 453 fake_clock_.TimeInMilliseconds(), false,
417 PacedPacketInfo()); 454 PacedPacketInfo());
418 455
419 const auto& packet = transport_.last_sent_packet(); 456 const auto& packet = transport_.last_sent_packet();
420 uint16_t transport_seq_no; 457 uint16_t transport_seq_no;
421 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); 458 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no));
422 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); 459 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no);
423 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); 460 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no);
424 } 461 }
425 462
426 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { 463 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) {
427 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 464 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
428 kSsrc, kSeqNum, _, _, _)); 465 kSsrc, kSeqNum, _, _, _));
429 EXPECT_CALL(mock_rtc_event_log_, 466 EXPECT_CALL(mock_rtc_event_log_,
430 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)); 467 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _));
431 468
432 rtp_sender_->SetStorePacketsStatus(true, 10); 469 rtp_sender_->SetStorePacketsStatus(true, 10);
433 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 470 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
434 kRtpExtensionTransmissionTimeOffset, 471 kRtpExtensionTransmissionTimeOffset,
435 kTransmissionTimeOffsetExtensionId)); 472 kTransmissionTimeOffsetExtensionId));
436 EXPECT_EQ( 473 EXPECT_EQ(
(...skipping 24 matching lines...) Expand all
461 webrtc::RTPHeader rtp_header; 498 webrtc::RTPHeader rtp_header;
462 transport_.last_sent_packet().GetHeader(&rtp_header); 499 transport_.last_sent_packet().GetHeader(&rtp_header);
463 500
464 // Verify transmission time offset. 501 // Verify transmission time offset.
465 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 502 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
466 uint64_t expected_send_time = 503 uint64_t expected_send_time =
467 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 504 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
468 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 505 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
469 } 506 }
470 507
471 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { 508 TEST_P(RtpSenderTest, TrafficSmoothingRetransmits) {
472 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 509 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
473 kSsrc, kSeqNum, _, _, _)); 510 kSsrc, kSeqNum, _, _, _));
474 EXPECT_CALL(mock_rtc_event_log_, 511 EXPECT_CALL(mock_rtc_event_log_,
475 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)); 512 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _));
476 513
477 rtp_sender_->SetStorePacketsStatus(true, 10); 514 rtp_sender_->SetStorePacketsStatus(true, 10);
478 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 515 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
479 kRtpExtensionTransmissionTimeOffset, 516 kRtpExtensionTransmissionTimeOffset,
480 kTransmissionTimeOffsetExtensionId)); 517 kTransmissionTimeOffsetExtensionId));
481 EXPECT_EQ( 518 EXPECT_EQ(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 551
515 // Verify transmission time offset. 552 // Verify transmission time offset.
516 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 553 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
517 uint64_t expected_send_time = 554 uint64_t expected_send_time =
518 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 555 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
519 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 556 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
520 } 557 }
521 558
522 // This test sends 1 regular video packet, then 4 padding packets, and then 559 // This test sends 1 regular video packet, then 4 padding packets, and then
523 // 1 more regular packet. 560 // 1 more regular packet.
524 TEST_F(RtpSenderTest, SendPadding) { 561 TEST_P(RtpSenderTest, SendPadding) {
525 // Make all (non-padding) packets go to send queue. 562 // Make all (non-padding) packets go to send queue.
526 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 563 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
527 kSsrc, kSeqNum, _, _, _)); 564 kSsrc, kSeqNum, _, _, _));
528 EXPECT_CALL(mock_rtc_event_log_, 565 EXPECT_CALL(mock_rtc_event_log_,
529 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _)) 566 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _, _))
530 .Times(1 + 4 + 1); 567 .Times(1 + 4 + 1);
531 568
532 uint16_t seq_num = kSeqNum; 569 uint16_t seq_num = kSeqNum;
533 uint32_t timestamp = kTimestamp; 570 uint32_t timestamp = kTimestamp;
534 rtp_sender_->SetStorePacketsStatus(true, 10); 571 rtp_sender_->SetStorePacketsStatus(true, 10);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 // Verify sequence number and timestamp. 659 // Verify sequence number and timestamp.
623 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); 660 EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
624 EXPECT_EQ(timestamp, rtp_header.timestamp); 661 EXPECT_EQ(timestamp, rtp_header.timestamp);
625 // Verify transmission time offset. This packet is sent without delay. 662 // Verify transmission time offset. This packet is sent without delay.
626 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 663 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
627 uint64_t expected_send_time = 664 uint64_t expected_send_time =
628 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 665 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
629 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 666 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
630 } 667 }
631 668
632 TEST_F(RtpSenderTest, OnSendPacketUpdated) { 669 TEST_P(RtpSenderTest, OnSendPacketUpdated) {
633 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 670 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
634 kRtpExtensionTransportSequenceNumber, 671 kRtpExtensionTransportSequenceNumber,
635 kTransportSequenceNumberExtensionId)); 672 kTransportSequenceNumberExtensionId));
636 rtp_sender_->SetStorePacketsStatus(true, 10); 673 rtp_sender_->SetStorePacketsStatus(true, 10);
637 674
638 EXPECT_CALL(send_packet_observer_, 675 EXPECT_CALL(send_packet_observer_,
639 OnSendPacket(kTransportSequenceNumber, _, _)) 676 OnSendPacket(kTransportSequenceNumber, _, _))
640 .Times(1); 677 .Times(1);
641 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 678 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
642 .WillOnce(testing::Return(kTransportSequenceNumber)); 679 .WillOnce(testing::Return(kTransportSequenceNumber));
643 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) 680 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _))
644 .Times(1); 681 .Times(1);
645 682
646 SendGenericPayload(); // Packet passed to pacer. 683 SendGenericPayload(); // Packet passed to pacer.
647 const bool kIsRetransmit = false; 684 const bool kIsRetransmit = false;
648 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, 685 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum,
649 fake_clock_.TimeInMilliseconds(), kIsRetransmit, 686 fake_clock_.TimeInMilliseconds(), kIsRetransmit,
650 PacedPacketInfo()); 687 PacedPacketInfo());
651 EXPECT_EQ(1, transport_.packets_sent()); 688 EXPECT_EQ(1, transport_.packets_sent());
652 } 689 }
653 690
654 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { 691 TEST_P(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) {
655 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 692 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
656 kRtpExtensionTransportSequenceNumber, 693 kRtpExtensionTransportSequenceNumber,
657 kTransportSequenceNumberExtensionId)); 694 kTransportSequenceNumberExtensionId));
658 rtp_sender_->SetStorePacketsStatus(true, 10); 695 rtp_sender_->SetStorePacketsStatus(true, 10);
659 696
660 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); 697 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
661 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 698 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
662 .WillOnce(testing::Return(kTransportSequenceNumber)); 699 .WillOnce(testing::Return(kTransportSequenceNumber));
663 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) 700 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _))
664 .Times(1); 701 .Times(1);
665 702
666 SendGenericPayload(); // Packet passed to pacer. 703 SendGenericPayload(); // Packet passed to pacer.
667 const bool kIsRetransmit = true; 704 const bool kIsRetransmit = true;
668 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, 705 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum,
669 fake_clock_.TimeInMilliseconds(), kIsRetransmit, 706 fake_clock_.TimeInMilliseconds(), kIsRetransmit,
670 PacedPacketInfo()); 707 PacedPacketInfo());
671 EXPECT_EQ(1, transport_.packets_sent()); 708 EXPECT_EQ(1, transport_.packets_sent());
672 } 709 }
673 710
674 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { 711 TEST_P(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) {
675 rtp_sender_.reset(new RTPSender( 712 rtp_sender_.reset(new RTPSender(
676 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, 713 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr,
677 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, 714 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr,
678 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_, 715 nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_,
679 nullptr)); 716 nullptr));
680 rtp_sender_->SetSequenceNumber(kSeqNum); 717 rtp_sender_->SetSequenceNumber(kSeqNum);
681 rtp_sender_->SetSSRC(kSsrc); 718 rtp_sender_->SetSSRC(kSsrc);
682 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 719 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
683 kRtpExtensionTransportSequenceNumber, 720 kRtpExtensionTransportSequenceNumber,
684 kTransportSequenceNumberExtensionId)); 721 kTransportSequenceNumberExtensionId));
685 rtp_sender_->SetSequenceNumber(kSeqNum); 722 rtp_sender_->SetSequenceNumber(kSeqNum);
686 rtp_sender_->SetStorePacketsStatus(true, 10); 723 rtp_sender_->SetStorePacketsStatus(true, 10);
687 724
688 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); 725 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
689 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _)) 726 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _))
690 .Times(1); 727 .Times(1);
691 728
692 SendGenericPayload(); // Packet passed to pacer. 729 SendGenericPayload(); // Packet passed to pacer.
693 const bool kIsRetransmit = false; 730 const bool kIsRetransmit = false;
694 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, 731 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum,
695 fake_clock_.TimeInMilliseconds(), kIsRetransmit, 732 fake_clock_.TimeInMilliseconds(), kIsRetransmit,
696 PacedPacketInfo()); 733 PacedPacketInfo());
697 EXPECT_EQ(1, transport_.packets_sent()); 734 EXPECT_EQ(1, transport_.packets_sent());
698 } 735 }
699 736
700 TEST_F(RtpSenderTest, SendRedundantPayloads) { 737 TEST_P(RtpSenderTest, SendRedundantPayloads) {
701 MockTransport transport; 738 MockTransport transport;
702 rtp_sender_.reset(new RTPSender( 739 rtp_sender_.reset(new RTPSender(
703 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, 740 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr,
704 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr, 741 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr,
705 &retransmission_rate_limiter_, nullptr)); 742 &retransmission_rate_limiter_, nullptr));
706 rtp_sender_->SetSequenceNumber(kSeqNum); 743 rtp_sender_->SetSequenceNumber(kSeqNum);
707 rtp_sender_->SetSSRC(kSsrc); 744 rtp_sender_->SetSSRC(kSsrc);
708 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); 745 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
709 746
710 uint16_t seq_num = kSeqNum; 747 uint16_t seq_num = kSeqNum;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 EXPECT_CALL(transport, SendRtp(_, kPayloadSizes[kNumPayloadSizes - 1] + 796 EXPECT_CALL(transport, SendRtp(_, kPayloadSizes[kNumPayloadSizes - 1] +
760 rtp_header_len + kRtxHeaderSize, 797 rtp_header_len + kRtxHeaderSize,
761 _)) 798 _))
762 .WillOnce(testing::Return(true)); 799 .WillOnce(testing::Return(true));
763 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _)) 800 EXPECT_CALL(transport, SendRtp(_, kMaxPaddingSize + rtp_header_len, _))
764 .WillOnce(testing::Return(true)); 801 .WillOnce(testing::Return(true));
765 EXPECT_EQ(kPayloadSizes[kNumPayloadSizes - 1] + kMaxPaddingSize, 802 EXPECT_EQ(kPayloadSizes[kNumPayloadSizes - 1] + kMaxPaddingSize,
766 rtp_sender_->TimeToSendPadding(999, PacedPacketInfo())); 803 rtp_sender_->TimeToSendPadding(999, PacedPacketInfo()));
767 } 804 }
768 805
769 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { 806 TEST_P(RtpSenderTestWithoutPacer, SendGenericVideo) {
770 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 807 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
771 const uint8_t payload_type = 127; 808 const uint8_t payload_type = 127;
772 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 809 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
773 0, 1500)); 810 0, 1500));
774 uint8_t payload[] = {47, 11, 32, 93, 89}; 811 uint8_t payload[] = {47, 11, 32, 93, 89};
775 812
776 // Send keyframe 813 // Send keyframe
777 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 814 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234,
778 4321, payload, sizeof(payload), 815 4321, payload, sizeof(payload),
779 nullptr, nullptr, nullptr)); 816 nullptr, nullptr, nullptr));
(...skipping 13 matching lines...) Expand all
793 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload), 830 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload),
794 nullptr, nullptr, nullptr)); 831 nullptr, nullptr, nullptr));
795 832
796 sent_payload = transport_.last_sent_packet().payload(); 833 sent_payload = transport_.last_sent_packet().payload();
797 generic_header = sent_payload[0]; 834 generic_header = sent_payload[0];
798 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); 835 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
799 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); 836 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
800 EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(payload)); 837 EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(payload));
801 } 838 }
802 839
803 TEST_F(RtpSenderTest, SendFlexfecPackets) { 840 TEST_P(RtpSenderTest, SendFlexfecPackets) {
804 constexpr int kMediaPayloadType = 127; 841 constexpr int kMediaPayloadType = 127;
805 constexpr int kFlexfecPayloadType = 118; 842 constexpr int kFlexfecPayloadType = 118;
806 constexpr uint32_t kMediaSsrc = 1234; 843 constexpr uint32_t kMediaSsrc = 1234;
807 constexpr uint32_t kFlexfecSsrc = 5678; 844 constexpr uint32_t kFlexfecSsrc = 5678;
808 const std::vector<RtpExtension> kNoRtpExtensions; 845 const std::vector<RtpExtension> kNoRtpExtensions;
809 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 846 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
810 kNoRtpExtensions, &fake_clock_); 847 kNoRtpExtensions, &fake_clock_);
811 848
812 // Reset |rtp_sender_| to use FlexFEC. 849 // Reset |rtp_sender_| to use FlexFEC.
813 rtp_sender_.reset(new RTPSender( 850 rtp_sender_.reset(new RTPSender(
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; 885 const RtpPacketReceived& media_packet = transport_.sent_packets_[0];
849 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); 886 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType());
850 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber()); 887 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber());
851 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); 888 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc());
852 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; 889 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1];
853 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); 890 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType());
854 EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber()); 891 EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber());
855 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); 892 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc());
856 } 893 }
857 894
858 TEST_F(RtpSenderTestWithoutPacer, SendFlexfecPackets) { 895 TEST_P(RtpSenderTestWithoutPacer, SendFlexfecPackets) {
859 constexpr int kMediaPayloadType = 127; 896 constexpr int kMediaPayloadType = 127;
860 constexpr int kFlexfecPayloadType = 118; 897 constexpr int kFlexfecPayloadType = 118;
861 constexpr uint32_t kMediaSsrc = 1234; 898 constexpr uint32_t kMediaSsrc = 1234;
862 constexpr uint32_t kFlexfecSsrc = 5678; 899 constexpr uint32_t kFlexfecSsrc = 5678;
863 const std::vector<RtpExtension> kNoRtpExtensions; 900 const std::vector<RtpExtension> kNoRtpExtensions;
864 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 901 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
865 kNoRtpExtensions, &fake_clock_); 902 kNoRtpExtensions, &fake_clock_);
866 903
867 // Reset |rtp_sender_| to use FlexFEC. 904 // Reset |rtp_sender_| to use FlexFEC.
868 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, 905 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr,
(...skipping 18 matching lines...) Expand all
887 SendGenericPayload(); 924 SendGenericPayload();
888 ASSERT_EQ(2, transport_.packets_sent()); 925 ASSERT_EQ(2, transport_.packets_sent());
889 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; 926 const RtpPacketReceived& media_packet = transport_.sent_packets_[0];
890 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); 927 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType());
891 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); 928 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc());
892 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1]; 929 const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1];
893 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType()); 930 EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType());
894 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc()); 931 EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc());
895 } 932 }
896 933
897 TEST_F(RtpSenderTest, FecOverheadRate) { 934 TEST_P(RtpSenderTest, FecOverheadRate) {
898 constexpr int kMediaPayloadType = 127; 935 constexpr int kMediaPayloadType = 127;
899 constexpr int kFlexfecPayloadType = 118; 936 constexpr int kFlexfecPayloadType = 118;
900 constexpr uint32_t kMediaSsrc = 1234; 937 constexpr uint32_t kMediaSsrc = 1234;
901 constexpr uint32_t kFlexfecSsrc = 5678; 938 constexpr uint32_t kFlexfecSsrc = 5678;
902 const std::vector<RtpExtension> kNoRtpExtensions; 939 const std::vector<RtpExtension> kNoRtpExtensions;
903 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc, 940 FlexfecSender flexfec_sender(kFlexfecPayloadType, kFlexfecSsrc, kMediaSsrc,
904 kNoRtpExtensions, &fake_clock_); 941 kNoRtpExtensions, &fake_clock_);
905 942
906 // Reset |rtp_sender_| to use FlexFEC. 943 // Reset |rtp_sender_| to use FlexFEC.
907 rtp_sender_.reset(new RTPSender( 944 rtp_sender_.reset(new RTPSender(
(...skipping 25 matching lines...) Expand all
933 constexpr size_t kFlexfecHeaderLength = 20; 970 constexpr size_t kFlexfecHeaderLength = 20;
934 constexpr size_t kGenericCodecHeaderLength = 1; 971 constexpr size_t kGenericCodecHeaderLength = 1;
935 constexpr size_t kPayloadLength = sizeof(kPayloadData); 972 constexpr size_t kPayloadLength = sizeof(kPayloadData);
936 constexpr size_t kPacketLength = kRtpHeaderLength + kFlexfecHeaderLength + 973 constexpr size_t kPacketLength = kRtpHeaderLength + kFlexfecHeaderLength +
937 kGenericCodecHeaderLength + kPayloadLength; 974 kGenericCodecHeaderLength + kPayloadLength;
938 EXPECT_NEAR(kNumFecPackets * kPacketLength * 8 / 975 EXPECT_NEAR(kNumFecPackets * kPacketLength * 8 /
939 (kNumFecPackets * kTimeBetweenPacketsMs / 1000.0f), 976 (kNumFecPackets * kTimeBetweenPacketsMs / 1000.0f),
940 rtp_sender_->FecOverheadRate(), 500); 977 rtp_sender_->FecOverheadRate(), 500);
941 } 978 }
942 979
943 TEST_F(RtpSenderTest, FrameCountCallbacks) { 980 TEST_P(RtpSenderTest, FrameCountCallbacks) {
944 class TestCallback : public FrameCountObserver { 981 class TestCallback : public FrameCountObserver {
945 public: 982 public:
946 TestCallback() : FrameCountObserver(), num_calls_(0), ssrc_(0) {} 983 TestCallback() : FrameCountObserver(), num_calls_(0), ssrc_(0) {}
947 virtual ~TestCallback() {} 984 virtual ~TestCallback() {}
948 985
949 void FrameCountUpdated(const FrameCounts& frame_counts, 986 void FrameCountUpdated(const FrameCounts& frame_counts,
950 uint32_t ssrc) override { 987 uint32_t ssrc) override {
951 ++num_calls_; 988 ++num_calls_;
952 ssrc_ = ssrc; 989 ssrc_ = ssrc;
953 frame_counts_ = frame_counts; 990 frame_counts_ = frame_counts;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 nullptr, nullptr, nullptr)); 1025 nullptr, nullptr, nullptr));
989 1026
990 EXPECT_EQ(2U, callback.num_calls_); 1027 EXPECT_EQ(2U, callback.num_calls_);
991 EXPECT_EQ(ssrc, callback.ssrc_); 1028 EXPECT_EQ(ssrc, callback.ssrc_);
992 EXPECT_EQ(1, callback.frame_counts_.key_frames); 1029 EXPECT_EQ(1, callback.frame_counts_.key_frames);
993 EXPECT_EQ(1, callback.frame_counts_.delta_frames); 1030 EXPECT_EQ(1, callback.frame_counts_.delta_frames);
994 1031
995 rtp_sender_.reset(); 1032 rtp_sender_.reset();
996 } 1033 }
997 1034
998 TEST_F(RtpSenderTest, BitrateCallbacks) { 1035 TEST_P(RtpSenderTest, BitrateCallbacks) {
999 class TestCallback : public BitrateStatisticsObserver { 1036 class TestCallback : public BitrateStatisticsObserver {
1000 public: 1037 public:
1001 TestCallback() 1038 TestCallback()
1002 : BitrateStatisticsObserver(), 1039 : BitrateStatisticsObserver(),
1003 num_calls_(0), 1040 num_calls_(0),
1004 ssrc_(0), 1041 ssrc_(0),
1005 total_bitrate_(0), 1042 total_bitrate_(0),
1006 retransmit_bitrate_(0) {} 1043 retransmit_bitrate_(0) {}
1007 virtual ~TestCallback() {} 1044 virtual ~TestCallback() {}
1008 1045
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 payload_ = kAudioPayload; 1118 payload_ = kAudioPayload;
1082 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, 1119 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr,
1083 nullptr, nullptr, nullptr, nullptr, nullptr, 1120 nullptr, nullptr, nullptr, nullptr, nullptr,
1084 nullptr, nullptr, nullptr, 1121 nullptr, nullptr, nullptr,
1085 &retransmission_rate_limiter_, nullptr)); 1122 &retransmission_rate_limiter_, nullptr));
1086 rtp_sender_->SetSSRC(kSsrc); 1123 rtp_sender_->SetSSRC(kSsrc);
1087 rtp_sender_->SetSequenceNumber(kSeqNum); 1124 rtp_sender_->SetSequenceNumber(kSeqNum);
1088 } 1125 }
1089 }; 1126 };
1090 1127
1091 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { 1128 TEST_P(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) {
1092 class TestCallback : public StreamDataCountersCallback { 1129 class TestCallback : public StreamDataCountersCallback {
1093 public: 1130 public:
1094 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} 1131 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {}
1095 virtual ~TestCallback() {} 1132 virtual ~TestCallback() {}
1096 1133
1097 void DataCountersUpdated(const StreamDataCounters& counters, 1134 void DataCountersUpdated(const StreamDataCounters& counters,
1098 uint32_t ssrc) override { 1135 uint32_t ssrc) override {
1099 ssrc_ = ssrc; 1136 ssrc_ = ssrc;
1100 counters_ = counters; 1137 counters_ = counters;
1101 } 1138 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 sizeof(payload), nullptr, nullptr, nullptr)); 1216 sizeof(payload), nullptr, nullptr, nullptr));
1180 expected.transmitted.payload_bytes = 40; 1217 expected.transmitted.payload_bytes = 40;
1181 expected.transmitted.header_bytes = 60; 1218 expected.transmitted.header_bytes = 60;
1182 expected.transmitted.packets = 5; 1219 expected.transmitted.packets = 5;
1183 expected.fec.packets = 1; 1220 expected.fec.packets = 1;
1184 callback.Matches(ssrc, expected); 1221 callback.Matches(ssrc, expected);
1185 1222
1186 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); 1223 rtp_sender_->RegisterRtpStatisticsCallback(nullptr);
1187 } 1224 }
1188 1225
1189 TEST_F(RtpSenderAudioTest, SendAudio) { 1226 TEST_P(RtpSenderAudioTest, SendAudio) {
1190 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1227 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1191 const uint8_t payload_type = 127; 1228 const uint8_t payload_type = 127;
1192 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1229 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1193 0, 1500)); 1230 0, 1500));
1194 uint8_t payload[] = {47, 11, 32, 93, 89}; 1231 uint8_t payload[] = {47, 11, 32, 93, 89};
1195 1232
1196 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1233 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1197 kAudioFrameCN, payload_type, 1234, 4321, payload, 1234 kAudioFrameCN, payload_type, 1234, 4321, payload,
1198 sizeof(payload), nullptr, nullptr, nullptr)); 1235 sizeof(payload), nullptr, nullptr, nullptr));
1199 1236
1200 auto sent_payload = transport_.last_sent_packet().payload(); 1237 auto sent_payload = transport_.last_sent_packet().payload();
1201 EXPECT_THAT(sent_payload, ElementsAreArray(payload)); 1238 EXPECT_THAT(sent_payload, ElementsAreArray(payload));
1202 } 1239 }
1203 1240
1204 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { 1241 TEST_P(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) {
1205 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); 1242 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel));
1206 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, 1243 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
1207 kAudioLevelExtensionId)); 1244 kAudioLevelExtensionId));
1208 1245
1209 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1246 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1210 const uint8_t payload_type = 127; 1247 const uint8_t payload_type = 127;
1211 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1248 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1212 0, 1500)); 1249 0, 1500));
1213 uint8_t payload[] = {47, 11, 32, 93, 89}; 1250 uint8_t payload[] = {47, 11, 32, 93, 89};
1214 1251
(...skipping 11 matching lines...) Expand all
1226 EXPECT_EQ(kAudioLevel, audio_level); 1263 EXPECT_EQ(kAudioLevel, audio_level);
1227 EXPECT_FALSE(voice_activity); 1264 EXPECT_FALSE(voice_activity);
1228 } 1265 }
1229 1266
1230 // As RFC4733, named telephone events are carried as part of the audio stream 1267 // As RFC4733, named telephone events are carried as part of the audio stream
1231 // and must use the same sequence number and timestamp base as the regular 1268 // and must use the same sequence number and timestamp base as the regular
1232 // audio channel. 1269 // audio channel.
1233 // This test checks the marker bit for the first packet and the consequent 1270 // This test checks the marker bit for the first packet and the consequent
1234 // packets of the same telephone event. Since it is specifically for DTMF 1271 // packets of the same telephone event. Since it is specifically for DTMF
1235 // events, ignoring audio packets and sending kEmptyFrame instead of those. 1272 // events, ignoring audio packets and sending kEmptyFrame instead of those.
1236 TEST_F(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) { 1273 TEST_P(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) {
1237 const char* kDtmfPayloadName = "telephone-event"; 1274 const char* kDtmfPayloadName = "telephone-event";
1238 const uint32_t kPayloadFrequency = 8000; 1275 const uint32_t kPayloadFrequency = 8000;
1239 const uint8_t kPayloadType = 126; 1276 const uint8_t kPayloadType = 126;
1240 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kDtmfPayloadName, kPayloadType, 1277 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kDtmfPayloadName, kPayloadType,
1241 kPayloadFrequency, 0, 0)); 1278 kPayloadFrequency, 0, 0));
1242 // 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,
1243 // it will register only the payload used for audio stream. 1280 // it will register only the payload used for audio stream.
1244 // Registering the payload again for audio stream with different payload name. 1281 // Registering the payload again for audio stream with different payload name.
1245 const char* kPayloadName = "payload_name"; 1282 const char* kPayloadName = "payload_name";
1246 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 1283 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType,
(...skipping 17 matching lines...) Expand all
1264 // Marker Bit should be set to 1 for first packet. 1301 // Marker Bit should be set to 1 for first packet.
1265 EXPECT_TRUE(transport_.last_sent_packet().Marker()); 1302 EXPECT_TRUE(transport_.last_sent_packet().Marker());
1266 1303
1267 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1304 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1268 kEmptyFrame, kPayloadType, capture_time_ms + 4000, 0, 1305 kEmptyFrame, kPayloadType, capture_time_ms + 4000, 0,
1269 nullptr, 0, nullptr, nullptr, nullptr)); 1306 nullptr, 0, nullptr, nullptr, nullptr));
1270 // Marker Bit should be set to 0 for rest of the packets. 1307 // Marker Bit should be set to 0 for rest of the packets.
1271 EXPECT_FALSE(transport_.last_sent_packet().Marker()); 1308 EXPECT_FALSE(transport_.last_sent_packet().Marker());
1272 } 1309 }
1273 1310
1274 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { 1311 TEST_P(RtpSenderTestWithoutPacer, BytesReportedCorrectly) {
1275 const char* kPayloadName = "GENERIC"; 1312 const char* kPayloadName = "GENERIC";
1276 const uint8_t kPayloadType = 127; 1313 const uint8_t kPayloadType = 127;
1277 rtp_sender_->SetSSRC(1234); 1314 rtp_sender_->SetSSRC(1234);
1278 rtp_sender_->SetRtxSsrc(4321); 1315 rtp_sender_->SetRtxSsrc(4321);
1279 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); 1316 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType);
1280 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); 1317 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
1281 1318
1282 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, 1319 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000,
1283 0, 1500)); 1320 0, 1500));
1284 uint8_t payload[] = {47, 11, 32, 93, 89}; 1321 uint8_t payload[] = {47, 11, 32, 93, 89};
(...skipping 26 matching lines...) Expand all
1311 EXPECT_EQ(rtx_stats.transmitted.TotalBytes(), 1348 EXPECT_EQ(rtx_stats.transmitted.TotalBytes(),
1312 rtx_stats.transmitted.payload_bytes + 1349 rtx_stats.transmitted.payload_bytes +
1313 rtx_stats.transmitted.header_bytes + 1350 rtx_stats.transmitted.header_bytes +
1314 rtx_stats.transmitted.padding_bytes); 1351 rtx_stats.transmitted.padding_bytes);
1315 1352
1316 EXPECT_EQ( 1353 EXPECT_EQ(
1317 transport_.total_bytes_sent_, 1354 transport_.total_bytes_sent_,
1318 rtp_stats.transmitted.TotalBytes() + rtx_stats.transmitted.TotalBytes()); 1355 rtp_stats.transmitted.TotalBytes() + rtx_stats.transmitted.TotalBytes());
1319 } 1356 }
1320 1357
1321 TEST_F(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) { 1358 TEST_P(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) {
1322 const int32_t kPacketSize = 1400; 1359 const int32_t kPacketSize = 1400;
1323 const int32_t kNumPackets = 30; 1360 const int32_t kNumPackets = 30;
1324 1361
1325 retransmission_rate_limiter_.SetMaxRate(kPacketSize * kNumPackets * 8); 1362 retransmission_rate_limiter_.SetMaxRate(kPacketSize * kNumPackets * 8);
1326 1363
1327 rtp_sender_->SetStorePacketsStatus(true, kNumPackets); 1364 rtp_sender_->SetStorePacketsStatus(true, kNumPackets);
1328 const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber(); 1365 const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber();
1329 std::vector<uint16_t> sequence_numbers; 1366 std::vector<uint16_t> sequence_numbers;
1330 for (int32_t i = 0; i < kNumPackets; ++i) { 1367 for (int32_t i = 0; i < kNumPackets; ++i) {
1331 sequence_numbers.push_back(kStartSequenceNumber + i); 1368 sequence_numbers.push_back(kStartSequenceNumber + i);
(...skipping 11 matching lines...) Expand all
1343 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent()); 1380 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent());
1344 1381
1345 // Must be at least 5ms in between retransmission attempts. 1382 // Must be at least 5ms in between retransmission attempts.
1346 fake_clock_.AdvanceTimeMilliseconds(5); 1383 fake_clock_.AdvanceTimeMilliseconds(5);
1347 1384
1348 // Resending should not work, bandwidth exceeded. 1385 // Resending should not work, bandwidth exceeded.
1349 rtp_sender_->OnReceivedNack(sequence_numbers, 0); 1386 rtp_sender_->OnReceivedNack(sequence_numbers, 0);
1350 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent()); 1387 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent());
1351 } 1388 }
1352 1389
1353 TEST_F(RtpSenderVideoTest, KeyFrameHasCVO) { 1390 TEST_P(RtpSenderVideoTest, KeyFrameHasCVO) {
1354 uint8_t kFrame[kMaxPacketLength]; 1391 uint8_t kFrame[kMaxPacketLength];
1355 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1392 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1356 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1393 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1357 1394
1358 RTPVideoHeader hdr = {0}; 1395 RTPVideoHeader hdr = {0};
1359 hdr.rotation = kVideoRotation_0; 1396 hdr.rotation = kVideoRotation_0;
1360 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, 1397 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1361 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr, 1398 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr,
1362 &hdr); 1399 &hdr);
1363 1400
1364 VideoRotation rotation; 1401 VideoRotation rotation;
1365 EXPECT_TRUE( 1402 EXPECT_TRUE(
1366 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); 1403 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation));
1367 EXPECT_EQ(kVideoRotation_0, rotation); 1404 EXPECT_EQ(kVideoRotation_0, rotation);
1368 } 1405 }
1369 1406
1370 TEST_F(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) { 1407 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) {
1371 uint8_t kFrame[kMaxPacketLength]; 1408 uint8_t kFrame[kMaxPacketLength];
1372 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1409 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1373 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1410 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1374 1411
1375 RTPVideoHeader hdr = {0}; 1412 RTPVideoHeader hdr = {0};
1376 hdr.rotation = kVideoRotation_90; 1413 hdr.rotation = kVideoRotation_90;
1377 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, 1414 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey,
1378 kPayload, kTimestamp, 0, kFrame, 1415 kPayload, kTimestamp, 0, kFrame,
1379 sizeof(kFrame), nullptr, &hdr)); 1416 sizeof(kFrame), nullptr, &hdr));
1380 1417
1381 hdr.rotation = kVideoRotation_0; 1418 hdr.rotation = kVideoRotation_0;
1382 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameDelta, 1419 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameDelta,
1383 kPayload, kTimestamp + 1, 0, kFrame, 1420 kPayload, kTimestamp + 1, 0, kFrame,
1384 sizeof(kFrame), nullptr, &hdr)); 1421 sizeof(kFrame), nullptr, &hdr));
1385 1422
1386 VideoRotation rotation; 1423 VideoRotation rotation;
1387 EXPECT_TRUE( 1424 EXPECT_TRUE(
1388 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); 1425 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation));
1389 EXPECT_EQ(kVideoRotation_0, rotation); 1426 EXPECT_EQ(kVideoRotation_0, rotation);
1390 } 1427 }
1391 1428
1392 TEST_F(RtpSenderVideoTest, DeltaFrameHasCVOWhenNonZero) { 1429 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenNonZero) {
1393 uint8_t kFrame[kMaxPacketLength]; 1430 uint8_t kFrame[kMaxPacketLength];
1394 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1431 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1395 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1432 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1396 1433
1397 RTPVideoHeader hdr = {0}; 1434 RTPVideoHeader hdr = {0};
1398 hdr.rotation = kVideoRotation_90; 1435 hdr.rotation = kVideoRotation_90;
1399 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, 1436 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey,
1400 kPayload, kTimestamp, 0, kFrame, 1437 kPayload, kTimestamp, 0, kFrame,
1401 sizeof(kFrame), nullptr, &hdr)); 1438 sizeof(kFrame), nullptr, &hdr));
1402 1439
1403 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameDelta, 1440 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameDelta,
1404 kPayload, kTimestamp + 1, 0, kFrame, 1441 kPayload, kTimestamp + 1, 0, kFrame,
1405 sizeof(kFrame), nullptr, &hdr)); 1442 sizeof(kFrame), nullptr, &hdr));
1406 1443
1407 VideoRotation rotation; 1444 VideoRotation rotation;
1408 EXPECT_TRUE( 1445 EXPECT_TRUE(
1409 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); 1446 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation));
1410 EXPECT_EQ(kVideoRotation_90, rotation); 1447 EXPECT_EQ(kVideoRotation_90, rotation);
1411 } 1448 }
1412 1449
1413 // Make sure rotation is parsed correctly when the Camera (C) and Flip (F) bits 1450 // Make sure rotation is parsed correctly when the Camera (C) and Flip (F) bits
1414 // are set in the CVO byte. 1451 // are set in the CVO byte.
1415 TEST_F(RtpSenderVideoTest, SendVideoWithCameraAndFlipCVO) { 1452 TEST_P(RtpSenderVideoTest, SendVideoWithCameraAndFlipCVO) {
1416 // Test extracting rotation when Camera (C) and Flip (F) bits are zero. 1453 // Test extracting rotation when Camera (C) and Flip (F) bits are zero.
1417 EXPECT_EQ(kVideoRotation_0, ConvertCVOByteToVideoRotation(0)); 1454 EXPECT_EQ(kVideoRotation_0, ConvertCVOByteToVideoRotation(0));
1418 EXPECT_EQ(kVideoRotation_90, ConvertCVOByteToVideoRotation(1)); 1455 EXPECT_EQ(kVideoRotation_90, ConvertCVOByteToVideoRotation(1));
1419 EXPECT_EQ(kVideoRotation_180, ConvertCVOByteToVideoRotation(2)); 1456 EXPECT_EQ(kVideoRotation_180, ConvertCVOByteToVideoRotation(2));
1420 EXPECT_EQ(kVideoRotation_270, ConvertCVOByteToVideoRotation(3)); 1457 EXPECT_EQ(kVideoRotation_270, ConvertCVOByteToVideoRotation(3));
1421 // Test extracting rotation when Camera (C) and Flip (F) bits are set. 1458 // Test extracting rotation when Camera (C) and Flip (F) bits are set.
1422 const int flip_bit = 1 << 2; 1459 const int flip_bit = 1 << 2;
1423 const int camera_bit = 1 << 3; 1460 const int camera_bit = 1 << 3;
1424 EXPECT_EQ(kVideoRotation_0, 1461 EXPECT_EQ(kVideoRotation_0,
1425 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); 1462 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0));
1426 EXPECT_EQ(kVideoRotation_90, 1463 EXPECT_EQ(kVideoRotation_90,
1427 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); 1464 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1));
1428 EXPECT_EQ(kVideoRotation_180, 1465 EXPECT_EQ(kVideoRotation_180,
1429 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); 1466 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2));
1430 EXPECT_EQ(kVideoRotation_270, 1467 EXPECT_EQ(kVideoRotation_270,
1431 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); 1468 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3));
1432 } 1469 }
1433 1470
1434 namespace { 1471 TEST_P(RtpSenderTest, OnOverheadChanged) {
1435 class MockOverheadObserver : public OverheadObserver {
danilchap 2017/03/29 10:49:11 you already have this Mock defined above.
minyue-webrtc 2017/03/29 12:00:39 I think I just moved it above
danilchap 2017/03/29 12:40:59 oops, sorry, got confused between 'old code' and '
minyue-webrtc 2017/04/03 07:12:52 NP, I sometimes get the exactly same confusion.
1436 public:
1437 MOCK_METHOD1(OnOverheadChanged, void(size_t overhead_bytes_per_packet));
1438 };
1439 } // namespace
1440
1441 TEST_F(RtpSenderTest, OnOverheadChanged) {
1442 MockOverheadObserver mock_overhead_observer; 1472 MockOverheadObserver mock_overhead_observer;
1443 rtp_sender_.reset( 1473 rtp_sender_.reset(
1444 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, 1474 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr,
1445 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, 1475 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1446 &retransmission_rate_limiter_, &mock_overhead_observer)); 1476 &retransmission_rate_limiter_, &mock_overhead_observer));
1447 rtp_sender_->SetSSRC(kSsrc); 1477 rtp_sender_->SetSSRC(kSsrc);
1448 1478
1449 // RTP overhead is 12B. 1479 // RTP overhead is 12B.
1450 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(12)).Times(1); 1480 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(12)).Times(1);
1451 SendGenericPayload(); 1481 SendGenericPayload();
1452 1482
1453 rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, 1483 rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,
1454 kTransmissionTimeOffsetExtensionId); 1484 kTransmissionTimeOffsetExtensionId);
1455 1485
1456 // TransmissionTimeOffset extension has a size of 8B. 1486 // TransmissionTimeOffset extension has a size of 8B.
1457 // 12B + 8B = 20B 1487 // 12B + 8B = 20B
1458 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(20)).Times(1); 1488 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(20)).Times(1);
1459 SendGenericPayload(); 1489 SendGenericPayload();
1460 } 1490 }
1461 1491
1462 TEST_F(RtpSenderTest, DoesNotUpdateOverheadOnEqualSize) { 1492 TEST_P(RtpSenderTest, DoesNotUpdateOverheadOnEqualSize) {
1463 MockOverheadObserver mock_overhead_observer; 1493 MockOverheadObserver mock_overhead_observer;
1464 rtp_sender_.reset( 1494 rtp_sender_.reset(
1465 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, 1495 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr,
1466 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, 1496 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1467 &retransmission_rate_limiter_, &mock_overhead_observer)); 1497 &retransmission_rate_limiter_, &mock_overhead_observer));
1468 rtp_sender_->SetSSRC(kSsrc); 1498 rtp_sender_->SetSSRC(kSsrc);
1469 1499
1470 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(_)).Times(1); 1500 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(_)).Times(1);
1471 SendGenericPayload(); 1501 SendGenericPayload();
1472 SendGenericPayload(); 1502 SendGenericPayload();
1473 } 1503 }
1474 1504
1475 TEST_F(RtpSenderTest, AddOverheadToTransportFeedbackObserver) { 1505 TEST_P(RtpSenderTest, SendAudioPadding) {
1476 constexpr int kRtpOverheadBytesPerPacket = 12 + 8;
1477 test::ScopedFieldTrials override_field_trials(
1478 "WebRTC-SendSideBwe-WithOverhead/Enabled/");
1479 testing::NiceMock<MockOverheadObserver> mock_overhead_observer;
1480 rtp_sender_.reset(new RTPSender(
1481 false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_,
1482 &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_,
1483 nullptr, &retransmission_rate_limiter_, &mock_overhead_observer));
1484 rtp_sender_->SetSSRC(kSsrc);
1485 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1486 kRtpExtensionTransportSequenceNumber,
1487 kTransportSequenceNumberExtensionId));
1488 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
1489 .WillOnce(testing::Return(kTransportSequenceNumber));
1490 EXPECT_CALL(feedback_observer_,
1491 AddPacket(rtp_sender_->SSRC(), kTransportSequenceNumber,
1492 sizeof(kPayloadData) + kGenericHeaderLength +
1493 kRtpOverheadBytesPerPacket,
1494 PacedPacketInfo()))
1495 .Times(1);
1496 EXPECT_CALL(mock_overhead_observer,
1497 OnOverheadChanged(kRtpOverheadBytesPerPacket))
1498 .Times(1);
1499 SendGenericPayload();
1500 }
1501
1502 TEST_F(RtpSenderTest, SendAudioPadding) {
1503 MockTransport transport; 1506 MockTransport transport;
1504 const bool kEnableAudio = true; 1507 const bool kEnableAudio = true;
1505 rtp_sender_.reset(new RTPSender( 1508 rtp_sender_.reset(new RTPSender(
1506 kEnableAudio, &fake_clock_, &transport, &mock_paced_sender_, nullptr, 1509 kEnableAudio, &fake_clock_, &transport, &mock_paced_sender_, nullptr,
1507 nullptr, nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, 1510 nullptr, nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_,
1508 nullptr, &retransmission_rate_limiter_, nullptr)); 1511 nullptr, &retransmission_rate_limiter_, nullptr));
1509 rtp_sender_->SetSendPayloadType(kPayload); 1512 rtp_sender_->SetSendPayloadType(kPayload);
1510 rtp_sender_->SetSequenceNumber(kSeqNum); 1513 rtp_sender_->SetSequenceNumber(kSeqNum);
1511 rtp_sender_->SetTimestampOffset(0); 1514 rtp_sender_->SetTimestampOffset(0);
1512 rtp_sender_->SetSSRC(kSsrc); 1515 rtp_sender_->SetSSRC(kSsrc);
1513 1516
1514 const size_t kPaddingSize = 59; 1517 const size_t kPaddingSize = 59;
1515 EXPECT_CALL(transport, SendRtp(_, kPaddingSize + kRtpHeaderSize, _)) 1518 EXPECT_CALL(transport, SendRtp(_, kPaddingSize + kRtpHeaderSize, _))
1516 .WillOnce(testing::Return(true)); 1519 .WillOnce(testing::Return(true));
1517 EXPECT_EQ(kPaddingSize, 1520 EXPECT_EQ(kPaddingSize,
1518 rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo())); 1521 rtp_sender_->TimeToSendPadding(kPaddingSize, PacedPacketInfo()));
1519 1522
1520 // Requested padding size is too small, will send a larger one. 1523 // Requested padding size is too small, will send a larger one.
1521 const size_t kMinPaddingSize = 50; 1524 const size_t kMinPaddingSize = 50;
1522 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _)) 1525 EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _))
1523 .WillOnce(testing::Return(true)); 1526 .WillOnce(testing::Return(true));
1524 EXPECT_EQ( 1527 EXPECT_EQ(
1525 kMinPaddingSize, 1528 kMinPaddingSize,
1526 rtp_sender_->TimeToSendPadding(kMinPaddingSize - 5, PacedPacketInfo())); 1529 rtp_sender_->TimeToSendPadding(kMinPaddingSize - 5, PacedPacketInfo()));
1527 } 1530 }
1531
1532 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1533 RtpSenderTest,
1534 ::testing::Bool());
1535 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1536 RtpSenderTestWithoutPacer,
1537 ::testing::Bool());
1538 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1539 RtpSenderVideoTest,
1540 ::testing::Bool());
1541 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1542 RtpSenderAudioTest,
1543 ::testing::Bool());
1528 } // namespace webrtc 1544 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698