Fork VCMPacket for PacketBuffer into own struct

it is easier to reduce and eliminate it when it is not bound to legacy video code

Bug: webrtc:10979
Change-Id: I517e298501b3358a914a23ddce40fcb3075d672d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/159707
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@{#29821}
diff --git a/modules/video_coding/packet_buffer.cc b/modules/video_coding/packet_buffer.cc
index 53f289c..3e8b11f 100644
--- a/modules/video_coding/packet_buffer.cc
+++ b/modules/video_coding/packet_buffer.cc
@@ -20,8 +20,11 @@
 
 #include "absl/types/variant.h"
 #include "api/array_view.h"
+#include "api/rtp_packet_info.h"
 #include "api/video/encoded_frame.h"
 #include "common_video/h264/h264_common.h"
+#include "modules/rtp_rtcp/source/rtp_header_extensions.h"
+#include "modules/rtp_rtcp/source/rtp_packet_received.h"
 #include "modules/rtp_rtcp/source/rtp_video_header.h"
 #include "modules/video_coding/codecs/h264/include/h264_globals.h"
 #include "modules/video_coding/frame_object.h"
@@ -34,6 +37,24 @@
 namespace webrtc {
 namespace video_coding {
 
+PacketBuffer::Packet::Packet(const RtpPacketReceived& rtp_packet,
+                             const RTPVideoHeader& video_header,
+                             int64_t ntp_time_ms,
+                             int64_t receive_time_ms)
+    : marker_bit(rtp_packet.Marker()),
+      payload_type(rtp_packet.PayloadType()),
+      seq_num(rtp_packet.SequenceNumber()),
+      timestamp(rtp_packet.Timestamp()),
+      ntp_time_ms(ntp_time_ms),
+      times_nacked(-1),
+      video_header(video_header),
+      packet_info(rtp_packet.Ssrc(),
+                  rtp_packet.Csrcs(),
+                  rtp_packet.Timestamp(),
+                  /*audio_level=*/absl::nullopt,
+                  rtp_packet.GetExtension<AbsoluteCaptureTimeExtension>(),
+                  receive_time_ms) {}
+
 PacketBuffer::PacketBuffer(Clock* clock,
                            size_t start_buffer_size,
                            size_t max_buffer_size)
@@ -55,11 +76,12 @@
   Clear();
 }
 
-PacketBuffer::InsertResult PacketBuffer::InsertPacket(VCMPacket* packet) {
+PacketBuffer::InsertResult PacketBuffer::InsertPacket(
+    PacketBuffer::Packet* packet) {
   PacketBuffer::InsertResult result;
   rtc::CritScope lock(&crit_);
 
-  uint16_t seq_num = packet->seqNum;
+  uint16_t seq_num = packet->seq_num;
   size_t index = seq_num % buffer_.size();
 
   if (!first_packet_received_) {
@@ -69,8 +91,8 @@
     // 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->dataPtr;
-      packet->dataPtr = nullptr;
+      delete[] packet->data;
+      packet->data = nullptr;
       return result;
     }
 
@@ -79,9 +101,9 @@
 
   if (buffer_[index].used) {
     // Duplicate packet, just delete the payload.
-    if (buffer_[index].seq_num() == packet->seqNum) {
-      delete[] packet->dataPtr;
-      packet->dataPtr = nullptr;
+    if (buffer_[index].seq_num() == packet->seq_num) {
+      delete[] packet->data;
+      packet->data = nullptr;
       return result;
     }
 
@@ -96,26 +118,26 @@
       // new keyframe is needed.
       RTC_LOG(LS_WARNING) << "Clear PacketBuffer and request key frame.";
       Clear();
-      delete[] packet->dataPtr;
-      packet->dataPtr = nullptr;
+      delete[] packet->data;
+      packet->data = nullptr;
       result.buffer_cleared = true;
       return result;
     }
   }
 
-  StoredPacket& new_entry = buffer_[index];
-  new_entry.continuous = false;
-  new_entry.used = true;
-  new_entry.data = *packet;
-  packet->dataPtr = nullptr;
-
-  UpdateMissingPackets(packet->seqNum);
-
   int64_t now_ms = clock_->TimeInMilliseconds();
   last_received_packet_ms_ = now_ms;
   if (packet->video_header.frame_type == VideoFrameType::kVideoFrameKey)
     last_received_keyframe_packet_ms_ = now_ms;
 
+  StoredPacket& new_entry = buffer_[index];
+  new_entry.continuous = false;
+  new_entry.used = true;
+  new_entry.data = std::move(*packet);
+  packet->data = nullptr;
+
+  UpdateMissingPackets(seq_num);
+
   result.frames = FindFrames(seq_num);
   return result;
 }
@@ -140,8 +162,8 @@
   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.dataPtr;
-      buffer_[index].data.dataPtr = nullptr;
+      delete[] buffer_[index].data.data;
+      buffer_[index].data.data = nullptr;
       buffer_[index].used = false;
     }
     ++first_seq_num_;
@@ -167,8 +189,8 @@
   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.dataPtr;
-    buffer_[index].data.dataPtr = nullptr;
+    delete[] buffer_[index].data.data;
+    buffer_[index].data.data = nullptr;
     buffer_[index].used = false;
 
     ++seq_num;
@@ -178,8 +200,8 @@
 void PacketBuffer::Clear() {
   rtc::CritScope lock(&crit_);
   for (StoredPacket& entry : buffer_) {
-    delete[] entry.data.dataPtr;
-    entry.data.dataPtr = nullptr;
+    delete[] entry.data.data;
+    entry.data.data = nullptr;
     entry.used = false;
   }
 
@@ -220,7 +242,7 @@
   std::vector<StoredPacket> new_buffer(new_size);
   for (StoredPacket& entry : buffer_) {
     if (entry.used) {
-      new_buffer[entry.seq_num() % new_size] = entry;
+      new_buffer[entry.seq_num() % new_size] = std::move(entry);
     }
   }
   buffer_ = std::move(new_buffer);
@@ -403,15 +425,15 @@
   packet_infos.reserve(num_packets);
 
   for (uint16_t seq_num = first_seq_num; seq_num != end_seq_num; ++seq_num) {
-    const VCMPacket& packet = GetPacket(seq_num);
+    const Packet& packet = GetPacket(seq_num);
 
-    max_nack_count = std::max(max_nack_count, packet.timesNacked);
+    max_nack_count = std::max(max_nack_count, packet.times_nacked);
     min_recv_time =
         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.sizeBytes;
-    payloads.emplace_back(packet.dataPtr, packet.sizeBytes);
+    frame_size += packet.size_bytes;
+    payloads.emplace_back(packet.data, packet.size_bytes);
     packet_infos.push_back(packet.packet_info);
   }
 
@@ -424,19 +446,19 @@
   }
   RTC_DCHECK_EQ(write_at - bitstream->data(), bitstream->size());
 
-  const VCMPacket& first_packet = GetPacket(first_seq_num);
-  const VCMPacket& last_packet = GetPacket(last_seq_num);
+  const Packet& first_packet = GetPacket(first_seq_num);
+  const Packet& last_packet = GetPacket(last_seq_num);
   return std::make_unique<RtpFrameObject>(
       first_seq_num,                            //
       last_seq_num,                             //
-      last_packet.markerBit,                    //
+      last_packet.marker_bit,                   //
       max_nack_count,                           //
       min_recv_time,                            //
       max_recv_time,                            //
       first_packet.timestamp,                   //
-      first_packet.ntp_time_ms_,                //
+      first_packet.ntp_time_ms,                 //
       last_packet.video_header.video_timing,    //
-      first_packet.payloadType,                 //
+      first_packet.payload_type,                //
       first_packet.codec(),                     //
       last_packet.video_header.rotation,        //
       last_packet.video_header.content_type,    //
@@ -447,7 +469,7 @@
       std::move(bitstream));
 }
 
-const VCMPacket& PacketBuffer::GetPacket(uint16_t seq_num) const {
+const PacketBuffer::Packet& PacketBuffer::GetPacket(uint16_t seq_num) const {
   const StoredPacket& entry = buffer_[seq_num % buffer_.size()];
   RTC_DCHECK(entry.used);
   RTC_DCHECK_EQ(seq_num, entry.seq_num());