diff --git a/webrtc/modules/congestion_controller/transport_feedback_adapter.cc b/webrtc/modules/congestion_controller/transport_feedback_adapter.cc index 9fb1af59a2..88caad41d6 100644 --- a/webrtc/modules/congestion_controller/transport_feedback_adapter.cc +++ b/webrtc/modules/congestion_controller/transport_feedback_adapter.cc @@ -122,20 +122,12 @@ std::vector TransportFeedbackAdapter::GetPacketFeedbackVector( } last_timestamp_us_ = timestamp_us; - auto received_packets = feedback.GetReceivedPackets(); std::vector packet_feedback_vector; - if (received_packets.empty()) { + if (feedback.GetPacketStatusCount() == 0) { LOG(LS_INFO) << "Empty transport feedback packet received."; return packet_feedback_vector; } - const uint16_t last_sequence_number = - received_packets.back().sequence_number(); - const size_t packet_count = - 1 + ForwardDiff(feedback.GetBaseSequence(), last_sequence_number); - packet_feedback_vector.reserve(packet_count); - // feedback.GetStatusVector().size() is a less efficient way to reach what - // should be the same value. - RTC_DCHECK_EQ(packet_count, feedback.GetStatusVector().size()); + packet_feedback_vector.reserve(feedback.GetPacketStatusCount()); { rtc::CritScope cs(&lock_); @@ -143,7 +135,7 @@ std::vector TransportFeedbackAdapter::GetPacketFeedbackVector( int64_t offset_us = 0; int64_t timestamp_ms = 0; uint16_t seq_num = feedback.GetBaseSequence(); - for (const auto& packet : received_packets) { + for (const auto& packet : feedback.GetReceivedPackets()) { // Insert into the vector those unreceived packets which precede this // iteration's received packet. for (; seq_num != packet.sequence_number(); ++seq_num) { diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc index 767c551479..ec7c6163b3 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc @@ -376,41 +376,10 @@ uint16_t TransportFeedback::GetBaseSequence() const { return base_seq_no_; } -std::vector -TransportFeedback::GetStatusVector() const { - std::vector symbols; - uint16_t seq_no = GetBaseSequence(); - for (const auto& packet : packets_) { - for (; seq_no != packet.sequence_number(); ++seq_no) - symbols.push_back(StatusSymbol::kNotReceived); - if (packet.delta_ticks() >= 0x00 && packet.delta_ticks() <= 0xff) { - symbols.push_back(StatusSymbol::kReceivedSmallDelta); - } else { - symbols.push_back(StatusSymbol::kReceivedLargeDelta); - } - ++seq_no; - } - return symbols; -} - -std::vector TransportFeedback::GetReceiveDeltas() const { - std::vector deltas; - for (const auto& packet : packets_) - deltas.push_back(packet.delta_ticks()); - return deltas; -} - int64_t TransportFeedback::GetBaseTimeUs() const { return static_cast(base_time_ticks_) * kBaseScaleFactor; } -std::vector TransportFeedback::GetReceiveDeltasUs() const { - std::vector us_deltas; - for (const auto& packet : packets_) - us_deltas.push_back(packet.delta_us()); - return us_deltas; -} - // De-serialize packet. bool TransportFeedback::Parse(const CommonHeader& packet) { RTC_DCHECK_EQ(packet.type(), kPacketType); diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h index fa6ef04621..25f1111914 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h @@ -54,21 +54,13 @@ class TransportFeedback : public Rtpfb { bool AddReceivedPacket(uint16_t sequence_number, int64_t timestamp_us); const std::vector& GetReceivedPackets() const; - enum class StatusSymbol { - kNotReceived, - kReceivedSmallDelta, - kReceivedLargeDelta, - }; - uint16_t GetBaseSequence() const; - std::vector GetStatusVector() const; - std::vector GetReceiveDeltas() const; + + // Returns number of packets (including missing) this feedback describes. + size_t GetPacketStatusCount() const { return num_seq_no_; } // Get the reference time in microseconds, including any precision loss. int64_t GetBaseTimeUs() const; - // Convenience method for getting all deltas as microseconds. The first delta - // is relative the base time. - std::vector GetReceiveDeltasUs() const; bool Parse(const CommonHeader& packet); static std::unique_ptr ParseFrom(const uint8_t* buffer,