sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license |
| 5 | * that can be found in the LICENSE file in the root of the source |
| 6 | * tree. An additional intellectual property rights grant can be found |
| 7 | * in the file PATENTS. All contributing project authors may |
| 8 | * be found in the AUTHORS file in the root of the source tree. |
| 9 | */ |
| 10 | |
Stefan Holmer | 280de9e | 2016-09-30 10:06:51 +0200 | [diff] [blame] | 11 | #ifndef WEBRTC_MODULES_CONGESTION_CONTROLLER_TRANSPORT_FEEDBACK_ADAPTER_H_ |
| 12 | #define WEBRTC_MODULES_CONGESTION_CONTROLLER_TRANSPORT_FEEDBACK_ADAPTER_H_ |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 13 | |
stefan | 9e117c5e1 | 2017-08-16 08:16:25 -0700 | [diff] [blame] | 14 | #include <deque> |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 15 | #include <vector> |
| 16 | |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 17 | #include "webrtc/modules/remote_bitrate_estimator/include/send_time_history.h" |
Edward Lemur | c20978e | 2017-07-06 19:44:34 +0200 | [diff] [blame] | 18 | #include "webrtc/rtc_base/criticalsection.h" |
| 19 | #include "webrtc/rtc_base/thread_annotations.h" |
| 20 | #include "webrtc/rtc_base/thread_checker.h" |
elad.alon | 5bbf43f | 2017-03-09 06:40:08 -0800 | [diff] [blame] | 21 | #include "webrtc/system_wrappers/include/clock.h" |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 22 | |
| 23 | namespace webrtc { |
| 24 | |
elad.alon | d12a8e1 | 2017-03-23 11:04:48 -0700 | [diff] [blame] | 25 | class PacketFeedbackObserver; |
| 26 | |
elad.alon | 5bbf43f | 2017-03-09 06:40:08 -0800 | [diff] [blame] | 27 | namespace rtcp { |
| 28 | class TransportFeedback; |
| 29 | } // namespace rtcp |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 30 | |
elad.alon | 5bbf43f | 2017-03-09 06:40:08 -0800 | [diff] [blame] | 31 | class TransportFeedbackAdapter { |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 32 | public: |
elad.alon | 61ce37e | 2017-03-09 07:09:31 -0800 | [diff] [blame] | 33 | explicit TransportFeedbackAdapter(const Clock* clock); |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 34 | virtual ~TransportFeedbackAdapter(); |
| 35 | |
elad.alon | d12a8e1 | 2017-03-23 11:04:48 -0700 | [diff] [blame] | 36 | void RegisterPacketFeedbackObserver(PacketFeedbackObserver* observer); |
| 37 | void DeRegisterPacketFeedbackObserver(PacketFeedbackObserver* observer); |
| 38 | |
| 39 | void AddPacket(uint32_t ssrc, |
| 40 | uint16_t sequence_number, |
Stefan Holmer | 789ba92 | 2016-02-17 15:52:17 +0100 | [diff] [blame] | 41 | size_t length, |
elad.alon | 5bbf43f | 2017-03-09 06:40:08 -0800 | [diff] [blame] | 42 | const PacedPacketInfo& pacing_info); |
Stefan Holmer | 789ba92 | 2016-02-17 15:52:17 +0100 | [diff] [blame] | 43 | void OnSentPacket(uint16_t sequence_number, int64_t send_time_ms); |
stefan | c3de033 | 2016-08-02 07:22:17 -0700 | [diff] [blame] | 44 | |
Stefan Holmer | 280de9e | 2016-09-30 10:06:51 +0200 | [diff] [blame] | 45 | // TODO(holmer): This method should return DelayBasedBwe::Result so that we |
| 46 | // can get rid of the dependency on BitrateController. Requires changes |
| 47 | // to the CongestionController interface. |
elad.alon | 5bbf43f | 2017-03-09 06:40:08 -0800 | [diff] [blame] | 48 | void OnTransportFeedback(const rtcp::TransportFeedback& feedback); |
| 49 | std::vector<PacketFeedback> GetTransportFeedbackVector() const; |
stefan | 9e117c5e1 | 2017-08-16 08:16:25 -0700 | [diff] [blame] | 50 | rtc::Optional<int64_t> GetMinFeedbackLoopRtt() const; |
Stefan Holmer | 789ba92 | 2016-02-17 15:52:17 +0100 | [diff] [blame] | 51 | |
nisse | 284542b | 2017-01-10 08:58:32 -0800 | [diff] [blame] | 52 | void SetTransportOverhead(int transport_overhead_bytes_per_packet); |
Stefan Holmer | 280de9e | 2016-09-30 10:06:51 +0200 | [diff] [blame] | 53 | |
Stefan Holmer | 9ea46b5 | 2017-03-15 12:40:25 +0100 | [diff] [blame] | 54 | void SetNetworkIds(uint16_t local_id, uint16_t remote_id); |
philipel | cb9ba30 | 2017-03-07 06:30:59 -0800 | [diff] [blame] | 55 | |
stefan | 9e117c5e1 | 2017-08-16 08:16:25 -0700 | [diff] [blame] | 56 | size_t GetOutstandingBytes() const; |
| 57 | |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 58 | private: |
elad.alon | f949000 | 2017-03-06 05:32:21 -0800 | [diff] [blame] | 59 | std::vector<PacketFeedback> GetPacketFeedbackVector( |
Stefan Holmer | 60e4346 | 2016-09-07 09:58:20 +0200 | [diff] [blame] | 60 | const rtcp::TransportFeedback& feedback); |
| 61 | |
elad.alon | 0fe1216 | 2017-01-31 05:48:37 -0800 | [diff] [blame] | 62 | const bool send_side_bwe_with_overhead_; |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 63 | rtc::CriticalSection lock_; |
danilchap | 56359be | 2017-09-07 07:53:45 -0700 | [diff] [blame] | 64 | int transport_overhead_bytes_per_packet_ RTC_GUARDED_BY(&lock_); |
| 65 | SendTimeHistory send_time_history_ RTC_GUARDED_BY(&lock_); |
elad.alon | 5bbf43f | 2017-03-09 06:40:08 -0800 | [diff] [blame] | 66 | const Clock* const clock_; |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 67 | int64_t current_offset_ms_; |
| 68 | int64_t last_timestamp_us_; |
elad.alon | f949000 | 2017-03-06 05:32:21 -0800 | [diff] [blame] | 69 | std::vector<PacketFeedback> last_packet_feedback_vector_; |
danilchap | 56359be | 2017-09-07 07:53:45 -0700 | [diff] [blame] | 70 | uint16_t local_net_id_ RTC_GUARDED_BY(&lock_); |
| 71 | uint16_t remote_net_id_ RTC_GUARDED_BY(&lock_); |
| 72 | std::deque<int64_t> feedback_rtts_ RTC_GUARDED_BY(&lock_); |
| 73 | rtc::Optional<int64_t> min_feedback_rtt_ RTC_GUARDED_BY(&lock_); |
elad.alon | d12a8e1 | 2017-03-23 11:04:48 -0700 | [diff] [blame] | 74 | |
| 75 | rtc::CriticalSection observers_lock_; |
danilchap | 56359be | 2017-09-07 07:53:45 -0700 | [diff] [blame] | 76 | std::vector<PacketFeedbackObserver*> observers_ |
| 77 | RTC_GUARDED_BY(&observers_lock_); |
sprang | 5e023eb | 2015-09-14 06:42:43 -0700 | [diff] [blame] | 78 | }; |
| 79 | |
| 80 | } // namespace webrtc |
| 81 | |
Stefan Holmer | 280de9e | 2016-09-30 10:06:51 +0200 | [diff] [blame] | 82 | #endif // WEBRTC_MODULES_CONGESTION_CONTROLLER_TRANSPORT_FEEDBACK_ADAPTER_H_ |