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:
@ -210,8 +210,8 @@ class NetEq {
|
|||||||
// Not implemented.
|
// Not implemented.
|
||||||
virtual int TargetDelay() = 0;
|
virtual int TargetDelay() = 0;
|
||||||
|
|
||||||
// Not implemented.
|
// Returns the current total delay (packet buffer and sync buffer) in ms.
|
||||||
virtual int CurrentDelay() = 0;
|
virtual int CurrentDelayMs() const = 0;
|
||||||
|
|
||||||
// Sets the playout mode to |mode|.
|
// Sets the playout mode to |mode|.
|
||||||
// Deprecated. Set the mode in the Config struct passed to the constructor.
|
// Deprecated. Set the mode in the Config struct passed to the constructor.
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include "webrtc/base/checks.h"
|
||||||
#include "webrtc/common_audio/signal_processing/include/signal_processing_library.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/codecs/audio_decoder.h"
|
||||||
#include "webrtc/modules/audio_coding/neteq/accelerate.h"
|
#include "webrtc/modules/audio_coding/neteq/accelerate.h"
|
||||||
@ -291,8 +292,19 @@ int NetEqImpl::TargetDelay() {
|
|||||||
return kNotImplemented;
|
return kNotImplemented;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NetEqImpl::CurrentDelay() {
|
int NetEqImpl::CurrentDelayMs() const {
|
||||||
return kNotImplemented;
|
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.
|
// Deprecated.
|
||||||
|
@ -138,7 +138,7 @@ class NetEqImpl : public webrtc::NetEq {
|
|||||||
|
|
||||||
int TargetDelay() override;
|
int TargetDelay() override;
|
||||||
|
|
||||||
int CurrentDelay() override;
|
int CurrentDelayMs() const override;
|
||||||
|
|
||||||
// Sets the playout mode to |mode|.
|
// Sets the playout mode to |mode|.
|
||||||
// Deprecated.
|
// Deprecated.
|
||||||
|
@ -170,6 +170,9 @@ struct NetEqNetworkStatsCheck {
|
|||||||
CHECK_NETEQ_NETWORK_STATS(added_zero_samples);
|
CHECK_NETEQ_NETWORK_STATS(added_zero_samples);
|
||||||
|
|
||||||
#undef CHECK_NETEQ_NETWORK_STATS
|
#undef CHECK_NETEQ_NETWORK_STATS
|
||||||
|
|
||||||
|
// Compare with CurrentDelay, which should be identical.
|
||||||
|
EXPECT_EQ(stats.current_buffer_size_ms, neteq()->CurrentDelayMs());
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunTest(int num_loops, NetEqNetworkStatsCheck expects) {
|
void RunTest(int num_loops, NetEqNetworkStatsCheck expects) {
|
||||||
|
@ -404,6 +404,8 @@ void NetEqDecodingTest::DecodeAndCompare(const std::string& rtp_file,
|
|||||||
ASSERT_EQ(0, neteq_->NetworkStatistics(&network_stats));
|
ASSERT_EQ(0, neteq_->NetworkStatistics(&network_stats));
|
||||||
ASSERT_NO_FATAL_FAILURE(
|
ASSERT_NO_FATAL_FAILURE(
|
||||||
network_stat_files.ProcessReference(network_stats));
|
network_stat_files.ProcessReference(network_stats));
|
||||||
|
// Compare with CurrentDelay, which should be identical.
|
||||||
|
EXPECT_EQ(network_stats.current_buffer_size_ms, neteq_->CurrentDelayMs());
|
||||||
|
|
||||||
// Process RTCPstat.
|
// Process RTCPstat.
|
||||||
RtcpStatistics rtcp_stats;
|
RtcpStatistics rtcp_stats;
|
||||||
|
Reference in New Issue
Block a user