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

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

Issue 2999063002: Add flag enabling more packets to be retransmittable. (Closed)
Patch Set: Removed GetStorageType and ProtectionType from packetizers. Refactorings. Addressed comments. Created 3 years, 3 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 <memory> 11 #include <memory>
12 #include <vector> 12 #include <vector>
13 13
14 #include "webrtc/api/video/video_timing.h" 14 #include "webrtc/api/video/video_timing.h"
15 #include "webrtc/logging/rtc_event_log/mock/mock_rtc_event_log.h" 15 #include "webrtc/logging/rtc_event_log/mock/mock_rtc_event_log.h"
16 #include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h" 16 #include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h"
17 #include "webrtc/modules/rtp_rtcp/include/rtp_header_extension_map.h" 17 #include "webrtc/modules/rtp_rtcp/include/rtp_header_extension_map.h"
18 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" 18 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
19 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" 19 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
20 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" 20 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
21 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h" 21 #include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h"
22 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp8.h"
danilchap 2017/09/04 09:03:04 where is it used?
sprang_webrtc 2017/09/04 11:09:28 It's not in this revision. Removed.
22 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h" 23 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h"
23 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h" 24 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h" 25 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h"
25 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h" 26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h"
26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h" 27 #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h"
27 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" 28 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
29 #include "webrtc/rtc_base/arraysize.h"
28 #include "webrtc/rtc_base/buffer.h" 30 #include "webrtc/rtc_base/buffer.h"
31 #include "webrtc/rtc_base/ptr_util.h"
29 #include "webrtc/rtc_base/rate_limiter.h" 32 #include "webrtc/rtc_base/rate_limiter.h"
30 #include "webrtc/test/field_trial.h" 33 #include "webrtc/test/field_trial.h"
31 #include "webrtc/test/gmock.h" 34 #include "webrtc/test/gmock.h"
32 #include "webrtc/test/gtest.h" 35 #include "webrtc/test/gtest.h"
33 #include "webrtc/test/mock_transport.h" 36 #include "webrtc/test/mock_transport.h"
34 #include "webrtc/typedefs.h" 37 #include "webrtc/typedefs.h"
35 38
36 namespace webrtc { 39 namespace webrtc {
37 40
38 namespace { 41 namespace {
39 const int kTransmissionTimeOffsetExtensionId = 1; 42 const int kTransmissionTimeOffsetExtensionId = 1;
40 const int kAbsoluteSendTimeExtensionId = 14; 43 const int kAbsoluteSendTimeExtensionId = 14;
41 const int kTransportSequenceNumberExtensionId = 13; 44 const int kTransportSequenceNumberExtensionId = 13;
42 const int kVideoTimingExtensionId = 12; 45 const int kVideoTimingExtensionId = 12;
43 const int kPayload = 100; 46 const int kPayload = 100;
44 const int kRtxPayload = 98; 47 const int kRtxPayload = 98;
45 const uint32_t kTimestamp = 10; 48 const uint32_t kTimestamp = 10;
46 const uint16_t kSeqNum = 33; 49 const uint16_t kSeqNum = 33;
47 const uint32_t kSsrc = 725242; 50 const uint32_t kSsrc = 725242;
48 const int kMaxPacketLength = 1500; 51 const int kMaxPacketLength = 1500;
49 const uint8_t kAudioLevel = 0x5a; 52 const uint8_t kAudioLevel = 0x5a;
50 const uint16_t kTransportSequenceNumber = 0xaabbu; 53 const uint16_t kTransportSequenceNumber = 0xaabbu;
51 const uint8_t kAudioLevelExtensionId = 9; 54 const uint8_t kAudioLevelExtensionId = 9;
52 const int kAudioPayload = 103; 55 const int kAudioPayload = 103;
53 const uint64_t kStartTime = 123456789; 56 const uint64_t kStartTime = 123456789;
54 const size_t kMaxPaddingSize = 224u; 57 const size_t kMaxPaddingSize = 224u;
55 const int kVideoRotationExtensionId = 5; 58 const int kVideoRotationExtensionId = 5;
56 const size_t kGenericHeaderLength = 1; 59 const size_t kGenericHeaderLength = 1;
57 const uint8_t kPayloadData[] = {47, 11, 32, 93, 89}; 60 const uint8_t kPayloadData[] = {47, 11, 32, 93, 89};
61 const int64_t kDefaultExpectedRetransmissionTimeMs = 125;
58 62
59 using ::testing::_; 63 using ::testing::_;
60 using ::testing::ElementsAreArray; 64 using ::testing::ElementsAreArray;
61 using ::testing::Invoke; 65 using ::testing::Invoke;
62 66
63 uint64_t ConvertMsToAbsSendTime(int64_t time_ms) { 67 uint64_t ConvertMsToAbsSendTime(int64_t time_ms) {
64 return (((time_ms << 18) + 500) / 1000) & 0x00ffffff; 68 return (((time_ms << 18) + 500) / 1000) & 0x00ffffff;
65 } 69 }
66 70
67 class LoopbackTransportTest : public webrtc::Transport { 71 class LoopbackTransportTest : public webrtc::Transport {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 void SendGenericPayload() { 235 void SendGenericPayload() {
232 const uint32_t kTimestamp = 1234; 236 const uint32_t kTimestamp = 1234;
233 const uint8_t kPayloadType = 127; 237 const uint8_t kPayloadType = 127;
234 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); 238 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds();
235 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 239 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
236 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, 240 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000,
237 0, 1500)); 241 0, 1500));
238 242
239 EXPECT_TRUE(rtp_sender_->SendOutgoingData( 243 EXPECT_TRUE(rtp_sender_->SendOutgoingData(
240 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, kPayloadData, 244 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, kPayloadData,
241 sizeof(kPayloadData), nullptr, nullptr, nullptr)); 245 sizeof(kPayloadData), nullptr, nullptr, nullptr,
246 kDefaultExpectedRetransmissionTimeMs));
242 } 247 }
243 }; 248 };
244 249
245 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our 250 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our
246 // default code path. 251 // default code path.
247 class RtpSenderTestWithoutPacer : public RtpSenderTest { 252 class RtpSenderTestWithoutPacer : public RtpSenderTest {
248 public: 253 public:
249 void SetUp() override { SetUpRtpSender(false); } 254 void SetUp() override { SetUpRtpSender(false); }
250 }; 255 };
251 256
257 class TestRtpSenderVideo : public RTPSenderVideo {
258 public:
259 TestRtpSenderVideo(Clock* clock,
260 RTPSender* rtp_sender,
261 FlexfecSender* flexfec_sender)
262 : RTPSenderVideo(clock, rtp_sender, flexfec_sender) {}
263 ~TestRtpSenderVideo() override {}
264
265 StorageType GetStorageType(const RTPVideoHeader& header,
266 int32_t retransmission_settings,
267 int64_t expected_retransmission_time,
268 FrameType frame_type) {
269 auto packetizer = rtc::WrapUnique(RtpPacketizer::Create(
danilchap 2017/09/04 09:03:04 since packetizer is no longer needed, it might cle
sprang_webrtc 2017/09/04 11:09:28 It's still needed in order to access the protected
danilchap 2017/09/04 11:19:10 missed that reason. Yep, keep it then, or make Sto
270 header.codec, kMaxPacketLength, 0, &header.codecHeader, frame_type));
271
272 return RTPSenderVideo::GetStorageType(
273 GetTemporalId(header), retransmission_settings, packetizer.get(),
274 expected_retransmission_time);
275 }
276 };
277
252 class RtpSenderVideoTest : public RtpSenderTest { 278 class RtpSenderVideoTest : public RtpSenderTest {
253 protected: 279 protected:
254 void SetUp() override { 280 void SetUp() override {
255 // TODO(pbos): Set up to use pacer. 281 // TODO(pbos): Set up to use pacer.
256 SetUpRtpSender(false); 282 SetUpRtpSender(false);
257 rtp_sender_video_.reset( 283 rtp_sender_video_.reset(
258 new RTPSenderVideo(&fake_clock_, rtp_sender_.get(), nullptr)); 284 new TestRtpSenderVideo(&fake_clock_, rtp_sender_.get(), nullptr));
259 } 285 }
260 std::unique_ptr<RTPSenderVideo> rtp_sender_video_; 286 std::unique_ptr<TestRtpSenderVideo> rtp_sender_video_;
261 }; 287 };
262 288
263 TEST_P(RtpSenderTestWithoutPacer, AllocatePacketSetCsrc) { 289 TEST_P(RtpSenderTestWithoutPacer, AllocatePacketSetCsrc) {
264 // Configure rtp_sender with csrc. 290 // Configure rtp_sender with csrc.
265 std::vector<uint32_t> csrcs; 291 std::vector<uint32_t> csrcs;
266 csrcs.push_back(0x23456789); 292 csrcs.push_back(0x23456789);
267 rtp_sender_->SetCsrcs(csrcs); 293 rtp_sender_->SetCsrcs(csrcs);
268 294
269 auto packet = rtp_sender_->AllocatePacket(); 295 auto packet = rtp_sender_->AllocatePacket();
270 296
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 } 880 }
855 881
856 TEST_P(RtpSenderTestWithoutPacer, SendGenericVideo) { 882 TEST_P(RtpSenderTestWithoutPacer, SendGenericVideo) {
857 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 883 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
858 const uint8_t payload_type = 127; 884 const uint8_t payload_type = 127;
859 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 885 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
860 0, 1500)); 886 0, 1500));
861 uint8_t payload[] = {47, 11, 32, 93, 89}; 887 uint8_t payload[] = {47, 11, 32, 93, 89};
862 888
863 // Send keyframe 889 // Send keyframe
864 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 890 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
865 4321, payload, sizeof(payload), 891 kVideoFrameKey, payload_type, 1234, 4321, payload, sizeof(payload),
866 nullptr, nullptr, nullptr)); 892 nullptr, nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
867 893
868 auto sent_payload = transport_.last_sent_packet().payload(); 894 auto sent_payload = transport_.last_sent_packet().payload();
869 uint8_t generic_header = sent_payload[0]; 895 uint8_t generic_header = sent_payload[0];
870 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); 896 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
871 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); 897 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
872 EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(payload)); 898 EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(payload));
873 899
874 // Send delta frame 900 // Send delta frame
875 payload[0] = 13; 901 payload[0] = 13;
876 payload[1] = 42; 902 payload[1] = 42;
877 payload[4] = 13; 903 payload[4] = 13;
878 904
879 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 905 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
880 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload), 906 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload),
881 nullptr, nullptr, nullptr)); 907 nullptr, nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
882 908
883 sent_payload = transport_.last_sent_packet().payload(); 909 sent_payload = transport_.last_sent_packet().payload();
884 generic_header = sent_payload[0]; 910 generic_header = sent_payload[0];
885 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); 911 EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
886 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); 912 EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
887 EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(payload)); 913 EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(payload));
888 } 914 }
889 915
890 TEST_P(RtpSenderTest, SendFlexfecPackets) { 916 TEST_P(RtpSenderTest, SendFlexfecPackets) {
891 constexpr int kMediaPayloadType = 127; 917 constexpr int kMediaPayloadType = 127;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 const uint8_t kPayloadType = 127; 1017 const uint8_t kPayloadType = 127;
992 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); 1018 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds();
993 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 1019 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
994 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000, 1020 EXPECT_EQ(0, rtp_sender_->RegisterPayload(payload_name, kPayloadType, 90000,
995 0, 1500)); 1021 0, 1500));
996 RTPVideoHeader video_header; 1022 RTPVideoHeader video_header;
997 memset(&video_header, 0, sizeof(RTPVideoHeader)); 1023 memset(&video_header, 0, sizeof(RTPVideoHeader));
998 video_header.video_timing.flags = TimingFrameFlags::kTriggeredByTimer; 1024 video_header.video_timing.flags = TimingFrameFlags::kTriggeredByTimer;
999 EXPECT_TRUE(rtp_sender_->SendOutgoingData( 1025 EXPECT_TRUE(rtp_sender_->SendOutgoingData(
1000 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, kPayloadData, 1026 kVideoFrameKey, kPayloadType, kTimestamp, kCaptureTimeMs, kPayloadData,
1001 sizeof(kPayloadData), nullptr, &video_header, nullptr)); 1027 sizeof(kPayloadData), nullptr, &video_header, nullptr,
1028 kDefaultExpectedRetransmissionTimeMs));
1002 1029
1003 EXPECT_CALL(mock_rtc_event_log_, 1030 EXPECT_CALL(mock_rtc_event_log_,
1004 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) 1031 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
1005 .Times(1); 1032 .Times(1);
1006 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kMediaSsrc, kSeqNum, 1033 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kMediaSsrc, kSeqNum,
1007 fake_clock_.TimeInMilliseconds(), 1034 fake_clock_.TimeInMilliseconds(),
1008 false, PacedPacketInfo())); 1035 false, PacedPacketInfo()));
1009 ASSERT_EQ(1, transport_.packets_sent()); 1036 ASSERT_EQ(1, transport_.packets_sent());
1010 const RtpPacketReceived& media_packet = transport_.sent_packets_[0]; 1037 const RtpPacketReceived& media_packet = transport_.sent_packets_[0];
1011 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType()); 1038 EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType());
1012 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber()); 1039 EXPECT_EQ(kSeqNum, media_packet.SequenceNumber());
1013 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc()); 1040 EXPECT_EQ(kMediaSsrc, media_packet.Ssrc());
1014 1041
1015 // Now try to send not a timing frame. 1042 // Now try to send not a timing frame.
1016 uint16_t flexfec_seq_num; 1043 uint16_t flexfec_seq_num;
1017 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority, 1044 EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority,
1018 kFlexfecSsrc, _, _, _, false)) 1045 kFlexfecSsrc, _, _, _, false))
1019 .WillOnce(testing::SaveArg<2>(&flexfec_seq_num)); 1046 .WillOnce(testing::SaveArg<2>(&flexfec_seq_num));
1020 EXPECT_CALL(mock_paced_sender_, 1047 EXPECT_CALL(mock_paced_sender_,
1021 InsertPacket(RtpPacketSender::kLowPriority, kMediaSsrc, 1048 InsertPacket(RtpPacketSender::kLowPriority, kMediaSsrc,
1022 kSeqNum + 1, _, _, false)); 1049 kSeqNum + 1, _, _, false));
1023 video_header.video_timing.flags = TimingFrameFlags::kInvalid; 1050 video_header.video_timing.flags = TimingFrameFlags::kInvalid;
1024 EXPECT_TRUE(rtp_sender_->SendOutgoingData( 1051 EXPECT_TRUE(rtp_sender_->SendOutgoingData(
1025 kVideoFrameKey, kPayloadType, kTimestamp + 1, kCaptureTimeMs + 1, 1052 kVideoFrameKey, kPayloadType, kTimestamp + 1, kCaptureTimeMs + 1,
1026 kPayloadData, sizeof(kPayloadData), nullptr, &video_header, nullptr)); 1053 kPayloadData, sizeof(kPayloadData), nullptr, &video_header, nullptr,
1054 kDefaultExpectedRetransmissionTimeMs));
1027 1055
1028 EXPECT_CALL(mock_rtc_event_log_, 1056 EXPECT_CALL(mock_rtc_event_log_,
1029 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) 1057 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
1030 .Times(2); 1058 .Times(2);
1031 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kMediaSsrc, kSeqNum + 1, 1059 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kMediaSsrc, kSeqNum + 1,
1032 fake_clock_.TimeInMilliseconds(), 1060 fake_clock_.TimeInMilliseconds(),
1033 false, PacedPacketInfo())); 1061 false, PacedPacketInfo()));
1034 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kFlexfecSsrc, flexfec_seq_num, 1062 EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kFlexfecSsrc, flexfec_seq_num,
1035 fake_clock_.TimeInMilliseconds(), 1063 fake_clock_.TimeInMilliseconds(),
1036 false, PacedPacketInfo())); 1064 false, PacedPacketInfo()));
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 const uint8_t payload_type = 127; 1189 const uint8_t payload_type = 127;
1162 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 1190 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
1163 0, 1500)); 1191 0, 1500));
1164 uint8_t payload[] = {47, 11, 32, 93, 89}; 1192 uint8_t payload[] = {47, 11, 32, 93, 89};
1165 rtp_sender_->SetStorePacketsStatus(true, 1); 1193 rtp_sender_->SetStorePacketsStatus(true, 1);
1166 uint32_t ssrc = rtp_sender_->SSRC(); 1194 uint32_t ssrc = rtp_sender_->SSRC();
1167 1195
1168 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) 1196 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
1169 .Times(::testing::AtLeast(2)); 1197 .Times(::testing::AtLeast(2));
1170 1198
1171 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kVideoFrameKey, payload_type, 1234, 1199 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1172 4321, payload, sizeof(payload), 1200 kVideoFrameKey, payload_type, 1234, 4321, payload, sizeof(payload),
1173 nullptr, nullptr, nullptr)); 1201 nullptr, nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1174 1202
1175 EXPECT_EQ(1U, callback.num_calls_); 1203 EXPECT_EQ(1U, callback.num_calls_);
1176 EXPECT_EQ(ssrc, callback.ssrc_); 1204 EXPECT_EQ(ssrc, callback.ssrc_);
1177 EXPECT_EQ(1, callback.frame_counts_.key_frames); 1205 EXPECT_EQ(1, callback.frame_counts_.key_frames);
1178 EXPECT_EQ(0, callback.frame_counts_.delta_frames); 1206 EXPECT_EQ(0, callback.frame_counts_.delta_frames);
1179 1207
1180 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1208 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1181 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload), 1209 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload),
1182 nullptr, nullptr, nullptr)); 1210 nullptr, nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1183 1211
1184 EXPECT_EQ(2U, callback.num_calls_); 1212 EXPECT_EQ(2U, callback.num_calls_);
1185 EXPECT_EQ(ssrc, callback.ssrc_); 1213 EXPECT_EQ(ssrc, callback.ssrc_);
1186 EXPECT_EQ(1, callback.frame_counts_.key_frames); 1214 EXPECT_EQ(1, callback.frame_counts_.key_frames);
1187 EXPECT_EQ(1, callback.frame_counts_.delta_frames); 1215 EXPECT_EQ(1, callback.frame_counts_.delta_frames);
1188 1216
1189 rtp_sender_.reset(); 1217 rtp_sender_.reset();
1190 } 1218 }
1191 1219
1192 TEST_P(RtpSenderTest, BitrateCallbacks) { 1220 TEST_P(RtpSenderTest, BitrateCallbacks) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1238 rtp_sender_->SetStorePacketsStatus(true, 1); 1266 rtp_sender_->SetStorePacketsStatus(true, 1);
1239 uint32_t ssrc = rtp_sender_->SSRC(); 1267 uint32_t ssrc = rtp_sender_->SSRC();
1240 1268
1241 // Initial process call so we get a new time window. 1269 // Initial process call so we get a new time window.
1242 rtp_sender_->ProcessBitrate(); 1270 rtp_sender_->ProcessBitrate();
1243 1271
1244 // Send a few frames. 1272 // Send a few frames.
1245 for (uint32_t i = 0; i < kNumPackets; ++i) { 1273 for (uint32_t i = 0; i < kNumPackets; ++i) {
1246 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1274 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1247 kVideoFrameKey, payload_type, 1234, 4321, payload, sizeof(payload), 1275 kVideoFrameKey, payload_type, 1234, 4321, payload, sizeof(payload),
1248 nullptr, nullptr, nullptr)); 1276 nullptr, nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1249 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval); 1277 fake_clock_.AdvanceTimeMilliseconds(kPacketInterval);
1250 } 1278 }
1251 1279
1252 rtp_sender_->ProcessBitrate(); 1280 rtp_sender_->ProcessBitrate();
1253 1281
1254 // We get one call for every stats updated, thus two calls since both the 1282 // We get one call for every stats updated, thus two calls since both the
1255 // stream stats and the retransmit stats are updated once. 1283 // stream stats and the retransmit stats are updated once.
1256 EXPECT_EQ(2u, callback.num_calls_); 1284 EXPECT_EQ(2u, callback.num_calls_);
1257 EXPECT_EQ(ssrc, callback.ssrc_); 1285 EXPECT_EQ(ssrc, callback.ssrc_);
1258 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); 1286 const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 1348 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
1321 0, 1500)); 1349 0, 1500));
1322 uint8_t payload[] = {47, 11, 32, 93, 89}; 1350 uint8_t payload[] = {47, 11, 32, 93, 89};
1323 rtp_sender_->SetStorePacketsStatus(true, 1); 1351 rtp_sender_->SetStorePacketsStatus(true, 1);
1324 uint32_t ssrc = rtp_sender_->SSRC(); 1352 uint32_t ssrc = rtp_sender_->SSRC();
1325 1353
1326 rtp_sender_->RegisterRtpStatisticsCallback(&callback); 1354 rtp_sender_->RegisterRtpStatisticsCallback(&callback);
1327 1355
1328 // Send a frame. 1356 // Send a frame.
1329 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1357 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1330 kVideoFrameKey, payload_type, 1234, 4321, payload, 1358 kVideoFrameKey, payload_type, 1234, 4321, payload, sizeof(payload),
1331 sizeof(payload), nullptr, nullptr, nullptr)); 1359 nullptr, nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1332 StreamDataCounters expected; 1360 StreamDataCounters expected;
1333 expected.transmitted.payload_bytes = 6; 1361 expected.transmitted.payload_bytes = 6;
1334 expected.transmitted.header_bytes = 12; 1362 expected.transmitted.header_bytes = 12;
1335 expected.transmitted.padding_bytes = 0; 1363 expected.transmitted.padding_bytes = 0;
1336 expected.transmitted.packets = 1; 1364 expected.transmitted.packets = 1;
1337 expected.retransmitted.payload_bytes = 0; 1365 expected.retransmitted.payload_bytes = 0;
1338 expected.retransmitted.header_bytes = 0; 1366 expected.retransmitted.header_bytes = 0;
1339 expected.retransmitted.padding_bytes = 0; 1367 expected.retransmitted.padding_bytes = 0;
1340 expected.retransmitted.packets = 0; 1368 expected.retransmitted.packets = 0;
1341 expected.fec.packets = 0; 1369 expected.fec.packets = 0;
(...skipping 20 matching lines...) Expand all
1362 callback.Matches(ssrc, expected); 1390 callback.Matches(ssrc, expected);
1363 1391
1364 // Send ULPFEC. 1392 // Send ULPFEC.
1365 rtp_sender_->SetUlpfecConfig(kRedPayloadType, kUlpfecPayloadType); 1393 rtp_sender_->SetUlpfecConfig(kRedPayloadType, kUlpfecPayloadType);
1366 FecProtectionParams fec_params; 1394 FecProtectionParams fec_params;
1367 fec_params.fec_mask_type = kFecMaskRandom; 1395 fec_params.fec_mask_type = kFecMaskRandom;
1368 fec_params.fec_rate = 1; 1396 fec_params.fec_rate = 1;
1369 fec_params.max_fec_frames = 1; 1397 fec_params.max_fec_frames = 1;
1370 rtp_sender_->SetFecParameters(fec_params, fec_params); 1398 rtp_sender_->SetFecParameters(fec_params, fec_params);
1371 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1399 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1372 kVideoFrameDelta, payload_type, 1234, 4321, payload, 1400 kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload),
1373 sizeof(payload), nullptr, nullptr, nullptr)); 1401 nullptr, nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1374 expected.transmitted.payload_bytes = 40; 1402 expected.transmitted.payload_bytes = 40;
1375 expected.transmitted.header_bytes = 60; 1403 expected.transmitted.header_bytes = 60;
1376 expected.transmitted.packets = 5; 1404 expected.transmitted.packets = 5;
1377 expected.fec.packets = 1; 1405 expected.fec.packets = 1;
1378 callback.Matches(ssrc, expected); 1406 callback.Matches(ssrc, expected);
1379 1407
1380 rtp_sender_->RegisterRtpStatisticsCallback(nullptr); 1408 rtp_sender_->RegisterRtpStatisticsCallback(nullptr);
1381 } 1409 }
1382 1410
1383 TEST_P(RtpSenderAudioTest, SendAudio) { 1411 TEST_P(RtpSenderAudioTest, SendAudio) {
1384 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1412 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1385 const uint8_t payload_type = 127; 1413 const uint8_t payload_type = 127;
1386 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1414 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1387 0, 1500)); 1415 0, 1500));
1388 uint8_t payload[] = {47, 11, 32, 93, 89}; 1416 uint8_t payload[] = {47, 11, 32, 93, 89};
1389 1417
1390 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1418 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1391 kAudioFrameCN, payload_type, 1234, 4321, payload, 1419 kAudioFrameCN, payload_type, 1234, 4321, payload, sizeof(payload),
1392 sizeof(payload), nullptr, nullptr, nullptr)); 1420 nullptr, nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1393 1421
1394 auto sent_payload = transport_.last_sent_packet().payload(); 1422 auto sent_payload = transport_.last_sent_packet().payload();
1395 EXPECT_THAT(sent_payload, ElementsAreArray(payload)); 1423 EXPECT_THAT(sent_payload, ElementsAreArray(payload));
1396 } 1424 }
1397 1425
1398 TEST_P(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { 1426 TEST_P(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) {
1399 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel)); 1427 EXPECT_EQ(0, rtp_sender_->SetAudioLevel(kAudioLevel));
1400 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel, 1428 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAudioLevel,
1401 kAudioLevelExtensionId)); 1429 kAudioLevelExtensionId));
1402 1430
1403 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME"; 1431 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "PAYLOAD_NAME";
1404 const uint8_t payload_type = 127; 1432 const uint8_t payload_type = 127;
1405 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000, 1433 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 48000,
1406 0, 1500)); 1434 0, 1500));
1407 uint8_t payload[] = {47, 11, 32, 93, 89}; 1435 uint8_t payload[] = {47, 11, 32, 93, 89};
1408 1436
1409 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1437 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1410 kAudioFrameCN, payload_type, 1234, 4321, payload, 1438 kAudioFrameCN, payload_type, 1234, 4321, payload, sizeof(payload),
1411 sizeof(payload), nullptr, nullptr, nullptr)); 1439 nullptr, nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1412 1440
1413 auto sent_payload = transport_.last_sent_packet().payload(); 1441 auto sent_payload = transport_.last_sent_packet().payload();
1414 EXPECT_THAT(sent_payload, ElementsAreArray(payload)); 1442 EXPECT_THAT(sent_payload, ElementsAreArray(payload));
1415 // Verify AudioLevel extension. 1443 // Verify AudioLevel extension.
1416 bool voice_activity; 1444 bool voice_activity;
1417 uint8_t audio_level; 1445 uint8_t audio_level;
1418 EXPECT_TRUE(transport_.last_sent_packet().GetExtension<AudioLevel>( 1446 EXPECT_TRUE(transport_.last_sent_packet().GetExtension<AudioLevel>(
1419 &voice_activity, &audio_level)); 1447 &voice_activity, &audio_level));
1420 EXPECT_EQ(kAudioLevel, audio_level); 1448 EXPECT_EQ(kAudioLevel, audio_level);
1421 EXPECT_FALSE(voice_activity); 1449 EXPECT_FALSE(voice_activity);
(...skipping 16 matching lines...) Expand all
1438 // Registering the payload again for audio stream with different payload name. 1466 // Registering the payload again for audio stream with different payload name.
1439 const char* kPayloadName = "payload_name"; 1467 const char* kPayloadName = "payload_name";
1440 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 1468 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType,
1441 kPayloadFrequency, 1, 0)); 1469 kPayloadFrequency, 1, 0));
1442 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); 1470 int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
1443 // DTMF event key=9, duration=500 and attenuationdB=10 1471 // DTMF event key=9, duration=500 and attenuationdB=10
1444 rtp_sender_->SendTelephoneEvent(9, 500, 10); 1472 rtp_sender_->SendTelephoneEvent(9, 500, 10);
1445 // During start, it takes the starting timestamp as last sent timestamp. 1473 // During start, it takes the starting timestamp as last sent timestamp.
1446 // The duration is calculated as the difference of current and last sent 1474 // The duration is calculated as the difference of current and last sent
1447 // timestamp. So for first call it will skip since the duration is zero. 1475 // timestamp. So for first call it will skip since the duration is zero.
1448 ASSERT_TRUE(rtp_sender_->SendOutgoingData(kEmptyFrame, kPayloadType, 1476 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1449 capture_time_ms, 0, nullptr, 0, 1477 kEmptyFrame, kPayloadType, capture_time_ms, 0, nullptr, 0, nullptr,
1450 nullptr, nullptr, nullptr)); 1478 nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1451 // DTMF Sample Length is (Frequency/1000) * Duration. 1479 // DTMF Sample Length is (Frequency/1000) * Duration.
1452 // So in this case, it is (8000/1000) * 500 = 4000. 1480 // So in this case, it is (8000/1000) * 500 = 4000.
1453 // Sending it as two packets. 1481 // Sending it as two packets.
1454 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1482 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1455 kEmptyFrame, kPayloadType, capture_time_ms + 2000, 0, 1483 kEmptyFrame, kPayloadType, capture_time_ms + 2000, 0, nullptr, 0, nullptr,
1456 nullptr, 0, nullptr, nullptr, nullptr)); 1484 nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1457 1485
1458 // Marker Bit should be set to 1 for first packet. 1486 // Marker Bit should be set to 1 for first packet.
1459 EXPECT_TRUE(transport_.last_sent_packet().Marker()); 1487 EXPECT_TRUE(transport_.last_sent_packet().Marker());
1460 1488
1461 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1489 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1462 kEmptyFrame, kPayloadType, capture_time_ms + 4000, 0, 1490 kEmptyFrame, kPayloadType, capture_time_ms + 4000, 0, nullptr, 0, nullptr,
1463 nullptr, 0, nullptr, nullptr, nullptr)); 1491 nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1464 // Marker Bit should be set to 0 for rest of the packets. 1492 // Marker Bit should be set to 0 for rest of the packets.
1465 EXPECT_FALSE(transport_.last_sent_packet().Marker()); 1493 EXPECT_FALSE(transport_.last_sent_packet().Marker());
1466 } 1494 }
1467 1495
1468 TEST_P(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { 1496 TEST_P(RtpSenderTestWithoutPacer, BytesReportedCorrectly) {
1469 const char* kPayloadName = "GENERIC"; 1497 const char* kPayloadName = "GENERIC";
1470 const uint8_t kPayloadType = 127; 1498 const uint8_t kPayloadType = 127;
1471 rtp_sender_->SetSSRC(1234); 1499 rtp_sender_->SetSSRC(1234);
1472 rtp_sender_->SetRtxSsrc(4321); 1500 rtp_sender_->SetRtxSsrc(4321);
1473 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType); 1501 rtp_sender_->SetRtxPayloadType(kPayloadType - 1, kPayloadType);
1474 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); 1502 rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
1475 1503
1476 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000, 1504 ASSERT_EQ(0, rtp_sender_->RegisterPayload(kPayloadName, kPayloadType, 90000,
1477 0, 1500)); 1505 0, 1500));
1478 uint8_t payload[] = {47, 11, 32, 93, 89}; 1506 uint8_t payload[] = {47, 11, 32, 93, 89};
1479 1507
1480 ASSERT_TRUE(rtp_sender_->SendOutgoingData( 1508 ASSERT_TRUE(rtp_sender_->SendOutgoingData(
1481 kVideoFrameKey, kPayloadType, 1234, 4321, payload, 1509 kVideoFrameKey, kPayloadType, 1234, 4321, payload, sizeof(payload),
1482 sizeof(payload), nullptr, nullptr, nullptr)); 1510 nullptr, nullptr, nullptr, kDefaultExpectedRetransmissionTimeMs));
1483 1511
1484 // Will send 2 full-size padding packets. 1512 // Will send 2 full-size padding packets.
1485 rtp_sender_->TimeToSendPadding(1, PacedPacketInfo()); 1513 rtp_sender_->TimeToSendPadding(1, PacedPacketInfo());
1486 rtp_sender_->TimeToSendPadding(1, PacedPacketInfo()); 1514 rtp_sender_->TimeToSendPadding(1, PacedPacketInfo());
1487 1515
1488 StreamDataCounters rtp_stats; 1516 StreamDataCounters rtp_stats;
1489 StreamDataCounters rtx_stats; 1517 StreamDataCounters rtx_stats;
1490 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats); 1518 rtp_sender_->GetDataCounters(&rtp_stats, &rtx_stats);
1491 1519
1492 // Payload + 1-byte generic header. 1520 // Payload + 1-byte generic header.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1546 1574
1547 TEST_P(RtpSenderVideoTest, KeyFrameHasCVO) { 1575 TEST_P(RtpSenderVideoTest, KeyFrameHasCVO) {
1548 uint8_t kFrame[kMaxPacketLength]; 1576 uint8_t kFrame[kMaxPacketLength];
1549 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1577 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1550 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1578 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1551 1579
1552 RTPVideoHeader hdr = {0}; 1580 RTPVideoHeader hdr = {0};
1553 hdr.rotation = kVideoRotation_0; 1581 hdr.rotation = kVideoRotation_0;
1554 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, 1582 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1555 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr, 1583 kTimestamp, 0, kFrame, sizeof(kFrame), nullptr,
1556 &hdr); 1584 &hdr, kDefaultExpectedRetransmissionTimeMs);
1557 1585
1558 VideoRotation rotation; 1586 VideoRotation rotation;
1559 EXPECT_TRUE( 1587 EXPECT_TRUE(
1560 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); 1588 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation));
1561 EXPECT_EQ(kVideoRotation_0, rotation); 1589 EXPECT_EQ(kVideoRotation_0, rotation);
1562 } 1590 }
1563 1591
1564 TEST_P(RtpSenderVideoTest, TimingFrameHasPacketizationTimstampSet) { 1592 TEST_P(RtpSenderVideoTest, TimingFrameHasPacketizationTimstampSet) {
1565 uint8_t kFrame[kMaxPacketLength]; 1593 uint8_t kFrame[kMaxPacketLength];
1566 const int64_t kPacketizationTimeMs = 100; 1594 const int64_t kPacketizationTimeMs = 100;
1567 const int64_t kEncodeStartDeltaMs = 10; 1595 const int64_t kEncodeStartDeltaMs = 10;
1568 const int64_t kEncodeFinishDeltaMs = 50; 1596 const int64_t kEncodeFinishDeltaMs = 50;
1569 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1597 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1570 kRtpExtensionVideoTiming, kVideoTimingExtensionId)); 1598 kRtpExtensionVideoTiming, kVideoTimingExtensionId));
1571 1599
1572 const int64_t kCaptureTimestamp = fake_clock_.TimeInMilliseconds(); 1600 const int64_t kCaptureTimestamp = fake_clock_.TimeInMilliseconds();
1573 1601
1574 RTPVideoHeader hdr = {0}; 1602 RTPVideoHeader hdr = {0};
1575 hdr.video_timing.flags = TimingFrameFlags::kTriggeredByTimer; 1603 hdr.video_timing.flags = TimingFrameFlags::kTriggeredByTimer;
1576 hdr.video_timing.encode_start_delta_ms = kEncodeStartDeltaMs; 1604 hdr.video_timing.encode_start_delta_ms = kEncodeStartDeltaMs;
1577 hdr.video_timing.encode_finish_delta_ms = kEncodeFinishDeltaMs; 1605 hdr.video_timing.encode_finish_delta_ms = kEncodeFinishDeltaMs;
1578 1606
1579 fake_clock_.AdvanceTimeMilliseconds(kPacketizationTimeMs); 1607 fake_clock_.AdvanceTimeMilliseconds(kPacketizationTimeMs);
1580 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload, 1608 rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, kPayload,
1581 kTimestamp, kCaptureTimestamp, kFrame, 1609 kTimestamp, kCaptureTimestamp, kFrame,
1582 sizeof(kFrame), nullptr, &hdr); 1610 sizeof(kFrame), nullptr, &hdr,
1611 kDefaultExpectedRetransmissionTimeMs);
1583 VideoSendTiming timing; 1612 VideoSendTiming timing;
1584 EXPECT_TRUE(transport_.last_sent_packet().GetExtension<VideoTimingExtension>( 1613 EXPECT_TRUE(transport_.last_sent_packet().GetExtension<VideoTimingExtension>(
1585 &timing)); 1614 &timing));
1586 EXPECT_EQ(kPacketizationTimeMs, timing.packetization_finish_delta_ms); 1615 EXPECT_EQ(kPacketizationTimeMs, timing.packetization_finish_delta_ms);
1587 EXPECT_EQ(kEncodeStartDeltaMs, timing.encode_start_delta_ms); 1616 EXPECT_EQ(kEncodeStartDeltaMs, timing.encode_start_delta_ms);
1588 EXPECT_EQ(kEncodeFinishDeltaMs, timing.encode_finish_delta_ms); 1617 EXPECT_EQ(kEncodeFinishDeltaMs, timing.encode_finish_delta_ms);
1589 } 1618 }
1590 1619
1591 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) { 1620 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenChanged) {
1592 uint8_t kFrame[kMaxPacketLength]; 1621 uint8_t kFrame[kMaxPacketLength];
1593 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1622 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1594 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1623 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1595 1624
1596 RTPVideoHeader hdr = {0}; 1625 RTPVideoHeader hdr = {0};
1597 hdr.rotation = kVideoRotation_90; 1626 hdr.rotation = kVideoRotation_90;
1598 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, 1627 EXPECT_TRUE(rtp_sender_video_->SendVideo(
1599 kPayload, kTimestamp, 0, kFrame, 1628 kRtpVideoGeneric, kVideoFrameKey, kPayload, kTimestamp, 0, kFrame,
1600 sizeof(kFrame), nullptr, &hdr)); 1629 sizeof(kFrame), nullptr, &hdr, kDefaultExpectedRetransmissionTimeMs));
1601 1630
1602 hdr.rotation = kVideoRotation_0; 1631 hdr.rotation = kVideoRotation_0;
1603 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameDelta, 1632 EXPECT_TRUE(rtp_sender_video_->SendVideo(
1604 kPayload, kTimestamp + 1, 0, kFrame, 1633 kRtpVideoGeneric, kVideoFrameDelta, kPayload, kTimestamp + 1, 0, kFrame,
1605 sizeof(kFrame), nullptr, &hdr)); 1634 sizeof(kFrame), nullptr, &hdr, kDefaultExpectedRetransmissionTimeMs));
1606 1635
1607 VideoRotation rotation; 1636 VideoRotation rotation;
1608 EXPECT_TRUE( 1637 EXPECT_TRUE(
1609 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); 1638 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation));
1610 EXPECT_EQ(kVideoRotation_0, rotation); 1639 EXPECT_EQ(kVideoRotation_0, rotation);
1611 } 1640 }
1612 1641
1613 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenNonZero) { 1642 TEST_P(RtpSenderVideoTest, DeltaFrameHasCVOWhenNonZero) {
1614 uint8_t kFrame[kMaxPacketLength]; 1643 uint8_t kFrame[kMaxPacketLength];
1615 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( 1644 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
1616 kRtpExtensionVideoRotation, kVideoRotationExtensionId)); 1645 kRtpExtensionVideoRotation, kVideoRotationExtensionId));
1617 1646
1618 RTPVideoHeader hdr = {0}; 1647 RTPVideoHeader hdr = {0};
1619 hdr.rotation = kVideoRotation_90; 1648 hdr.rotation = kVideoRotation_90;
1620 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameKey, 1649 EXPECT_TRUE(rtp_sender_video_->SendVideo(
1621 kPayload, kTimestamp, 0, kFrame, 1650 kRtpVideoGeneric, kVideoFrameKey, kPayload, kTimestamp, 0, kFrame,
1622 sizeof(kFrame), nullptr, &hdr)); 1651 sizeof(kFrame), nullptr, &hdr, kDefaultExpectedRetransmissionTimeMs));
1623 1652
1624 EXPECT_TRUE(rtp_sender_video_->SendVideo(kRtpVideoGeneric, kVideoFrameDelta, 1653 EXPECT_TRUE(rtp_sender_video_->SendVideo(
1625 kPayload, kTimestamp + 1, 0, kFrame, 1654 kRtpVideoGeneric, kVideoFrameDelta, kPayload, kTimestamp + 1, 0, kFrame,
1626 sizeof(kFrame), nullptr, &hdr)); 1655 sizeof(kFrame), nullptr, &hdr, kDefaultExpectedRetransmissionTimeMs));
1627 1656
1628 VideoRotation rotation; 1657 VideoRotation rotation;
1629 EXPECT_TRUE( 1658 EXPECT_TRUE(
1630 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation)); 1659 transport_.last_sent_packet().GetExtension<VideoOrientation>(&rotation));
1631 EXPECT_EQ(kVideoRotation_90, rotation); 1660 EXPECT_EQ(kVideoRotation_90, rotation);
1632 } 1661 }
1633 1662
1634 // Make sure rotation is parsed correctly when the Camera (C) and Flip (F) bits 1663 // Make sure rotation is parsed correctly when the Camera (C) and Flip (F) bits
1635 // are set in the CVO byte. 1664 // are set in the CVO byte.
1636 TEST_P(RtpSenderVideoTest, SendVideoWithCameraAndFlipCVO) { 1665 TEST_P(RtpSenderVideoTest, SendVideoWithCameraAndFlipCVO) {
1637 // Test extracting rotation when Camera (C) and Flip (F) bits are zero. 1666 // Test extracting rotation when Camera (C) and Flip (F) bits are zero.
1638 EXPECT_EQ(kVideoRotation_0, ConvertCVOByteToVideoRotation(0)); 1667 EXPECT_EQ(kVideoRotation_0, ConvertCVOByteToVideoRotation(0));
1639 EXPECT_EQ(kVideoRotation_90, ConvertCVOByteToVideoRotation(1)); 1668 EXPECT_EQ(kVideoRotation_90, ConvertCVOByteToVideoRotation(1));
1640 EXPECT_EQ(kVideoRotation_180, ConvertCVOByteToVideoRotation(2)); 1669 EXPECT_EQ(kVideoRotation_180, ConvertCVOByteToVideoRotation(2));
1641 EXPECT_EQ(kVideoRotation_270, ConvertCVOByteToVideoRotation(3)); 1670 EXPECT_EQ(kVideoRotation_270, ConvertCVOByteToVideoRotation(3));
1642 // Test extracting rotation when Camera (C) and Flip (F) bits are set. 1671 // Test extracting rotation when Camera (C) and Flip (F) bits are set.
1643 const int flip_bit = 1 << 2; 1672 const int flip_bit = 1 << 2;
1644 const int camera_bit = 1 << 3; 1673 const int camera_bit = 1 << 3;
1645 EXPECT_EQ(kVideoRotation_0, 1674 EXPECT_EQ(kVideoRotation_0,
1646 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0)); 1675 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 0));
1647 EXPECT_EQ(kVideoRotation_90, 1676 EXPECT_EQ(kVideoRotation_90,
1648 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1)); 1677 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 1));
1649 EXPECT_EQ(kVideoRotation_180, 1678 EXPECT_EQ(kVideoRotation_180,
1650 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2)); 1679 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 2));
1651 EXPECT_EQ(kVideoRotation_270, 1680 EXPECT_EQ(kVideoRotation_270,
1652 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3)); 1681 ConvertCVOByteToVideoRotation(flip_bit | camera_bit | 3));
1653 } 1682 }
1654 1683
1684 TEST_P(RtpSenderVideoTest, RetransmissionTypesGeneric) {
1685 RTPVideoHeader header;
1686 header.codec = kRtpVideoGeneric;
1687
1688 EXPECT_EQ(kDontRetransmit,
1689 rtp_sender_video_->GetStorageType(
1690 header, kRetransmitOff, kDefaultExpectedRetransmissionTimeMs,
1691 kVideoFrameDelta));
1692 EXPECT_EQ(kAllowRetransmission,
1693 rtp_sender_video_->GetStorageType(
1694 header, kRetransmitBaseLayer,
1695 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1696 EXPECT_EQ(kAllowRetransmission,
1697 rtp_sender_video_->GetStorageType(
1698 header, kRetransmitHigherLayers,
1699 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1700 EXPECT_EQ(kAllowRetransmission,
1701 rtp_sender_video_->GetStorageType(
1702 header, kConditionallyRetransmitHigherLayers,
1703 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1704 EXPECT_EQ(kAllowRetransmission,
1705 rtp_sender_video_->GetStorageType(
1706 header, kRetransmitAllPackets,
1707 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1708 }
1709
1710 TEST_P(RtpSenderVideoTest, RetransmissionTypesH264) {
1711 RTPVideoHeader header;
1712 header.codec = kRtpVideoH264;
1713 header.codecHeader.H264.packetization_mode =
1714 H264PacketizationMode::NonInterleaved;
1715
1716 EXPECT_EQ(kDontRetransmit,
1717 rtp_sender_video_->GetStorageType(
1718 header, kRetransmitOff, kDefaultExpectedRetransmissionTimeMs,
1719 kVideoFrameDelta));
1720 EXPECT_EQ(kAllowRetransmission,
1721 rtp_sender_video_->GetStorageType(
1722 header, kRetransmitBaseLayer,
1723 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1724 EXPECT_EQ(kAllowRetransmission,
1725 rtp_sender_video_->GetStorageType(
1726 header, kRetransmitHigherLayers,
1727 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1728 EXPECT_EQ(kAllowRetransmission,
1729 rtp_sender_video_->GetStorageType(
1730 header, kConditionallyRetransmitHigherLayers,
1731 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1732 EXPECT_EQ(kAllowRetransmission,
1733 rtp_sender_video_->GetStorageType(
1734 header, kRetransmitAllPackets,
1735 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1736 }
1737
1738 TEST_P(RtpSenderVideoTest, RetransmissionTypesVP8BaseLayer) {
1739 RTPVideoHeader header;
1740 header.codec = kRtpVideoVp8;
1741 header.codecHeader.VP8.temporalIdx = 0;
1742
1743 EXPECT_EQ(kDontRetransmit,
1744 rtp_sender_video_->GetStorageType(
1745 header, kRetransmitOff, kDefaultExpectedRetransmissionTimeMs,
1746 kVideoFrameDelta));
1747 EXPECT_EQ(kAllowRetransmission,
1748 rtp_sender_video_->GetStorageType(
1749 header, kRetransmitBaseLayer,
1750 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1751 EXPECT_EQ(kDontRetransmit,
1752 rtp_sender_video_->GetStorageType(
1753 header, kRetransmitHigherLayers,
1754 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1755 EXPECT_EQ(kAllowRetransmission,
1756 rtp_sender_video_->GetStorageType(
1757 header, kRetransmitHigherLayers | kRetransmitBaseLayer,
1758 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1759 EXPECT_EQ(kDontRetransmit,
1760 rtp_sender_video_->GetStorageType(
1761 header, kConditionallyRetransmitHigherLayers,
1762 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1763 EXPECT_EQ(
1764 kAllowRetransmission,
1765 rtp_sender_video_->GetStorageType(
1766 header, kRetransmitBaseLayer | kConditionallyRetransmitHigherLayers,
1767 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1768 EXPECT_EQ(kAllowRetransmission,
1769 rtp_sender_video_->GetStorageType(
1770 header, kRetransmitAllPackets,
1771 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1772 }
1773
1774 TEST_P(RtpSenderVideoTest, RetransmissionTypesVP8HigherLayers) {
1775 RTPVideoHeader header;
1776 header.codec = kRtpVideoVp8;
1777
1778 for (int tid = 1; tid <= kMaxTemporalStreams; ++tid) {
1779 header.codecHeader.VP8.temporalIdx = tid;
1780
1781 EXPECT_EQ(kDontRetransmit,
1782 rtp_sender_video_->GetStorageType(
1783 header, kRetransmitOff, kDefaultExpectedRetransmissionTimeMs,
1784 kVideoFrameDelta));
1785 EXPECT_EQ(kDontRetransmit,
1786 rtp_sender_video_->GetStorageType(
1787 header, kRetransmitBaseLayer,
1788 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1789 EXPECT_EQ(kAllowRetransmission,
1790 rtp_sender_video_->GetStorageType(
1791 header, kRetransmitHigherLayers,
1792 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1793 EXPECT_EQ(kAllowRetransmission,
1794 rtp_sender_video_->GetStorageType(
1795 header, kRetransmitHigherLayers | kRetransmitBaseLayer,
1796 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1797 EXPECT_EQ(kAllowRetransmission,
1798 rtp_sender_video_->GetStorageType(
1799 header, kRetransmitAllPackets,
1800 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1801 }
1802 }
1803
1804 TEST_P(RtpSenderVideoTest, RetransmissionTypesVP9) {
1805 RTPVideoHeader header;
1806 header.codec = kRtpVideoVp9;
1807
1808 for (int tid = 1; tid <= kMaxTemporalStreams; ++tid) {
1809 header.codecHeader.VP9.temporal_idx = tid;
1810
1811 EXPECT_EQ(kDontRetransmit,
1812 rtp_sender_video_->GetStorageType(
1813 header, kRetransmitOff, kDefaultExpectedRetransmissionTimeMs,
1814 kVideoFrameDelta));
1815 EXPECT_EQ(kDontRetransmit,
1816 rtp_sender_video_->GetStorageType(
1817 header, kRetransmitBaseLayer,
1818 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1819 EXPECT_EQ(kAllowRetransmission,
1820 rtp_sender_video_->GetStorageType(
1821 header, kRetransmitHigherLayers,
1822 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1823 EXPECT_EQ(kAllowRetransmission,
1824 rtp_sender_video_->GetStorageType(
1825 header, kRetransmitHigherLayers | kRetransmitBaseLayer,
1826 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1827 EXPECT_EQ(kAllowRetransmission,
1828 rtp_sender_video_->GetStorageType(
1829 header, kRetransmitAllPackets,
1830 kDefaultExpectedRetransmissionTimeMs, kVideoFrameDelta));
1831 }
1832 }
1833
1834 TEST_P(RtpSenderVideoTest, ConditionalRetransmit) {
1835 const int64_t kFrameIntervalMs = 33;
1836 const int64_t kRttMs = (kFrameIntervalMs * 3) / 2;
1837 const uint8_t kSettings =
1838 kRetransmitBaseLayer | kConditionallyRetransmitHigherLayers;
1839
1840 // Insert VP8 frames for all temporal layers, but stop before the final index.
1841 RTPVideoHeader header;
1842 header.codec = kRtpVideoVp8;
1843
1844 // Fill averaging window to prevent rounding errors.
1845 constexpr int kNumRepetitions =
1846 (RTPSenderVideo::kTLRateWindowSizeMs + (kFrameIntervalMs / 2)) /
1847 kFrameIntervalMs;
1848 constexpr int kPattern[] = {0, 2, 1, 2};
1849 for (size_t i = 0; i < arraysize(kPattern) * kNumRepetitions; ++i) {
1850 header.codecHeader.VP8.temporalIdx = kPattern[i % arraysize(kPattern)];
1851 rtp_sender_video_->GetStorageType(
1852 header, kSettings, kRttMs, i == 0 ? kVideoFrameKey : kVideoFrameDelta);
1853 fake_clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
1854 }
1855
1856 // Since we're at the start of the pattern, the next expected frame in TL0 is
1857 // right now. We will wait at most one expected retransmission time before
1858 // acknowledging that it did not arrive, which means this frame and the next
1859 // will not be retransmitted.
1860 header.codecHeader.VP8.temporalIdx = 1;
1861 EXPECT_EQ(StorageType::kDontRetransmit,
1862 rtp_sender_video_->GetStorageType(header, kSettings, kRttMs,
1863 kVideoFrameDelta));
1864 fake_clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
1865 EXPECT_EQ(StorageType::kDontRetransmit,
1866 rtp_sender_video_->GetStorageType(header, kSettings, kRttMs,
1867 kVideoFrameDelta));
1868 fake_clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
1869
1870 // The TL0 frame did not arrive. So allow retransmission.
1871 EXPECT_EQ(StorageType::kAllowRetransmission,
1872 rtp_sender_video_->GetStorageType(header, kSettings, kRttMs,
1873 kVideoFrameDelta));
1874 fake_clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
1875
1876 // Insert a frame for TL2. We just had frame in TL1, so the next one there is
1877 // in three frames away. TL0 is still too far in the past. So, allow
1878 // retransmission.
1879 header.codecHeader.VP8.temporalIdx = 2;
1880 EXPECT_EQ(StorageType::kAllowRetransmission,
1881 rtp_sender_video_->GetStorageType(header, kSettings, kRttMs,
1882 kVideoFrameDelta));
1883 fake_clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
1884
1885 // Another TL2, next in TL1 is two frames away. Allow again.
1886 EXPECT_EQ(StorageType::kAllowRetransmission,
1887 rtp_sender_video_->GetStorageType(header, kSettings, kRttMs,
1888 kVideoFrameDelta));
1889 fake_clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
1890
1891 // Yet another TL2, next in TL1 is now only one frame away, so don't store
1892 // for retransmission.
1893 EXPECT_EQ(StorageType::kDontRetransmit,
1894 rtp_sender_video_->GetStorageType(header, kSettings, kRttMs,
1895 kVideoFrameDelta));
1896 }
1897
1898 TEST_P(RtpSenderVideoTest, ConditionalRetransmitLimit) {
1899 const int64_t kFrameIntervalMs = 200;
1900 const int64_t kRttMs = (kFrameIntervalMs * 3) / 2;
1901 const int32_t kSettings =
1902 kRetransmitBaseLayer | kConditionallyRetransmitHigherLayers;
1903
1904 // Insert VP8 frames for all temporal layers, but stop before the final index.
1905 RTPVideoHeader header;
1906 header.codec = kRtpVideoVp8;
1907
1908 // Fill averaging window to prevent rounding errors.
1909 constexpr int kNumRepetitions =
1910 (RTPSenderVideo::kTLRateWindowSizeMs + (kFrameIntervalMs / 2)) /
1911 kFrameIntervalMs;
1912 constexpr int kPattern[] = {0, 2, 2, 2};
1913 for (size_t i = 0; i < arraysize(kPattern) * kNumRepetitions; ++i) {
1914 header.codecHeader.VP8.temporalIdx = kPattern[i % arraysize(kPattern)];
1915
1916 rtp_sender_video_->GetStorageType(
1917 header, kSettings, kRttMs, i == 0 ? kVideoFrameKey : kVideoFrameDelta);
1918 fake_clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
1919 }
1920
1921 // Since we're at the start of the pattern, the next expected frame will be
1922 // right now in TL0. Put it in TL1 instead. Regular rules would dictate that
1923 // we don't store for retransmission because we expect a frame in a lower
1924 // layer, but that last frame in TL1 was a long time ago in absolute terms,
1925 // so allow retransmission anyway.
1926 header.codecHeader.VP8.temporalIdx = 1;
1927 EXPECT_EQ(StorageType::kAllowRetransmission,
1928 rtp_sender_video_->GetStorageType(header, kSettings, kRttMs,
1929 kVideoFrameDelta));
1930 }
1931
1655 TEST_P(RtpSenderTest, OnOverheadChanged) { 1932 TEST_P(RtpSenderTest, OnOverheadChanged) {
1656 MockOverheadObserver mock_overhead_observer; 1933 MockOverheadObserver mock_overhead_observer;
1657 rtp_sender_.reset( 1934 rtp_sender_.reset(
1658 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr, 1935 new RTPSender(false, &fake_clock_, &transport_, nullptr, nullptr, nullptr,
1659 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, 1936 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1660 &retransmission_rate_limiter_, &mock_overhead_observer)); 1937 &retransmission_rate_limiter_, &mock_overhead_observer));
1661 rtp_sender_->SetSSRC(kSsrc); 1938 rtp_sender_->SetSSRC(kSsrc);
1662 1939
1663 // RTP overhead is 12B. 1940 // RTP overhead is 12B.
1664 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(12)).Times(1); 1941 EXPECT_CALL(mock_overhead_observer, OnOverheadChanged(12)).Times(1);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1753 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 2030 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1754 RtpSenderTestWithoutPacer, 2031 RtpSenderTestWithoutPacer,
1755 ::testing::Bool()); 2032 ::testing::Bool());
1756 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 2033 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1757 RtpSenderVideoTest, 2034 RtpSenderVideoTest,
1758 ::testing::Bool()); 2035 ::testing::Bool());
1759 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead, 2036 INSTANTIATE_TEST_CASE_P(WithAndWithoutOverhead,
1760 RtpSenderAudioTest, 2037 RtpSenderAudioTest,
1761 ::testing::Bool()); 2038 ::testing::Bool());
1762 } // namespace webrtc 2039 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698