Allow RtpPacket::SetPayloadSize to increase payload size
Make SetPayloadSize return buffer to write to so that it can replace AllocatePayload function. BUG=None Review-Url: https://codereview.webrtc.org/2785713002 Cr-Commit-Position: refs/heads/master@{#17450}
This commit is contained in:
@ -274,26 +274,23 @@ void Packet::SetCsrcs(const std::vector<uint32_t>& csrcs) {
|
||||
}
|
||||
|
||||
uint8_t* Packet::AllocatePayload(size_t size_bytes) {
|
||||
// Reset payload size to 0. If CopyOnWrite buffer_ was shared, this will cause
|
||||
// reallocation and memcpy. Keeping just header reduces memcpy size.
|
||||
SetPayloadSize(0);
|
||||
return SetPayloadSize(size_bytes);
|
||||
}
|
||||
|
||||
uint8_t* Packet::SetPayloadSize(size_t size_bytes) {
|
||||
RTC_DCHECK_EQ(padding_size_, 0);
|
||||
if (payload_offset_ + size_bytes > capacity()) {
|
||||
LOG(LS_WARNING) << "Cannot set payload, not enough space in buffer.";
|
||||
return nullptr;
|
||||
}
|
||||
// Reset payload size to 0. If CopyOnWrite buffer_ was shared, this will cause
|
||||
// reallocation and memcpy. Setting size to just headers reduces memcpy size.
|
||||
buffer_.SetSize(payload_offset_);
|
||||
payload_size_ = size_bytes;
|
||||
buffer_.SetSize(payload_offset_ + payload_size_);
|
||||
return WriteAt(payload_offset_);
|
||||
}
|
||||
|
||||
void Packet::SetPayloadSize(size_t size_bytes) {
|
||||
RTC_DCHECK_EQ(padding_size_, 0);
|
||||
RTC_DCHECK_LE(size_bytes, payload_size_);
|
||||
payload_size_ = size_bytes;
|
||||
buffer_.SetSize(payload_offset_ + payload_size_);
|
||||
}
|
||||
|
||||
bool Packet::SetPadding(uint8_t size_bytes, Random* random) {
|
||||
RTC_DCHECK(random);
|
||||
if (payload_offset_ + payload_size_ + size_bytes > capacity()) {
|
||||
|
||||
@ -96,8 +96,9 @@ class Packet {
|
||||
bool ReserveExtension();
|
||||
|
||||
// Reserve size_bytes for payload. Returns nullptr on failure.
|
||||
uint8_t* SetPayloadSize(size_t size_bytes);
|
||||
// Same as SetPayloadSize but doesn't guarantee to keep current payload.
|
||||
uint8_t* AllocatePayload(size_t size_bytes);
|
||||
void SetPayloadSize(size_t size_bytes);
|
||||
bool SetPadding(uint8_t size_bytes, Random* random);
|
||||
|
||||
protected:
|
||||
|
||||
@ -125,7 +125,7 @@ TEST(RtpPacketTest, SetReservedExtensionsAfterPayload) {
|
||||
RtpPacketToSend packet(&extensions);
|
||||
|
||||
EXPECT_TRUE(packet.ReserveExtension<TransmissionOffset>());
|
||||
packet.AllocatePayload(kPayloadSize);
|
||||
packet.SetPayloadSize(kPayloadSize);
|
||||
// Can't set extension after payload.
|
||||
EXPECT_FALSE(packet.SetExtension<AudioLevel>(kVoiceActive, kAudioLevel));
|
||||
// Unless reserved.
|
||||
@ -154,7 +154,7 @@ TEST(RtpPacketTest, CreateUnalignedPadding) {
|
||||
packet.SetSequenceNumber(kSeqNum);
|
||||
packet.SetTimestamp(kTimestamp);
|
||||
packet.SetSsrc(kSsrc);
|
||||
packet.AllocatePayload(kPayloadSize);
|
||||
packet.SetPayloadSize(kPayloadSize);
|
||||
Random r(0x123456789);
|
||||
|
||||
EXPECT_LT(packet.size(), packet.capacity());
|
||||
|
||||
Reference in New Issue
Block a user