Implement NetEq's CurrentDelay function

This was not implemented before. It returns the current total delay (packet buffer and sync buffer) of NetEq. This is the same information that was already available in NetEqNetworkStatistics::current_buffer_size_ms, that can be obtained through NetEq::NetworkStatistics(). But, since the current delay is a key metric of NetEq, it is convenient to have it available in a simpler way.

R=kwiberg@webrtc.org, minyue@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/51149004

Cr-Commit-Position: refs/heads/master@{#9359}
This commit is contained in:
Henrik Lundin
2015-06-03 11:55:45 +02:00
parent 60508f8621
commit d8a03facf6
5 changed files with 22 additions and 5 deletions

View File

@ -15,6 +15,7 @@
#include <algorithm>
#include "webrtc/base/checks.h"
#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h"
#include "webrtc/modules/audio_coding/codecs/audio_decoder.h"
#include "webrtc/modules/audio_coding/neteq/accelerate.h"
@ -291,8 +292,19 @@ int NetEqImpl::TargetDelay() {
return kNotImplemented;
}
int NetEqImpl::CurrentDelay() {
return kNotImplemented;
int NetEqImpl::CurrentDelayMs() const {
CriticalSectionScoped lock(crit_sect_.get());
if (fs_hz_ == 0)
return 0;
// Sum up the samples in the packet buffer with the future length of the sync
// buffer, and divide the sum by the sample rate.
const int delay_samples =
packet_buffer_->NumSamplesInBuffer(decoder_database_.get(),
decoder_frame_length_) +
static_cast<int>(sync_buffer_->FutureLength());
// The division below will truncate.
const int delay_ms = delay_samples / rtc::CheckedDivExact(fs_hz_, 1000);
return delay_ms;
}
// Deprecated.