OLD | NEW |
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 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 EXPECT_EQ(payload_, rtp_header.payloadType); | 178 EXPECT_EQ(payload_, rtp_header.payloadType); |
179 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber); | 179 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber); |
180 EXPECT_EQ(kTimestamp, rtp_header.timestamp); | 180 EXPECT_EQ(kTimestamp, rtp_header.timestamp); |
181 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); | 181 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); |
182 EXPECT_EQ(number_of_csrcs, rtp_header.numCSRCs); | 182 EXPECT_EQ(number_of_csrcs, rtp_header.numCSRCs); |
183 EXPECT_EQ(0U, rtp_header.paddingLength); | 183 EXPECT_EQ(0U, rtp_header.paddingLength); |
184 } | 184 } |
185 | 185 |
186 void SendPacket(int64_t capture_time_ms, int payload_length) { | 186 void SendPacket(int64_t capture_time_ms, int payload_length) { |
187 uint32_t timestamp = capture_time_ms * 90; | 187 uint32_t timestamp = capture_time_ms * 90; |
188 int32_t rtp_length = rtp_sender_->BuildRTPheader( | 188 int32_t rtp_length = rtp_sender_->BuildRtpHeader( |
189 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 189 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
190 ASSERT_GE(rtp_length, 0); | 190 ASSERT_GE(rtp_length, 0); |
191 | 191 |
192 // Packet should be stored in a send bucket. | 192 // Packet should be stored in a send bucket. |
193 EXPECT_EQ(0, rtp_sender_->SendToNetwork( | 193 EXPECT_EQ(0, rtp_sender_->SendToNetwork( |
194 packet_, payload_length, rtp_length, capture_time_ms, | 194 packet_, payload_length, rtp_length, capture_time_ms, |
195 kAllowRetransmission, RtpPacketSender::kNormalPriority)); | 195 kAllowRetransmission, RtpPacketSender::kNormalPriority)); |
196 } | 196 } |
197 | 197 |
198 void SendGenericPayload() { | 198 void SendGenericPayload() { |
199 const uint8_t kPayload[] = {47, 11, 32, 93, 89}; | 199 const uint8_t kPayload[] = {47, 11, 32, 93, 89}; |
200 const uint32_t kTimestamp = 1234; | 200 const uint32_t kTimestamp = 1234; |
201 const uint8_t kPayloadType = 127; | 201 const uint8_t kPayloadType = 127; |
202 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); | 202 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); |
203 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 203 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
204 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, | 204 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, |
205 0, 1500)); | 205 0, 1500)); |
206 | 206 |
207 EXPECT_EQ(0, rtp_sender_->SendOutgoingData( | 207 EXPECT_EQ(0, rtp_sender_->SendOutgoingData( |
208 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, | 208 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, |
209 kPayload, sizeof(kPayload), nullptr)); | 209 kPayload, sizeof(kPayload), nullptr, nullptr)); |
210 } | 210 } |
211 }; | 211 }; |
212 | 212 |
213 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our | 213 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our |
214 // default code path. | 214 // default code path. |
215 class RtpSenderTestWithoutPacer : public RtpSenderTest { | 215 class RtpSenderTestWithoutPacer : public RtpSenderTest { |
216 public: | 216 public: |
217 void SetUp() override { SetUpRtpSender(false); } | 217 void SetUp() override { SetUpRtpSender(false); } |
218 }; | 218 }; |
219 | 219 |
220 class RtpSenderVideoTest : public RtpSenderTest { | 220 class RtpSenderVideoTest : public RtpSenderTest { |
221 protected: | 221 protected: |
222 void SetUp() override { | 222 void SetUp() override { |
223 // TODO(pbos): Set up to use pacer. | 223 // TODO(pbos): Set up to use pacer. |
224 SetUpRtpSender(false); | 224 SetUpRtpSender(false); |
225 rtp_sender_video_.reset( | 225 rtp_sender_video_.reset( |
226 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); | 226 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); |
227 } | 227 } |
228 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; | 228 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; |
229 | 229 |
230 void VerifyCVOPacket(uint8_t* data, | 230 void VerifyCVOPacket(uint8_t* data, |
231 size_t len, | 231 size_t len, |
232 bool expect_cvo, | 232 bool expect_cvo, |
233 RtpHeaderExtensionMap* map, | 233 RtpHeaderExtensionMap* map, |
234 uint16_t seq_num, | 234 uint16_t seq_num, |
235 VideoRotation rotation) { | 235 VideoRotation rotation) { |
236 webrtc::RtpUtility::RtpHeaderParser rtp_parser(data, len); | 236 webrtc::RtpUtility::RtpHeaderParser rtp_parser(data, len); |
237 | 237 |
238 webrtc::RTPHeader rtp_header; | 238 webrtc::RTPHeader rtp_header; |
239 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 239 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
240 packet_, kPayload, expect_cvo /* marker_bit */, kTimestamp, 0)); | 240 packet_, kPayload, expect_cvo /* marker_bit */, kTimestamp, 0)); |
241 if (expect_cvo) { | 241 if (expect_cvo) { |
242 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), | 242 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), |
243 length); | 243 length); |
244 } else { | 244 } else { |
245 ASSERT_EQ(kRtpHeaderSize, length); | 245 ASSERT_EQ(kRtpHeaderSize, length); |
246 } | 246 } |
247 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, map)); | 247 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, map)); |
248 ASSERT_FALSE(rtp_parser.RTCP()); | 248 ASSERT_FALSE(rtp_parser.RTCP()); |
249 EXPECT_EQ(payload_, rtp_header.payloadType); | 249 EXPECT_EQ(payload_, rtp_header.payloadType); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); | 356 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); |
357 EXPECT_EQ( | 357 EXPECT_EQ( |
358 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), | 358 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), |
359 rtp_sender_->RtpHeaderExtensionLength()); | 359 rtp_sender_->RtpHeaderExtensionLength()); |
360 EXPECT_EQ( | 360 EXPECT_EQ( |
361 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation)); | 361 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation)); |
362 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); | 362 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); |
363 } | 363 } |
364 | 364 |
365 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) { | 365 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) { |
366 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 366 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
367 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 367 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
368 ASSERT_EQ(kRtpHeaderSize, length); | 368 ASSERT_EQ(kRtpHeaderSize, length); |
369 | 369 |
370 // Verify | 370 // Verify |
371 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 371 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
372 webrtc::RTPHeader rtp_header; | 372 webrtc::RTPHeader rtp_header; |
373 | 373 |
374 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, nullptr); | 374 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, nullptr); |
375 | 375 |
376 ASSERT_TRUE(valid_rtp_header); | 376 ASSERT_TRUE(valid_rtp_header); |
(...skipping 10 matching lines...) Expand all Loading... |
387 EXPECT_EQ(0u, rtp_header.extension.videoRotation); | 387 EXPECT_EQ(0u, rtp_header.extension.videoRotation); |
388 } | 388 } |
389 | 389 |
390 TEST_F(RtpSenderTestWithoutPacer, | 390 TEST_F(RtpSenderTestWithoutPacer, |
391 BuildRTPPacketWithTransmissionOffsetExtension) { | 391 BuildRTPPacketWithTransmissionOffsetExtension) { |
392 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); | 392 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset)); |
393 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 393 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
394 kRtpExtensionTransmissionTimeOffset, | 394 kRtpExtensionTransmissionTimeOffset, |
395 kTransmissionTimeOffsetExtensionId)); | 395 kTransmissionTimeOffsetExtensionId)); |
396 | 396 |
397 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 397 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
398 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 398 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
399 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 399 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
400 | 400 |
401 // Verify | 401 // Verify |
402 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 402 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
403 webrtc::RTPHeader rtp_header; | 403 webrtc::RTPHeader rtp_header; |
404 | 404 |
405 RtpHeaderExtensionMap map; | 405 RtpHeaderExtensionMap map; |
406 map.Register(kRtpExtensionTransmissionTimeOffset, | 406 map.Register(kRtpExtensionTransmissionTimeOffset, |
407 kTransmissionTimeOffsetExtensionId); | 407 kTransmissionTimeOffsetExtensionId); |
(...skipping 18 matching lines...) Expand all Loading... |
426 } | 426 } |
427 | 427 |
428 TEST_F(RtpSenderTestWithoutPacer, | 428 TEST_F(RtpSenderTestWithoutPacer, |
429 BuildRTPPacketWithNegativeTransmissionOffsetExtension) { | 429 BuildRTPPacketWithNegativeTransmissionOffsetExtension) { |
430 const int kNegTimeOffset = -500; | 430 const int kNegTimeOffset = -500; |
431 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset)); | 431 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset)); |
432 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 432 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
433 kRtpExtensionTransmissionTimeOffset, | 433 kRtpExtensionTransmissionTimeOffset, |
434 kTransmissionTimeOffsetExtensionId)); | 434 kTransmissionTimeOffsetExtensionId)); |
435 | 435 |
436 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 436 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
437 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 437 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
438 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 438 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
439 | 439 |
440 // Verify | 440 // Verify |
441 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 441 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
442 webrtc::RTPHeader rtp_header; | 442 webrtc::RTPHeader rtp_header; |
443 | 443 |
444 RtpHeaderExtensionMap map; | 444 RtpHeaderExtensionMap map; |
445 map.Register(kRtpExtensionTransmissionTimeOffset, | 445 map.Register(kRtpExtensionTransmissionTimeOffset, |
446 kTransmissionTimeOffsetExtensionId); | 446 kTransmissionTimeOffsetExtensionId); |
447 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); | 447 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); |
448 | 448 |
449 ASSERT_TRUE(valid_rtp_header); | 449 ASSERT_TRUE(valid_rtp_header); |
450 ASSERT_FALSE(rtp_parser.RTCP()); | 450 ASSERT_FALSE(rtp_parser.RTCP()); |
451 VerifyRTPHeaderCommon(rtp_header); | 451 VerifyRTPHeaderCommon(rtp_header); |
452 EXPECT_EQ(length, rtp_header.headerLength); | 452 EXPECT_EQ(length, rtp_header.headerLength); |
453 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); | 453 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); |
454 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset); | 454 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset); |
455 } | 455 } |
456 | 456 |
457 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) { | 457 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) { |
458 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime)); | 458 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime)); |
459 EXPECT_EQ( | 459 EXPECT_EQ( |
460 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 460 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
461 kAbsoluteSendTimeExtensionId)); | 461 kAbsoluteSendTimeExtensionId)); |
462 | 462 |
463 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 463 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
464 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 464 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
465 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 465 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
466 | 466 |
467 // Verify | 467 // Verify |
468 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 468 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
469 webrtc::RTPHeader rtp_header; | 469 webrtc::RTPHeader rtp_header; |
470 | 470 |
471 RtpHeaderExtensionMap map; | 471 RtpHeaderExtensionMap map; |
472 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); | 472 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); |
473 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); | 473 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) { | 538 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) { |
539 rtp_sender_->SetVideoRotation(kRotation); | 539 rtp_sender_->SetVideoRotation(kRotation); |
540 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 540 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
541 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 541 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
542 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); | 542 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); |
543 | 543 |
544 RtpHeaderExtensionMap map; | 544 RtpHeaderExtensionMap map; |
545 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); | 545 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); |
546 | 546 |
547 size_t length = static_cast<size_t>( | 547 size_t length = static_cast<size_t>( |
548 rtp_sender_->BuildRTPheader(packet_, kPayload, true, kTimestamp, 0)); | 548 rtp_sender_->BuildRtpHeader(packet_, kPayload, true, kTimestamp, 0)); |
549 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 549 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
550 | 550 |
551 // Verify | 551 // Verify |
552 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 552 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
553 webrtc::RTPHeader rtp_header; | 553 webrtc::RTPHeader rtp_header; |
554 | 554 |
555 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map)); | 555 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map)); |
556 ASSERT_FALSE(rtp_parser.RTCP()); | 556 ASSERT_FALSE(rtp_parser.RTCP()); |
557 VerifyRTPHeaderCommon(rtp_header); | 557 VerifyRTPHeaderCommon(rtp_header); |
558 EXPECT_EQ(length, rtp_header.headerLength); | 558 EXPECT_EQ(length, rtp_header.headerLength); |
559 EXPECT_TRUE(rtp_header.extension.hasVideoRotation); | 559 EXPECT_TRUE(rtp_header.extension.hasVideoRotation); |
560 EXPECT_EQ(ConvertVideoRotationToCVOByte(kRotation), | 560 EXPECT_EQ(ConvertVideoRotationToCVOByte(kRotation), |
561 rtp_header.extension.videoRotation); | 561 rtp_header.extension.videoRotation); |
562 } | 562 } |
563 | 563 |
564 // Test CVO header extension is not set when marker bit is false. | 564 // Test CVO header extension is not set when marker bit is false. |
565 TEST_F(RtpSenderTestWithoutPacer, | 565 TEST_F(RtpSenderTestWithoutPacer, |
566 DISABLED_BuildRTPPacketWithVideoRotation_NoMarkerBit) { | 566 DISABLED_BuildRTPPacketWithVideoRotation_NoMarkerBit) { |
567 rtp_sender_->SetVideoRotation(kRotation); | 567 rtp_sender_->SetVideoRotation(kRotation); |
568 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 568 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
569 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 569 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
570 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); | 570 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); |
571 | 571 |
572 RtpHeaderExtensionMap map; | 572 RtpHeaderExtensionMap map; |
573 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); | 573 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); |
574 | 574 |
575 size_t length = static_cast<size_t>( | 575 size_t length = static_cast<size_t>( |
576 rtp_sender_->BuildRTPheader(packet_, kPayload, false, kTimestamp, 0)); | 576 rtp_sender_->BuildRtpHeader(packet_, kPayload, false, kTimestamp, 0)); |
577 ASSERT_EQ(kRtpHeaderSize, length); | 577 ASSERT_EQ(kRtpHeaderSize, length); |
578 | 578 |
579 // Verify | 579 // Verify |
580 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 580 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
581 webrtc::RTPHeader rtp_header; | 581 webrtc::RTPHeader rtp_header; |
582 | 582 |
583 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map)); | 583 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map)); |
584 ASSERT_FALSE(rtp_parser.RTCP()); | 584 ASSERT_FALSE(rtp_parser.RTCP()); |
585 VerifyRTPHeaderCommon(rtp_header, false); | 585 VerifyRTPHeaderCommon(rtp_header, false); |
586 EXPECT_EQ(length, rtp_header.headerLength); | 586 EXPECT_EQ(length, rtp_header.headerLength); |
587 EXPECT_FALSE(rtp_header.extension.hasVideoRotation); | 587 EXPECT_FALSE(rtp_header.extension.hasVideoRotation); |
588 } | 588 } |
589 | 589 |
590 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) { | 590 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) { |
591 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 591 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
592 kAudioLevelExtensionId)); | 592 kAudioLevelExtensionId)); |
593 | 593 |
594 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 594 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
595 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 595 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
596 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 596 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
597 | 597 |
598 // Verify | 598 // Verify |
599 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 599 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
600 webrtc::RTPHeader rtp_header; | 600 webrtc::RTPHeader rtp_header; |
601 | 601 |
602 // Updating audio level is done in RTPSenderAudio, so simulate it here. | 602 // Updating audio level is done in RTPSenderAudio, so simulate it here. |
603 rtp_parser.Parse(&rtp_header); | 603 rtp_parser.Parse(&rtp_header); |
604 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel); | 604 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel); |
(...skipping 22 matching lines...) Expand all Loading... |
627 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); | 627 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); |
628 } | 628 } |
629 | 629 |
630 TEST_F(RtpSenderTestWithoutPacer, | 630 TEST_F(RtpSenderTestWithoutPacer, |
631 BuildRTPPacketWithCSRCAndAudioLevelExtension) { | 631 BuildRTPPacketWithCSRCAndAudioLevelExtension) { |
632 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 632 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
633 kAudioLevelExtensionId)); | 633 kAudioLevelExtensionId)); |
634 std::vector<uint32_t> csrcs; | 634 std::vector<uint32_t> csrcs; |
635 csrcs.push_back(0x23456789); | 635 csrcs.push_back(0x23456789); |
636 rtp_sender_->SetCsrcs(csrcs); | 636 rtp_sender_->SetCsrcs(csrcs); |
637 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 637 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
638 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 638 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
639 | 639 |
640 // Verify | 640 // Verify |
641 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 641 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
642 webrtc::RTPHeader rtp_header; | 642 webrtc::RTPHeader rtp_header; |
643 | 643 |
644 // Updating audio level is done in RTPSenderAudio, so simulate it here. | 644 // Updating audio level is done in RTPSenderAudio, so simulate it here. |
645 rtp_parser.Parse(&rtp_header); | 645 rtp_parser.Parse(&rtp_header); |
646 EXPECT_TRUE(rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, | 646 EXPECT_TRUE(rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, |
647 kAudioLevel)); | 647 kAudioLevel)); |
(...skipping 23 matching lines...) Expand all Loading... |
671 kTransmissionTimeOffsetExtensionId)); | 671 kTransmissionTimeOffsetExtensionId)); |
672 EXPECT_EQ( | 672 EXPECT_EQ( |
673 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 673 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
674 kAbsoluteSendTimeExtensionId)); | 674 kAbsoluteSendTimeExtensionId)); |
675 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 675 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
676 kAudioLevelExtensionId)); | 676 kAudioLevelExtensionId)); |
677 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 677 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
678 kRtpExtensionTransportSequenceNumber, | 678 kRtpExtensionTransportSequenceNumber, |
679 kTransportSequenceNumberExtensionId)); | 679 kTransportSequenceNumberExtensionId)); |
680 | 680 |
681 size_t length = static_cast<size_t>(rtp_sender_->BuildRTPheader( | 681 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( |
682 packet_, kPayload, kMarkerBit, kTimestamp, 0)); | 682 packet_, kPayload, kMarkerBit, kTimestamp, 0)); |
683 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); | 683 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); |
684 | 684 |
685 // Verify | 685 // Verify |
686 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); | 686 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); |
687 webrtc::RTPHeader rtp_header; | 687 webrtc::RTPHeader rtp_header; |
688 | 688 |
689 // Updating audio level is done in RTPSenderAudio, so simulate it here. | 689 // Updating audio level is done in RTPSenderAudio, so simulate it here. |
690 rtp_parser.Parse(&rtp_header); | 690 rtp_parser.Parse(&rtp_header); |
691 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel); | 691 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
740 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 740 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
741 | 741 |
742 rtp_sender_->SetStorePacketsStatus(true, 10); | 742 rtp_sender_->SetStorePacketsStatus(true, 10); |
743 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 743 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
744 kRtpExtensionTransmissionTimeOffset, | 744 kRtpExtensionTransmissionTimeOffset, |
745 kTransmissionTimeOffsetExtensionId)); | 745 kTransmissionTimeOffsetExtensionId)); |
746 EXPECT_EQ( | 746 EXPECT_EQ( |
747 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 747 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
748 kAbsoluteSendTimeExtensionId)); | 748 kAbsoluteSendTimeExtensionId)); |
749 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 749 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
750 int rtp_length_int = rtp_sender_->BuildRTPheader( | 750 int rtp_length_int = rtp_sender_->BuildRtpHeader( |
751 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 751 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
752 ASSERT_NE(-1, rtp_length_int); | 752 ASSERT_NE(-1, rtp_length_int); |
753 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 753 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
754 | 754 |
755 // Packet should be stored in a send bucket. | 755 // Packet should be stored in a send bucket. |
756 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 756 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
757 capture_time_ms, kAllowRetransmission, | 757 capture_time_ms, kAllowRetransmission, |
758 RtpPacketSender::kNormalPriority)); | 758 RtpPacketSender::kNormalPriority)); |
759 | 759 |
760 EXPECT_EQ(0, transport_.packets_sent_); | 760 EXPECT_EQ(0, transport_.packets_sent_); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
793 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 793 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
794 | 794 |
795 rtp_sender_->SetStorePacketsStatus(true, 10); | 795 rtp_sender_->SetStorePacketsStatus(true, 10); |
796 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 796 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
797 kRtpExtensionTransmissionTimeOffset, | 797 kRtpExtensionTransmissionTimeOffset, |
798 kTransmissionTimeOffsetExtensionId)); | 798 kTransmissionTimeOffsetExtensionId)); |
799 EXPECT_EQ( | 799 EXPECT_EQ( |
800 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 800 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
801 kAbsoluteSendTimeExtensionId)); | 801 kAbsoluteSendTimeExtensionId)); |
802 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 802 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
803 int rtp_length_int = rtp_sender_->BuildRTPheader( | 803 int rtp_length_int = rtp_sender_->BuildRtpHeader( |
804 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); | 804 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); |
805 ASSERT_NE(-1, rtp_length_int); | 805 ASSERT_NE(-1, rtp_length_int); |
806 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 806 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
807 | 807 |
808 // Packet should be stored in a send bucket. | 808 // Packet should be stored in a send bucket. |
809 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 809 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
810 capture_time_ms, kAllowRetransmission, | 810 capture_time_ms, kAllowRetransmission, |
811 RtpPacketSender::kNormalPriority)); | 811 RtpPacketSender::kNormalPriority)); |
812 | 812 |
813 EXPECT_EQ(0, transport_.packets_sent_); | 813 EXPECT_EQ(0, transport_.packets_sent_); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
874 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( | 874 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( |
875 webrtc::RtpHeaderParser::Create()); | 875 webrtc::RtpHeaderParser::Create()); |
876 ASSERT_TRUE(rtp_parser.get() != nullptr); | 876 ASSERT_TRUE(rtp_parser.get() != nullptr); |
877 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, | 877 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, |
878 kTransmissionTimeOffsetExtensionId); | 878 kTransmissionTimeOffsetExtensionId); |
879 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 879 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
880 kAbsoluteSendTimeExtensionId); | 880 kAbsoluteSendTimeExtensionId); |
881 webrtc::RTPHeader rtp_header; | 881 webrtc::RTPHeader rtp_header; |
882 | 882 |
883 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 883 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
884 int rtp_length_int = rtp_sender_->BuildRTPheader( | 884 int rtp_length_int = rtp_sender_->BuildRtpHeader( |
885 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 885 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
886 const uint32_t media_packet_timestamp = timestamp; | 886 const uint32_t media_packet_timestamp = timestamp; |
887 ASSERT_NE(-1, rtp_length_int); | 887 ASSERT_NE(-1, rtp_length_int); |
888 size_t rtp_length = static_cast<size_t>(rtp_length_int); | 888 size_t rtp_length = static_cast<size_t>(rtp_length_int); |
889 | 889 |
890 // Packet should be stored in a send bucket. | 890 // Packet should be stored in a send bucket. |
891 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 891 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
892 capture_time_ms, kAllowRetransmission, | 892 capture_time_ms, kAllowRetransmission, |
893 RtpPacketSender::kNormalPriority)); | 893 RtpPacketSender::kNormalPriority)); |
894 | 894 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
932 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset); | 932 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset); |
933 uint64_t expected_send_time = | 933 uint64_t expected_send_time = |
934 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 934 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
935 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 935 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
936 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs); | 936 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs); |
937 timestamp += 90 * kPaddingPeriodMs; | 937 timestamp += 90 * kPaddingPeriodMs; |
938 } | 938 } |
939 | 939 |
940 // Send a regular video packet again. | 940 // Send a regular video packet again. |
941 capture_time_ms = fake_clock_.TimeInMilliseconds(); | 941 capture_time_ms = fake_clock_.TimeInMilliseconds(); |
942 rtp_length_int = rtp_sender_->BuildRTPheader(packet_, kPayload, kMarkerBit, | 942 rtp_length_int = rtp_sender_->BuildRtpHeader(packet_, kPayload, kMarkerBit, |
943 timestamp, capture_time_ms); | 943 timestamp, capture_time_ms); |
944 ASSERT_NE(-1, rtp_length_int); | 944 ASSERT_NE(-1, rtp_length_int); |
945 rtp_length = static_cast<size_t>(rtp_length_int); | 945 rtp_length = static_cast<size_t>(rtp_length_int); |
946 | 946 |
947 EXPECT_CALL(mock_paced_sender_, | 947 EXPECT_CALL(mock_paced_sender_, |
948 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); | 948 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); |
949 | 949 |
950 // Packet should be stored in a send bucket. | 950 // Packet should be stored in a send bucket. |
951 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, | 951 EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length, |
952 capture_time_ms, kAllowRetransmission, | 952 capture_time_ms, kAllowRetransmission, |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 } | 1107 } |
1108 | 1108 |
1109 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { | 1109 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { |
1110 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1110 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
1111 const uint8_t payload_type = 127; | 1111 const uint8_t payload_type = 127; |
1112 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1112 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1113 0, 1500)); | 1113 0, 1500)); |
1114 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1114 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1115 | 1115 |
1116 // Send keyframe | 1116 // Send keyframe |
1117 ASSERT_EQ( | 1117 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
1118 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, | 1118 4321, payload, sizeof(payload), |
1119 payload, sizeof(payload), nullptr)); | 1119 nullptr, nullptr)); |
1120 | 1120 |
1121 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1121 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1122 transport_.last_sent_packet_len_); | 1122 transport_.last_sent_packet_len_); |
1123 webrtc::RTPHeader rtp_header; | 1123 webrtc::RTPHeader rtp_header; |
1124 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1124 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1125 | 1125 |
1126 const uint8_t* payload_data = | 1126 const uint8_t* payload_data = |
1127 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1127 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1128 uint8_t generic_header = *payload_data++; | 1128 uint8_t generic_header = *payload_data++; |
1129 | 1129 |
1130 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), | 1130 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), |
1131 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 1131 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
1132 | 1132 |
1133 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 1133 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
1134 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 1134 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
1135 | 1135 |
1136 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 1136 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
1137 | 1137 |
1138 // Send delta frame | 1138 // Send delta frame |
1139 payload[0] = 13; | 1139 payload[0] = 13; |
1140 payload[1] = 42; | 1140 payload[1] = 42; |
1141 payload[4] = 13; | 1141 payload[4] = 13; |
1142 | 1142 |
1143 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, | 1143 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1144 1234, 4321, payload, | 1144 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
1145 sizeof(payload), nullptr)); | 1145 sizeof(payload), nullptr, nullptr)); |
1146 | 1146 |
1147 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, | 1147 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, |
1148 transport_.last_sent_packet_len_); | 1148 transport_.last_sent_packet_len_); |
1149 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1149 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1150 | 1150 |
1151 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1151 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1152 generic_header = *payload_data++; | 1152 generic_header = *payload_data++; |
1153 | 1153 |
1154 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); | 1154 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
1155 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); | 1155 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
(...skipping 30 matching lines...) Expand all Loading... |
1186 const uint8_t payload_type = 127; | 1186 const uint8_t payload_type = 127; |
1187 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1187 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1188 0, 1500)); | 1188 0, 1500)); |
1189 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1189 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1190 rtp_sender_->SetStorePacketsStatus(true, 1); | 1190 rtp_sender_->SetStorePacketsStatus(true, 1); |
1191 uint32_t ssrc = rtp_sender_->SSRC(); | 1191 uint32_t ssrc = rtp_sender_->SSRC(); |
1192 | 1192 |
1193 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 1193 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
1194 .Times(::testing::AtLeast(2)); | 1194 .Times(::testing::AtLeast(2)); |
1195 | 1195 |
1196 ASSERT_EQ( | 1196 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
1197 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, | 1197 4321, payload, sizeof(payload), |
1198 payload, sizeof(payload), nullptr)); | 1198 nullptr, nullptr)); |
1199 | 1199 |
1200 EXPECT_EQ(1U, callback.num_calls_); | 1200 EXPECT_EQ(1U, callback.num_calls_); |
1201 EXPECT_EQ(ssrc, callback.ssrc_); | 1201 EXPECT_EQ(ssrc, callback.ssrc_); |
1202 EXPECT_EQ(1, callback.frame_counts_.key_frames); | 1202 EXPECT_EQ(1, callback.frame_counts_.key_frames); |
1203 EXPECT_EQ(0, callback.frame_counts_.delta_frames); | 1203 EXPECT_EQ(0, callback.frame_counts_.delta_frames); |
1204 | 1204 |
1205 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, | 1205 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1206 1234, 4321, payload, | 1206 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
1207 sizeof(payload), nullptr)); | 1207 sizeof(payload), nullptr, nullptr)); |
1208 | 1208 |
1209 EXPECT_EQ(2U, callback.num_calls_); | 1209 EXPECT_EQ(2U, callback.num_calls_); |
1210 EXPECT_EQ(ssrc, callback.ssrc_); | 1210 EXPECT_EQ(ssrc, callback.ssrc_); |
1211 EXPECT_EQ(1, callback.frame_counts_.key_frames); | 1211 EXPECT_EQ(1, callback.frame_counts_.key_frames); |
1212 EXPECT_EQ(1, callback.frame_counts_.delta_frames); | 1212 EXPECT_EQ(1, callback.frame_counts_.delta_frames); |
1213 | 1213 |
1214 rtp_sender_.reset(); | 1214 rtp_sender_.reset(); |
1215 } | 1215 } |
1216 | 1216 |
1217 TEST_F(RtpSenderTest, BitrateCallbacks) { | 1217 TEST_F(RtpSenderTest, BitrateCallbacks) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1259 0, 1500)); | 1259 0, 1500)); |
1260 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1260 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1261 rtp_sender_->SetStorePacketsStatus(true, 1); | 1261 rtp_sender_->SetStorePacketsStatus(true, 1); |
1262 uint32_t ssrc = rtp_sender_->SSRC(); | 1262 uint32_t ssrc = rtp_sender_->SSRC(); |
1263 | 1263 |
1264 // Initial process call so we get a new time window. | 1264 // Initial process call so we get a new time window. |
1265 rtp_sender_->ProcessBitrate(); | 1265 rtp_sender_->ProcessBitrate(); |
1266 | 1266 |
1267 // Send a few frames. | 1267 // Send a few frames. |
1268 for (uint32_t i = 0; i < kNumPackets; ++i) { | 1268 for (uint32_t i = 0; i < kNumPackets; ++i) { |
1269 ASSERT_EQ(0, | 1269 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1270 rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, | 1270 kVideoFrameKey, payload_type, 1234, 4321, payload, |
1271 4321, payload, sizeof(payload), 0)); | 1271 sizeof(payload), nullptr, nullptr)); |
1272 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); | 1272 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); |
1273 } | 1273 } |
1274 | 1274 |
1275 rtp_sender_->ProcessBitrate(); | 1275 rtp_sender_->ProcessBitrate(); |
1276 | 1276 |
1277 // We get one call for every stats updated, thus two calls since both the | 1277 // We get one call for every stats updated, thus two calls since both the |
1278 // stream stats and the retransmit stats are updated once. | 1278 // stream stats and the retransmit stats are updated once. |
1279 EXPECT_EQ(2u, callback.num_calls_); | 1279 EXPECT_EQ(2u, callback.num_calls_); |
1280 EXPECT_EQ(ssrc, callback.ssrc_); | 1280 EXPECT_EQ(ssrc, callback.ssrc_); |
1281 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); | 1281 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1340 const uint8_t payload_type = 127; | 1340 const uint8_t payload_type = 127; |
1341 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1341 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
1342 0, 1500)); | 1342 0, 1500)); |
1343 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1343 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1344 rtp_sender_->SetStorePacketsStatus(true, 1); | 1344 rtp_sender_->SetStorePacketsStatus(true, 1); |
1345 uint32_t ssrc = rtp_sender_->SSRC(); | 1345 uint32_t ssrc = rtp_sender_->SSRC(); |
1346 | 1346 |
1347 rtp_sender_->RegisterRtpStatisticsCallback(&callback); | 1347 rtp_sender_->RegisterRtpStatisticsCallback(&callback); |
1348 | 1348 |
1349 // Send a frame. | 1349 // Send a frame. |
1350 ASSERT_EQ( | 1350 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, |
1351 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 4321, | 1351 4321, payload, sizeof(payload), |
1352 payload, sizeof(payload), nullptr)); | 1352 nullptr, nullptr)); |
1353 StreamDataCounters expected; | 1353 StreamDataCounters expected; |
1354 expected.transmitted.payload_bytes = 6; | 1354 expected.transmitted.payload_bytes = 6; |
1355 expected.transmitted.header_bytes = 12; | 1355 expected.transmitted.header_bytes = 12; |
1356 expected.transmitted.padding_bytes = 0; | 1356 expected.transmitted.padding_bytes = 0; |
1357 expected.transmitted.packets = 1; | 1357 expected.transmitted.packets = 1; |
1358 expected.retransmitted.payload_bytes = 0; | 1358 expected.retransmitted.payload_bytes = 0; |
1359 expected.retransmitted.header_bytes = 0; | 1359 expected.retransmitted.header_bytes = 0; |
1360 expected.retransmitted.padding_bytes = 0; | 1360 expected.retransmitted.padding_bytes = 0; |
1361 expected.retransmitted.packets = 0; | 1361 expected.retransmitted.packets = 0; |
1362 expected.fec.packets = 0; | 1362 expected.fec.packets = 0; |
(...skipping 19 matching lines...) Expand all Loading... |
1382 expected.transmitted.packets = 3; | 1382 expected.transmitted.packets = 3; |
1383 callback.Matches(ssrc, expected); | 1383 callback.Matches(ssrc, expected); |
1384 | 1384 |
1385 // Send FEC. | 1385 // Send FEC. |
1386 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType); | 1386 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType); |
1387 FecProtectionParams fec_params; | 1387 FecProtectionParams fec_params; |
1388 fec_params.fec_mask_type = kFecMaskRandom; | 1388 fec_params.fec_mask_type = kFecMaskRandom; |
1389 fec_params.fec_rate = 1; | 1389 fec_params.fec_rate = 1; |
1390 fec_params.max_fec_frames = 1; | 1390 fec_params.max_fec_frames = 1; |
1391 rtp_sender_->SetFecParameters(&fec_params, &fec_params); | 1391 rtp_sender_->SetFecParameters(&fec_params, &fec_params); |
1392 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameDelta, payload_type, | 1392 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( |
1393 1234, 4321, payload, | 1393 kVideoFrameDelta, payload_type, 1234, 4321, payload, |
1394 sizeof(payload), nullptr)); | 1394 sizeof(payload), nullptr, nullptr)); |
1395 expected.transmitted.payload_bytes = 40; | 1395 expected.transmitted.payload_bytes = 40; |
1396 expected.transmitted.header_bytes = 60; | 1396 expected.transmitted.header_bytes = 60; |
1397 expected.transmitted.packets = 5; | 1397 expected.transmitted.packets = 5; |
1398 expected.fec.packets = 1; | 1398 expected.fec.packets = 1; |
1399 callback.Matches(ssrc, expected); | 1399 callback.Matches(ssrc, expected); |
1400 | 1400 |
1401 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); | 1401 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); |
1402 } | 1402 } |
1403 | 1403 |
1404 TEST_F(RtpSenderAudioTest, SendAudio) { | 1404 TEST_F(RtpSenderAudioTest, SendAudio) { |
1405 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1405 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
1406 const uint8_t payload_type = 127; | 1406 const uint8_t payload_type = 127; |
1407 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1407 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
1408 0, 1500)); | 1408 0, 1500)); |
1409 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1409 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1410 | 1410 |
1411 ASSERT_EQ( | 1411 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, |
1412 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, | 1412 4321, payload, sizeof(payload), |
1413 payload, sizeof(payload), nullptr)); | 1413 nullptr, nullptr)); |
1414 | 1414 |
1415 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1415 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1416 transport_.last_sent_packet_len_); | 1416 transport_.last_sent_packet_len_); |
1417 webrtc::RTPHeader rtp_header; | 1417 webrtc::RTPHeader rtp_header; |
1418 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1418 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1419 | 1419 |
1420 const uint8_t* payload_data = | 1420 const uint8_t* payload_data = |
1421 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1421 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1422 | 1422 |
1423 ASSERT_EQ(sizeof(payload), | 1423 ASSERT_EQ(sizeof(payload), |
1424 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); | 1424 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
1425 | 1425 |
1426 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); | 1426 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
1427 } | 1427 } |
1428 | 1428 |
1429 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { | 1429 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { |
1430 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); | 1430 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); |
1431 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, | 1431 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, |
1432 kAudioLevelExtensionId)); | 1432 kAudioLevelExtensionId)); |
1433 | 1433 |
1434 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; | 1434 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; |
1435 const uint8_t payload_type = 127; | 1435 const uint8_t payload_type = 127; |
1436 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, | 1436 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, |
1437 0, 1500)); | 1437 0, 1500)); |
1438 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1438 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1439 | 1439 |
1440 ASSERT_EQ( | 1440 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, |
1441 0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 4321, | 1441 4321, payload, sizeof(payload), |
1442 payload, sizeof(payload), nullptr)); | 1442 nullptr, nullptr)); |
1443 | 1443 |
1444 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 1444 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
1445 transport_.last_sent_packet_len_); | 1445 transport_.last_sent_packet_len_); |
1446 webrtc::RTPHeader rtp_header; | 1446 webrtc::RTPHeader rtp_header; |
1447 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); | 1447 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
1448 | 1448 |
1449 const uint8_t* payload_data = | 1449 const uint8_t* payload_data = |
1450 GetPayloadData(rtp_header, transport_.last_sent_packet_); | 1450 GetPayloadData(rtp_header, transport_.last_sent_packet_); |
1451 | 1451 |
1452 ASSERT_EQ(sizeof(payload), | 1452 ASSERT_EQ(sizeof(payload), |
(...skipping 30 matching lines...) Expand all Loading... |
1483 ASSERT_EQ( | 1483 ASSERT_EQ( |
1484 0, rtp_sender_->RegisterPayload(kPayloadName, payload_type, 8000, 1, 0)); | 1484 0, rtp_sender_->RegisterPayload(kPayloadName, payload_type, 8000, 1, 0)); |
1485 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); | 1485 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
1486 // DTMF event key=9, duration=500 and attenuationdB=10 | 1486 // DTMF event key=9, duration=500 and attenuationdB=10 |
1487 rtp_sender_->SendTelephoneEvent(9, 500, 10); | 1487 rtp_sender_->SendTelephoneEvent(9, 500, 10); |
1488 // During start, it takes the starting timestamp as last sent timestamp. | 1488 // During start, it takes the starting timestamp as last sent timestamp. |
1489 // The duration is calculated as the difference of current and last sent | 1489 // The duration is calculated as the difference of current and last sent |
1490 // timestamp. So for first call it will skip since the duration is zero. | 1490 // timestamp. So for first call it will skip since the duration is zero. |
1491 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1491 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1492 capture_time_ms, 0, nullptr, 0, | 1492 capture_time_ms, 0, nullptr, 0, |
1493 nullptr)); | 1493 nullptr, nullptr)); |
1494 // DTMF Sample Length is (Frequency/1000) * Duration. | 1494 // DTMF Sample Length is (Frequency/1000) * Duration. |
1495 // So in this case, it is (8000/1000) * 500 = 4000. | 1495 // So in this case, it is (8000/1000) * 500 = 4000. |
1496 // Sending it as two packets. | 1496 // Sending it as two packets. |
1497 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1497 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1498 capture_time_ms + 2000, 0, nullptr, | 1498 capture_time_ms + 2000, 0, nullptr, |
1499 0, nullptr)); | 1499 0, nullptr, nullptr)); |
1500 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( | 1500 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( |
1501 webrtc::RtpHeaderParser::Create()); | 1501 webrtc::RtpHeaderParser::Create()); |
1502 ASSERT_TRUE(rtp_parser.get() != nullptr); | 1502 ASSERT_TRUE(rtp_parser.get() != nullptr); |
1503 webrtc::RTPHeader rtp_header; | 1503 webrtc::RTPHeader rtp_header; |
1504 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, | 1504 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
1505 transport_.last_sent_packet_len_, &rtp_header)); | 1505 transport_.last_sent_packet_len_, &rtp_header)); |
1506 // Marker Bit should be set to 1 for first packet. | 1506 // Marker Bit should be set to 1 for first packet. |
1507 EXPECT_TRUE(rtp_header.markerBit); | 1507 EXPECT_TRUE(rtp_header.markerBit); |
1508 | 1508 |
1509 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, | 1509 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, |
1510 capture_time_ms + 4000, 0, nullptr, | 1510 capture_time_ms + 4000, 0, nullptr, |
1511 0, nullptr)); | 1511 0, nullptr, nullptr)); |
1512 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, | 1512 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
1513 transport_.last_sent_packet_len_, &rtp_header)); | 1513 transport_.last_sent_packet_len_, &rtp_header)); |
1514 // Marker Bit should be set to 0 for rest of the packets. | 1514 // Marker Bit should be set to 0 for rest of the packets. |
1515 EXPECT_FALSE(rtp_header.markerBit); | 1515 EXPECT_FALSE(rtp_header.markerBit); |
1516 } | 1516 } |
1517 | 1517 |
1518 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { | 1518 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { |
1519 const char* kPayloadName = "GENERIC"; | 1519 const char* kPayloadName = "GENERIC"; |
1520 const uint8_t kPayloadType = 127; | 1520 const uint8_t kPayloadType = 127; |
1521 rtp_sender_->SetSSRC(1234); | 1521 rtp_sender_->SetSSRC(1234); |
1522 rtp_sender_->SetRtxSsrc(4321); | 1522 rtp_sender_->SetRtxSsrc(4321); |
1523 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); | 1523 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); |
1524 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); | 1524 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); |
1525 | 1525 |
1526 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, | 1526 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, |
1527 0, 1500)); | 1527 0, 1500)); |
1528 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1528 uint8_t payload[] = {47, 11, 32, 93, 89}; |
1529 | 1529 |
1530 ASSERT_EQ( | 1530 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, kPayloadType, 1234, |
1531 0, rtp_sender_->SendOutgoingData(kVideoFrameKey, kPayloadType, 1234, 4321, | 1531 4321, payload, sizeof(payload), |
1532 payload, sizeof(payload), 0)); | 1532 nullptr, nullptr)); |
1533 | 1533 |
1534 // Will send 2 full-size padding packets. | 1534 // Will send 2 full-size padding packets. |
1535 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); | 1535 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); |
1536 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); | 1536 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); |
1537 | 1537 |
1538 StreamDataCounters rtp_stats; | 1538 StreamDataCounters rtp_stats; |
1539 StreamDataCounters rtx_stats; | 1539 StreamDataCounters rtx_stats; |
1540 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); | 1540 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); |
1541 | 1541 |
1542 // Payload + 1-byte generic header. | 1542 // Payload + 1-byte generic header. |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1619 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), | 1619 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), |
1620 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); | 1620 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); |
1621 | 1621 |
1622 // Verify that this packet does have CVO byte. | 1622 // Verify that this packet does have CVO byte. |
1623 VerifyCVOPacket( | 1623 VerifyCVOPacket( |
1624 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), | 1624 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), |
1625 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, | 1625 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, |
1626 hdr.rotation); | 1626 hdr.rotation); |
1627 } | 1627 } |
1628 } // namespace webrtc | 1628 } // namespace webrtc |
OLD | NEW |