diff --git a/api/transport/network_types.h b/api/transport/network_types.h index ad20abc53d..3a00efe220 100644 --- a/api/transport/network_types.h +++ b/api/transport/network_types.h @@ -88,12 +88,13 @@ struct PacedPacketInfo { struct SentPacket { Timestamp send_time = Timestamp::PlusInfinity(); DataSize size = DataSize::Zero(); + DataSize prior_unacked_data = DataSize::Zero(); PacedPacketInfo pacing_info; // Transport independent sequence number, any tracked packet should have a // sequence number that is unique over the whole call and increasing by 1 for // each packet. int64_t sequence_number; - // Data in flight when the packet was sent, including the packet. + // Tracked data in flight when the packet was sent, excluding unacked data. DataSize data_in_flight = DataSize::Zero(); }; diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.cc b/modules/rtp_rtcp/include/rtp_rtcp_defines.cc index f86b238b7d..e1dca33386 100644 --- a/modules/rtp_rtcp/include/rtp_rtcp_defines.cc +++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.cc @@ -54,4 +54,73 @@ PayloadUnion::~PayloadUnion() = default; PayloadUnion& PayloadUnion::operator=(const PayloadUnion&) = default; PayloadUnion& PayloadUnion::operator=(PayloadUnion&&) = default; +PacketFeedback::PacketFeedback(int64_t arrival_time_ms, + uint16_t sequence_number) + : PacketFeedback(-1, + arrival_time_ms, + kNoSendTime, + sequence_number, + 0, + 0, + 0, + PacedPacketInfo()) {} + +PacketFeedback::PacketFeedback(int64_t arrival_time_ms, + int64_t send_time_ms, + uint16_t sequence_number, + size_t payload_size, + const PacedPacketInfo& pacing_info) + : PacketFeedback(-1, + arrival_time_ms, + send_time_ms, + sequence_number, + payload_size, + 0, + 0, + pacing_info) {} + +PacketFeedback::PacketFeedback(int64_t creation_time_ms, + uint16_t sequence_number, + size_t payload_size, + uint16_t local_net_id, + uint16_t remote_net_id, + const PacedPacketInfo& pacing_info) + : PacketFeedback(creation_time_ms, + kNotReceived, + kNoSendTime, + sequence_number, + payload_size, + local_net_id, + remote_net_id, + pacing_info) {} + +PacketFeedback::PacketFeedback(int64_t creation_time_ms, + int64_t arrival_time_ms, + int64_t send_time_ms, + uint16_t sequence_number, + size_t payload_size, + uint16_t local_net_id, + uint16_t remote_net_id, + const PacedPacketInfo& pacing_info) + : creation_time_ms(creation_time_ms), + arrival_time_ms(arrival_time_ms), + send_time_ms(send_time_ms), + sequence_number(sequence_number), + payload_size(payload_size), + unacknowledged_data(0), + local_net_id(local_net_id), + remote_net_id(remote_net_id), + pacing_info(pacing_info) {} + +PacketFeedback::PacketFeedback(const PacketFeedback&) = default; +PacketFeedback& PacketFeedback::operator=(const PacketFeedback&) = default; +PacketFeedback::~PacketFeedback() = default; + +bool PacketFeedback::operator==(const PacketFeedback& rhs) const { + return arrival_time_ms == rhs.arrival_time_ms && + send_time_ms == rhs.send_time_ms && + sequence_number == rhs.sequence_number && + payload_size == rhs.payload_size && pacing_info == rhs.pacing_info; +} + } // namespace webrtc diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h index 6503b4edcc..e5873135a1 100644 --- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h +++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h @@ -263,44 +263,20 @@ class RtcpBandwidthObserver { }; struct PacketFeedback { - PacketFeedback(int64_t arrival_time_ms, uint16_t sequence_number) - : PacketFeedback(-1, - arrival_time_ms, - kNoSendTime, - sequence_number, - 0, - 0, - 0, - PacedPacketInfo()) {} + PacketFeedback(int64_t arrival_time_ms, uint16_t sequence_number); PacketFeedback(int64_t arrival_time_ms, int64_t send_time_ms, uint16_t sequence_number, size_t payload_size, - const PacedPacketInfo& pacing_info) - : PacketFeedback(-1, - arrival_time_ms, - send_time_ms, - sequence_number, - payload_size, - 0, - 0, - pacing_info) {} + const PacedPacketInfo& pacing_info); PacketFeedback(int64_t creation_time_ms, uint16_t sequence_number, size_t payload_size, uint16_t local_net_id, uint16_t remote_net_id, - const PacedPacketInfo& pacing_info) - : PacketFeedback(creation_time_ms, - kNotReceived, - kNoSendTime, - sequence_number, - payload_size, - local_net_id, - remote_net_id, - pacing_info) {} + const PacedPacketInfo& pacing_info); PacketFeedback(int64_t creation_time_ms, int64_t arrival_time_ms, @@ -309,15 +285,10 @@ struct PacketFeedback { size_t payload_size, uint16_t local_net_id, uint16_t remote_net_id, - const PacedPacketInfo& pacing_info) - : creation_time_ms(creation_time_ms), - arrival_time_ms(arrival_time_ms), - send_time_ms(send_time_ms), - sequence_number(sequence_number), - payload_size(payload_size), - local_net_id(local_net_id), - remote_net_id(remote_net_id), - pacing_info(pacing_info) {} + const PacedPacketInfo& pacing_info); + PacketFeedback(const PacketFeedback&); + PacketFeedback& operator=(const PacketFeedback&); + ~PacketFeedback(); static constexpr int kNotAProbe = -1; static constexpr int64_t kNotReceived = -1; @@ -328,12 +299,7 @@ struct PacketFeedback { // for book-keeping, and is of no interest outside that class. // TODO(philipel): Remove |creation_time_ms| from PacketFeedback when cleaning // up SendTimeHistory. - bool operator==(const PacketFeedback& rhs) const { - return arrival_time_ms == rhs.arrival_time_ms && - send_time_ms == rhs.send_time_ms && - sequence_number == rhs.sequence_number && - payload_size == rhs.payload_size && pacing_info == rhs.pacing_info; - } + bool operator==(const PacketFeedback& rhs) const; // Time corresponding to when this object was created. int64_t creation_time_ms; @@ -352,6 +318,8 @@ struct PacketFeedback { int64_t long_sequence_number; // Size of the packet excluding RTP headers. size_t payload_size; + // Size of preceeding packets that are not part of feedback. + size_t unacknowledged_data; // The network route ids that this packet is associated with. uint16_t local_net_id; uint16_t remote_net_id;