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

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

Issue 2089773002: Add EncodedImageCallback::OnEncodedImage(). (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: . Created 4 years, 4 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
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 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
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_TRUE(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_TRUE(rtp_sender_->SendOutgoingData(
208 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, 208 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, kPayload,
209 kPayload, sizeof(kPayload), nullptr, nullptr)); 209 sizeof(kPayload), nullptr, 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
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after
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_TRUE(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_);
761 761
762 const int kStoredTimeInMs = 100; 762 const int kStoredTimeInMs = 100;
763 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 763 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
764 764
765 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, 765 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
766 PacketInfo::kNotAProbe); 766 PacketInfo::kNotAProbe);
767 767
768 // Process send bucket. Packet should now be sent. 768 // Process send bucket. Packet should now be sent.
(...skipping 30 matching lines...) Expand all
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_TRUE(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_);
814 814
815 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 815 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
816 _, kSeqNum, _, _, _)); 816 _, kSeqNum, _, _, _));
817 817
818 const int kStoredTimeInMs = 100; 818 const int kStoredTimeInMs = 100;
819 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 819 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
820 820
821 EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum)); 821 EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum));
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
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_TRUE(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
895 int total_packets_sent = 0; 895 int total_packets_sent = 0;
896 EXPECT_EQ(total_packets_sent, transport_.packets_sent_); 896 EXPECT_EQ(total_packets_sent, transport_.packets_sent_);
897 897
898 const int kStoredTimeInMs = 100; 898 const int kStoredTimeInMs = 100;
899 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 899 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
900 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false, 900 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false,
901 PacketInfo::kNotAProbe); 901 PacketInfo::kNotAProbe);
902 // Packet should now be sent. This test doesn't verify the regular video 902 // Packet should now be sent. This test doesn't verify the regular video
903 // packet, since it is tested in another test. 903 // packet, since it is tested in another test.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
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_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
952 capture_time_ms, kAllowRetransmission, 952 capture_time_ms, kAllowRetransmission,
953 RtpPacketSender::kNormalPriority)); 953 RtpPacketSender::kNormalPriority));
954 954
955 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false, 955 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false,
956 PacketInfo::kNotAProbe); 956 PacketInfo::kNotAProbe);
957 // Process send bucket. 957 // Process send bucket.
958 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); 958 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_);
959 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); 959 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_);
960 // Parse sent packet. 960 // Parse sent packet.
961 ASSERT_TRUE( 961 ASSERT_TRUE(
962 rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, &rtp_header)); 962 rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, &rtp_header));
963 963
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 } 1108 }
1109 1109
1110 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { 1110 TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) {
1111 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 1111 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
1112 const uint8_t payload_type = 127; 1112 const uint8_t payload_type = 127;
1113 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 1113 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
1114 0, 1500)); 1114 0, 1500));
1115 uint8_t payload[] = {47, 11, 32, 93, 89}; 1115 uint8_t payload[] = {47, 11, 32, 93, 89};
1116 1116
1117 // Send keyframe 1117 // Send keyframe
1118 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 1118 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234,
1119 4321, payload, sizeof(payload), 1119 4321, payload, sizeof(payload),
1120 nullptr, nullptr)); 1120 nullptr, nullptr, nullptr));
1121 1121
1122 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 1122 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
1123 transport_.last_sent_packet_len_); 1123 transport_.last_sent_packet_len_);
1124 webrtc::RTPHeader rtp_header; 1124 webrtc::RTPHeader rtp_header;
1125 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); 1125 ASSERT_TRUE(rtp_parser.Parse(&rtp_header));
1126 1126
1127 const uint8_t* payload_data = 1127 const uint8_t* payload_data =
1128 GetPayloadData(rtp_header, transport_.last_sent_packet_); 1128 GetPayloadData(rtp_header, transport_.last_sent_packet_);
1129 uint8_t generic_header = *payload_data++; 1129 uint8_t generic_header = *payload_data++;
1130 1130
1131 ASSERT_EQ(sizeof(payload) + sizeof(generic_header), 1131 ASSERT_EQ(sizeof(payload) + sizeof(generic_header),
1132 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); 1132 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_));
1133 1133
1134 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); 1134 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
1135 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); 1135 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
1136 1136
1137 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 1137 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
1138 1138
1139 // Send delta frame 1139 // Send delta frame
1140 payload[0] = 13; 1140 payload[0] = 13;
1141 payload[1] = 42; 1141 payload[1] = 42;
1142 payload[4] = 13; 1142 payload[4] = 13;
1143 1143
1144 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( 1144 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1145 kVideoFrameDelta, payload_type, 1234, 4321, payload, 1145 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload),
1146 sizeof(payload), nullptr, nullptr)); 1146 nullptr, nullptr, nullptr));
1147 1147
1148 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, 1148 RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_,
1149 transport_.last_sent_packet_len_); 1149 transport_.last_sent_packet_len_);
1150 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); 1150 ASSERT_TRUE(rtp_parser.Parse(&rtp_header));
1151 1151
1152 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); 1152 payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_);
1153 generic_header = *payload_data++; 1153 generic_header = *payload_data++;
1154 1154
1155 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); 1155 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
1156 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); 1156 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1188 const uint8_t payload_type = 127; 1188 const uint8_t payload_type = 127;
1189 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 1189 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
1190 0, 1500)); 1190 0, 1500));
1191 uint8_t payload[] = {47, 11, 32, 93, 89}; 1191 uint8_t payload[] = {47, 11, 32, 93, 89};
1192 rtp_sender_->SetStorePacketsStatus(true, 1); 1192 rtp_sender_->SetStorePacketsStatus(true, 1);
1193 uint32_t ssrc = rtp_sender_->SSRC(); 1193 uint32_t ssrc = rtp_sender_->SSRC();
1194 1194
1195 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) 1195 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
1196 .Times(::testing::AtLeast(2)); 1196 .Times(::testing::AtLeast(2));
1197 1197
1198 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 1198 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234,
1199 4321, payload, sizeof(payload), 1199 4321, payload, sizeof(payload),
1200 nullptr, nullptr)); 1200 nullptr, nullptr, nullptr));
1201 1201
1202 EXPECT_EQ(1U, callback.num_calls_); 1202 EXPECT_EQ(1U, callback.num_calls_);
1203 EXPECT_EQ(ssrc, callback.ssrc_); 1203 EXPECT_EQ(ssrc, callback.ssrc_);
1204 EXPECT_EQ(1, callback.frame_counts_.key_frames); 1204 EXPECT_EQ(1, callback.frame_counts_.key_frames);
1205 EXPECT_EQ(0, callback.frame_counts_.delta_frames); 1205 EXPECT_EQ(0, callback.frame_counts_.delta_frames);
1206 1206
1207 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( 1207 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1208 kVideoFrameDelta, payload_type, 1234, 4321, payload, 1208 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload),
1209 sizeof(payload), nullptr, nullptr)); 1209 nullptr, nullptr, nullptr));
1210 1210
1211 EXPECT_EQ(2U, callback.num_calls_); 1211 EXPECT_EQ(2U, callback.num_calls_);
1212 EXPECT_EQ(ssrc, callback.ssrc_); 1212 EXPECT_EQ(ssrc, callback.ssrc_);
1213 EXPECT_EQ(1, callback.frame_counts_.key_frames); 1213 EXPECT_EQ(1, callback.frame_counts_.key_frames);
1214 EXPECT_EQ(1, callback.frame_counts_.delta_frames); 1214 EXPECT_EQ(1, callback.frame_counts_.delta_frames);
1215 1215
1216 rtp_sender_.reset(); 1216 rtp_sender_.reset();
1217 } 1217 }
1218 1218
1219 TEST_F(RtpSenderTest, BitrateCallbacks) { 1219 TEST_F(RtpSenderTest, BitrateCallbacks) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1261 0, 1500)); 1261 0, 1500));
1262 uint8_t payload[] = {47, 11, 32, 93, 89}; 1262 uint8_t payload[] = {47, 11, 32, 93, 89};
1263 rtp_sender_->SetStorePacketsStatus(true, 1); 1263 rtp_sender_->SetStorePacketsStatus(true, 1);
1264 uint32_t ssrc = rtp_sender_->SSRC(); 1264 uint32_t ssrc = rtp_sender_->SSRC();
1265 1265
1266 // Initial process call so we get a new time window. 1266 // Initial process call so we get a new time window.
1267 rtp_sender_->ProcessBitrate(); 1267 rtp_sender_->ProcessBitrate();
1268 1268
1269 // Send a few frames. 1269 // Send a few frames.
1270 for (uint32_t i = 0; i < kNumPackets; ++i) { 1270 for (uint32_t i = 0; i < kNumPackets; ++i) {
1271 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( 1271 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1272 kVideoFrameKey, payload_type, 1234, 4321, payload, 1272 kVideoFrameKey, payload_type, 1234, 4321, payload, sizeof(payload),
1273 sizeof(payload), nullptr, nullptr)); 1273 nullptr, nullptr, nullptr));
1274 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); 1274 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval);
1275 } 1275 }
1276 1276
1277 rtp_sender_->ProcessBitrate(); 1277 rtp_sender_->ProcessBitrate();
1278 1278
1279 // We get one call for every stats updated, thus two calls since both the 1279 // We get one call for every stats updated, thus two calls since both the
1280 // stream stats and the retransmit stats are updated once. 1280 // stream stats and the retransmit stats are updated once.
1281 EXPECT_EQ(2u, callback.num_calls_); 1281 EXPECT_EQ(2u, callback.num_calls_);
1282 EXPECT_EQ(ssrc, callback.ssrc_); 1282 EXPECT_EQ(ssrc, callback.ssrc_);
1283 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); 1283 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 const uint8_t payload_type = 127; 1342 const uint8_t payload_type = 127;
1343 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 1343 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
1344 0, 1500)); 1344 0, 1500));
1345 uint8_t payload[] = {47, 11, 32, 93, 89}; 1345 uint8_t payload[] = {47, 11, 32, 93, 89};
1346 rtp_sender_->SetStorePacketsStatus(true, 1); 1346 rtp_sender_->SetStorePacketsStatus(true, 1);
1347 uint32_t ssrc = rtp_sender_->SSRC(); 1347 uint32_t ssrc = rtp_sender_->SSRC();
1348 1348
1349 rtp_sender_->RegisterRtpStatisticsCallback(&callback); 1349 rtp_sender_->RegisterRtpStatisticsCallback(&callback);
1350 1350
1351 // Send a frame. 1351 // Send a frame.
1352 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 1352 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1353 4321, payload, sizeof(payload), 1353 kVideoFrameKey, payload_type, 1234, 4321, payload,
1354 nullptr, nullptr)); 1354 sizeof(payload), nullptr, nullptr, nullptr));
1355 StreamDataCounters expected; 1355 StreamDataCounters expected;
1356 expected.transmitted.payload_bytes = 6; 1356 expected.transmitted.payload_bytes = 6;
1357 expected.transmitted.header_bytes = 12; 1357 expected.transmitted.header_bytes = 12;
1358 expected.transmitted.padding_bytes = 0; 1358 expected.transmitted.padding_bytes = 0;
1359 expected.transmitted.packets = 1; 1359 expected.transmitted.packets = 1;
1360 expected.retransmitted.payload_bytes = 0; 1360 expected.retransmitted.payload_bytes = 0;
1361 expected.retransmitted.header_bytes = 0; 1361 expected.retransmitted.header_bytes = 0;
1362 expected.retransmitted.padding_bytes = 0; 1362 expected.retransmitted.padding_bytes = 0;
1363 expected.retransmitted.packets = 0; 1363 expected.retransmitted.packets = 0;
1364 expected.fec.packets = 0; 1364 expected.fec.packets = 0;
(...skipping 19 matching lines...) Expand all
1384 expected.transmitted.packets = 3; 1384 expected.transmitted.packets = 3;
1385 callback.Matches(ssrc, expected); 1385 callback.Matches(ssrc, expected);
1386 1386
1387 // Send FEC. 1387 // Send FEC.
1388 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType); 1388 rtp_sender_->SetGenericFECStatus(true, kRedPayloadType, kUlpfecPayloadType);
1389 FecProtectionParams fec_params; 1389 FecProtectionParams fec_params;
1390 fec_params.fec_mask_type = kFecMaskRandom; 1390 fec_params.fec_mask_type = kFecMaskRandom;
1391 fec_params.fec_rate = 1; 1391 fec_params.fec_rate = 1;
1392 fec_params.max_fec_frames = 1; 1392 fec_params.max_fec_frames = 1;
1393 rtp_sender_->SetFecParameters(&fec_params, &fec_params); 1393 rtp_sender_->SetFecParameters(&fec_params, &fec_params);
1394 ASSERT_EQ(0, rtp_sender_->SendOutgoingData( 1394 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1395 kVideoFrameDelta, payload_type, 1234, 4321, payload, 1395 kVideoFrameDelta, payload_type, 1234, 4321, payload,
1396 sizeof(payload), nullptr, nullptr)); 1396 sizeof(payload), nullptr, nullptr, nullptr));
1397 expected.transmitted.payload_bytes = 40; 1397 expected.transmitted.payload_bytes = 40;
1398 expected.transmitted.header_bytes = 60; 1398 expected.transmitted.header_bytes = 60;
1399 expected.transmitted.packets = 5; 1399 expected.transmitted.packets = 5;
1400 expected.fec.packets = 1; 1400 expected.fec.packets = 1;
1401 callback.Matches(ssrc, expected); 1401 callback.Matches(ssrc, expected);
1402 1402
1403 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); 1403 rtp_sender_->RegisterRtpStatisticsCallback(nullptr);
1404 } 1404 }
1405 1405
1406 TEST_F(RtpSenderAudioTest, SendAudio) { 1406 TEST_F(RtpSenderAudioTest, SendAudio) {
1407 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1407 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1408 const uint8_t payload_type = 127; 1408 const uint8_t payload_type = 127;
1409 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1409 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1410 0, 1500)); 1410 0, 1500));
1411 uint8_t payload[] = {47, 11, 32, 93, 89}; 1411 uint8_t payload[] = {47, 11, 32, 93, 89};
1412 1412
1413 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 1413 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1414 4321, payload, sizeof(payload), 1414 kAudioFrameCN, payload_type, 1234, 4321, payload,
1415 nullptr, nullptr)); 1415 sizeof(payload), nullptr, nullptr, nullptr));
1416 1416
1417 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 1417 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
1418 transport_.last_sent_packet_len_); 1418 transport_.last_sent_packet_len_);
1419 webrtc::RTPHeader rtp_header; 1419 webrtc::RTPHeader rtp_header;
1420 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); 1420 ASSERT_TRUE(rtp_parser.Parse(&rtp_header));
1421 1421
1422 const uint8_t* payload_data = 1422 const uint8_t* payload_data =
1423 GetPayloadData(rtp_header, transport_.last_sent_packet_); 1423 GetPayloadData(rtp_header, transport_.last_sent_packet_);
1424 1424
1425 ASSERT_EQ(sizeof(payload), 1425 ASSERT_EQ(sizeof(payload),
1426 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); 1426 GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_));
1427 1427
1428 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); 1428 EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
1429 } 1429 }
1430 1430
1431 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { 1431 TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) {
1432 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); 1432 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel));
1433 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, 1433 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
1434 kAudioLevelExtensionId)); 1434 kAudioLevelExtensionId));
1435 1435
1436 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1436 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1437 const uint8_t payload_type = 127; 1437 const uint8_t payload_type = 127;
1438 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1438 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1439 0, 1500)); 1439 0, 1500));
1440 uint8_t payload[] = {47, 11, 32, 93, 89}; 1440 uint8_t payload[] = {47, 11, 32, 93, 89};
1441 1441
1442 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kAudioFrameCN, payload_type, 1234, 1442 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1443 4321, payload, sizeof(payload), 1443 kAudioFrameCN, payload_type, 1234, 4321, payload,
1444 nullptr, nullptr)); 1444 sizeof(payload), nullptr, nullptr, nullptr));
1445 1445
1446 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 1446 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
1447 transport_.last_sent_packet_len_); 1447 transport_.last_sent_packet_len_);
1448 webrtc::RTPHeader rtp_header; 1448 webrtc::RTPHeader rtp_header;
1449 ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); 1449 ASSERT_TRUE(rtp_parser.Parse(&rtp_header));
1450 1450
1451 const uint8_t* payload_data = 1451 const uint8_t* payload_data =
1452 GetPayloadData(rtp_header, transport_.last_sent_packet_); 1452 GetPayloadData(rtp_header, transport_.last_sent_packet_);
1453 1453
1454 ASSERT_EQ(sizeof(payload), 1454 ASSERT_EQ(sizeof(payload),
(...skipping 28 matching lines...) Expand all
1483 // Registering the payload again for audio stream with different payload name. 1483 // Registering the payload again for audio stream with different payload name.
1484 const char kPayloadName[] = "payload_name"; 1484 const char kPayloadName[] = "payload_name";
1485 ASSERT_EQ( 1485 ASSERT_EQ(
1486 0, rtp_sender_->RegisterPayload(kPayloadName, payload_type, 8000, 1, 0)); 1486 0, rtp_sender_->RegisterPayload(kPayloadName, payload_type, 8000, 1, 0));
1487 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 1487 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
1488 // DTMF event key=9, duration=500 and attenuationdB=10 1488 // DTMF event key=9, duration=500 and attenuationdB=10
1489 rtp_sender_->SendTelephoneEvent(9, 500, 10); 1489 rtp_sender_->SendTelephoneEvent(9, 500, 10);
1490 // During start, it takes the starting timestamp as last sent timestamp. 1490 // During start, it takes the starting timestamp as last sent timestamp.
1491 // The duration is calculated as the difference of current and last sent 1491 // The duration is calculated as the difference of current and last sent
1492 // timestamp. So for first call it will skip since the duration is zero. 1492 // timestamp. So for first call it will skip since the duration is zero.
1493 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, 1493 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type,
1494 capture_time_ms, 0, nullptr, 0, 1494 capture_time_ms, 0, nullptr, 0,
1495 nullptr, nullptr)); 1495 nullptr, nullptr, nullptr));
1496 // DTMF Sample Length is (Frequency/1000) * Duration. 1496 // DTMF Sample Length is (Frequency/1000) * Duration.
1497 // So in this case, it is (8000/1000) * 500 = 4000. 1497 // So in this case, it is (8000/1000) * 500 = 4000.
1498 // Sending it as two packets. 1498 // Sending it as two packets.
1499 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, 1499 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1500 capture_time_ms + 2000, 0, nullptr, 1500 kEmptyFrame, payload_type, capture_time_ms + 2000, 0,
1501 0, nullptr, nullptr)); 1501 nullptr, 0, nullptr, nullptr, nullptr));
1502 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( 1502 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser(
1503 webrtc::RtpHeaderParser::Create()); 1503 webrtc::RtpHeaderParser::Create());
1504 ASSERT_TRUE(rtp_parser.get() != nullptr); 1504 ASSERT_TRUE(rtp_parser.get() != nullptr);
1505 webrtc::RTPHeader rtp_header; 1505 webrtc::RTPHeader rtp_header;
1506 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, 1506 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_,
1507 transport_.last_sent_packet_len_, &rtp_header)); 1507 transport_.last_sent_packet_len_, &rtp_header));
1508 // Marker Bit should be set to 1 for first packet. 1508 // Marker Bit should be set to 1 for first packet.
1509 EXPECT_TRUE(rtp_header.markerBit); 1509 EXPECT_TRUE(rtp_header.markerBit);
1510 1510
1511 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kEmptyFrame, payload_type, 1511 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1512 capture_time_ms + 4000, 0, nullptr, 1512 kEmptyFrame, payload_type, capture_time_ms + 4000, 0,
1513 0, nullptr, nullptr)); 1513 nullptr, 0, nullptr, nullptr, nullptr));
1514 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, 1514 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_,
1515 transport_.last_sent_packet_len_, &rtp_header)); 1515 transport_.last_sent_packet_len_, &rtp_header));
1516 // Marker Bit should be set to 0 for rest of the packets. 1516 // Marker Bit should be set to 0 for rest of the packets.
1517 EXPECT_FALSE(rtp_header.markerBit); 1517 EXPECT_FALSE(rtp_header.markerBit);
1518 } 1518 }
1519 1519
1520 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { 1520 TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) {
1521 const char* kPayloadName = "GENERIC"; 1521 const char* kPayloadName = "GENERIC";
1522 const uint8_t kPayloadType = 127; 1522 const uint8_t kPayloadType = 127;
1523 rtp_sender_->SetSSRC(1234); 1523 rtp_sender_->SetSSRC(1234);
1524 rtp_sender_->SetRtxSsrc(4321); 1524 rtp_sender_->SetRtxSsrc(4321);
1525 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); 1525 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType);
1526 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); 1526 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
1527 1527
1528 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, 1528 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000,
1529 0, 1500)); 1529 0, 1500));
1530 uint8_t payload[] = {47, 11, 32, 93, 89}; 1530 uint8_t payload[] = {47, 11, 32, 93, 89};
1531 1531
1532 ASSERT_EQ(0, rtp_sender_->SendOutgoingData(kVideoFrameKey, kPayloadType, 1234, 1532 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1533 4321, payload, sizeof(payload), 1533 kVideoFrameKey, kPayloadType, 1234, 4321, payload,
1534 nullptr, nullptr)); 1534 sizeof(payload), nullptr, nullptr, nullptr));
1535 1535
1536 // Will send 2 full-size padding packets. 1536 // Will send 2 full-size padding packets.
1537 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); 1537 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe);
1538 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe); 1538 rtp_sender_->TimeToSendPadding(1, PacketInfo::kNotAProbe);
1539 1539
1540 StreamDataCounters rtp_stats; 1540 StreamDataCounters rtp_stats;
1541 StreamDataCounters rtx_stats; 1541 StreamDataCounters rtx_stats;
1542 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); 1542 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats);
1543 1543
1544 // Payload + 1-byte generic header. 1544 // Payload + 1-byte generic header.
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1621 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), 1621 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()),
1622 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); 1622 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation);
1623 1623
1624 // Verify that this packet does have CVO byte. 1624 // Verify that this packet does have CVO byte.
1625 VerifyCVOPacket( 1625 VerifyCVOPacket(
1626 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), 1626 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()),
1627 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, 1627 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1,
1628 hdr.rotation); 1628 hdr.rotation);
1629 } 1629 }
1630 } // namespace webrtc 1630 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc ('k') | webrtc/modules/rtp_rtcp/source/rtp_sender_video.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698