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:
danilchap
2017-03-29 07:33:13 -07:00
committed by Commit bot
parent e127e7a0ed
commit 07a01b3357
3 changed files with 11 additions and 13 deletions

View File

@ -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()) {

View File

@ -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:

View File

@ -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());