blob: ad7bef5fc296b657fafb6fee36bca0772e9cfafc [file] [log] [blame]
tschumim3fae6282017-06-11 23:57:17 -07001/*
2 * Copyright (c) 2017 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
tschumim9d117642017-07-17 01:41:41 -070011#ifndef WEBRTC_MODULES_CONGESTION_CONTROLLER_BITRATE_ESTIMATOR_H_
12#define WEBRTC_MODULES_CONGESTION_CONTROLLER_BITRATE_ESTIMATOR_H_
tschumim3fae6282017-06-11 23:57:17 -070013
14#include <vector>
15
kwiberg84f6a3f2017-09-05 08:43:13 -070016#include "webrtc/api/optional.h"
tschumim3fae6282017-06-11 23:57:17 -070017
18namespace webrtc {
19
tschumim3fae6282017-06-11 23:57:17 -070020// Computes a bayesian estimate of the throughput given acks containing
21// the arrival time and payload size. Samples which are far from the current
22// estimate or are based on few packets are given a smaller weight, as they
23// are considered to be more likely to have been caused by, e.g., delay spikes
24// unrelated to congestion.
tschumim9d117642017-07-17 01:41:41 -070025class BitrateEstimator {
tschumim3fae6282017-06-11 23:57:17 -070026 public:
tschumim9d117642017-07-17 01:41:41 -070027 BitrateEstimator();
28 virtual ~BitrateEstimator();
29 virtual void Update(int64_t now_ms, int bytes);
tschumim3fae6282017-06-11 23:57:17 -070030
tschumim9d117642017-07-17 01:41:41 -070031 virtual rtc::Optional<uint32_t> bitrate_bps() const;
32
33 virtual void ExpectFastRateChange();
tschumim3fae6282017-06-11 23:57:17 -070034
35 private:
tschumim3fae6282017-06-11 23:57:17 -070036 float UpdateWindow(int64_t now_ms, int bytes, int rate_window_ms);
tschumim3fae6282017-06-11 23:57:17 -070037 int sum_;
38 int64_t current_win_ms_;
39 int64_t prev_time_ms_;
40 float bitrate_estimate_;
41 float bitrate_estimate_var_;
42};
43
44} // namespace webrtc
45
tschumim9d117642017-07-17 01:41:41 -070046#endif // WEBRTC_MODULES_CONGESTION_CONTROLLER_BITRATE_ESTIMATOR_H_