blob: bf08fe98ce2dbd000734310aa10b6cc05d506aa5 [file] [log] [blame]
minyue@webrtc.org74aaf292014-07-16 21:28:26 +00001/*
2 * Copyright (c) 2014 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
11#ifndef WEBRTC_VOICE_ENGINE_NETWORK_PREDICTOR_H_
12#define WEBRTC_VOICE_ENGINE_NETWORK_PREDICTOR_H_
13
kwibergb7f89d62016-02-17 10:04:18 -080014#include <memory>
15
minyue@webrtc.org74aaf292014-07-16 21:28:26 +000016#include "webrtc/base/exp_filter.h"
Henrik Kjellander98f53512015-10-28 18:17:40 +010017#include "webrtc/system_wrappers/include/clock.h"
minyue@webrtc.org74aaf292014-07-16 21:28:26 +000018
19namespace webrtc {
20
21namespace voe {
22
23// NetworkPredictor is to predict network conditions e.g., packet loss rate, for
24// sender and/or receiver to cope with changes in the network condition.
25class NetworkPredictor {
26 public:
27 explicit NetworkPredictor(Clock* clock);
28 ~NetworkPredictor() {}
29
30 // Gets the predicted packet loss rate.
31 uint8_t GetLossRate();
32
33 // Updates the packet loss rate predictor, on receiving a new observation of
34 // packet loss rate from past. Input packet loss rate should be in the
35 // interval [0, 255].
36 void UpdatePacketLossRate(uint8_t loss_rate);
37
38 private:
39 Clock* clock_;
40 int64_t last_loss_rate_update_time_ms_;
41
42 // An exponential filter is used to predict packet loss rate.
kwibergb7f89d62016-02-17 10:04:18 -080043 std::unique_ptr<rtc::ExpFilter> loss_rate_filter_;
minyue@webrtc.org74aaf292014-07-16 21:28:26 +000044};
45
46} // namespace voe
47} // namespace webrtc
48#endif // WEBRTC_VOICE_ENGINE_NETWORK_PREDICTOR_H_