Index: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
index 2f664d74fcba57b4cd0673341fe7966a80f66ec1..f68965f1b9bd4b57cb1af2b247d424db3d34f46d 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
@@ -21,6 +21,7 @@ |
#include "webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.h" |
#include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h" |
#include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h" |
+#include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h" |
#include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h" |
#include "webrtc/modules/rtp_rtcp/source/rtp_sender.h" |
#include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h" |
@@ -55,52 +56,44 @@ const uint8_t kPayloadData[] = {47, 11, 32, 93, 89}; |
using ::testing::_; |
using ::testing::ElementsAreArray; |
-const uint8_t* GetPayloadData(const RTPHeader& rtp_header, |
- const uint8_t* packet) { |
- return packet + rtp_header.headerLength; |
-} |
- |
-size_t GetPayloadDataLength(const RTPHeader& rtp_header, |
- const size_t packet_length) { |
- return packet_length - rtp_header.headerLength - rtp_header.paddingLength; |
-} |
- |
uint64_t ConvertMsToAbsSendTime(int64_t time_ms) { |
return (((time_ms << 18) + 500) / 1000) & 0x00ffffff; |
} |
class LoopbackTransportTest : public webrtc::Transport { |
public: |
- LoopbackTransportTest() |
- : packets_sent_(0), |
- last_sent_packet_len_(0), |
- total_bytes_sent_(0), |
- last_sent_packet_(nullptr), |
- last_packet_id_(-1) {} |
- |
- ~LoopbackTransportTest() { |
- STLDeleteContainerPointers(sent_packets_.begin(), sent_packets_.end()); |
+ LoopbackTransportTest() : total_bytes_sent_(0), last_packet_id_(-1) { |
+ receivers_extensions_.Register(kRtpExtensionTransmissionTimeOffset, |
+ kTransmissionTimeOffsetExtensionId); |
+ receivers_extensions_.Register(kRtpExtensionAbsoluteSendTime, |
+ kAbsoluteSendTimeExtensionId); |
+ receivers_extensions_.Register(kRtpExtensionTransportSequenceNumber, |
+ kTransportSequenceNumberExtensionId); |
+ receivers_extensions_.Register(kRtpExtensionVideoRotation, |
+ kVideoRotationExtensionId); |
+ receivers_extensions_.Register(kRtpExtensionAudioLevel, |
+ kAudioLevelExtensionId); |
} |
+ |
bool SendRtp(const uint8_t* data, |
size_t len, |
const PacketOptions& options) override { |
- packets_sent_++; |
- rtc::Buffer* buffer = |
- new rtc::Buffer(reinterpret_cast<const uint8_t*>(data), len); |
- last_sent_packet_ = buffer->data(); |
- last_sent_packet_len_ = len; |
last_packet_id_ = options.packet_id; |
total_bytes_sent_ += len; |
- sent_packets_.push_back(buffer); |
+ sent_packets_.push_back(RtpPacketReceived(&receivers_extensions_)); |
+ EXPECT_TRUE(sent_packets_.back().Parse(data, len)); |
return true; |
} |
bool SendRtcp(const uint8_t* data, size_t len) override { return false; } |
- int packets_sent_; |
- size_t last_sent_packet_len_; |
+ const RtpPacketReceived& last_sent_packet() { return sent_packets_.back(); } |
+ int packets_sent() { return sent_packets_.size(); } |
+ |
size_t total_bytes_sent_; |
- uint8_t* last_sent_packet_; |
int last_packet_id_; |
- std::vector<rtc::Buffer*> sent_packets_; |
+ std::vector<RtpPacketReceived> sent_packets_; |
+ |
+ private: |
+ RtpHeaderExtensionMap receivers_extensions_; |
}; |
} // namespace |
@@ -250,24 +243,19 @@ class RtpSenderVideoTest : public RtpSenderTest { |
} |
std::unique_ptr<RTPSenderVideo> rtp_sender_video_; |
- void VerifyCVOPacket(uint8_t* data, |
- size_t len, |
+ void VerifyCVOPacket(const RtpPacketReceived& rtp_packet, |
bool expect_cvo, |
- RtpHeaderExtensionMap* map, |
uint16_t seq_num, |
- VideoRotation rotation) { |
- webrtc::RtpUtility::RtpHeaderParser rtp_parser(data, len); |
- |
- webrtc::RTPHeader rtp_header; |
- ASSERT_TRUE(rtp_parser.Parse(&rtp_header, map)); |
- ASSERT_FALSE(rtp_parser.RTCP()); |
- EXPECT_EQ(payload_, rtp_header.payloadType); |
- EXPECT_EQ(seq_num, rtp_header.sequenceNumber); |
- EXPECT_EQ(kTimestamp, rtp_header.timestamp); |
- EXPECT_EQ(rtp_sender_->SSRC(), rtp_header.ssrc); |
- EXPECT_EQ(0, rtp_header.numCSRCs); |
- EXPECT_EQ(0U, rtp_header.paddingLength); |
- EXPECT_EQ(rotation, rtp_header.extension.videoRotation); |
+ VideoRotation expected_rotation) { |
+ EXPECT_EQ(payload_, rtp_packet.PayloadType()); |
+ EXPECT_EQ(seq_num, rtp_packet.SequenceNumber()); |
+ EXPECT_EQ(kTimestamp, rtp_packet.Timestamp()); |
+ EXPECT_EQ(rtp_sender_->SSRC(), rtp_packet.Ssrc()); |
+ EXPECT_EQ(0U, rtp_packet.Csrcs().size()); |
+ EXPECT_EQ(0U, rtp_packet.padding_size()); |
+ VideoRotation actual_rotation; |
+ EXPECT_TRUE(rtp_packet.GetExtension<VideoOrientation>(&actual_rotation)); |
+ EXPECT_EQ(expected_rotation, actual_rotation); |
} |
}; |
@@ -461,11 +449,8 @@ TEST_F(RtpSenderTestWithoutPacer, AssignSequenceNumberSetPaddingTimestamps) { |
ASSERT_TRUE(rtp_sender_->TimeToSendPadding(kPaddingSize, -1)); |
ASSERT_EQ(1u, transport_.sent_packets_.size()); |
- // Parse the padding packet and verify its timestamp. |
- RtpPacketToSend padding_packet(nullptr); |
- ASSERT_TRUE(padding_packet.Parse(transport_.sent_packets_[0]->data(), |
- transport_.sent_packets_[0]->size())); |
- EXPECT_EQ(kTimestamp, padding_packet.Timestamp()); |
+ // Verify padding packet timestamp. |
+ EXPECT_EQ(kTimestamp, transport_.last_sent_packet().Timestamp()); |
} |
TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { |
@@ -491,18 +476,11 @@ TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { |
SendGenericPayload(); |
- RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
- transport_.last_sent_packet_len_); |
- webrtc::RTPHeader rtp_header; |
- RtpHeaderExtensionMap map; |
- map.Register(kRtpExtensionTransportSequenceNumber, |
- kTransportSequenceNumberExtensionId); |
- EXPECT_TRUE(rtp_parser.Parse(&rtp_header, &map)); |
- EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber); |
- EXPECT_EQ(kTransportSequenceNumber, |
- rtp_header.extension.transportSequenceNumber); |
- EXPECT_EQ(transport_.last_packet_id_, |
- rtp_header.extension.transportSequenceNumber); |
+ const auto& packet = transport_.last_sent_packet(); |
+ uint16_t transport_seq_no; |
+ ASSERT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); |
+ EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); |
+ EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
} |
TEST_F(RtpSenderTestWithoutPacer, NoAllocationIfNotRegistered) { |
@@ -552,18 +530,11 @@ TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { |
rtp_sender_->TimeToSendPacket(seq_num, fake_clock_.TimeInMilliseconds(), |
false, kProbeClusterId); |
- RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
- transport_.last_sent_packet_len_); |
- webrtc::RTPHeader rtp_header; |
- RtpHeaderExtensionMap map; |
- map.Register(kRtpExtensionTransportSequenceNumber, |
- kTransportSequenceNumberExtensionId); |
- EXPECT_TRUE(rtp_parser.Parse(&rtp_header, &map)); |
- EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber); |
- EXPECT_EQ(kTransportSequenceNumber, |
- rtp_header.extension.transportSequenceNumber); |
- EXPECT_EQ(transport_.last_packet_id_, |
- rtp_header.extension.transportSequenceNumber); |
+ const auto& packet = transport_.last_sent_packet(); |
+ uint16_t transport_seq_no; |
+ EXPECT_TRUE(packet.GetExtension<TransportSequenceNumber>(&transport_seq_no)); |
+ EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); |
+ EXPECT_EQ(transport_.last_packet_id_, transport_seq_no); |
} |
TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { |
@@ -589,7 +560,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { |
kAllowRetransmission, |
RtpPacketSender::kNormalPriority)); |
- EXPECT_EQ(0, transport_.packets_sent_); |
+ EXPECT_EQ(0, transport_.packets_sent()); |
const int kStoredTimeInMs = 100; |
fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
@@ -598,18 +569,11 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { |
PacketInfo::kNotAProbe); |
// Process send bucket. Packet should now be sent. |
- EXPECT_EQ(1, transport_.packets_sent_); |
- EXPECT_EQ(packet_size, transport_.last_sent_packet_len_); |
- // Parse sent packet. |
- webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
- packet_size); |
+ EXPECT_EQ(1, transport_.packets_sent()); |
+ EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
+ |
webrtc::RTPHeader rtp_header; |
- RtpHeaderExtensionMap map; |
- map.Register(kRtpExtensionTransmissionTimeOffset, |
- kTransmissionTimeOffsetExtensionId); |
- map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); |
- const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); |
- ASSERT_TRUE(valid_rtp_header); |
+ transport_.last_sent_packet().GetHeader(&rtp_header); |
// Verify transmission time offset. |
EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); |
@@ -641,7 +605,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { |
kAllowRetransmission, |
RtpPacketSender::kNormalPriority)); |
- EXPECT_EQ(0, transport_.packets_sent_); |
+ EXPECT_EQ(0, transport_.packets_sent()); |
EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
_, kSeqNum, _, _, _)); |
@@ -650,25 +614,17 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { |
fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum)); |
- EXPECT_EQ(0, transport_.packets_sent_); |
+ EXPECT_EQ(0, transport_.packets_sent()); |
rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, |
PacketInfo::kNotAProbe); |
// Process send bucket. Packet should now be sent. |
- EXPECT_EQ(1, transport_.packets_sent_); |
- EXPECT_EQ(packet_size, transport_.last_sent_packet_len_); |
+ EXPECT_EQ(1, transport_.packets_sent()); |
+ EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
- // Parse sent packet. |
- webrtc::RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
- packet_size); |
webrtc::RTPHeader rtp_header; |
- RtpHeaderExtensionMap map; |
- map.Register(kRtpExtensionTransmissionTimeOffset, |
- kTransmissionTimeOffsetExtensionId); |
- map.Register(kRtpExtensionAbsoluteSendTime, kAbsoluteSendTimeExtensionId); |
- const bool valid_rtp_header = rtp_parser.Parse(&rtp_header, &map); |
- ASSERT_TRUE(valid_rtp_header); |
+ transport_.last_sent_packet().GetHeader(&rtp_header); |
// Verify transmission time offset. |
EXPECT_EQ(kStoredTimeInMs * 90, rtp_header.extension.transmissionTimeOffset); |
@@ -701,14 +657,6 @@ TEST_F(RtpSenderTest, SendPadding) { |
rtp_header_len += 4; // 4 bytes extension. |
rtp_header_len += 4; // 4 extra bytes common to all extension headers. |
- // Create and set up parser. |
- std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( |
- webrtc::RtpHeaderParser::Create()); |
- ASSERT_TRUE(rtp_parser.get() != nullptr); |
- rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, |
- kTransmissionTimeOffsetExtensionId); |
- rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
- kAbsoluteSendTimeExtensionId); |
webrtc::RTPHeader rtp_header; |
int64_t capture_time_ms = fake_clock_.TimeInMilliseconds(); |
@@ -723,7 +671,7 @@ TEST_F(RtpSenderTest, SendPadding) { |
RtpPacketSender::kNormalPriority)); |
int total_packets_sent = 0; |
- EXPECT_EQ(total_packets_sent, transport_.packets_sent_); |
+ EXPECT_EQ(total_packets_sent, transport_.packets_sent()); |
const int kStoredTimeInMs = 100; |
fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
@@ -731,7 +679,7 @@ TEST_F(RtpSenderTest, SendPadding) { |
PacketInfo::kNotAProbe); |
// Packet should now be sent. This test doesn't verify the regular video |
// packet, since it is tested in another test. |
- EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); |
+ EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); |
timestamp += 90 * kStoredTimeInMs; |
// Send padding 4 times, waiting 50 ms between each. |
@@ -744,13 +692,11 @@ TEST_F(RtpSenderTest, SendPadding) { |
kPaddingBytes, PacketInfo::kNotAProbe)); |
// Process send bucket. Padding should now be sent. |
- EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); |
+ EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); |
EXPECT_EQ(kMaxPaddingLength + rtp_header_len, |
- transport_.last_sent_packet_len_); |
- // Parse sent packet. |
- ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
- transport_.last_sent_packet_len_, |
- &rtp_header)); |
+ transport_.last_sent_packet().size()); |
+ |
+ transport_.last_sent_packet().GetHeader(&rtp_header); |
EXPECT_EQ(kMaxPaddingLength, rtp_header.paddingLength); |
// Verify sequence number and timestamp. The timestamp should be the same |
@@ -783,11 +729,9 @@ TEST_F(RtpSenderTest, SendPadding) { |
rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false, |
PacketInfo::kNotAProbe); |
// Process send bucket. |
- EXPECT_EQ(++total_packets_sent, transport_.packets_sent_); |
- EXPECT_EQ(packet_size, transport_.last_sent_packet_len_); |
- // Parse sent packet. |
- ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, packet_size, |
- &rtp_header)); |
+ EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); |
+ EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); |
+ transport_.last_sent_packet().GetHeader(&rtp_header); |
// Verify sequence number and timestamp. |
EXPECT_EQ(seq_num, rtp_header.sequenceNumber); |
@@ -816,7 +760,7 @@ TEST_F(RtpSenderTest, OnSendPacketUpdated) { |
const bool kIsRetransmit = false; |
rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
kIsRetransmit, PacketInfo::kNotAProbe); |
- EXPECT_EQ(1, transport_.packets_sent_); |
+ EXPECT_EQ(1, transport_.packets_sent()); |
} |
TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { |
@@ -834,7 +778,7 @@ TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { |
const bool kIsRetransmit = true; |
rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
kIsRetransmit, PacketInfo::kNotAProbe); |
- EXPECT_EQ(1, transport_.packets_sent_); |
+ EXPECT_EQ(1, transport_.packets_sent()); |
} |
TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { |
@@ -855,7 +799,7 @@ TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { |
const bool kIsRetransmit = false; |
rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
kIsRetransmit, PacketInfo::kNotAProbe); |
- EXPECT_EQ(1, transport_.packets_sent_); |
+ EXPECT_EQ(1, transport_.packets_sent()); |
} |
TEST_F(RtpSenderTest, SendRedundantPayloads) { |
@@ -880,14 +824,6 @@ TEST_F(RtpSenderTest, SendRedundantPayloads) { |
rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); |
rtp_sender_->SetRtxSsrc(1234); |
- // Create and set up parser. |
- std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( |
- webrtc::RtpHeaderParser::Create()); |
- ASSERT_TRUE(rtp_parser.get() != nullptr); |
- rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, |
- kTransmissionTimeOffsetExtensionId); |
- rtp_parser->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, |
- kAbsoluteSendTimeExtensionId); |
const size_t kNumPayloadSizes = 10; |
const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, |
750, 800, 850, 900, 950}; |
@@ -947,17 +883,11 @@ TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { |
4321, payload, sizeof(payload), |
nullptr, nullptr, nullptr)); |
- RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
- transport_.last_sent_packet_len_); |
- webrtc::RTPHeader rtp_header; |
- ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
- |
- const uint8_t* payload_data = |
- GetPayloadData(rtp_header, transport_.last_sent_packet_); |
+ const uint8_t* payload_data = transport_.last_sent_packet().payload(); |
uint8_t generic_header = *payload_data++; |
ASSERT_EQ(sizeof(payload) + sizeof(generic_header), |
- GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
+ transport_.last_sent_packet().payload_size()); |
EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
@@ -973,18 +903,14 @@ TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) { |
kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload), |
nullptr, nullptr, nullptr)); |
- RtpUtility::RtpHeaderParser rtp_parser2(transport_.last_sent_packet_, |
- transport_.last_sent_packet_len_); |
- ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
- |
- payload_data = GetPayloadData(rtp_header, transport_.last_sent_packet_); |
+ payload_data = transport_.last_sent_packet().payload(); |
generic_header = *payload_data++; |
EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit); |
EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit); |
ASSERT_EQ(sizeof(payload) + sizeof(generic_header), |
- GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
+ transport_.last_sent_packet().payload_size()); |
EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
} |
@@ -1242,17 +1168,9 @@ TEST_F(RtpSenderAudioTest, SendAudio) { |
kAudioFrameCN, payload_type, 1234, 4321, payload, |
sizeof(payload), nullptr, nullptr, nullptr)); |
- RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
- transport_.last_sent_packet_len_); |
- webrtc::RTPHeader rtp_header; |
- ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
- |
- const uint8_t* payload_data = |
- GetPayloadData(rtp_header, transport_.last_sent_packet_); |
- |
- ASSERT_EQ(sizeof(payload), |
- GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
+ const uint8_t* payload_data = transport_.last_sent_packet().payload(); |
+ ASSERT_EQ(sizeof(payload), transport_.last_sent_packet().payload_size()); |
EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
} |
@@ -1271,28 +1189,17 @@ TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { |
kAudioFrameCN, payload_type, 1234, 4321, payload, |
sizeof(payload), nullptr, nullptr, nullptr)); |
- RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
- transport_.last_sent_packet_len_); |
- webrtc::RTPHeader rtp_header; |
- ASSERT_TRUE(rtp_parser.Parse(&rtp_header)); |
- |
- const uint8_t* payload_data = |
- GetPayloadData(rtp_header, transport_.last_sent_packet_); |
- |
- ASSERT_EQ(sizeof(payload), |
- GetPayloadDataLength(rtp_header, transport_.last_sent_packet_len_)); |
+ const uint8_t* payload_data = transport_.last_sent_packet().payload(); |
+ ASSERT_EQ(sizeof(payload), transport_.last_sent_packet().payload_size()); |
EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload))); |
- |
- uint8_t extension[] = { |
- 0xbe, 0xde, 0x00, 0x01, |
- (kAudioLevelExtensionId << 4) + 0, // ID + length. |
- kAudioLevel, // Data. |
- 0x00, 0x00 // Padding. |
- }; |
- |
- EXPECT_EQ(0, memcmp(extension, payload_data - sizeof(extension), |
- sizeof(extension))); |
+ // Verify AudioLevel extension. |
+ bool voice_activity; |
+ uint8_t audio_level; |
+ EXPECT_TRUE(transport_.last_sent_packet().GetExtension<AudioLevel>( |
+ &voice_activity, &audio_level)); |
+ EXPECT_EQ(kAudioLevel, audio_level); |
+ EXPECT_FALSE(voice_activity); |
} |
// As RFC4733, named telephone events are carried as part of the audio stream |
@@ -1327,22 +1234,15 @@ TEST_F(RtpSenderAudioTest, CheckMarkerBitForTelephoneEvents) { |
ASSERT_TRUE(rtp_sender_->SendOutgoingData( |
kEmptyFrame, payload_type, capture_time_ms + 2000, 0, |
nullptr, 0, nullptr, nullptr, nullptr)); |
- std::unique_ptr<webrtc::RtpHeaderParser> rtp_parser( |
- webrtc::RtpHeaderParser::Create()); |
- ASSERT_TRUE(rtp_parser.get() != nullptr); |
- webrtc::RTPHeader rtp_header; |
- ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
- transport_.last_sent_packet_len_, &rtp_header)); |
+ |
// Marker Bit should be set to 1 for first packet. |
- EXPECT_TRUE(rtp_header.markerBit); |
+ EXPECT_TRUE(transport_.last_sent_packet().Marker()); |
ASSERT_TRUE(rtp_sender_->SendOutgoingData( |
kEmptyFrame, payload_type, capture_time_ms + 4000, 0, |
nullptr, 0, nullptr, nullptr, nullptr)); |
- ASSERT_TRUE(rtp_parser->Parse(transport_.last_sent_packet_, |
- transport_.last_sent_packet_len_, &rtp_header)); |
// Marker Bit should be set to 0 for rest of the packets. |
- EXPECT_FALSE(rtp_header.markerBit); |
+ EXPECT_FALSE(transport_.last_sent_packet().Marker()); |
} |
TEST_F(RtpSenderTestWithoutPacer, BytesReportedCorrectly) { |
@@ -1406,7 +1306,7 @@ TEST_F(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) { |
fake_clock_.AdvanceTimeMilliseconds(1); |
SendPacket(fake_clock_.TimeInMilliseconds(), kPacketSize); |
} |
- EXPECT_EQ(kNumPackets, transport_.packets_sent_); |
+ EXPECT_EQ(kNumPackets, transport_.packets_sent()); |
fake_clock_.AdvanceTimeMilliseconds(1000 - kNumPackets); |
@@ -1414,14 +1314,14 @@ TEST_F(RtpSenderTestWithoutPacer, RespectsNackBitrateLimit) { |
// NACK bitrate is capped to the same bitrate as the encoder, since the max |
// protection overhead is 50% (see MediaOptimization::SetTargetRates). |
rtp_sender_->OnReceivedNack(sequence_numbers, 0); |
- EXPECT_EQ(kNumPackets * 2, transport_.packets_sent_); |
+ EXPECT_EQ(kNumPackets * 2, transport_.packets_sent()); |
// Must be at least 5ms in between retransmission attempts. |
fake_clock_.AdvanceTimeMilliseconds(5); |
// Resending should not work, bandwidth exceeded. |
rtp_sender_->OnReceivedNack(sequence_numbers, 0); |
- EXPECT_EQ(kNumPackets * 2, transport_.packets_sent_); |
+ EXPECT_EQ(kNumPackets * 2, transport_.packets_sent()); |
} |
// Verify that all packets of a frame have CVO byte set. |
@@ -1440,19 +1340,11 @@ TEST_F(RtpSenderVideoTest, SendVideoWithCVO) { |
kTimestamp, 0, kFrame, sizeof(kFrame), nullptr, |
&hdr); |
- RtpHeaderExtensionMap map; |
- map.Register(kRtpExtensionVideoRotation, kVideoRotationExtensionId); |
- |
// Verify that this packet does have CVO byte. |
- VerifyCVOPacket( |
- reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), |
- transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); |
+ VerifyCVOPacket(transport_.sent_packets_[0], true, kSeqNum, hdr.rotation); |
// Verify that this packet does have CVO byte. |
- VerifyCVOPacket( |
- reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), |
- transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, |
- hdr.rotation); |
+ VerifyCVOPacket(transport_.sent_packets_[1], true, kSeqNum + 1, hdr.rotation); |
} |
// Make sure rotation is parsed correctly when the Camera (C) and Flip (F) bits |