RtpPacket::payload() return rtc::ArrayView instead of raw pointer
BUG=webrtc:5261 Review-Url: https://codereview.webrtc.org/2506373004 Cr-Commit-Position: refs/heads/master@{#15162}
This commit is contained in:
@ -97,9 +97,9 @@ bool FlexfecReceiver::AddReceivedPacket(const uint8_t* packet,
|
||||
// TODO(brandtr): Remove this memcpy when the FEC packet classes
|
||||
// are using COW buffers internally.
|
||||
received_packet->pkt = rtc::scoped_refptr<Packet>(new Packet());
|
||||
memcpy(received_packet->pkt->data, parsed_packet.payload(),
|
||||
parsed_packet.payload_size());
|
||||
received_packet->pkt->length = parsed_packet.payload_size();
|
||||
auto payload = parsed_packet.payload();
|
||||
memcpy(received_packet->pkt->data, payload.data(), payload.size());
|
||||
received_packet->pkt->length = payload.size();
|
||||
} else {
|
||||
// This is a media packet, or a FlexFEC packet belonging to some
|
||||
// other FlexFEC stream.
|
||||
|
||||
@ -172,8 +172,8 @@ size_t Packet::padding_size() const {
|
||||
return padding_size_;
|
||||
}
|
||||
|
||||
const uint8_t* Packet::payload() const {
|
||||
return data() + payload_offset_;
|
||||
rtc::ArrayView<const uint8_t> Packet::payload() const {
|
||||
return rtc::MakeArrayView(data() + payload_offset_, payload_size_);
|
||||
}
|
||||
|
||||
rtc::CopyOnWriteBuffer Packet::Buffer() const {
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "webrtc/base/array_view.h"
|
||||
#include "webrtc/base/basictypes.h"
|
||||
#include "webrtc/base/copyonwritebuffer.h"
|
||||
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
||||
@ -56,7 +57,7 @@ class Packet {
|
||||
// Payload.
|
||||
size_t payload_size() const;
|
||||
size_t padding_size() const;
|
||||
const uint8_t* payload() const;
|
||||
rtc::ArrayView<const uint8_t> payload() const;
|
||||
|
||||
// Buffer.
|
||||
rtc::CopyOnWriteBuffer Buffer() const;
|
||||
|
||||
@ -219,8 +219,7 @@ TEST(RtpPacketTest, ParseWithInvalidSizedExtension) {
|
||||
EXPECT_FALSE(packet.GetExtension<TransmissionOffset>(&time_offset));
|
||||
|
||||
// But shouldn't prevent reading payload.
|
||||
EXPECT_THAT(make_tuple(packet.payload(), packet.payload_size()),
|
||||
ElementsAreArray(kPayload));
|
||||
EXPECT_THAT(packet.payload(), ElementsAreArray(kPayload));
|
||||
}
|
||||
|
||||
TEST(RtpPacketTest, ParseWithOverSizedExtension) {
|
||||
@ -274,8 +273,7 @@ TEST(RtpPacketTest, ParseWithAllFeatures) {
|
||||
EXPECT_EQ(kTimestamp, packet.Timestamp());
|
||||
EXPECT_EQ(kSsrc, packet.Ssrc());
|
||||
EXPECT_THAT(packet.Csrcs(), ElementsAreArray(kCsrcs));
|
||||
EXPECT_THAT(make_tuple(packet.payload(), packet.payload_size()),
|
||||
ElementsAreArray(kPayload));
|
||||
EXPECT_THAT(packet.payload(), ElementsAreArray(kPayload));
|
||||
EXPECT_EQ(kPacketPaddingSize, packet.padding_size());
|
||||
int32_t time_offset;
|
||||
EXPECT_TRUE(packet.GetExtension<TransmissionOffset>(&time_offset));
|
||||
|
||||
@ -1216,7 +1216,8 @@ std::unique_ptr<RtpPacketToSend> RTPSender::BuildRtxPacket(
|
||||
ByteWriter<uint16_t>::WriteBigEndian(rtx_payload, packet.SequenceNumber());
|
||||
|
||||
// Add original payload data.
|
||||
memcpy(rtx_payload + kRtxHeaderSize, packet.payload(), packet.payload_size());
|
||||
auto payload = packet.payload();
|
||||
memcpy(rtx_payload + kRtxHeaderSize, payload.data(), payload.size());
|
||||
|
||||
return rtx_packet;
|
||||
}
|
||||
|
||||
@ -878,16 +878,11 @@ TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) {
|
||||
4321, payload, sizeof(payload),
|
||||
nullptr, nullptr, nullptr));
|
||||
|
||||
const uint8_t* payload_data = transport_.last_sent_packet().payload();
|
||||
uint8_t generic_header = *payload_data++;
|
||||
|
||||
ASSERT_EQ(sizeof(payload) + sizeof(generic_header),
|
||||
transport_.last_sent_packet().payload_size());
|
||||
|
||||
auto sent_payload = transport_.last_sent_packet().payload();
|
||||
uint8_t generic_header = sent_payload[0];
|
||||
EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
|
||||
EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
|
||||
|
||||
EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
|
||||
EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(payload));
|
||||
|
||||
// Send delta frame
|
||||
payload[0] = 13;
|
||||
@ -898,16 +893,11 @@ TEST_F(RtpSenderTestWithoutPacer, SendGenericVideo) {
|
||||
kVideoFrameDelta, payload_type, 1234, 4321, payload, sizeof(payload),
|
||||
nullptr, nullptr, nullptr));
|
||||
|
||||
payload_data = transport_.last_sent_packet().payload();
|
||||
generic_header = *payload_data++;
|
||||
|
||||
sent_payload = transport_.last_sent_packet().payload();
|
||||
generic_header = sent_payload[0];
|
||||
EXPECT_FALSE(generic_header & RtpFormatVideoGeneric::kKeyFrameBit);
|
||||
EXPECT_TRUE(generic_header & RtpFormatVideoGeneric::kFirstPacketBit);
|
||||
|
||||
ASSERT_EQ(sizeof(payload) + sizeof(generic_header),
|
||||
transport_.last_sent_packet().payload_size());
|
||||
|
||||
EXPECT_EQ(0, memcmp(payload, payload_data, sizeof(payload)));
|
||||
EXPECT_THAT(sent_payload.subview(1), ElementsAreArray(payload));
|
||||
}
|
||||
|
||||
TEST_F(RtpSenderTest, SendFlexfecPackets) {
|
||||
@ -1258,10 +1248,8 @@ TEST_F(RtpSenderAudioTest, SendAudio) {
|
||||
kAudioFrameCN, payload_type, 1234, 4321, payload,
|
||||
sizeof(payload), nullptr, nullptr, nullptr));
|
||||
|
||||
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)));
|
||||
auto sent_payload = transport_.last_sent_packet().payload();
|
||||
EXPECT_THAT(sent_payload, ElementsAreArray(payload));
|
||||
}
|
||||
|
||||
TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) {
|
||||
@ -1279,10 +1267,8 @@ TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) {
|
||||
kAudioFrameCN, payload_type, 1234, 4321, payload,
|
||||
sizeof(payload), nullptr, nullptr, nullptr));
|
||||
|
||||
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)));
|
||||
auto sent_payload = transport_.last_sent_packet().payload();
|
||||
EXPECT_THAT(sent_payload, ElementsAreArray(payload));
|
||||
// Verify AudioLevel extension.
|
||||
bool voice_activity;
|
||||
uint8_t audio_level;
|
||||
|
||||
@ -39,8 +39,10 @@ void BuildRedPayload(const RtpPacketToSend& media_packet,
|
||||
kRedForFecHeaderLength + media_packet.payload_size());
|
||||
RTC_DCHECK(red_payload);
|
||||
red_payload[0] = media_packet.PayloadType();
|
||||
memcpy(&red_payload[kRedForFecHeaderLength], media_packet.payload(),
|
||||
media_packet.payload_size());
|
||||
|
||||
auto media_payload = media_packet.payload();
|
||||
memcpy(&red_payload[kRedForFecHeaderLength], media_payload.data(),
|
||||
media_payload.size());
|
||||
}
|
||||
} // namespace
|
||||
|
||||
|
||||
Reference in New Issue
Block a user