131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org/* 231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * 431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * Use of this source code is governed by a BSD-style license 531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * that can be found in the LICENSE file in the root of the source 631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * tree. An additional intellectual property rights grant can be found 731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * in the file PATENTS. All contributing project authors may 831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org * be found in the AUTHORS file in the root of the source tree. 931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org */ 1031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 1131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org#include "webrtc/voice_engine/network_predictor.h" 1231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 1331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgnamespace webrtc { 1431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgnamespace voe { 1531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 1631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgNetworkPredictor::NetworkPredictor(Clock* clock) 1731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org : clock_(clock), 1831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org last_loss_rate_update_time_ms_(clock_->TimeInMilliseconds()), 1931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org loss_rate_filter_(new rtc::ExpFilter(0.9999f)) { 2031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} 2131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 2231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orgvoid NetworkPredictor::UpdatePacketLossRate(uint8_t loss_rate) { 2331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org int64_t now_ms = clock_->TimeInMilliseconds(); 2431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org // Update the recursive average filter. 2531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org loss_rate_filter_->Apply( 2631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org static_cast<float>(now_ms - last_loss_rate_update_time_ms_), 2731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org static_cast<float>(loss_rate)); 2831b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org last_loss_rate_update_time_ms_ = now_ms; 2931b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} 3031b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org 3131b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.orguint8_t NetworkPredictor::GetLossRate() { 3231b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org float value = loss_rate_filter_->filtered(); 3331b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org return (value == rtc::ExpFilter::kValueUndefined) ? 0 : 3431b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org static_cast<uint8_t>(value + 0.5); 3531b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} 3631b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} // namespace voe 3731b38da0e2ba9778d241267f0cf1ba8dd2f36e83minyue@webrtc.org} // namespace webrtc 38