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.h b/modules/video_coding/packet_buffer.h
index 1d0a69f..3f420cb 100644
--- a/modules/video_coding/packet_buffer.h
+++ b/modules/video_coding/packet_buffer.h
@@ -17,9 +17,12 @@
#include <vector>
#include "absl/base/attributes.h"
+#include "api/rtp_packet_info.h"
#include "api/video/encoded_image.h"
+#include "modules/rtp_rtcp/source/rtp_generic_frame_descriptor.h"
+#include "modules/rtp_rtcp/source/rtp_packet_received.h"
+#include "modules/rtp_rtcp/source/rtp_video_header.h"
#include "modules/video_coding/frame_object.h"
-#include "modules/video_coding/packet.h"
#include "rtc_base/critical_section.h"
#include "rtc_base/numerics/sequence_number_util.h"
#include "rtc_base/thread_annotations.h"
@@ -30,6 +33,45 @@
class PacketBuffer {
public:
+ struct Packet {
+ Packet() = default;
+ Packet(const RtpPacketReceived& rtp_packet,
+ const RTPVideoHeader& video_header,
+ int64_t ntp_time_ms,
+ int64_t receive_time_ms);
+ Packet(const Packet&) = delete;
+ Packet(Packet&&) = default;
+ Packet& operator=(const Packet&) = delete;
+ Packet& operator=(Packet&&) = default;
+ ~Packet() = default;
+
+ VideoCodecType codec() const { return video_header.codec; }
+ int width() const { return video_header.width; }
+ int height() const { return video_header.height; }
+
+ bool is_first_packet_in_frame() const {
+ return video_header.is_first_packet_in_frame;
+ }
+ bool is_last_packet_in_frame() const {
+ return video_header.is_last_packet_in_frame;
+ }
+
+ bool marker_bit = false;
+ uint8_t payload_type = 0;
+ uint16_t seq_num = 0;
+ uint32_t timestamp = 0;
+ // NTP time of the capture time in local timebase in milliseconds.
+ int64_t ntp_time_ms = -1;
+ int times_nacked = -1;
+
+ const uint8_t* data = nullptr;
+ size_t size_bytes = 0;
+
+ RTPVideoHeader video_header;
+ absl::optional<RtpGenericFrameDescriptor> generic_descriptor;
+
+ RtpPacketInfo packet_info;
+ };
struct InsertResult {
std::vector<std::unique_ptr<RtpFrameObject>> frames;
// Indicates if the packet buffer was cleared, which means that a key
@@ -43,7 +85,7 @@
// The PacketBuffer will always take ownership of the |packet.dataPtr| when
// this function is called.
- InsertResult InsertPacket(VCMPacket* packet) ABSL_MUST_USE_RESULT;
+ InsertResult InsertPacket(Packet* packet) ABSL_MUST_USE_RESULT;
InsertResult InsertPadding(uint16_t seq_num) ABSL_MUST_USE_RESULT;
void ClearTo(uint16_t seq_num);
void Clear();
@@ -54,7 +96,7 @@
private:
struct StoredPacket {
- uint16_t seq_num() const { return data.seqNum; }
+ uint16_t seq_num() const { return data.seq_num; }
// If this is the first packet of the frame.
bool frame_begin() const { return data.is_first_packet_in_frame(); }
@@ -68,7 +110,7 @@
// If all its previous packets have been inserted into the packet buffer.
bool continuous = false;
- VCMPacket data;
+ Packet data;
};
Clock* const clock_;
@@ -90,7 +132,7 @@
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_);
// Get the packet with sequence number |seq_num|.
- const VCMPacket& GetPacket(uint16_t seq_num) const
+ const Packet& GetPacket(uint16_t seq_num) const
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_);
// Clears the packet buffer from |start_seq_num| to |stop_seq_num| where the