in PacketBuffer::Packet pass payload using smart buffer
Together with RtpDepacketizer refactoring that would reduce
number of memcpy while handling an rtp packet
Bug: webrtc:11152
Change-Id: I6f4e09c93af5e2a9314967a15eac8ced57ec712e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161087
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29985}
diff --git a/modules/video_coding/packet_buffer.cc b/modules/video_coding/packet_buffer.cc
index 30dfc21..b6fc521 100644
--- a/modules/video_coding/packet_buffer.cc
+++ b/modules/video_coding/packet_buffer.cc
@@ -93,8 +93,6 @@
// If we have explicitly cleared past this packet then it's old,
// don't insert it, just silently ignore it.
if (is_cleared_to_first_seq_num_) {
- delete[] packet->data;
- packet->data = nullptr;
return result;
}
@@ -104,8 +102,6 @@
if (buffer_[index].used) {
// Duplicate packet, just delete the payload.
if (buffer_[index].seq_num() == packet->seq_num) {
- delete[] packet->data;
- packet->data = nullptr;
return result;
}
@@ -120,8 +116,6 @@
// new keyframe is needed.
RTC_LOG(LS_WARNING) << "Clear PacketBuffer and request key frame.";
Clear();
- delete[] packet->data;
- packet->data = nullptr;
result.buffer_cleared = true;
return result;
}
@@ -136,7 +130,6 @@
new_entry.continuous = false;
new_entry.used = true;
new_entry.data = std::move(*packet);
- packet->data = nullptr;
UpdateMissingPackets(seq_num);
@@ -164,8 +157,7 @@
for (size_t i = 0; i < iterations; ++i) {
size_t index = first_seq_num_ % buffer_.size();
if (AheadOf<uint16_t>(seq_num, buffer_[index].seq_num())) {
- delete[] buffer_[index].data.data;
- buffer_[index].data.data = nullptr;
+ buffer_[index].data.video_payload = {};
buffer_[index].used = false;
}
++first_seq_num_;
@@ -191,8 +183,7 @@
for (size_t i = 0; i < iterations; ++i) {
size_t index = seq_num % buffer_.size();
RTC_DCHECK_EQ(buffer_[index].seq_num(), seq_num);
- delete[] buffer_[index].data.data;
- buffer_[index].data.data = nullptr;
+ buffer_[index].data.video_payload = {};
buffer_[index].used = false;
++seq_num;
@@ -202,8 +193,7 @@
void PacketBuffer::Clear() {
rtc::CritScope lock(&crit_);
for (StoredPacket& entry : buffer_) {
- delete[] entry.data.data;
- entry.data.data = nullptr;
+ entry.data.video_payload = {};
entry.used = false;
}
@@ -439,8 +429,8 @@
std::min(min_recv_time, packet.packet_info.receive_time_ms());
max_recv_time =
std::max(max_recv_time, packet.packet_info.receive_time_ms());
- frame_size += packet.size_bytes;
- payloads.emplace_back(packet.data, packet.size_bytes);
+ frame_size += packet.video_payload.size();
+ payloads.emplace_back(packet.video_payload);
packet_infos.push_back(packet.packet_info);
}