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 20 matching lines...) Expand all Loading... |
31 #include "webrtc/test/gtest.h" | 31 #include "webrtc/test/gtest.h" |
32 #include "webrtc/test/mock_transport.h" | 32 #include "webrtc/test/mock_transport.h" |
33 #include "webrtc/typedefs.h" | 33 #include "webrtc/typedefs.h" |
34 | 34 |
35 namespace webrtc { | 35 namespace webrtc { |
36 | 36 |
37 namespace { | 37 namespace { |
38 const int kTransmissionTimeOffsetExtensionId = 1; | 38 const int kTransmissionTimeOffsetExtensionId = 1; |
39 const int kAbsoluteSendTimeExtensionId = 14; | 39 const int kAbsoluteSendTimeExtensionId = 14; |
40 const int kTransportSequenceNumberExtensionId = 13; | 40 const int kTransportSequenceNumberExtensionId = 13; |
| 41 const int kVideoTimingExtensionId = 12; |
41 const int kPayload = 100; | 42 const int kPayload = 100; |
42 const int kRtxPayload = 98; | 43 const int kRtxPayload = 98; |
43 const uint32_t kTimestamp = 10; | 44 const uint32_t kTimestamp = 10; |
44 const uint16_t kSeqNum = 33; | 45 const uint16_t kSeqNum = 33; |
45 const uint32_t kSsrc = 725242; | 46 const uint32_t kSsrc = 725242; |
46 const int kMaxPacketLength = 1500; | 47 const int kMaxPacketLength = 1500; |
47 const uint8_t kAudioLevel = 0x5a; | 48 const uint8_t kAudioLevel = 0x5a; |
48 const uint16_t kTransportSequenceNumber = 0xaabbu; | 49 const uint16_t kTransportSequenceNumber = 0xaabbu; |
49 const uint8_t kAudioLevelExtensionId = 9; | 50 const uint8_t kAudioLevelExtensionId = 9; |
50 const int kAudioPayload = 103; | 51 const int kAudioPayload = 103; |
(...skipping 16 matching lines...) Expand all Loading... |
67 receivers_extensions_.Register(kRtpExtensionTransmissionTimeOffset, | 68 receivers_extensions_.Register(kRtpExtensionTransmissionTimeOffset, |
68 kTransmissionTimeOffsetExtensionId); | 69 kTransmissionTimeOffsetExtensionId); |
69 receivers_extensions_.Register(kRtpExtensionAbsoluteSendTime, | 70 receivers_extensions_.Register(kRtpExtensionAbsoluteSendTime, |
70 kAbsoluteSendTimeExtensionId); | 71 kAbsoluteSendTimeExtensionId); |
71 receivers_extensions_.Register(kRtpExtensionTransportSequenceNumber, | 72 receivers_extensions_.Register(kRtpExtensionTransportSequenceNumber, |
72 kTransportSequenceNumberExtensionId); | 73 kTransportSequenceNumberExtensionId); |
73 receivers_extensions_.Register(kRtpExtensionVideoRotation, | 74 receivers_extensions_.Register(kRtpExtensionVideoRotation, |
74 kVideoRotationExtensionId); | 75 kVideoRotationExtensionId); |
75 receivers_extensions_.Register(kRtpExtensionAudioLevel, | 76 receivers_extensions_.Register(kRtpExtensionAudioLevel, |
76 kAudioLevelExtensionId); | 77 kAudioLevelExtensionId); |
| 78 receivers_extensions_.Register(kRtpExtensionVideoTiming, |
| 79 kVideoTimingExtensionId); |
77 } | 80 } |
78 | 81 |
79 bool SendRtp(const uint8_t* data, | 82 bool SendRtp(const uint8_t* data, |
80 size_t len, | 83 size_t len, |
81 const PacketOptions& options) override { | 84 const PacketOptions& options) override { |
82 last_packet_id_ = options.packet_id; | 85 last_packet_id_ = options.packet_id; |
83 total_bytes_sent_ += len; | 86 total_bytes_sent_ += len; |
84 sent_packets_.push_back(RtpPacketReceived(&receivers_extensions_)); | 87 sent_packets_.push_back(RtpPacketReceived(&receivers_extensions_)); |
85 EXPECT_TRUE(sent_packets_.back().Parse(data, len)); | 88 EXPECT_TRUE(sent_packets_.back().Parse(data, len)); |
86 return true; | 89 return true; |
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 fake_clock_.TimeInMilliseconds(), false, | 456 fake_clock_.TimeInMilliseconds(), false, |
454 PacedPacketInfo()); | 457 PacedPacketInfo()); |
455 | 458 |
456 const auto& packet = transport_.last_sent_packet(); | 459 const auto& packet = transport_.last_sent_packet(); |
457 uint16_t transport_seq_no; | 460 uint16_t transport_seq_no; |
458 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); | 461 EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); |
459 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); | 462 EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); |
460 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); | 463 EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
461 } | 464 } |
462 | 465 |
| 466 TEST_P(RtpSenderTestWithoutPacer, WritesTimestampToTimingExtension) { |
| 467 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 468 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 469 kRtpExtensionVideoTiming, kVideoTimingExtensionId)); |
| 470 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
| 471 auto packet = rtp_sender_->AllocatePacket(); |
| 472 packet->SetPayloadType(kPayload); |
| 473 packet->SetMarker(true); |
| 474 packet->SetTimestamp(kTimestamp); |
| 475 packet->set_capture_time_ms(capture_time_ms); |
| 476 const VideoTiming kVideoTiming = {0u, 0u, 0u, 0u, 0u, 0u, true}; |
| 477 packet->SetExtension<VideoTimingExtension>(kVideoTiming); |
| 478 EXPECT_TRUE(rtp_sender_->AssignSequenceNumber(packet.get())); |
| 479 size_t packet_size = packet->size(); |
| 480 webrtc::RTPHeader rtp_header; |
| 481 |
| 482 packet->GetHeader(&rtp_header); |
| 483 |
| 484 const int kStoredTimeInMs = 100; |
| 485 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
| 486 |
| 487 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet), |
| 488 kAllowRetransmission, |
| 489 RtpPacketSender::kNormalPriority)); |
| 490 EXPECT_EQ(1, transport_.packets_sent()); |
| 491 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
| 492 |
| 493 transport_.last_sent_packet().GetHeader(&rtp_header); |
| 494 EXPECT_TRUE(rtp_header.extension.has_video_timing); |
| 495 EXPECT_EQ(kStoredTimeInMs, |
| 496 rtp_header.extension.video_timing.pacer_exit_delta_ms); |
| 497 |
| 498 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
| 499 rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false, |
| 500 PacedPacketInfo()); |
| 501 |
| 502 EXPECT_EQ(2, transport_.packets_sent()); |
| 503 EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
| 504 |
| 505 transport_.last_sent_packet().GetHeader(&rtp_header); |
| 506 EXPECT_TRUE(rtp_header.extension.has_video_timing); |
| 507 EXPECT_EQ(kStoredTimeInMs * 2, |
| 508 rtp_header.extension.video_timing.pacer_exit_delta_ms); |
| 509 } |
| 510 |
463 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) { | 511 TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) { |
464 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, | 512 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
465 kSsrc, kSeqNum, _, _, _)); | 513 kSsrc, kSeqNum, _, _, _)); |
466 EXPECT_CALL(mock_rtc_event_log_, | 514 EXPECT_CALL(mock_rtc_event_log_, |
467 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 515 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
468 | 516 |
469 rtp_sender_->SetStorePacketsStatus(true, 10); | 517 rtp_sender_->SetStorePacketsStatus(true, 10); |
470 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 518 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
471 kRtpExtensionTransmissionTimeOffset, | 519 kRtpExtensionTransmissionTimeOffset, |
472 kTransmissionTimeOffsetExtensionId)); | 520 kTransmissionTimeOffsetExtensionId)); |
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1403 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, | 1451 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, |
1404 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr, | 1452 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr, |
1405 &hdr); | 1453 &hdr); |
1406 | 1454 |
1407 VideoRotation rotation; | 1455 VideoRotation rotation; |
1408 EXPECT_TRUE( | 1456 EXPECT_TRUE( |
1409 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); | 1457 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); |
1410 EXPECT_EQ(kVideoRotation_0, rotation); | 1458 EXPECT_EQ(kVideoRotation_0, rotation); |
1411 } | 1459 } |
1412 | 1460 |
| 1461 TEST_P(RtpSenderVideoTest, TimingFrameHasPacketizationTimstampSet) { |
| 1462 uint8_t kFrame[kMaxPacketLength]; |
| 1463 const int64_t kPacketizationTimeMs = 100; |
| 1464 const int64_t kEncodeStartDeltaMs = 10; |
| 1465 const int64_t kEncodeFinishDeltaMs = 50; |
| 1466 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 1467 kRtpExtensionVideoTiming, kVideoTimingExtensionId)); |
| 1468 |
| 1469 const int64_t kCaptureTimestamp = fake_clock_.TimeInMilliseconds(); |
| 1470 |
| 1471 RTPVideoHeader hdr = {0}; |
| 1472 hdr.video_timing.is_timing_frame = true; |
| 1473 hdr.video_timing.encode_start_delta_ms = kEncodeStartDeltaMs; |
| 1474 hdr.video_timing.encode_finish_delta_ms = kEncodeFinishDeltaMs; |
| 1475 |
| 1476 fake_clock_.AdvanceTimeMilliseconds(kPacketizationTimeMs); |
| 1477 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, |
| 1478 kTimestamp, kCaptureTimestamp, kFrame, |
| 1479 sizeof(kFrame), nullptr, &hdr); |
| 1480 VideoTiming timing; |
| 1481 EXPECT_TRUE(transport_.last_sent_packet().GetExtension<VideoTimingExtension>( |
| 1482 &timing)); |
| 1483 EXPECT_EQ(kPacketizationTimeMs, timing.packetization_finish_delta_ms); |
| 1484 EXPECT_EQ(kEncodeStartDeltaMs, timing.encode_start_delta_ms); |
| 1485 EXPECT_EQ(kEncodeFinishDeltaMs, timing.encode_finish_delta_ms); |
| 1486 } |
| 1487 |
1413 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) { | 1488 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) { |
1414 uint8_t kFrame[kMaxPacketLength]; | 1489 uint8_t kFrame[kMaxPacketLength]; |
1415 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 1490 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
1416 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 1491 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
1417 | 1492 |
1418 RTPVideoHeader hdr = {0}; | 1493 RTPVideoHeader hdr = {0}; |
1419 hdr.rotation = kVideoRotation_90; | 1494 hdr.rotation = kVideoRotation_90; |
1420 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, | 1495 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, |
1421 kPayload, kTimestamp, 0, kFrame, | 1496 kPayload, kTimestamp, 0, kFrame, |
1422 sizeof(kFrame), nullptr, &hdr)); | 1497 sizeof(kFrame), nullptr, &hdr)); |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1541 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | 1616 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, |
1542 RtpSenderTestWithoutPacer, | 1617 RtpSenderTestWithoutPacer, |
1543 ::testing::Bool()); | 1618 ::testing::Bool()); |
1544 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | 1619 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, |
1545 RtpSenderVideoTest, | 1620 RtpSenderVideoTest, |
1546 ::testing::Bool()); | 1621 ::testing::Bool()); |
1547 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, | 1622 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, |
1548 RtpSenderAudioTest, | 1623 RtpSenderAudioTest, |
1549 ::testing::Bool()); | 1624 ::testing::Bool()); |
1550 } // namespace webrtc | 1625 } // namespace webrtc |
OLD | NEW |