Change buffer level filter to store current level in number of samples.

The buffer level should not be converted back and forth between samples and packets in case of variable packet lengths.

Bug: webrtc:10736
Change-Id: Ia08dcfac3d8104dc79fbad0704a5f6f12a050a01
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/142178
Reviewed-by: Minyue Li <minyue@webrtc.org>
Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28368}
This commit is contained in:
Jakob Ivarsson
2019-06-24 13:21:30 +02:00
committed by Commit Bot
parent 3391072e09
commit 87977dd06e
9 changed files with 134 additions and 211 deletions

View File

@ -310,18 +310,12 @@ int NetEqImpl::TargetDelayMs() const {
int NetEqImpl::FilteredCurrentDelayMs() const {
rtc::CritScope lock(&crit_sect_);
// Calculate the filtered packet buffer level in samples. The value from
// |buffer_level_filter_| is in number of packets, represented in Q8.
const size_t packet_buffer_samples =
(buffer_level_filter_->filtered_current_level() *
decoder_frame_length_) >>
8;
// Sum up the filtered packet buffer level with the future length of the sync
// buffer, and divide the sum by the sample rate.
const size_t delay_samples =
packet_buffer_samples + sync_buffer_->FutureLength();
// buffer.
const int delay_samples = buffer_level_filter_->filtered_current_level() +
sync_buffer_->FutureLength();
// The division below will truncate. The return value is in ms.
return static_cast<int>(delay_samples) / rtc::CheckedDivExact(fs_hz_, 1000);
return delay_samples / rtc::CheckedDivExact(fs_hz_, 1000);
}
int NetEqImpl::NetworkStatistics(NetEqNetworkStatistics* stats) {