diff --git a/DEPS b/DEPS index eaa5d3a90..5f366f2cd 100644 --- a/DEPS +++ b/DEPS @@ -14,7 +14,7 @@ vars = { # External resources like video and audio files used for testing purposes. # Downloaded on demand when needed. - "webrtc_resources_revision": "11", + "webrtc_resources_revision": "12", } # NOTE: Prefer revision numbers to tags for svn deps. Use http rather than diff --git a/webrtc/common_types.h b/webrtc/common_types.h index b21fc1b08..492cb37f5 100644 --- a/webrtc/common_types.h +++ b/webrtc/common_types.h @@ -314,6 +314,8 @@ struct NetworkStatistics // NETEQ statistics int minWaitingTimeMs; // max packet waiting time in the jitter buffer (ms) int maxWaitingTimeMs; + // added samples in off mode due to packet loss + int addedSamples; }; typedef struct diff --git a/webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h b/webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h index cc89151c2..dace4b8af 100644 --- a/webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h +++ b/webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h @@ -165,6 +165,7 @@ enum ACMAMRPackingFormat { // -medianWaitingTimeMs : median packet waiting time in the buffer // -minWaitingTimeMs : min packet waiting time in the buffer // -maxWaitingTimeMs : max packet waiting time in the buffer +// -addedSamples : samples inserted because of packet loss in off mode typedef struct { WebRtc_UWord16 currentBufferSize; WebRtc_UWord16 preferredBufferSize; @@ -179,6 +180,7 @@ typedef struct { int medianWaitingTimeMs; int minWaitingTimeMs; int maxWaitingTimeMs; + int addedSamples; } ACMNetworkStatistics; /////////////////////////////////////////////////////////////////////////// diff --git a/webrtc/modules/audio_coding/main/source/acm_neteq.cc b/webrtc/modules/audio_coding/main/source/acm_neteq.cc index 497be799c..1f900c080 100644 --- a/webrtc/modules/audio_coding/main/source/acm_neteq.cc +++ b/webrtc/modules/audio_coding/main/source/acm_neteq.cc @@ -366,6 +366,7 @@ WebRtc_Word32 ACMNetEQ::NetworkStatistics( statistics->currentPreemptiveRate = stats.currentPreemptiveRate; statistics->preferredBufferSize = stats.preferredBufferSize; statistics->clockDriftPPM = stats.clockDriftPPM; + statistics->addedSamples = stats.addedSamples; } else { LogError("getNetworkStatistics", 0); return -1; diff --git a/webrtc/modules/audio_coding/neteq/dsp.c b/webrtc/modules/audio_coding/neteq/dsp.c index d9873da5b..82c54ea30 100644 --- a/webrtc/modules/audio_coding/neteq/dsp.c +++ b/webrtc/modules/audio_coding/neteq/dsp.c @@ -365,12 +365,11 @@ int WebRtcNetEQ_AddressInit(DSPInst_t *inst, const void *data2McuAddress, int WebRtcNetEQ_ClearInCallStats(DSPInst_t *inst) { - /* Reset statistics counters */ inst->statInst.accelerateLength = 0; inst->statInst.expandLength = 0; inst->statInst.preemptiveLength = 0; - + inst->statInst.addedSamples = 0; return (0); } @@ -394,7 +393,6 @@ int WebRtcNetEQ_ClearPostCallStats(DSPInst_t *inst) /* Reset statistics counters */ inst->statInst.expandedVoiceSamples = 0; inst->statInst.expandedNoiseSamples = 0; - return (0); } diff --git a/webrtc/modules/audio_coding/neteq/interface/webrtc_neteq_internal.h b/webrtc/modules/audio_coding/neteq/interface/webrtc_neteq_internal.h index 8ca618144..3509cf7d4 100644 --- a/webrtc/modules/audio_coding/neteq/interface/webrtc_neteq_internal.h +++ b/webrtc/modules/audio_coding/neteq/interface/webrtc_neteq_internal.h @@ -107,6 +107,8 @@ typedef struct * acceleration (in Q14). */ int32_t clockDriftPPM; /* Average clock-drift in parts-per- * million (positive or negative). */ + int addedSamples; /* Number of zero samples added in off + * mode */ } WebRtcNetEQ_NetworkStatistics; /* diff --git a/webrtc/modules/audio_coding/neteq/neteq_statistics.h b/webrtc/modules/audio_coding/neteq/neteq_statistics.h index d07f33047..727b10957 100644 --- a/webrtc/modules/audio_coding/neteq/neteq_statistics.h +++ b/webrtc/modules/audio_coding/neteq/neteq_statistics.h @@ -28,6 +28,7 @@ typedef struct WebRtc_UWord32 preemptiveLength; /* number of samples produced through pre-emptive expand */ WebRtc_UWord32 accelerateLength; /* number of samples removed through accelerate */ + int addedSamples; /* number of samples inserted in off mode */ /* variables for post-call statistics; queried through WebRtcNetEQ_GetJitterStatistics */ WebRtc_UWord32 expandedVoiceSamples; /* number of voice samples produced through expand */ diff --git a/webrtc/modules/audio_coding/neteq/recout.c b/webrtc/modules/audio_coding/neteq/recout.c index 1f4794593..8eb49e337 100644 --- a/webrtc/modules/audio_coding/neteq/recout.c +++ b/webrtc/modules/audio_coding/neteq/recout.c @@ -1090,6 +1090,8 @@ int WebRtcNetEQ_RecOutInternal(DSPInst_t *inst, WebRtc_Word16 *pw16_outData, len = inst->timestampsPerCall; /* ZeroStuffing... */ WebRtcSpl_MemSetW16(pw16_NetEqAlgorithm_buffer, 0, len); + /* By not advancing the timestamp, NetEq inserts samples. */ + inst->statInst.addedSamples += len; } inst->ExpandInst.w16_consecExp = 0; break; diff --git a/webrtc/modules/audio_coding/neteq/webrtc_neteq.c b/webrtc/modules/audio_coding/neteq/webrtc_neteq.c index 599c11b5e..d13902d26 100644 --- a/webrtc/modules/audio_coding/neteq/webrtc_neteq.c +++ b/webrtc/modules/audio_coding/neteq/webrtc_neteq.c @@ -1171,6 +1171,8 @@ int WebRtcNetEQ_GetNetworkStatistics(void *inst, WebRtcNetEQ_NetworkStatistics * /* Instance sanity */ if (NetEqMainInst == NULL) return (-1); + stats->addedSamples = NetEqMainInst->DSPinst.statInst.addedSamples; + /*******************/ /* Get buffer size */ /*******************/ diff --git a/webrtc/voice_engine/test/auto_test/standard/neteq_stats_test.cc b/webrtc/voice_engine/test/auto_test/standard/neteq_stats_test.cc index 0cb4158ad..2809090bf 100644 --- a/webrtc/voice_engine/test/auto_test/standard/neteq_stats_test.cc +++ b/webrtc/voice_engine/test/auto_test/standard/neteq_stats_test.cc @@ -49,4 +49,7 @@ TEST_F(NetEQStatsTest, ManualPrintStatisticsAfterRunningAWhile) { network_statistics.minWaitingTimeMs); TEST_LOG(" maxWaitingTimeMs = %i \n", network_statistics.maxWaitingTimeMs); + + // This is only set to a non-zero value in off-mode. + EXPECT_EQ(0, network_statistics.addedSamples); }