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

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

Issue 2217383002: Use RtpPacketToSend in RtpSenderVideo (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase 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
11 #include <list> 11 #include <list>
12 #include <memory> 12 #include <memory>
13 #include <vector> 13 #include <vector>
14 14
15 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "webrtc/base/buffer.h" 17 #include "webrtc/base/buffer.h"
18 #include "webrtc/base/rate_limiter.h" 18 #include "webrtc/base/rate_limiter.h"
19 #include "webrtc/call/mock/mock_rtc_event_log.h" 19 #include "webrtc/call/mock/mock_rtc_event_log.h"
20 #include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h" 20 #include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h"
21 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" 21 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
22 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" 22 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
23 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h" 23 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h" 24 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h"
25 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h"
26 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h"
27 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h"
25 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h" 28 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h"
26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h" 29 #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h"
27 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" 30 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
28 #include "webrtc/system_wrappers/include/stl_util.h" 31 #include "webrtc/system_wrappers/include/stl_util.h"
29 #include "webrtc/test/mock_transport.h" 32 #include "webrtc/test/mock_transport.h"
30 #include "webrtc/typedefs.h" 33 #include "webrtc/typedefs.h"
31 34
32 namespace webrtc { 35 namespace webrtc {
33 36
34 namespace { 37 namespace {
35 const int kTransmissionTimeOffsetExtensionId = 1; 38 const int kTransmissionTimeOffsetExtensionId = 1;
36 const int kAbsoluteSendTimeExtensionId = 14; 39 const int kAbsoluteSendTimeExtensionId = 14;
37 const int kTransportSequenceNumberExtensionId = 13; 40 const int kTransportSequenceNumberExtensionId = 13;
38 const int kPayload = 100; 41 const int kPayload = 100;
39 const int kRtxPayload = 98; 42 const int kRtxPayload = 98;
40 const uint32_t kTimestamp = 10; 43 const uint32_t kTimestamp = 10;
41 const uint16_t kSeqNum = 33; 44 const uint16_t kSeqNum = 33;
42 const int kTimeOffset = 22222; 45 const int kTimeOffset = 22222;
43 const int kMaxPacketLength = 1500; 46 const int64_t kAbsoluteSendTimeMs = 1234567890ll;
44 const uint32_t kAbsoluteSendTime = 0x00aabbcc; 47 const uint32_t kAbsoluteSendTime =
48 AbsoluteSendTime::MsTo24Bits(kAbsoluteSendTimeMs);
45 const uint8_t kAudioLevel = 0x5a; 49 const uint8_t kAudioLevel = 0x5a;
46 const uint16_t kTransportSequenceNumber = 0xaabbu; 50 const uint16_t kTransportSequenceNumber = 0xaabbu;
47 const uint8_t kAudioLevelExtensionId = 9; 51 const uint8_t kAudioLevelExtensionId = 9;
48 const int kAudioPayload = 103; 52 const int kAudioPayload = 103;
49 const uint64_t kStartTime = 123456789; 53 const uint64_t kStartTime = 123456789;
50 const size_t kMaxPaddingSize = 224u; 54 const size_t kMaxPaddingSize = 224u;
51 const int kVideoRotationExtensionId = 5; 55 const int kVideoRotationExtensionId = 5;
52 const VideoRotation kRotation = kVideoRotation_270; 56 const VideoRotation kRotation = kVideoRotation_270;
53 57
54 using testing::_; 58 using testing::_;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 SimulatedClock fake_clock_; 159 SimulatedClock fake_clock_;
156 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; 160 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_;
157 MockRtpPacketSender mock_paced_sender_; 161 MockRtpPacketSender mock_paced_sender_;
158 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_; 162 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_;
159 testing::StrictMock<MockSendPacketObserver> send_packet_observer_; 163 testing::StrictMock<MockSendPacketObserver> send_packet_observer_;
160 RateLimiter retransmission_rate_limiter_; 164 RateLimiter retransmission_rate_limiter_;
161 std::unique_ptr<RTPSender> rtp_sender_; 165 std::unique_ptr<RTPSender> rtp_sender_;
162 int payload_; 166 int payload_;
163 LoopbackTransportTest transport_; 167 LoopbackTransportTest transport_;
164 const bool kMarkerBit; 168 const bool kMarkerBit;
165 uint8_t packet_[kMaxPacketLength]; 169 std::unique_ptr<RtpPacketToSend> packet_;
166 170
167 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { 171 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) {
168 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); 172 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0);
169 } 173 }
170 174
171 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) { 175 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) {
172 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0); 176 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0);
173 } 177 }
174 178
175 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, 179 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header,
176 bool marker_bit, 180 bool marker_bit,
177 uint8_t number_of_csrcs) { 181 uint8_t number_of_csrcs) {
178 EXPECT_EQ(marker_bit, rtp_header.markerBit); 182 EXPECT_EQ(marker_bit, rtp_header.markerBit);
179 EXPECT_EQ(payload_, rtp_header.payloadType); 183 EXPECT_EQ(payload_, rtp_header.payloadType);
180 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber); 184 EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber);
181 EXPECT_EQ(kTimestamp, rtp_header.timestamp); 185 EXPECT_EQ(kTimestamp, rtp_header.timestamp);
182 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); 186 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc);
183 EXPECT_EQ(number_of_csrcs, rtp_header.numCSRCs); 187 EXPECT_EQ(number_of_csrcs, rtp_header.numCSRCs);
184 EXPECT_EQ(0U, rtp_header.paddingLength); 188 EXPECT_EQ(0U, rtp_header.paddingLength);
185 } 189 }
186 190
191 void BuildRtpPacket(uint8_t payload,
192 bool marker_bit,
193 uint32_t timestamp,
194 int64_t capture_time_ms) {
195 packet_ = rtp_sender_->AllocatePacket(false);
196 ASSERT_TRUE(packet_);
197 packet_->SetPayloadType(payload);
198 packet_->SetMarker(marker_bit);
199 packet_->SetTimestamp(timestamp);
200 packet_->set_capture_time_ms(capture_time_ms);
201 ASSERT_TRUE(rtp_sender_->PrepareToSend(packet_.get()));
202 }
203
187 void SendPacket(int64_t capture_time_ms, int payload_length) { 204 void SendPacket(int64_t capture_time_ms, int payload_length) {
188 uint32_t timestamp = capture_time_ms * 90; 205 uint32_t timestamp = capture_time_ms * 90;
189 int32_t rtp_length = rtp_sender_->BuildRtpHeader( 206 packet_ = rtp_sender_->AllocatePacket(false);
190 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); 207 ASSERT_TRUE(packet_);
191 ASSERT_GE(rtp_length, 0); 208 packet_->SetPayloadType(kPayload);
209 packet_->SetMarker(kMarkerBit);
210 packet_->SetTimestamp(timestamp);
211 packet_->set_capture_time_ms(capture_time_ms);
212 packet_->AllocatePayload(payload_length);
213 ASSERT_TRUE(rtp_sender_->PrepareToSend(packet_.get()));
192 214
193 // Packet should be stored in a send bucket. 215 // Packet should be stored in a send bucket.
194 EXPECT_TRUE(rtp_sender_->SendToNetwork( 216 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet_),
195 packet_, payload_length, rtp_length, capture_time_ms, 217 kAllowRetransmission,
196 kAllowRetransmission, RtpPacketSender::kNormalPriority)); 218 RtpPacketSender::kNormalPriority));
197 } 219 }
198 220
199 void SendGenericPayload() { 221 void SendGenericPayload() {
200 const uint8_t kPayload[] = {47, 11, 32, 93, 89}; 222 const uint8_t kPayload[] = {47, 11, 32, 93, 89};
201 const uint32_t kTimestamp = 1234; 223 const uint32_t kTimestamp = 1234;
202 const uint8_t kPayloadType = 127; 224 const uint8_t kPayloadType = 127;
203 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); 225 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds();
204 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 226 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
205 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, 227 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000,
206 0, 1500)); 228 0, 1500));
(...skipping 20 matching lines...) Expand all
227 new RTPSenderVideo(&fake_clock_, rtp_sender_.get())); 249 new RTPSenderVideo(&fake_clock_, rtp_sender_.get()));
228 } 250 }
229 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; 251 std::unique_ptr<RTPSenderVideo> rtp_sender_video_;
230 252
231 void VerifyCVOPacket(uint8_t* data, 253 void VerifyCVOPacket(uint8_t* data,
232 size_t len, 254 size_t len,
233 bool expect_cvo, 255 bool expect_cvo,
234 RtpHeaderExtensionMap* map, 256 RtpHeaderExtensionMap* map,
235 uint16_t seq_num, 257 uint16_t seq_num,
236 VideoRotation rotation) { 258 VideoRotation rotation) {
237 webrtc::RtpUtility::RtpHeaderParser rtp_parser(data, len); 259 RtpPacketReceived rtp_parsed_packet(map);
260 ASSERT_TRUE(rtp_parsed_packet.Parse(data, len));
238 261
239 webrtc::RTPHeader rtp_header; 262 EXPECT_EQ(payload_, rtp_parsed_packet.PayloadType());
240 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( 263 EXPECT_EQ(seq_num, rtp_parsed_packet.SequenceNumber());
241 packet_, kPayload, expect_cvo /* marker_bit */, kTimestamp, 0)); 264 EXPECT_EQ(kTimestamp, rtp_parsed_packet.Timestamp());
242 if (expect_cvo) { 265 EXPECT_EQ(rtp_sender_->SSRC(), rtp_parsed_packet.Ssrc());
243 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), 266 EXPECT_TRUE(rtp_parsed_packet.Csrcs().empty());
244 length); 267 EXPECT_EQ(0U, rtp_parsed_packet.padding_size());
245 } else { 268 uint8_t cvo = 0;
246 ASSERT_EQ(kRtpHeaderSize, length); 269 EXPECT_EQ(expect_cvo,
247 } 270 rtp_parsed_packet.GetExtension<VideoOrientation>(&cvo));
248 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, map)); 271 EXPECT_EQ(ConvertVideoRotationToCVOByte(rotation), cvo);
249 ASSERT_FALSE(rtp_parser.RTCP());
250 EXPECT_EQ(payload_, rtp_header.payloadType);
251 EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
252 EXPECT_EQ(kTimestamp, rtp_header.timestamp);
253 EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc);
254 EXPECT_EQ(0, rtp_header.numCSRCs);
255 EXPECT_EQ(0U, rtp_header.paddingLength);
256 EXPECT_EQ(ConvertVideoRotationToCVOByte(rotation),
257 rtp_header.extension.videoRotation);
258 } 272 }
259 }; 273 };
260 274
261 TEST_F(RtpSenderTestWithoutPacer, 275 TEST_F(RtpSenderTestWithoutPacer,
262 RegisterRtpTransmissionTimeOffsetHeaderExtension) { 276 RegisterRtpTransmissionTimeOffsetHeaderExtension) {
263 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); 277 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength());
264 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 278 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
265 kRtpExtensionTransmissionTimeOffset, 279 kRtpExtensionTransmissionTimeOffset,
266 kTransmissionTimeOffsetExtensionId)); 280 kTransmissionTimeOffsetExtensionId));
267 EXPECT_EQ(kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength, 281 EXPECT_EQ(kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 kAbsoluteSendTimeLength), 326 kAbsoluteSendTimeLength),
313 rtp_sender_->RtpHeaderExtensionLength()); 327 rtp_sender_->RtpHeaderExtensionLength());
314 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, 328 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
315 kAudioLevelExtensionId)); 329 kAudioLevelExtensionId));
316 EXPECT_EQ(RtpUtility::Word32Align( 330 EXPECT_EQ(RtpUtility::Word32Align(
317 kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength + 331 kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength +
318 kAbsoluteSendTimeLength + kAudioLevelLength), 332 kAbsoluteSendTimeLength + kAudioLevelLength),
319 rtp_sender_->RtpHeaderExtensionLength()); 333 rtp_sender_->RtpHeaderExtensionLength());
320 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 334 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
321 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 335 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
322 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
323 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + 336 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength +
324 kTransmissionTimeOffsetLength + 337 kTransmissionTimeOffsetLength +
325 kAbsoluteSendTimeLength + 338 kAbsoluteSendTimeLength +
326 kAudioLevelLength + kVideoRotationLength), 339 kAudioLevelLength + kVideoRotationLength),
327 rtp_sender_->RtpHeaderExtensionLength()); 340 rtp_sender_->RtpHeaderExtensionLength());
328 341
329 // Deregister starts. 342 // Deregister starts.
330 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension( 343 EXPECT_EQ(0, rtp_sender_->DeregisterRtpHeaderExtension(
331 kRtpExtensionTransmissionTimeOffset)); 344 kRtpExtensionTransmissionTimeOffset));
332 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength + 345 EXPECT_EQ(RtpUtility::Word32Align(kRtpOneByteHeaderLength +
(...skipping 12 matching lines...) Expand all
345 rtp_sender_->RtpHeaderExtensionLength()); 358 rtp_sender_->RtpHeaderExtensionLength());
346 EXPECT_EQ( 359 EXPECT_EQ(
347 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation)); 360 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation));
348 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); 361 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength());
349 } 362 }
350 363
351 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpVideoRotationHeaderExtension) { 364 TEST_F(RtpSenderTestWithoutPacer, RegisterRtpVideoRotationHeaderExtension) {
352 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); 365 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength());
353 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 366 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
354 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 367 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
355 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength());
356
357 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
358 EXPECT_EQ( 368 EXPECT_EQ(
359 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength), 369 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength),
360 rtp_sender_->RtpHeaderExtensionLength()); 370 rtp_sender_->RtpHeaderExtensionLength());
361 EXPECT_EQ( 371 EXPECT_EQ(
362 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation)); 372 0, rtp_sender_->DeregisterRtpHeaderExtension(kRtpExtensionVideoRotation));
363 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength()); 373 EXPECT_EQ(0u, rtp_sender_->RtpHeaderExtensionLength());
364 } 374 }
365 375
366 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) { 376 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacket) {
367 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( 377 packet_ = rtp_sender_->AllocatePacket(false);
368 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 378 packet_->SetMarker(kMarkerBit);
369 ASSERT_EQ(kRtpHeaderSize, length); 379 packet_->SetPayloadType(kPayload);
380 packet_->SetTimestamp(kTimestamp);
381 rtp_sender_->PrepareToSend(packet_.get());
382 ASSERT_EQ(kRtpHeaderSize, packet_->size());
370 383
371 // Verify 384 // Verify
372 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 385 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
386 packet_->size());
373 webrtc::RTPHeader rtp_header; 387 webrtc::RTPHeader rtp_header;
374 388
375 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, nullptr); 389 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, nullptr);
376 390
377 ASSERT_TRUE(valid_rtp_header); 391 ASSERT_TRUE(valid_rtp_header);
378 ASSERT_FALSE(rtp_parser.RTCP()); 392 ASSERT_FALSE(rtp_parser.RTCP());
379 VerifyRTPHeaderCommon(rtp_header); 393 VerifyRTPHeaderCommon(rtp_header);
380 EXPECT_EQ(length, rtp_header.headerLength); 394 EXPECT_EQ(packet_->size(), rtp_header.headerLength);
381 EXPECT_FALSE(rtp_header.extension.hasTransmissionTimeOffset); 395 EXPECT_FALSE(rtp_header.extension.hasTransmissionTimeOffset);
382 EXPECT_FALSE(rtp_header.extension.hasAbsoluteSendTime); 396 EXPECT_FALSE(rtp_header.extension.hasAbsoluteSendTime);
383 EXPECT_FALSE(rtp_header.extension.hasAudioLevel); 397 EXPECT_FALSE(rtp_header.extension.hasAudioLevel);
384 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 398 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
385 EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime); 399 EXPECT_EQ(0u, rtp_header.extension.absoluteSendTime);
386 EXPECT_FALSE(rtp_header.extension.voiceActivity); 400 EXPECT_FALSE(rtp_header.extension.voiceActivity);
387 EXPECT_EQ(0u, rtp_header.extension.audioLevel); 401 EXPECT_EQ(0u, rtp_header.extension.audioLevel);
388 EXPECT_EQ(0u, rtp_header.extension.videoRotation); 402 EXPECT_EQ(0u, rtp_header.extension.videoRotation);
389 } 403 }
390 404
391 TEST_F(RtpSenderTestWithoutPacer, 405 TEST_F(RtpSenderTestWithoutPacer,
392 BuildRTPPacketWithTransmissionOffsetExtension) { 406 BuildRTPPacketWithTransmissionOffsetExtension) {
393 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset));
394 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 407 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
395 kRtpExtensionTransmissionTimeOffset, 408 kRtpExtensionTransmissionTimeOffset,
396 kTransmissionTimeOffsetExtensionId)); 409 kTransmissionTimeOffsetExtensionId));
397 410
398 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( 411 packet_ = rtp_sender_->AllocatePacket(false);
399 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 412 packet_->SetPayloadType(kPayload);
400 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); 413 packet_->SetMarker(kMarkerBit);
414 packet_->SetTimestamp(kTimestamp);
415 rtp_sender_->PrepareToSend(packet_.get());
416 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
417 packet_->size());
418 EXPECT_TRUE(packet_->SetExtension<TransmissionOffset>(kTimeOffset));
401 419
402 // Verify 420 // Verify
403 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 421 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
422 packet_->size());
404 webrtc::RTPHeader rtp_header; 423 webrtc::RTPHeader rtp_header;
405 424
406 RtpHeaderExtensionMap map; 425 RtpHeaderExtensionMap map;
407 map.Register(kRtpExtensionTransmissionTimeOffset, 426 map.Register(kRtpExtensionTransmissionTimeOffset,
408 kTransmissionTimeOffsetExtensionId); 427 kTransmissionTimeOffsetExtensionId);
409 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); 428 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
410 429
411 ASSERT_TRUE(valid_rtp_header); 430 ASSERT_TRUE(valid_rtp_header);
412 ASSERT_FALSE(rtp_parser.RTCP()); 431 ASSERT_FALSE(rtp_parser.RTCP());
413 VerifyRTPHeaderCommon(rtp_header); 432 VerifyRTPHeaderCommon(rtp_header);
414 EXPECT_EQ(length, rtp_header.headerLength); 433 EXPECT_EQ(packet_->size(), rtp_header.headerLength);
415 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); 434 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
416 EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset); 435 EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset);
417 436
418 // Parse without map extension 437 // Parse without map extension
419 webrtc::RTPHeader rtp_header2; 438 webrtc::RTPHeader rtp_header2;
420 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr); 439 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
421 440
422 ASSERT_TRUE(valid_rtp_header2); 441 ASSERT_TRUE(valid_rtp_header2);
423 VerifyRTPHeaderCommon(rtp_header2); 442 VerifyRTPHeaderCommon(rtp_header2);
424 EXPECT_EQ(length, rtp_header2.headerLength); 443 EXPECT_EQ(packet_->size(), rtp_header2.headerLength);
425 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset); 444 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
426 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); 445 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
427 } 446 }
428 447
429 TEST_F(RtpSenderTestWithoutPacer, 448 TEST_F(RtpSenderTestWithoutPacer,
430 BuildRTPPacketWithNegativeTransmissionOffsetExtension) { 449 BuildRTPPacketWithNegativeTransmissionOffsetExtension) {
431 const int kNegTimeOffset = -500; 450 const int kNegTimeOffset = -500;
432 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kNegTimeOffset));
433 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 451 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
434 kRtpExtensionTransmissionTimeOffset, 452 kRtpExtensionTransmissionTimeOffset,
435 kTransmissionTimeOffsetExtensionId)); 453 kTransmissionTimeOffsetExtensionId));
436 454
437 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( 455 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, 0);
438 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 456 ASSERT_TRUE(packet_->SetExtension<TransmissionOffset>(kNegTimeOffset));
439 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); 457 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
458 packet_->size());
440 459
441 // Verify 460 // Verify
442 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 461 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
462 packet_->size());
443 webrtc::RTPHeader rtp_header; 463 webrtc::RTPHeader rtp_header;
444 464
445 RtpHeaderExtensionMap map; 465 RtpHeaderExtensionMap map;
446 map.Register(kRtpExtensionTransmissionTimeOffset, 466 map.Register(kRtpExtensionTransmissionTimeOffset,
447 kTransmissionTimeOffsetExtensionId); 467 kTransmissionTimeOffsetExtensionId);
448 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); 468 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
449 469
450 ASSERT_TRUE(valid_rtp_header); 470 ASSERT_TRUE(valid_rtp_header);
451 ASSERT_FALSE(rtp_parser.RTCP()); 471 ASSERT_FALSE(rtp_parser.RTCP());
452 VerifyRTPHeaderCommon(rtp_header); 472 VerifyRTPHeaderCommon(rtp_header);
453 EXPECT_EQ(length, rtp_header.headerLength); 473 EXPECT_EQ(packet_->size(), rtp_header.headerLength);
454 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); 474 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
455 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset); 475 EXPECT_EQ(kNegTimeOffset, rtp_header.extension.transmissionTimeOffset);
456 } 476 }
457 477
458 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) { 478 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAbsoluteSendTimeExtension) {
459 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime));
460 EXPECT_EQ( 479 EXPECT_EQ(
461 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 480 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
462 kAbsoluteSendTimeExtensionId)); 481 kAbsoluteSendTimeExtensionId));
463 482
464 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( 483 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, 0);
465 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 484 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
466 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); 485 packet_->size());
486 ASSERT_TRUE(packet_->SetExtension<AbsoluteSendTime>(kAbsoluteSendTimeMs));
467 487
468 // Verify 488 // Verify
469 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 489 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
490 packet_->size());
470 webrtc::RTPHeader rtp_header; 491 webrtc::RTPHeader rtp_header;
471 492
472 RtpHeaderExtensionMap map; 493 RtpHeaderExtensionMap map;
473 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); 494 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
474 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); 495 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
475 496
476 ASSERT_TRUE(valid_rtp_header); 497 ASSERT_TRUE(valid_rtp_header);
477 ASSERT_FALSE(rtp_parser.RTCP()); 498 ASSERT_FALSE(rtp_parser.RTCP());
478 VerifyRTPHeaderCommon(rtp_header); 499 VerifyRTPHeaderCommon(rtp_header);
479 EXPECT_EQ(length, rtp_header.headerLength); 500 EXPECT_EQ(packet_->size(), rtp_header.headerLength);
480 EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime); 501 EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime);
481 EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime); 502 EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime);
482 503
483 // Parse without map extension 504 // Parse without map extension
484 webrtc::RTPHeader rtp_header2; 505 webrtc::RTPHeader rtp_header2;
485 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr); 506 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
486 507
487 ASSERT_TRUE(valid_rtp_header2); 508 ASSERT_TRUE(valid_rtp_header2);
488 VerifyRTPHeaderCommon(rtp_header2); 509 VerifyRTPHeaderCommon(rtp_header2);
489 EXPECT_EQ(length, rtp_header2.headerLength); 510 EXPECT_EQ(packet_->size(), rtp_header2.headerLength);
490 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime); 511 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime);
491 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime); 512 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime);
492 } 513 }
493 514
494 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { 515 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) {
495 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 516 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
496 kRtpExtensionTransportSequenceNumber, 517 kRtpExtensionTransportSequenceNumber,
497 kTransportSequenceNumberExtensionId)); 518 kTransportSequenceNumberExtensionId));
498 519
499 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) 520 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
(...skipping 30 matching lines...) Expand all
530 .WillOnce(testing::Return(kTransportSequenceNumber)); 551 .WillOnce(testing::Return(kTransportSequenceNumber));
531 EXPECT_CALL(send_packet_observer_, 552 EXPECT_CALL(send_packet_observer_,
532 OnSendPacket(kTransportSequenceNumber, _, _)) 553 OnSendPacket(kTransportSequenceNumber, _, _))
533 .Times(1); 554 .Times(1);
534 555
535 SendGenericPayload(); 556 SendGenericPayload();
536 } 557 }
537 558
538 // Test CVO header extension is only set when marker bit is true. 559 // Test CVO header extension is only set when marker bit is true.
539 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) { 560 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithVideoRotation_MarkerBit) {
540 rtp_sender_->SetVideoRotation(kRotation);
541 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 561 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
542 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 562 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
543 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
544 563
545 RtpHeaderExtensionMap map; 564 RtpHeaderExtensionMap map;
546 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); 565 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
547 566
548 size_t length = static_cast<size_t>( 567 BuildRtpPacket(kPayload, true, kTimestamp, 0);
549 rtp_sender_->BuildRtpHeader(packet_, kPayload, true, kTimestamp, 0)); 568 ASSERT_TRUE(packet_->SetExtension<VideoOrientation>(kRotation));
550 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); 569 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
570 packet_->size());
551 571
552 // Verify 572 // Verify
553 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 573 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
574 packet_->size());
554 webrtc::RTPHeader rtp_header; 575 webrtc::RTPHeader rtp_header;
555 576
556 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map)); 577 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map));
557 ASSERT_FALSE(rtp_parser.RTCP()); 578 ASSERT_FALSE(rtp_parser.RTCP());
558 VerifyRTPHeaderCommon(rtp_header); 579 VerifyRTPHeaderCommon(rtp_header);
559 EXPECT_EQ(length, rtp_header.headerLength); 580 EXPECT_EQ(packet_->size(), rtp_header.headerLength);
560 EXPECT_TRUE(rtp_header.extension.hasVideoRotation); 581 EXPECT_TRUE(rtp_header.extension.hasVideoRotation);
561 EXPECT_EQ(ConvertVideoRotationToCVOByte(kRotation), 582 EXPECT_EQ(ConvertVideoRotationToCVOByte(kRotation),
562 rtp_header.extension.videoRotation); 583 rtp_header.extension.videoRotation);
563 } 584 }
564 585
565 // Test CVO header extension is not set when marker bit is false. 586 // Test CVO header extension is not set when marker bit is false.
566 TEST_F(RtpSenderTestWithoutPacer, 587 TEST_F(RtpSenderTestWithoutPacer,
567 DISABLED_BuildRTPPacketWithVideoRotation_NoMarkerBit) { 588 DISABLED_BuildRTPPacketWithVideoRotation_NoMarkerBit) {
568 rtp_sender_->SetVideoRotation(kRotation);
569 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 589 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
570 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 590 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
571 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
572 591
573 RtpHeaderExtensionMap map; 592 RtpHeaderExtensionMap map;
574 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); 593 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
575 594
576 size_t length = static_cast<size_t>( 595 BuildRtpPacket(kPayload, false, kTimestamp, 0);
577 rtp_sender_->BuildRtpHeader(packet_, kPayload, false, kTimestamp, 0)); 596 ASSERT_EQ(kRtpHeaderSize, packet_->size());
578 ASSERT_EQ(kRtpHeaderSize, length); 597 ASSERT_TRUE(packet_->SetExtension<VideoOrientation>(kRotation));
579 598
580 // Verify 599 // Verify
581 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 600 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
601 packet_->size());
582 webrtc::RTPHeader rtp_header; 602 webrtc::RTPHeader rtp_header;
583 603
584 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map)); 604 ASSERT_TRUE(rtp_parser.Parse(&rtp_header, &map));
585 ASSERT_FALSE(rtp_parser.RTCP()); 605 ASSERT_FALSE(rtp_parser.RTCP());
586 VerifyRTPHeaderCommon(rtp_header, false); 606 VerifyRTPHeaderCommon(rtp_header, false);
587 EXPECT_EQ(length, rtp_header.headerLength); 607 EXPECT_EQ(packet_->size(), rtp_header.headerLength);
588 EXPECT_FALSE(rtp_header.extension.hasVideoRotation); 608 EXPECT_FALSE(rtp_header.extension.hasVideoRotation);
589 } 609 }
590 610
591 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) { 611 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithAudioLevelExtension) {
592 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, 612 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
593 kAudioLevelExtensionId)); 613 kAudioLevelExtensionId));
594 614
595 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( 615 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, 0);
596 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 616 packet_->SetExtension<AudioLevel>(true, kAudioLevel);
597 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); 617 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
618 packet_->size());
598 619
599 // Verify 620 // Verify
600 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 621 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
622 packet_->size());
601 webrtc::RTPHeader rtp_header; 623 webrtc::RTPHeader rtp_header;
602 624
603 // Updating audio level is done in RTPSenderAudio, so simulate it here. 625 // Updating audio level is done in RTPSenderAudio, so simulate it here.
604 rtp_parser.Parse(&rtp_header); 626 rtp_parser.Parse(&rtp_header);
605 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel);
606 627
607 RtpHeaderExtensionMap map; 628 RtpHeaderExtensionMap map;
608 map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId); 629 map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId);
609 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); 630 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
610 631
611 ASSERT_TRUE(valid_rtp_header); 632 ASSERT_TRUE(valid_rtp_header);
612 ASSERT_FALSE(rtp_parser.RTCP()); 633 ASSERT_FALSE(rtp_parser.RTCP());
613 VerifyRTPHeaderCommon(rtp_header); 634 VerifyRTPHeaderCommon(rtp_header);
614 EXPECT_EQ(length, rtp_header.headerLength); 635 EXPECT_EQ(packet_->size(), rtp_header.headerLength);
615 EXPECT_TRUE(rtp_header.extension.hasAudioLevel); 636 EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
616 EXPECT_TRUE(rtp_header.extension.voiceActivity); 637 EXPECT_TRUE(rtp_header.extension.voiceActivity);
617 EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel); 638 EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
618 639
619 // Parse without map extension 640 // Parse without map extension
620 webrtc::RTPHeader rtp_header2; 641 webrtc::RTPHeader rtp_header2;
621 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr); 642 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
622 643
623 ASSERT_TRUE(valid_rtp_header2); 644 ASSERT_TRUE(valid_rtp_header2);
624 VerifyRTPHeaderCommon(rtp_header2); 645 VerifyRTPHeaderCommon(rtp_header2);
625 EXPECT_EQ(length, rtp_header2.headerLength); 646 EXPECT_EQ(packet_->size(), rtp_header2.headerLength);
626 EXPECT_FALSE(rtp_header2.extension.hasAudioLevel); 647 EXPECT_FALSE(rtp_header2.extension.hasAudioLevel);
627 EXPECT_FALSE(rtp_header2.extension.voiceActivity); 648 EXPECT_FALSE(rtp_header2.extension.voiceActivity);
628 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); 649 EXPECT_EQ(0u, rtp_header2.extension.audioLevel);
629 } 650 }
630 651
631 TEST_F(RtpSenderTestWithoutPacer, 652 TEST_F(RtpSenderTestWithoutPacer,
632 BuildRTPPacketWithCSRCAndAudioLevelExtension) { 653 BuildRTPPacketWithCSRCAndAudioLevelExtension) {
633 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, 654 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
634 kAudioLevelExtensionId)); 655 kAudioLevelExtensionId));
635 std::vector<uint32_t> csrcs; 656 std::vector<uint32_t> csrcs;
636 csrcs.push_back(0x23456789); 657 csrcs.push_back(0x23456789);
637 rtp_sender_->SetCsrcs(csrcs); 658 rtp_sender_->SetCsrcs(csrcs);
638 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( 659 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, 0);
639 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 660 EXPECT_TRUE(packet_->SetExtension<AudioLevel>(true, kAudioLevel));
640 661
641 // Verify 662 // Verify
642 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 663 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
664 packet_->size());
643 webrtc::RTPHeader rtp_header; 665 webrtc::RTPHeader rtp_header;
644 666
645 // Updating audio level is done in RTPSenderAudio, so simulate it here. 667 // Updating audio level is done in RTPSenderAudio, so simulate it here.
646 rtp_parser.Parse(&rtp_header); 668 rtp_parser.Parse(&rtp_header);
647 EXPECT_TRUE(rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true,
648 kAudioLevel));
649 669
650 RtpHeaderExtensionMap map; 670 RtpHeaderExtensionMap map;
651 map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId); 671 map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId);
652 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); 672 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
653 673
654 ASSERT_TRUE(valid_rtp_header); 674 ASSERT_TRUE(valid_rtp_header);
655 ASSERT_FALSE(rtp_parser.RTCP()); 675 ASSERT_FALSE(rtp_parser.RTCP());
656 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, csrcs.size()); 676 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, csrcs.size());
657 EXPECT_EQ(length, rtp_header.headerLength); 677 EXPECT_EQ(packet_->size(), rtp_header.headerLength);
658 EXPECT_TRUE(rtp_header.extension.hasAudioLevel); 678 EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
659 EXPECT_TRUE(rtp_header.extension.voiceActivity); 679 EXPECT_TRUE(rtp_header.extension.voiceActivity);
660 EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel); 680 EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
661 EXPECT_EQ(1u, rtp_header.numCSRCs); 681 EXPECT_EQ(1u, rtp_header.numCSRCs);
662 EXPECT_EQ(csrcs[0], rtp_header.arrOfCSRCs[0]); 682 EXPECT_EQ(csrcs[0], rtp_header.arrOfCSRCs[0]);
663 } 683 }
664 684
665 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) { 685 TEST_F(RtpSenderTestWithoutPacer, BuildRTPPacketWithHeaderExtensions) {
666 EXPECT_EQ(0, rtp_sender_->SetTransmissionTimeOffset(kTimeOffset));
667 EXPECT_EQ(0, rtp_sender_->SetAbsoluteSendTime(kAbsoluteSendTime));
668 EXPECT_EQ(0,
669 rtp_sender_->SetTransportSequenceNumber(kTransportSequenceNumber));
670 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 686 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
671 kRtpExtensionTransmissionTimeOffset, 687 kRtpExtensionTransmissionTimeOffset,
672 kTransmissionTimeOffsetExtensionId)); 688 kTransmissionTimeOffsetExtensionId));
673 EXPECT_EQ( 689 EXPECT_EQ(
674 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 690 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
675 kAbsoluteSendTimeExtensionId)); 691 kAbsoluteSendTimeExtensionId));
676 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, 692 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
677 kAudioLevelExtensionId)); 693 kAudioLevelExtensionId));
678 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 694 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
679 kRtpExtensionTransportSequenceNumber, 695 kRtpExtensionTransportSequenceNumber,
680 kTransportSequenceNumberExtensionId)); 696 kTransportSequenceNumberExtensionId));
681 697
682 size_t length = static_cast<size_t>(rtp_sender_->BuildRtpHeader( 698 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, 0);
683 packet_, kPayload, kMarkerBit, kTimestamp, 0)); 699 packet_->SetExtension<AudioLevel>(true, kAudioLevel);
684 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(), length); 700 packet_->SetExtension<TransmissionOffset>(kTimeOffset);
701 packet_->SetExtension<AbsoluteSendTime>(kAbsoluteSendTimeMs);
702 packet_->SetExtension<TransportSequenceNumber>(kTransportSequenceNumber);
703 ASSERT_EQ(kRtpHeaderSize + rtp_sender_->RtpHeaderExtensionLength(),
704 packet_->size());
685 705
686 // Verify 706 // Verify
687 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_, length); 707 webrtc::RtpUtility::RtpHeaderParser rtp_parser(packet_->data(),
708 packet_->size());
688 webrtc::RTPHeader rtp_header; 709 webrtc::RTPHeader rtp_header;
689 710
690 // Updating audio level is done in RTPSenderAudio, so simulate it here. 711 // Updating audio level is done in RTPSenderAudio, so simulate it here.
691 rtp_parser.Parse(&rtp_header); 712 rtp_parser.Parse(&rtp_header);
692 rtp_sender_->UpdateAudioLevel(packet_, length, rtp_header, true, kAudioLevel);
693 713
694 RtpHeaderExtensionMap map; 714 RtpHeaderExtensionMap map;
695 map.Register(kRtpExtensionTransmissionTimeOffset, 715 map.Register(kRtpExtensionTransmissionTimeOffset,
696 kTransmissionTimeOffsetExtensionId); 716 kTransmissionTimeOffsetExtensionId);
697 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); 717 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
698 map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId); 718 map.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId);
699 map.Register(kRtpExtensionTransportSequenceNumber, 719 map.Register(kRtpExtensionTransportSequenceNumber,
700 kTransportSequenceNumberExtensionId); 720 kTransportSequenceNumberExtensionId);
701 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); 721 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
702 722
703 ASSERT_TRUE(valid_rtp_header); 723 ASSERT_TRUE(valid_rtp_header);
704 ASSERT_FALSE(rtp_parser.RTCP()); 724 ASSERT_FALSE(rtp_parser.RTCP());
705 VerifyRTPHeaderCommon(rtp_header); 725 VerifyRTPHeaderCommon(rtp_header);
706 EXPECT_EQ(length, rtp_header.headerLength); 726 EXPECT_EQ(packet_->size(), rtp_header.headerLength);
707 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset); 727 EXPECT_TRUE(rtp_header.extension.hasTransmissionTimeOffset);
708 EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime); 728 EXPECT_TRUE(rtp_header.extension.hasAbsoluteSendTime);
709 EXPECT_TRUE(rtp_header.extension.hasAudioLevel); 729 EXPECT_TRUE(rtp_header.extension.hasAudioLevel);
710 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber); 730 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber);
711 EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset); 731 EXPECT_EQ(kTimeOffset, rtp_header.extension.transmissionTimeOffset);
712 EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime); 732 EXPECT_EQ(kAbsoluteSendTime, rtp_header.extension.absoluteSendTime);
713 EXPECT_TRUE(rtp_header.extension.voiceActivity); 733 EXPECT_TRUE(rtp_header.extension.voiceActivity);
714 EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel); 734 EXPECT_EQ(kAudioLevel, rtp_header.extension.audioLevel);
715 EXPECT_EQ(kTransportSequenceNumber, 735 EXPECT_EQ(kTransportSequenceNumber,
716 rtp_header.extension.transportSequenceNumber); 736 rtp_header.extension.transportSequenceNumber);
717 737
718 // Parse without map extension 738 // Parse without map extension
719 webrtc::RTPHeader rtp_header2; 739 webrtc::RTPHeader rtp_header2;
720 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr); 740 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr);
721 741
722 ASSERT_TRUE(valid_rtp_header2); 742 ASSERT_TRUE(valid_rtp_header2);
723 VerifyRTPHeaderCommon(rtp_header2); 743 VerifyRTPHeaderCommon(rtp_header2);
724 EXPECT_EQ(length, rtp_header2.headerLength); 744 EXPECT_EQ(packet_->size(), rtp_header2.headerLength);
725 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset); 745 EXPECT_FALSE(rtp_header2.extension.hasTransmissionTimeOffset);
726 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime); 746 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime);
727 EXPECT_FALSE(rtp_header2.extension.hasAudioLevel); 747 EXPECT_FALSE(rtp_header2.extension.hasAudioLevel);
728 EXPECT_FALSE(rtp_header2.extension.hasTransportSequenceNumber); 748 EXPECT_FALSE(rtp_header2.extension.hasTransportSequenceNumber);
729 749
730 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset); 750 EXPECT_EQ(0, rtp_header2.extension.transmissionTimeOffset);
731 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime); 751 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime);
732 EXPECT_FALSE(rtp_header2.extension.voiceActivity); 752 EXPECT_FALSE(rtp_header2.extension.voiceActivity);
733 EXPECT_EQ(0u, rtp_header2.extension.audioLevel); 753 EXPECT_EQ(0u, rtp_header2.extension.audioLevel);
734 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber); 754 EXPECT_EQ(0u, rtp_header2.extension.transportSequenceNumber);
735 } 755 }
736 756
737 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { 757 TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
738 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 758 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
739 _, kSeqNum, _, _, _)); 759 _, kSeqNum, _, _, _));
740 EXPECT_CALL(mock_rtc_event_log_, 760 EXPECT_CALL(mock_rtc_event_log_,
741 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); 761 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
742 762
743 rtp_sender_->SetStorePacketsStatus(true, 10); 763 rtp_sender_->SetStorePacketsStatus(true, 10);
744 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 764 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
745 kRtpExtensionTransmissionTimeOffset, 765 kRtpExtensionTransmissionTimeOffset,
746 kTransmissionTimeOffsetExtensionId)); 766 kTransmissionTimeOffsetExtensionId));
747 EXPECT_EQ( 767 EXPECT_EQ(
748 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 768 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
749 kAbsoluteSendTimeExtensionId)); 769 kAbsoluteSendTimeExtensionId));
750 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 770 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
751 int rtp_length_int = rtp_sender_->BuildRtpHeader( 771 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms);
752 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); 772 size_t packet_size = packet_->size();
753 ASSERT_NE(-1, rtp_length_int);
754 size_t rtp_length = static_cast<size_t>(rtp_length_int);
755 773
756 // Packet should be stored in a send bucket. 774 // Packet should be stored in a send bucket.
757 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 775 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet_),
758 capture_time_ms, kAllowRetransmission, 776 kAllowRetransmission,
759 RtpPacketSender::kNormalPriority)); 777 RtpPacketSender::kNormalPriority));
760 778
761 EXPECT_EQ(0, transport_.packets_sent_); 779 EXPECT_EQ(0, transport_.packets_sent_);
762 780
763 const int kStoredTimeInMs = 100; 781 const int kStoredTimeInMs = 100;
764 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 782 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
765 783
766 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, 784 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
767 PacketInfo::kNotAProbe); 785 PacketInfo::kNotAProbe);
768 786
769 // Process send bucket. Packet should now be sent. 787 // Process send bucket. Packet should now be sent.
770 EXPECT_EQ(1, transport_.packets_sent_); 788 EXPECT_EQ(1, transport_.packets_sent_);
771 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); 789 EXPECT_EQ(packet_size, transport_.last_sent_packet_len_);
772 // Parse sent packet. 790 // Parse sent packet.
773 webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 791 webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
774 rtp_length); 792 packet_size);
775 webrtc::RTPHeader rtp_header; 793 webrtc::RTPHeader rtp_header;
776 RtpHeaderExtensionMap map; 794 RtpHeaderExtensionMap map;
777 map.Register(kRtpExtensionTransmissionTimeOffset, 795 map.Register(kRtpExtensionTransmissionTimeOffset,
778 kTransmissionTimeOffsetExtensionId); 796 kTransmissionTimeOffsetExtensionId);
779 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); 797 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
780 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); 798 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
781 ASSERT_TRUE(valid_rtp_header); 799 ASSERT_TRUE(valid_rtp_header);
782 800
783 // Verify transmission time offset. 801 // Verify transmission time offset.
784 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 802 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
785 uint64_t expected_send_time = 803 uint64_t expected_send_time =
786 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 804 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
787 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 805 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
788 } 806 }
789 807
790 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { 808 TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
791 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 809 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
792 _, kSeqNum, _, _, _)); 810 _, kSeqNum, _, _, _));
793 EXPECT_CALL(mock_rtc_event_log_, 811 EXPECT_CALL(mock_rtc_event_log_,
794 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); 812 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
795 813
796 rtp_sender_->SetStorePacketsStatus(true, 10); 814 rtp_sender_->SetStorePacketsStatus(true, 10);
797 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 815 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
798 kRtpExtensionTransmissionTimeOffset, 816 kRtpExtensionTransmissionTimeOffset,
799 kTransmissionTimeOffsetExtensionId)); 817 kTransmissionTimeOffsetExtensionId));
800 EXPECT_EQ( 818 EXPECT_EQ(
801 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 819 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
802 kAbsoluteSendTimeExtensionId)); 820 kAbsoluteSendTimeExtensionId));
803 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 821 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
804 int rtp_length_int = rtp_sender_->BuildRtpHeader( 822 BuildRtpPacket(kPayload, kMarkerBit, kTimestamp, capture_time_ms);
805 packet_, kPayload, kMarkerBit, kTimestamp, capture_time_ms); 823 size_t packet_size = packet_->size();
806 ASSERT_NE(-1, rtp_length_int);
807 size_t rtp_length = static_cast<size_t>(rtp_length_int);
808 824
809 // Packet should be stored in a send bucket. 825 // Packet should be stored in a send bucket.
810 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 826 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet_),
811 capture_time_ms, kAllowRetransmission, 827 kAllowRetransmission,
812 RtpPacketSender::kNormalPriority)); 828 RtpPacketSender::kNormalPriority));
813 829
814 EXPECT_EQ(0, transport_.packets_sent_); 830 EXPECT_EQ(0, transport_.packets_sent_);
815 831
816 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, 832 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
817 _, kSeqNum, _, _, _)); 833 _, kSeqNum, _, _, _));
818 834
819 const int kStoredTimeInMs = 100; 835 const int kStoredTimeInMs = 100;
820 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 836 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
821 837
822 EXPECT_EQ(rtp_length_int, rtp_sender_->ReSendPacket(kSeqNum)); 838 EXPECT_EQ(static_cast<int32_t>(packet_size),
839 rtp_sender_->ReSendPacket(kSeqNum));
823 EXPECT_EQ(0, transport_.packets_sent_); 840 EXPECT_EQ(0, transport_.packets_sent_);
824 841
825 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, 842 rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
826 PacketInfo::kNotAProbe); 843 PacketInfo::kNotAProbe);
827 844
828 // Process send bucket. Packet should now be sent. 845 // Process send bucket. Packet should now be sent.
829 EXPECT_EQ(1, transport_.packets_sent_); 846 EXPECT_EQ(1, transport_.packets_sent_);
830 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); 847 EXPECT_EQ(packet_size, transport_.last_sent_packet_len_);
831 848
832 // Parse sent packet. 849 // Parse sent packet.
833 webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, 850 webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_,
834 rtp_length); 851 packet_size);
835 webrtc::RTPHeader rtp_header; 852 webrtc::RTPHeader rtp_header;
836 RtpHeaderExtensionMap map; 853 RtpHeaderExtensionMap map;
837 map.Register(kRtpExtensionTransmissionTimeOffset, 854 map.Register(kRtpExtensionTransmissionTimeOffset,
838 kTransmissionTimeOffsetExtensionId); 855 kTransmissionTimeOffsetExtensionId);
839 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); 856 map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId);
840 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); 857 const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map);
841 ASSERT_TRUE(valid_rtp_header); 858 ASSERT_TRUE(valid_rtp_header);
842 859
843 // Verify transmission time offset. 860 // Verify transmission time offset.
844 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); 861 EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset);
(...skipping 30 matching lines...) Expand all
875 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( 892 std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser(
876 webrtc::RtpHeaderParser::Create()); 893 webrtc::RtpHeaderParser::Create());
877 ASSERT_TRUE(rtp_parser.get() != nullptr); 894 ASSERT_TRUE(rtp_parser.get() != nullptr);
878 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, 895 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset,
879 kTransmissionTimeOffsetExtensionId); 896 kTransmissionTimeOffsetExtensionId);
880 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 897 rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
881 kAbsoluteSendTimeExtensionId); 898 kAbsoluteSendTimeExtensionId);
882 webrtc::RTPHeader rtp_header; 899 webrtc::RTPHeader rtp_header;
883 900
884 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 901 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
885 int rtp_length_int = rtp_sender_->BuildRtpHeader( 902 BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
886 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms);
887 const uint32_t media_packet_timestamp = timestamp; 903 const uint32_t media_packet_timestamp = timestamp;
888 ASSERT_NE(-1, rtp_length_int);
889 size_t rtp_length = static_cast<size_t>(rtp_length_int);
890 904
891 // Packet should be stored in a send bucket. 905 // Packet should be stored in a send bucket.
892 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 906 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet_),
893 capture_time_ms, kAllowRetransmission, 907 kAllowRetransmission,
894 RtpPacketSender::kNormalPriority)); 908 RtpPacketSender::kNormalPriority));
895 909
896 int total_packets_sent = 0; 910 int total_packets_sent = 0;
897 EXPECT_EQ(total_packets_sent, transport_.packets_sent_); 911 EXPECT_EQ(total_packets_sent, transport_.packets_sent_);
898 912
899 const int kStoredTimeInMs = 100; 913 const int kStoredTimeInMs = 100;
900 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); 914 fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
901 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false, 915 rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false,
902 PacketInfo::kNotAProbe); 916 PacketInfo::kNotAProbe);
903 // Packet should now be sent. This test doesn't verify the regular video 917 // Packet should now be sent. This test doesn't verify the regular video
(...skipping 29 matching lines...) Expand all
933 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset); 947 EXPECT_EQ(offset, rtp_header.extension.transmissionTimeOffset);
934 uint64_t expected_send_time = 948 uint64_t expected_send_time =
935 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 949 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
936 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 950 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
937 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs); 951 fake_clock_.AdvanceTimeMilliseconds(kPaddingPeriodMs);
938 timestamp += 90 * kPaddingPeriodMs; 952 timestamp += 90 * kPaddingPeriodMs;
939 } 953 }
940 954
941 // Send a regular video packet again. 955 // Send a regular video packet again.
942 capture_time_ms = fake_clock_.TimeInMilliseconds(); 956 capture_time_ms = fake_clock_.TimeInMilliseconds();
943 rtp_length_int = rtp_sender_->BuildRtpHeader(packet_, kPayload, kMarkerBit, 957 BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
944 timestamp, capture_time_ms); 958 size_t packet_size = packet_->size();
945 ASSERT_NE(-1, rtp_length_int);
946 rtp_length = static_cast<size_t>(rtp_length_int);
947 959
948 EXPECT_CALL(mock_paced_sender_, 960 EXPECT_CALL(mock_paced_sender_,
949 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)); 961 InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _));
950 962
951 // Packet should be stored in a send bucket. 963 // Packet should be stored in a send bucket.
952 EXPECT_TRUE(rtp_sender_->SendToNetwork(packet_, 0, rtp_length, 964 EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet_),
953 capture_time_ms, kAllowRetransmission, 965 kAllowRetransmission,
954 RtpPacketSender::kNormalPriority)); 966 RtpPacketSender::kNormalPriority));
955 967
956 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false, 968 rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false,
957 PacketInfo::kNotAProbe); 969 PacketInfo::kNotAProbe);
958 // Process send bucket. 970 // Process send bucket.
959 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); 971 EXPECT_EQ(++total_packets_sent, transport_.packets_sent_);
960 EXPECT_EQ(rtp_length, transport_.last_sent_packet_len_); 972 EXPECT_EQ(packet_size, transport_.last_sent_packet_len_);
961 // Parse sent packet. 973 // Parse sent packet.
962 ASSERT_TRUE( 974 ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, packet_size,
963 rtp_parser->Parse(transport_.last_sent_packet_, rtp_length, &rtp_header)); 975 &rtp_header));
964 976
965 // Verify sequence number and timestamp. 977 // Verify sequence number and timestamp.
966 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); 978 EXPECT_EQ(seq_num, rtp_header.sequenceNumber);
967 EXPECT_EQ(timestamp, rtp_header.timestamp); 979 EXPECT_EQ(timestamp, rtp_header.timestamp);
968 // Verify transmission time offset. This packet is sent without delay. 980 // Verify transmission time offset. This packet is sent without delay.
969 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 981 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
970 uint64_t expected_send_time = 982 uint64_t expected_send_time =
971 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 983 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
972 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 984 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
973 } 985 }
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
1597 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent_); 1609 EXPECT_EQ(kNumPackets * 2, transport_.packets_sent_);
1598 } 1610 }
1599 1611
1600 // Verify that all packets of a frame have CVO byte set. 1612 // Verify that all packets of a frame have CVO byte set.
1601 TEST_F(RtpSenderVideoTest, SendVideoWithCVO) { 1613 TEST_F(RtpSenderVideoTest, SendVideoWithCVO) {
1602 RTPVideoHeader hdr = {0}; 1614 RTPVideoHeader hdr = {0};
1603 hdr.rotation = kVideoRotation_90; 1615 hdr.rotation = kVideoRotation_90;
1604 1616
1605 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1617 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1606 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1618 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1607 EXPECT_TRUE(rtp_sender_->ActivateCVORtpHeaderExtension());
1608 1619
1609 EXPECT_EQ( 1620 const uint8_t kPayloadData[1500] = {0};
1610 RtpUtility::Word32Align(kRtpOneByteHeaderLength + kVideoRotationLength),
1611 rtp_sender_->RtpHeaderExtensionLength());
1612
1613 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, 1621 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1614 kTimestamp, 0, packet_, sizeof(packet_), nullptr, 1622 kTimestamp, 0, kPayloadData,
1615 &hdr); 1623 sizeof(kPayloadData), nullptr, &hdr);
1616 1624
1617 RtpHeaderExtensionMap map; 1625 RtpHeaderExtensionMap map;
1618 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); 1626 map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId);
1619 1627
1620 // Verify that this packet does have CVO byte. 1628 // Verify that this packet does have CVO byte.
1621 VerifyCVOPacket( 1629 VerifyCVOPacket(
1622 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), 1630 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()),
1623 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); 1631 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation);
1624 1632
1625 // Verify that this packet does have CVO byte. 1633 // Verify that this packet does have CVO byte.
1626 VerifyCVOPacket( 1634 VerifyCVOPacket(
1627 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), 1635 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()),
1628 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, 1636 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1,
1629 hdr.rotation); 1637 hdr.rotation);
1630 } 1638 }
1631 } // namespace webrtc 1639 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698