| 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 size_t bytes, | 115 size_t bytes, |
| 116 bool retransmission)); | 116 bool retransmission)); |
| 117 }; | 117 }; |
| 118 | 118 |
| 119 class MockTransportSequenceNumberAllocator | 119 class MockTransportSequenceNumberAllocator |
| 120 : public TransportSequenceNumberAllocator { | 120 : public TransportSequenceNumberAllocator { |
| 121 public: | 121 public: |
| 122 MOCK_METHOD0(AllocateSequenceNumber, uint16_t()); | 122 MOCK_METHOD0(AllocateSequenceNumber, uint16_t()); |
| 123 }; | 123 }; |
| 124 | 124 |
| 125 class MockSendPacketObserver : public SendPacketObserver { |
| 126 public: |
| 127 MOCK_METHOD3(OnSendPacket, void(uint16_t, int64_t, uint32_t)); |
| 128 }; |
| 129 |
| 125 class RtpSenderTest : public ::testing::Test { | 130 class RtpSenderTest : public ::testing::Test { |
| 126 protected: | 131 protected: |
| 127 RtpSenderTest() | 132 RtpSenderTest() |
| 128 : fake_clock_(kStartTime), | 133 : fake_clock_(kStartTime), |
| 129 mock_rtc_event_log_(), | 134 mock_rtc_event_log_(), |
| 130 mock_paced_sender_(), | 135 mock_paced_sender_(), |
| 131 rtp_sender_(), | 136 rtp_sender_(), |
| 132 payload_(kPayload), | 137 payload_(kPayload), |
| 133 transport_(), | 138 transport_(), |
| 134 kMarkerBit(true) { | 139 kMarkerBit(true) { |
| 135 } | 140 } |
| 136 | 141 |
| 137 void SetUp() override { SetUpRtpSender(true); } | 142 void SetUp() override { SetUpRtpSender(true); } |
| 138 | 143 |
| 139 void SetUpRtpSender(bool pacer) { | 144 void SetUpRtpSender(bool pacer) { |
| 140 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, | 145 rtp_sender_.reset(new RTPSender( |
| 141 pacer ? &mock_paced_sender_ : nullptr, | 146 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, |
| 142 &seq_num_allocator_, nullptr, nullptr, | 147 &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, |
| 143 nullptr, nullptr, &mock_rtc_event_log_)); | 148 &mock_rtc_event_log_, &send_packet_observer_)); |
| 144 rtp_sender_->SetSequenceNumber(kSeqNum); | 149 rtp_sender_->SetSequenceNumber(kSeqNum); |
| 145 } | 150 } |
| 146 | 151 |
| 147 SimulatedClock fake_clock_; | 152 SimulatedClock fake_clock_; |
| 148 MockRtcEventLog mock_rtc_event_log_; | 153 MockRtcEventLog mock_rtc_event_log_; |
| 149 MockRtpPacketSender mock_paced_sender_; | 154 MockRtpPacketSender mock_paced_sender_; |
| 150 MockTransportSequenceNumberAllocator seq_num_allocator_; | 155 MockTransportSequenceNumberAllocator seq_num_allocator_; |
| 156 MockSendPacketObserver send_packet_observer_; |
| 151 std::unique_ptr<RTPSender> rtp_sender_; | 157 std::unique_ptr<RTPSender> rtp_sender_; |
| 152 int payload_; | 158 int payload_; |
| 153 LoopbackTransportTest transport_; | 159 LoopbackTransportTest transport_; |
| 154 const bool kMarkerBit; | 160 const bool kMarkerBit; |
| 155 uint8_t packet_[kMaxPacketLength]; | 161 uint8_t packet_[kMaxPacketLength]; |
| 156 | 162 |
| 157 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { | 163 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { |
| 158 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); | 164 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); |
| 159 } | 165 } |
| 160 | 166 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 178 uint32_t timestamp = capture_time_ms * 90; | 184 uint32_t timestamp = capture_time_ms * 90; |
| 179 int32_t rtp_length = rtp_sender_->BuildRTPheader( | 185 int32_t rtp_length = rtp_sender_->BuildRTPheader( |
| 180 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); | 186 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); |
| 181 ASSERT_GE(rtp_length, 0); | 187 ASSERT_GE(rtp_length, 0); |
| 182 | 188 |
| 183 // Packet should be stored in a send bucket. | 189 // Packet should be stored in a send bucket. |
| 184 EXPECT_EQ(0, rtp_sender_->SendToNetwork( | 190 EXPECT_EQ(0, rtp_sender_->SendToNetwork( |
| 185 packet_, payload_length, rtp_length, capture_time_ms, | 191 packet_, payload_length, rtp_length, capture_time_ms, |
| 186 kAllowRetransmission, RtpPacketSender::kNormalPriority)); | 192 kAllowRetransmission, RtpPacketSender::kNormalPriority)); |
| 187 } | 193 } |
| 194 |
| 195 void SendGenericPayload() { |
| 196 const uint8_t kPayload[] = {47, 11, 32, 93, 89}; |
| 197 const uint32_t kTimestamp = 1234; |
| 198 const uint8_t kPayloadType = 127; |
| 199 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); |
| 200 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
| 201 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, |
| 202 0, 1500)); |
| 203 |
| 204 EXPECT_EQ(0, rtp_sender_->SendOutgoingData( |
| 205 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, |
| 206 kPayload, sizeof(kPayload), nullptr)); |
| 207 } |
| 188 }; | 208 }; |
| 189 | 209 |
| 190 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our | 210 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our |
| 191 // default code path. | 211 // default code path. |
| 192 class RtpSenderTestWithoutPacer : public RtpSenderTest { | 212 class RtpSenderTestWithoutPacer : public RtpSenderTest { |
| 193 public: | 213 public: |
| 194 void SetUp() override { SetUpRtpSender(false); } | 214 void SetUp() override { SetUpRtpSender(false); } |
| 195 }; | 215 }; |
| 196 | 216 |
| 197 class RtpSenderVideoTest : public RtpSenderTest { | 217 class RtpSenderVideoTest : public RtpSenderTest { |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 | 492 |
| 473 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { | 493 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { |
| 474 // Ignore rtc event calls. | 494 // Ignore rtc event calls. |
| 475 EXPECT_CALL(mock_rtc_event_log_, | 495 EXPECT_CALL(mock_rtc_event_log_, |
| 476 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 496 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
| 477 | 497 |
| 478 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 498 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 479 kRtpExtensionTransportSequenceNumber, | 499 kRtpExtensionTransportSequenceNumber, |
| 480 kTransportSequenceNumberExtensionId)); | 500 kTransportSequenceNumberExtensionId)); |
| 481 | 501 |
| 482 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | |
| 483 const uint8_t payload_type = 127; | |
| 484 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | |
| 485 0, 1500)); | |
| 486 // Create a dummy payload of 5 bytes. | |
| 487 uint8_t payload[] = {47, 11, 32, 93, 89}; | |
| 488 | |
| 489 const uint16_t kTransportSequenceNumber = 17; | |
| 490 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 502 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 491 .WillOnce(testing::Return(kTransportSequenceNumber)); | 503 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 492 const uint32_t kTimestamp = 1234; | 504 EXPECT_CALL(send_packet_observer_, |
| 493 const int64_t kCaptureTimeMs = 4321; | 505 OnSendPacket(kTransportSequenceNumber, _, _)) |
| 494 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( | 506 .Times(1); |
| 495 kVideoFrameKey, payload_type, kTimestamp, kCaptureTimeMs, | 507 |
| 496 payload, sizeof(payload), nullptr)); | 508 SendGenericPayload(); |
| 497 | 509 |
| 498 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 510 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
| 499 transport_.last_sent_packet_len_); | 511 transport_.last_sent_packet_len_); |
| 500 webrtc::RTPHeader rtp_header; | 512 webrtc::RTPHeader rtp_header; |
| 501 RtpHeaderExtensionMap map; | 513 RtpHeaderExtensionMap map; |
| 502 map.Register(kRtpExtensionTransportSequenceNumber, | 514 map.Register(kRtpExtensionTransportSequenceNumber, |
| 503 kTransportSequenceNumberExtensionId); | 515 kTransportSequenceNumberExtensionId); |
| 504 EXPECT_TRUE(rtp_parser.Parse(&rtp_header, &map)); | 516 EXPECT_TRUE(rtp_parser.Parse(&rtp_header, &map)); |
| 505 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber); | 517 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber); |
| 506 EXPECT_EQ(kTransportSequenceNumber, | 518 EXPECT_EQ(kTransportSequenceNumber, |
| 507 rtp_header.extension.transportSequenceNumber); | 519 rtp_header.extension.transportSequenceNumber); |
| 508 EXPECT_EQ(transport_.last_packet_id_, | 520 EXPECT_EQ(transport_.last_packet_id_, |
| 509 rtp_header.extension.transportSequenceNumber); | 521 rtp_header.extension.transportSequenceNumber); |
| 510 } | 522 } |
| 511 | 523 |
| 524 TEST_F(RtpSenderTestWithoutPacer, OnSendPacketUpdated) { |
| 525 EXPECT_CALL(mock_rtc_event_log_, // Ignore rtc event calls. |
| 526 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
| 527 |
| 528 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 529 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 530 EXPECT_CALL(send_packet_observer_, |
| 531 OnSendPacket(kTransportSequenceNumber, _, _)) |
| 532 .Times(1); |
| 533 |
| 534 SendGenericPayload(); |
| 535 } |
| 536 |
| 512 // Test CVO header extension is only set when marker bit is true. | 537 // Test CVO header extension is only set when marker bit is true. |
| 513 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) { | 538 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) { |
| 514 rtp_sender_->SetVideoRotation(kRotation); | 539 rtp_sender_->SetVideoRotation(kRotation); |
| 515 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 540 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 516 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); | 541 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); |
| 517 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); | 542 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension()); |
| 518 | 543 |
| 519 RtpHeaderExtensionMap map; | 544 RtpHeaderExtensionMap map; |
| 520 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); | 545 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); |
| 521 | 546 |
| (...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 940 // Verify sequence number and timestamp. | 965 // Verify sequence number and timestamp. |
| 941 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); | 966 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); |
| 942 EXPECT_EQ(timestamp, rtp_header.timestamp); | 967 EXPECT_EQ(timestamp, rtp_header.timestamp); |
| 943 // Verify transmission time offset. This packet is sent without delay. | 968 // Verify transmission time offset. This packet is sent without delay. |
| 944 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); | 969 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); |
| 945 uint64_t expected_send_time = | 970 uint64_t expected_send_time = |
| 946 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 971 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
| 947 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 972 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
| 948 } | 973 } |
| 949 | 974 |
| 975 TEST_F(RtpSenderTest, OnSendPacketUpdated) { |
| 976 EXPECT_CALL(mock_rtc_event_log_, // Ignore rtc event calls. |
| 977 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
| 978 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 979 |
| 980 EXPECT_CALL(send_packet_observer_, |
| 981 OnSendPacket(kTransportSequenceNumber, _, _)) |
| 982 .Times(1); |
| 983 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 984 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 985 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); |
| 986 |
| 987 SendGenericPayload(); // Packet passed to pacer. |
| 988 const bool kIsRetransmit = false; |
| 989 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
| 990 kIsRetransmit); |
| 991 EXPECT_EQ(1, transport_.packets_sent_); |
| 992 } |
| 993 |
| 994 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { |
| 995 EXPECT_CALL(mock_rtc_event_log_, // Ignore rtc event calls. |
| 996 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
| 997 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 998 |
| 999 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
| 1000 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 1001 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 1002 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); |
| 1003 |
| 1004 SendGenericPayload(); // Packet passed to pacer. |
| 1005 const bool kIsRetransmit = true; |
| 1006 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
| 1007 kIsRetransmit); |
| 1008 EXPECT_EQ(1, transport_.packets_sent_); |
| 1009 } |
| 1010 |
| 1011 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { |
| 1012 rtp_sender_.reset(new RTPSender( |
| 1013 false, &fake_clock_, &transport_, &mock_paced_sender_, |
| 1014 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, |
| 1015 nullptr, nullptr, &send_packet_observer_)); |
| 1016 rtp_sender_->SetSequenceNumber(kSeqNum); |
| 1017 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 1018 |
| 1019 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
| 1020 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); |
| 1021 |
| 1022 SendGenericPayload(); // Packet passed to pacer. |
| 1023 const bool kIsRetransmit = false; |
| 1024 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
| 1025 kIsRetransmit); |
| 1026 EXPECT_EQ(1, transport_.packets_sent_); |
| 1027 } |
| 1028 |
| 950 TEST_F(RtpSenderTest, SendRedundantPayloads) { | 1029 TEST_F(RtpSenderTest, SendRedundantPayloads) { |
| 951 MockTransport transport; | 1030 MockTransport transport; |
| 952 rtp_sender_.reset(new RTPSender( | 1031 rtp_sender_.reset(new RTPSender( |
| 953 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, | 1032 false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr, |
| 954 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_)); | 1033 nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr)); |
| 1034 |
| 955 rtp_sender_->SetSequenceNumber(kSeqNum); | 1035 rtp_sender_->SetSequenceNumber(kSeqNum); |
| 956 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); | 1036 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); |
| 957 | 1037 |
| 958 uint16_t seq_num = kSeqNum; | 1038 uint16_t seq_num = kSeqNum; |
| 959 rtp_sender_->SetStorePacketsStatus(true, 10); | 1039 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 960 int32_t rtp_header_len = kRtpHeaderSize; | 1040 int32_t rtp_header_len = kRtpHeaderSize; |
| 961 EXPECT_EQ( | 1041 EXPECT_EQ( |
| 962 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, | 1042 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
| 963 kAbsoluteSendTimeExtensionId)); | 1043 kAbsoluteSendTimeExtensionId)); |
| 964 rtp_header_len += 4; // 4 bytes extension. | 1044 rtp_header_len += 4; // 4 bytes extension. |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 ++num_calls_; | 1165 ++num_calls_; |
| 1086 ssrc_ = ssrc; | 1166 ssrc_ = ssrc; |
| 1087 frame_counts_ = frame_counts; | 1167 frame_counts_ = frame_counts; |
| 1088 } | 1168 } |
| 1089 | 1169 |
| 1090 uint32_t num_calls_; | 1170 uint32_t num_calls_; |
| 1091 uint32_t ssrc_; | 1171 uint32_t ssrc_; |
| 1092 FrameCounts frame_counts_; | 1172 FrameCounts frame_counts_; |
| 1093 } callback; | 1173 } callback; |
| 1094 | 1174 |
| 1095 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, | 1175 rtp_sender_.reset(new RTPSender( |
| 1096 &mock_paced_sender_, nullptr, nullptr, | 1176 false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr, nullptr, |
| 1097 nullptr, &callback, nullptr, nullptr)); | 1177 nullptr, &callback, nullptr, nullptr, nullptr)); |
| 1098 | 1178 |
| 1099 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1179 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
| 1100 const uint8_t payload_type = 127; | 1180 const uint8_t payload_type = 127; |
| 1101 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, | 1181 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, |
| 1102 0, 1500)); | 1182 0, 1500)); |
| 1103 uint8_t payload[] = {47, 11, 32, 93, 89}; | 1183 uint8_t payload[] = {47, 11, 32, 93, 89}; |
| 1104 rtp_sender_->SetStorePacketsStatus(true, 1); | 1184 rtp_sender_->SetStorePacketsStatus(true, 1); |
| 1105 uint32_t ssrc = rtp_sender_->SSRC(); | 1185 uint32_t ssrc = rtp_sender_->SSRC(); |
| 1106 | 1186 |
| 1107 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) | 1187 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1141 ssrc_ = ssrc; | 1221 ssrc_ = ssrc; |
| 1142 total_stats_ = total_stats; | 1222 total_stats_ = total_stats; |
| 1143 retransmit_stats_ = retransmit_stats; | 1223 retransmit_stats_ = retransmit_stats; |
| 1144 } | 1224 } |
| 1145 | 1225 |
| 1146 uint32_t num_calls_; | 1226 uint32_t num_calls_; |
| 1147 uint32_t ssrc_; | 1227 uint32_t ssrc_; |
| 1148 BitrateStatistics total_stats_; | 1228 BitrateStatistics total_stats_; |
| 1149 BitrateStatistics retransmit_stats_; | 1229 BitrateStatistics retransmit_stats_; |
| 1150 } callback; | 1230 } callback; |
| 1151 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, | 1231 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
| 1152 nullptr, nullptr, nullptr, &callback, nullptr, | 1232 nullptr, nullptr, &callback, nullptr, nullptr, |
| 1153 nullptr, nullptr)); | 1233 nullptr, nullptr)); |
| 1154 | 1234 |
| 1155 // Simulate kNumPackets sent with kPacketInterval ms intervals. | 1235 // Simulate kNumPackets sent with kPacketInterval ms intervals. |
| 1156 const uint32_t kNumPackets = 15; | 1236 const uint32_t kNumPackets = 15; |
| 1157 const uint32_t kPacketInterval = 20; | 1237 const uint32_t kPacketInterval = 20; |
| 1158 // Overhead = 12 bytes RTP header + 1 byte generic header. | 1238 // Overhead = 12 bytes RTP header + 1 byte generic header. |
| 1159 const uint32_t kPacketOverhead = 13; | 1239 const uint32_t kPacketOverhead = 13; |
| 1160 | 1240 |
| 1161 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; | 1241 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; |
| 1162 const uint8_t payload_type = 127; | 1242 const uint8_t payload_type = 127; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1194 | 1274 |
| 1195 rtp_sender_.reset(); | 1275 rtp_sender_.reset(); |
| 1196 } | 1276 } |
| 1197 | 1277 |
| 1198 class RtpSenderAudioTest : public RtpSenderTest { | 1278 class RtpSenderAudioTest : public RtpSenderTest { |
| 1199 protected: | 1279 protected: |
| 1200 RtpSenderAudioTest() {} | 1280 RtpSenderAudioTest() {} |
| 1201 | 1281 |
| 1202 void SetUp() override { | 1282 void SetUp() override { |
| 1203 payload_ = kAudioPayload; | 1283 payload_ = kAudioPayload; |
| 1204 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, | 1284 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, |
| 1205 nullptr, nullptr, nullptr, nullptr, nullptr, | 1285 nullptr, nullptr, nullptr, nullptr, nullptr, |
| 1206 nullptr, nullptr)); | 1286 nullptr, nullptr)); |
| 1207 rtp_sender_->SetSequenceNumber(kSeqNum); | 1287 rtp_sender_->SetSequenceNumber(kSeqNum); |
| 1208 } | 1288 } |
| 1209 }; | 1289 }; |
| 1210 | 1290 |
| 1211 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { | 1291 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { |
| 1212 class TestCallback : public StreamDataCountersCallback { | 1292 class TestCallback : public StreamDataCountersCallback { |
| 1213 public: | 1293 public: |
| 1214 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} | 1294 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1521 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), | 1601 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), |
| 1522 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); | 1602 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); |
| 1523 | 1603 |
| 1524 // Verify that this packet does have CVO byte. | 1604 // Verify that this packet does have CVO byte. |
| 1525 VerifyCVOPacket( | 1605 VerifyCVOPacket( |
| 1526 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), | 1606 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), |
| 1527 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, | 1607 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, |
| 1528 hdr.rotation); | 1608 hdr.rotation); |
| 1529 } | 1609 } |
| 1530 } // namespace webrtc | 1610 } // namespace webrtc |
| OLD | NEW |