aboutsummaryrefslogtreecommitdiff
path: root/modules/audio_coding
diff options
context:
space:
mode:
authorArtem Titov <titovartem@webrtc.org>2020-03-11 11:18:54 +0100
committerCommit Bot <commit-bot@chromium.org>2020-03-11 12:08:32 +0000
commite618cc9c1ed030f33dd54396d04141b66dd24f97 (patch)
tree712be5c4e5d62dd2360680316aa7ef1f7d4efed4 /modules/audio_coding
parentc46385c346d5a98b83ecef16bd4b4aa219a61d71 (diff)
downloadwebrtc-e618cc9c1ed030f33dd54396d04141b66dd24f97.tar.gz
Add jitterBufferTargetDelay as RTCNonStandardStatsMember to new GetStats API
Bug: webrtc:11381 Change-Id: I7df3450e50da49d178e1e3a5d9f4970672d91aac Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169120 Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Henrik Boström <hbos@webrtc.org> Reviewed-by: Ivo Creusen <ivoc@webrtc.org> Commit-Queue: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30758}
Diffstat (limited to 'modules/audio_coding')
-rw-r--r--modules/audio_coding/acm2/acm_receiver.cc2
-rw-r--r--modules/audio_coding/include/audio_coding_module_typedefs.h2
-rw-r--r--modules/audio_coding/neteq/neteq_impl.cc4
-rw-r--r--modules/audio_coding/neteq/neteq_unittest.cc11
-rw-r--r--modules/audio_coding/neteq/statistics_calculator.cc5
-rw-r--r--modules/audio_coding/neteq/statistics_calculator.h4
6 files changed, 24 insertions, 4 deletions
diff --git a/modules/audio_coding/acm2/acm_receiver.cc b/modules/audio_coding/acm2/acm_receiver.cc
index 9cecb98cec..29eff19e9e 100644
--- a/modules/audio_coding/acm2/acm_receiver.cc
+++ b/modules/audio_coding/acm2/acm_receiver.cc
@@ -272,6 +272,8 @@ void AcmReceiver::GetNetworkStatistics(NetworkStatistics* acm_stat) const {
neteq_lifetime_stat.silent_concealed_samples;
acm_stat->concealmentEvents = neteq_lifetime_stat.concealment_events;
acm_stat->jitterBufferDelayMs = neteq_lifetime_stat.jitter_buffer_delay_ms;
+ acm_stat->jitterBufferTargetDelayMs =
+ neteq_lifetime_stat.jitter_buffer_target_delay_ms;
acm_stat->jitterBufferEmittedCount =
neteq_lifetime_stat.jitter_buffer_emitted_count;
acm_stat->delayedPacketOutageSamples =
diff --git a/modules/audio_coding/include/audio_coding_module_typedefs.h b/modules/audio_coding/include/audio_coding_module_typedefs.h
index 2f40acde07..a5d4b246c8 100644
--- a/modules/audio_coding/include/audio_coding_module_typedefs.h
+++ b/modules/audio_coding/include/audio_coding_module_typedefs.h
@@ -90,6 +90,8 @@ struct NetworkStatistics {
uint64_t concealmentEvents;
uint64_t jitterBufferDelayMs;
uint64_t jitterBufferEmittedCount;
+ // Non standard stats propagated to spec complaint GetStats API.
+ uint64_t jitterBufferTargetDelayMs;
uint64_t insertedSamplesForDeceleration;
uint64_t removedSamplesForAcceleration;
uint64_t fecPacketsReceived;
diff --git a/modules/audio_coding/neteq/neteq_impl.cc b/modules/audio_coding/neteq/neteq_impl.cc
index 265043acb4..0b7510d341 100644
--- a/modules/audio_coding/neteq/neteq_impl.cc
+++ b/modules/audio_coding/neteq/neteq_impl.cc
@@ -1987,7 +1987,9 @@ int NetEqImpl::ExtractPackets(size_t required_samples,
}
extracted_samples = packet->timestamp - first_timestamp + packet_duration;
- stats_->JitterBufferDelay(packet_duration, waiting_time_ms);
+ RTC_DCHECK(controller_);
+ stats_->JitterBufferDelay(packet_duration, waiting_time_ms,
+ controller_->TargetLevelMs());
packet_list->push_back(std::move(*packet)); // Store packet in list.
packet = absl::nullopt; // Ensure it's never used after the move.
diff --git a/modules/audio_coding/neteq/neteq_unittest.cc b/modules/audio_coding/neteq/neteq_unittest.cc
index 701a3c568a..d78e2c6488 100644
--- a/modules/audio_coding/neteq/neteq_unittest.cc
+++ b/modules/audio_coding/neteq/neteq_unittest.cc
@@ -986,6 +986,7 @@ void NetEqDecodingTestFaxMode::TestJitterBufferDelay(bool apply_packet_loss) {
int packets_sent = 0;
int packets_received = 0;
int expected_delay = 0;
+ int expected_target_delay = 0;
uint64_t expected_emitted_count = 0;
while (packets_received < kNumPackets) {
// Insert packet.
@@ -1010,6 +1011,7 @@ void NetEqDecodingTestFaxMode::TestJitterBufferDelay(bool apply_packet_loss) {
// number of samples that are sent for play out.
int current_delay_ms = packets_delay * kPacketLenMs;
expected_delay += current_delay_ms * kSamples;
+ expected_target_delay += neteq_->TargetDelayMs() * kSamples;
expected_emitted_count += kSamples;
}
}
@@ -1021,8 +1023,11 @@ void NetEqDecodingTestFaxMode::TestJitterBufferDelay(bool apply_packet_loss) {
// Check jitter buffer delay.
NetEqLifetimeStatistics stats = neteq_->GetLifetimeStatistics();
- EXPECT_EQ(expected_delay, static_cast<int>(stats.jitter_buffer_delay_ms));
+ EXPECT_EQ(expected_delay,
+ rtc::checked_cast<int>(stats.jitter_buffer_delay_ms));
EXPECT_EQ(expected_emitted_count, stats.jitter_buffer_emitted_count);
+ EXPECT_EQ(expected_target_delay,
+ rtc::checked_cast<int>(stats.jitter_buffer_target_delay_ms));
}
TEST_F(NetEqDecodingTestFaxMode, TestJitterBufferDelayWithoutLoss) {
@@ -1043,6 +1048,7 @@ TEST_F(NetEqDecodingTestFaxMode, TestJitterBufferDelayWithAcceleration) {
rtp_info.markerBit = 0;
const uint8_t payload[kPayloadBytes] = {0};
+ int expected_target_delay = neteq_->TargetDelayMs() * kSamples;
neteq_->InsertPacket(rtp_info, payload);
bool muted;
@@ -1055,6 +1061,7 @@ TEST_F(NetEqDecodingTestFaxMode, TestJitterBufferDelayWithAcceleration) {
rtp_info.timestamp += kSamples;
neteq_->InsertPacket(rtp_info, payload);
+ expected_target_delay += neteq_->TargetDelayMs() * 2 * kSamples;
// We have two packets in the buffer and kAccelerate operation will
// extract 20 ms of data.
neteq_->GetAudio(&out_frame_, &muted, NetEq::Operation::kAccelerate);
@@ -1063,6 +1070,8 @@ TEST_F(NetEqDecodingTestFaxMode, TestJitterBufferDelayWithAcceleration) {
NetEqLifetimeStatistics stats = neteq_->GetLifetimeStatistics();
EXPECT_EQ(10 * kSamples * 3, stats.jitter_buffer_delay_ms);
EXPECT_EQ(kSamples * 3, stats.jitter_buffer_emitted_count);
+ EXPECT_EQ(expected_target_delay,
+ rtc::checked_cast<int>(stats.jitter_buffer_target_delay_ms));
}
namespace test {
diff --git a/modules/audio_coding/neteq/statistics_calculator.cc b/modules/audio_coding/neteq/statistics_calculator.cc
index 081ec334f6..fa2925ce46 100644
--- a/modules/audio_coding/neteq/statistics_calculator.cc
+++ b/modules/audio_coding/neteq/statistics_calculator.cc
@@ -275,8 +275,11 @@ void StatisticsCalculator::IncreaseCounter(size_t num_samples, int fs_hz) {
}
void StatisticsCalculator::JitterBufferDelay(size_t num_samples,
- uint64_t waiting_time_ms) {
+ uint64_t waiting_time_ms,
+ uint64_t target_delay_ms) {
lifetime_stats_.jitter_buffer_delay_ms += waiting_time_ms * num_samples;
+ lifetime_stats_.jitter_buffer_target_delay_ms +=
+ target_delay_ms * num_samples;
lifetime_stats_.jitter_buffer_emitted_count += num_samples;
}
diff --git a/modules/audio_coding/neteq/statistics_calculator.h b/modules/audio_coding/neteq/statistics_calculator.h
index 38e463c782..333f4a76a9 100644
--- a/modules/audio_coding/neteq/statistics_calculator.h
+++ b/modules/audio_coding/neteq/statistics_calculator.h
@@ -83,7 +83,9 @@ class StatisticsCalculator {
void IncreaseCounter(size_t num_samples, int fs_hz);
// Update jitter buffer delay counter.
- void JitterBufferDelay(size_t num_samples, uint64_t waiting_time_ms);
+ void JitterBufferDelay(size_t num_samples,
+ uint64_t waiting_time_ms,
+ uint64_t target_delay_ms);
// Stores new packet waiting time in waiting time statistics.
void StoreWaitingTime(int waiting_time_ms);