BUG= Review URL: https://webrtc-codereview.appspot.com/1325006 git-svn-id: http://webrtc.googlecode.com/svn/trunk@3870 4adac7df-926f-26a2-2b94-8c16560cd09d
64 lines
1.8 KiB
C++
64 lines
1.8 KiB
C++
/*
|
|
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "webrtc/modules/remote_bitrate_estimator/bitrate_estimator.h"
|
|
|
|
namespace webrtc {
|
|
|
|
const float kBitrateAverageWindowMs = 500.0f;
|
|
|
|
BitRateStats::BitRateStats()
|
|
: data_samples_(),
|
|
accumulated_bytes_(0) {
|
|
}
|
|
|
|
BitRateStats::~BitRateStats() {
|
|
Init();
|
|
}
|
|
|
|
void BitRateStats::Init() {
|
|
accumulated_bytes_ = 0;
|
|
while (data_samples_.size() > 0) {
|
|
delete data_samples_.front();
|
|
data_samples_.pop_front();
|
|
}
|
|
}
|
|
|
|
void BitRateStats::Update(uint32_t packet_size_bytes, int64_t now_ms) {
|
|
// Find an empty slot for storing the new sample and at the same time
|
|
// accumulate the history.
|
|
data_samples_.push_back(new DataTimeSizeTuple(packet_size_bytes, now_ms));
|
|
accumulated_bytes_ += packet_size_bytes;
|
|
EraseOld(now_ms);
|
|
}
|
|
|
|
void BitRateStats::EraseOld(int64_t now_ms) {
|
|
while (data_samples_.size() > 0) {
|
|
if (now_ms - data_samples_.front()->time_complete_ms >
|
|
kBitrateAverageWindowMs) {
|
|
// Delete old sample
|
|
accumulated_bytes_ -= data_samples_.front()->size_bytes;
|
|
delete data_samples_.front();
|
|
data_samples_.pop_front();
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
uint32_t BitRateStats::BitRate(int64_t now_ms) {
|
|
// Calculate the average bit rate the past BITRATE_AVERAGE_WINDOW ms.
|
|
// Removes any old samples from the list.
|
|
EraseOld(now_ms);
|
|
return static_cast<uint32_t>(accumulated_bytes_ * 8.0f * 1000.0f /
|
|
kBitrateAverageWindowMs + 0.5f);
|
|
}
|
|
} // namespace webrtc
|