| Index: webrtc/modules/rtp_rtcp/source/rtp_packet.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_packet.cc b/webrtc/modules/rtp_rtcp/source/rtp_packet.cc
|
| index 07aeb7130d586da3d145b497f14dffebff34149a..8c8fa0e79ad62d47cff2dc3dfd0b6c9fc70e260e 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_packet.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_packet.cc
|
| @@ -78,18 +78,19 @@ bool Packet::Parse(const uint8_t* buffer, size_t buffer_size) {
|
| Clear();
|
| return false;
|
| }
|
| - RTC_DCHECK_EQ(size(), buffer_size);
|
| buffer_.SetData(buffer, buffer_size);
|
| + RTC_DCHECK_EQ(size(), buffer_size);
|
| return true;
|
| }
|
|
|
| -bool Packet::Parse(rtc::Buffer buffer) {
|
| - if (!ParseBuffer(buffer.data(), buffer.size())) {
|
| +bool Packet::Parse(rtc::CopyOnWriteBuffer buffer) {
|
| + if (!ParseBuffer(buffer.cdata(), buffer.size())) {
|
| Clear();
|
| return false;
|
| }
|
| - RTC_DCHECK_EQ(size(), buffer.size());
|
| + size_t buffer_size = buffer.size();
|
| buffer_ = std::move(buffer);
|
| + RTC_DCHECK_EQ(size(), buffer_size);
|
| return true;
|
| }
|
|
|
| @@ -174,16 +175,22 @@ const uint8_t* Packet::payload() const {
|
| return data() + payload_offset_;
|
| }
|
|
|
| +rtc::CopyOnWriteBuffer Packet::Buffer() const {
|
| + return buffer_;
|
| +}
|
| +
|
| size_t Packet::capacity() const {
|
| - return buffer_.size();
|
| + return buffer_.capacity();
|
| }
|
|
|
| size_t Packet::size() const {
|
| - return payload_offset_ + payload_size_ + padding_size_;
|
| + size_t ret = payload_offset_ + payload_size_ + padding_size_;
|
| + RTC_DCHECK_EQ(buffer_.size(), ret);
|
| + return ret;
|
| }
|
|
|
| const uint8_t* Packet::data() const {
|
| - return buffer_.data();
|
| + return buffer_.cdata();
|
| }
|
|
|
| size_t Packet::FreeCapacity() const {
|
| @@ -194,7 +201,7 @@ size_t Packet::MaxPayloadSize() const {
|
| return capacity() - payload_offset_;
|
| }
|
|
|
| -void Packet::CopyHeader(const Packet& packet) {
|
| +void Packet::CopyHeaderFrom(const Packet& packet) {
|
| RTC_DCHECK_GE(capacity(), packet.headers_size());
|
|
|
| marker_ = packet.marker_;
|
| @@ -257,6 +264,7 @@ void Packet::SetCsrcs(const std::vector<uint32_t>& csrcs) {
|
| ByteWriter<uint32_t>::WriteBigEndian(WriteAt(offset), csrc);
|
| offset += 4;
|
| }
|
| + buffer_.SetSize(payload_offset_);
|
| }
|
|
|
| uint8_t* Packet::AllocatePayload(size_t size_bytes) {
|
| @@ -266,6 +274,7 @@ uint8_t* Packet::AllocatePayload(size_t size_bytes) {
|
| return nullptr;
|
| }
|
| payload_size_ = size_bytes;
|
| + buffer_.SetSize(payload_offset_ + payload_size_);
|
| return WriteAt(payload_offset_);
|
| }
|
|
|
| @@ -273,6 +282,7 @@ void Packet::SetPayloadSize(size_t size_bytes) {
|
| RTC_DCHECK_EQ(padding_size_, 0u);
|
| 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) {
|
| @@ -284,6 +294,7 @@ bool Packet::SetPadding(uint8_t size_bytes, Random* random) {
|
| return false;
|
| }
|
| padding_size_ = size_bytes;
|
| + buffer_.SetSize(payload_offset_ + payload_size_ + padding_size_);
|
| if (padding_size_ > 0) {
|
| size_t padding_offset = payload_offset_ + payload_size_;
|
| size_t padding_end = padding_offset + padding_size_;
|
| @@ -311,6 +322,7 @@ void Packet::Clear() {
|
| extensions_size_ = 0;
|
|
|
| memset(WriteAt(0), 0, kFixedHeaderSize);
|
| + buffer_.SetSize(kFixedHeaderSize);
|
| WriteAt(0, kRtpVersion << 6);
|
| }
|
|
|
| @@ -497,6 +509,7 @@ bool Packet::AllocateExtension(ExtensionType type,
|
| memset(WriteAt(extensions_offset + extensions_size_), 0,
|
| extension_padding_size);
|
| payload_offset_ = extensions_offset + 4 * extensions_words;
|
| + buffer_.SetSize(payload_offset_);
|
| return true;
|
| }
|
|
|
|
|