Removing statistics API from NetEQ
Removing WebRtcNetEQ_GetJitterStatistics(), WebRtcNetEQ_ResetJitterStatistics(), and the associated struct WebRtcNetEQ_JitterStatistics. The change ripples through all the way to the VoiceEngine API. Review URL: http://webrtc-codereview.appspot.com/285002 git-svn-id: http://webrtc.googlecode.com/svn/trunk@998 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
7d3e9498bc
commit
df10de4b27
@ -265,58 +265,6 @@ struct NetworkStatistics // NETEQ statistics
|
||||
WebRtc_UWord16 currentAccelerateRate;
|
||||
};
|
||||
|
||||
struct JitterStatistics
|
||||
{
|
||||
// smallest Jitter Buffer size during call in ms
|
||||
WebRtc_UWord32 jbMinSize;
|
||||
// largest Jitter Buffer size during call in ms
|
||||
WebRtc_UWord32 jbMaxSize;
|
||||
// the average JB size, measured over time - ms
|
||||
WebRtc_UWord32 jbAvgSize;
|
||||
// number of times the Jitter Buffer changed (using Accelerate or
|
||||
// Pre-emptive Expand)
|
||||
WebRtc_UWord32 jbChangeCount;
|
||||
// amount (in ms) of audio data received late
|
||||
WebRtc_UWord32 lateLossMs;
|
||||
// milliseconds removed to reduce jitter buffer size
|
||||
WebRtc_UWord32 accelerateMs;
|
||||
// milliseconds discarded through buffer flushing
|
||||
WebRtc_UWord32 flushedMs;
|
||||
// milliseconds of generated silence
|
||||
WebRtc_UWord32 generatedSilentMs;
|
||||
// milliseconds of synthetic audio data (non-background noise)
|
||||
WebRtc_UWord32 interpolatedVoiceMs;
|
||||
// milliseconds of synthetic audio data (background noise level)
|
||||
WebRtc_UWord32 interpolatedSilentMs;
|
||||
// count of tiny expansions in output audio
|
||||
WebRtc_UWord32 countExpandMoreThan120ms;
|
||||
// count of small expansions in output audio
|
||||
WebRtc_UWord32 countExpandMoreThan250ms;
|
||||
// count of medium expansions in output audio
|
||||
WebRtc_UWord32 countExpandMoreThan500ms;
|
||||
// count of long expansions in output audio
|
||||
WebRtc_UWord32 countExpandMoreThan2000ms;
|
||||
// duration of longest audio drop-out
|
||||
WebRtc_UWord32 longestExpandDurationMs;
|
||||
// count of times we got small network outage (inter-arrival time in
|
||||
// [500, 1000) ms)
|
||||
WebRtc_UWord32 countIAT500ms;
|
||||
// count of times we got medium network outage (inter-arrival time in
|
||||
// [1000, 2000) ms)
|
||||
WebRtc_UWord32 countIAT1000ms;
|
||||
// count of times we got large network outage (inter-arrival time >=
|
||||
// 2000 ms)
|
||||
WebRtc_UWord32 countIAT2000ms;
|
||||
// longest packet inter-arrival time in ms
|
||||
WebRtc_UWord32 longestIATms;
|
||||
// min time incoming Packet "waited" to be played
|
||||
WebRtc_UWord32 minPacketDelayMs;
|
||||
// max time incoming Packet "waited" to be played
|
||||
WebRtc_UWord32 maxPacketDelayMs;
|
||||
// avg time incoming Packet "waited" to be played
|
||||
WebRtc_UWord32 avgPacketDelayMs;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int min; // minumum
|
||||
|
@ -914,20 +914,6 @@ class AudioCodingModule: public Module {
|
||||
virtual WebRtc_Word32 NetworkStatistics(
|
||||
ACMNetworkStatistics& networkStatistics) const = 0;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// WebRtc_Word32 JitterStatistics()
|
||||
// Get the jitter statistics.
|
||||
//
|
||||
// Input:
|
||||
// -jitterStatistics : the given jitter statistics.
|
||||
//
|
||||
// Return value:
|
||||
// -1 if failed to set the jitter statistics,
|
||||
// 0 if jitter statistics are set successfully.
|
||||
//
|
||||
virtual WebRtc_Word32 JitterStatistics(
|
||||
ACMJitterStatistics& jitterStatistics) const = 0;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// WebRtc_Word32 PreferredBufferSize()
|
||||
// Get the optimal buffer size calculated for the current network
|
||||
@ -943,16 +929,6 @@ class AudioCodingModule: public Module {
|
||||
//
|
||||
virtual WebRtc_Word32 PreferredBufferSize(
|
||||
WebRtc_UWord16& prefBufSize) const = 0;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// WebRtc_Word32 ResetJitterStatistics()
|
||||
// Reset jitter statistics.
|
||||
//
|
||||
// Return value:
|
||||
// -1 if failed to reset the statistics,
|
||||
// 0 if succeeded.
|
||||
//
|
||||
virtual WebRtc_Word32 ResetJitterStatistics() const = 0;
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
@ -163,68 +163,6 @@ typedef struct {
|
||||
WebRtc_UWord16 currentAccelerateRate;
|
||||
} ACMNetworkStatistics;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Struct containing jitter statistics
|
||||
//
|
||||
// -jbMinSize : smallest Jitter Buffer size during call in ms
|
||||
// -jbMaxSize : largest Jitter Buffer size during call in ms
|
||||
// -jbAvgSize : the average JB size, measured over time - ms
|
||||
// -jbChangeCount : number of times the Jitter Buffer changed (using
|
||||
// Accelerate or Pre-emptive Expand)
|
||||
// -lateLossMs : amount (in ms) of audio data received late
|
||||
// -accelerateMs : milliseconds removed to reduce jitter buffer size
|
||||
// -flushedMs : milliseconds discarded through buffer flushing
|
||||
// -generatedSilentMs : milliseconds of generated silence
|
||||
// -interpolatedVoiceMs : milliseconds of synthetic audio data
|
||||
// (non-background noise)
|
||||
// -interpolatedSilentMs : milliseconds of synthetic audio data (background
|
||||
// noise level)
|
||||
// -numExpandTiny : count of tiny expansions in output audio less
|
||||
// than 250 ms
|
||||
// -numExpandSmall : count of small expansions in output audio 250 to
|
||||
// 500 ms
|
||||
// -numExpandMedium : count of medium expansions in output audio 500 to
|
||||
// 2000 ms
|
||||
// -numExpandLong : count of long expansions in output audio longer
|
||||
// than 2000
|
||||
// -longestExpandDurationMs : duration of longest audio drop-out
|
||||
// -countIAT500ms : count of times we got small network outage
|
||||
// (inter-arrival time in [500, 1000) ms)
|
||||
// -countIAT1000ms : count of times we got medium network outage
|
||||
// (inter-arrival time in [1000, 2000) ms)
|
||||
// -countIAT2000ms : count of times we got large network outage
|
||||
// (inter-arrival time >= 2000 ms)
|
||||
// -longestIATms : longest packet inter-arrival time in ms
|
||||
// -minPacketDelayMs : min time incoming Packet "waited" to be played
|
||||
// -maxPacketDelayMs : max time incoming Packet "waited" to be played
|
||||
// -avgPacketDelayMs : avg time incoming Packet "waited" to be played
|
||||
//
|
||||
typedef struct {
|
||||
WebRtc_UWord32 jbMinSize;
|
||||
WebRtc_UWord32 jbMaxSize;
|
||||
WebRtc_UWord32 jbAvgSize;
|
||||
WebRtc_UWord32 jbChangeCount;
|
||||
WebRtc_UWord32 lateLossMs;
|
||||
WebRtc_UWord32 accelerateMs;
|
||||
WebRtc_UWord32 flushedMs;
|
||||
WebRtc_UWord32 generatedSilentMs;
|
||||
WebRtc_UWord32 interpolatedVoiceMs;
|
||||
WebRtc_UWord32 interpolatedSilentMs;
|
||||
WebRtc_UWord32 numExpandTiny;
|
||||
WebRtc_UWord32 numExpandSmall;
|
||||
WebRtc_UWord32 numExpandMedium;
|
||||
WebRtc_UWord32 numExpandLong;
|
||||
WebRtc_UWord32 longestExpandDurationMs;
|
||||
WebRtc_UWord32 countIAT500ms;
|
||||
WebRtc_UWord32 countIAT1000ms;
|
||||
WebRtc_UWord32 countIAT2000ms;
|
||||
WebRtc_UWord32 longestIATms;
|
||||
WebRtc_UWord32 minPacketDelayMs;
|
||||
WebRtc_UWord32 maxPacketDelayMs;
|
||||
WebRtc_UWord32 avgPacketDelayMs;
|
||||
} ACMJitterStatistics;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Enumeration of background noise mode a mapping from NetEQ interface.
|
||||
|
@ -469,51 +469,6 @@ ACMNetEQ::NetworkStatistics(
|
||||
}
|
||||
|
||||
|
||||
WebRtc_Word32
|
||||
ACMNetEQ::JitterStatistics(
|
||||
ACMJitterStatistics* jitterStatistics) const
|
||||
{
|
||||
WebRtcNetEQ_JitterStatistics stats;
|
||||
CriticalSectionScoped lock(*_netEqCritSect);
|
||||
if(!_isInitialized[0])
|
||||
{
|
||||
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, _id,
|
||||
"JitterStatistics: NetEq is not initialized.");
|
||||
return -1;
|
||||
}
|
||||
if(WebRtcNetEQ_GetJitterStatistics(_inst[0], &stats) == 0)
|
||||
{
|
||||
jitterStatistics->accelerateMs = stats.accelerateMs;
|
||||
jitterStatistics->avgPacketDelayMs = stats.avgPacketDelayMs;
|
||||
jitterStatistics->numExpandTiny = stats.countExpandMoreThan120ms;
|
||||
jitterStatistics->numExpandLong = stats.countExpandMoreThan2000ms;
|
||||
jitterStatistics->numExpandSmall = stats.countExpandMoreThan250ms;
|
||||
jitterStatistics->numExpandMedium = stats.countExpandMoreThan500ms;
|
||||
jitterStatistics->countIAT1000ms = stats.countIAT1000ms;
|
||||
jitterStatistics->countIAT2000ms = stats.countIAT2000ms;
|
||||
jitterStatistics->countIAT500ms = stats.countIAT500ms;
|
||||
jitterStatistics->flushedMs = stats.flushedMs;
|
||||
jitterStatistics->generatedSilentMs = stats.generatedSilentMs;
|
||||
jitterStatistics->interpolatedSilentMs = stats.interpolatedSilentMs;
|
||||
jitterStatistics->interpolatedVoiceMs = stats.interpolatedVoiceMs;
|
||||
jitterStatistics->jbAvgSize = stats.jbAvgSize;
|
||||
jitterStatistics->jbChangeCount = stats.jbChangeCount;
|
||||
jitterStatistics->jbMaxSize = stats.jbMaxSize;
|
||||
jitterStatistics->jbMinSize = stats.jbMinSize;
|
||||
jitterStatistics->lateLossMs = stats.lateLossMs;
|
||||
jitterStatistics->longestExpandDurationMs = stats.longestExpandDurationMs;
|
||||
jitterStatistics->longestIATms = stats.longestIATms;
|
||||
jitterStatistics->maxPacketDelayMs = stats.maxPacketDelayMs;
|
||||
jitterStatistics->minPacketDelayMs = stats.minPacketDelayMs;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
LogError("getJitterStatistics", 0);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
WebRtc_Word32
|
||||
ACMNetEQ::PreferredBufferSize(
|
||||
WebRtc_UWord16* prefBufSize) const
|
||||
@ -528,21 +483,6 @@ ACMNetEQ::PreferredBufferSize(
|
||||
return ok;
|
||||
}
|
||||
|
||||
WebRtc_Word32
|
||||
ACMNetEQ::ResetJitterStatistics() const
|
||||
{
|
||||
CriticalSectionScoped lock(*_netEqCritSect);
|
||||
if(WebRtcNetEQ_ResetJitterStatistics(_inst[0]) < 0)
|
||||
{
|
||||
LogError("resetJitterStatistics", 0);
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
WebRtc_Word32
|
||||
ACMNetEQ::RecIn(
|
||||
const WebRtc_Word8* incomingPayload,
|
||||
|
@ -213,19 +213,6 @@ public:
|
||||
WebRtc_Word32 NetworkStatistics(
|
||||
ACMNetworkStatistics* statistics) const;
|
||||
|
||||
//
|
||||
// JitterStatistics()
|
||||
// Get the current jitter statistics from NetEQ.
|
||||
//
|
||||
// Output:
|
||||
// - jitterStatistics : The current jitter statistics.
|
||||
//
|
||||
// Return value : 0 if ok.
|
||||
// <0 if NetEQ returned an error.
|
||||
//
|
||||
WebRtc_Word32 JitterStatistics(
|
||||
ACMJitterStatistics* jitterStatistics) const;
|
||||
|
||||
//
|
||||
// PreferredBufferSize()
|
||||
// Get the currently preferred buffer size from NetEQ.
|
||||
@ -240,15 +227,6 @@ public:
|
||||
WebRtc_Word32 PreferredBufferSize(
|
||||
WebRtc_UWord16* prefBufSize) const;
|
||||
|
||||
//
|
||||
// ResetJitterStatistics()
|
||||
// Resets the NetEQ jitter statistics.
|
||||
//
|
||||
// Return value : 0 if ok.
|
||||
// <0 if NetEQ returned an error.
|
||||
//
|
||||
WebRtc_Word32 ResetJitterStatistics() const;
|
||||
|
||||
//
|
||||
// VADMode()
|
||||
// Get the current VAD Mode.
|
||||
|
@ -2135,15 +2135,6 @@ AudioCodingModuleImpl::NetworkStatistics(
|
||||
return status;
|
||||
}
|
||||
|
||||
WebRtc_Word32
|
||||
AudioCodingModuleImpl::JitterStatistics(
|
||||
ACMJitterStatistics& jitterStatistics) const
|
||||
{
|
||||
WEBRTC_TRACE(webrtc::kTraceModuleCall, webrtc::kTraceAudioCoding, _id,
|
||||
"JitterStatistics()");
|
||||
return _netEq.JitterStatistics(&jitterStatistics);
|
||||
}
|
||||
|
||||
WebRtc_Word32
|
||||
AudioCodingModuleImpl::PreferredBufferSize(
|
||||
WebRtc_UWord16& prefbufsize) const
|
||||
@ -2153,14 +2144,6 @@ AudioCodingModuleImpl::PreferredBufferSize(
|
||||
return _netEq.PreferredBufferSize(&prefbufsize);
|
||||
}
|
||||
|
||||
WebRtc_Word32
|
||||
AudioCodingModuleImpl::ResetJitterStatistics() const
|
||||
{
|
||||
WEBRTC_TRACE(webrtc::kTraceModuleCall, webrtc::kTraceAudioCoding, _id,
|
||||
"ResetJitterStatistics()");
|
||||
return _netEq.ResetJitterStatistics();
|
||||
}
|
||||
|
||||
void
|
||||
AudioCodingModuleImpl::DestructEncoderInst(
|
||||
void* ptrInst)
|
||||
|
@ -243,14 +243,9 @@ public:
|
||||
WebRtc_Word32 NetworkStatistics(
|
||||
ACMNetworkStatistics& statistics) const;
|
||||
|
||||
WebRtc_Word32 JitterStatistics(
|
||||
ACMJitterStatistics& jitterStatistics) const;
|
||||
|
||||
WebRtc_Word32 PreferredBufferSize(
|
||||
WebRtc_UWord16& prefbufsize) const;
|
||||
|
||||
WebRtc_Word32 ResetJitterStatistics() const;
|
||||
|
||||
void DestructEncoderInst(void* ptrInst);
|
||||
|
||||
WebRtc_Word16 AudioBuffer(WebRtcACMAudioBuff& audioBuff);
|
||||
|
@ -964,9 +964,7 @@ APITest::TestDelay(char side)
|
||||
|
||||
*myMinDelay = (rand() % 1000) + 1;
|
||||
|
||||
ACMJitterStatistics jitterStat;
|
||||
ACMNetworkStatistics networkStat;
|
||||
CHECK_ERROR_MT(myACM->JitterStatistics(jitterStat));
|
||||
CHECK_ERROR_MT(myACM->NetworkStatistics(networkStat));
|
||||
|
||||
if(!_randomTest)
|
||||
@ -980,31 +978,6 @@ APITest::TestDelay(char side)
|
||||
fprintf(stdout, "expand rate............. %d\n", networkStat.currentExpandRate);
|
||||
fprintf(stdout, "Preemptive rate......... %d\n", networkStat.currentPreemptiveRate);
|
||||
fprintf(stdout, "Accelerate rate......... %d\n", networkStat.currentAccelerateRate);
|
||||
|
||||
fprintf(stdout, "\n\nJitter Statistics at side %c\n", side);
|
||||
fprintf(stdout, "--------------------------------------\n");
|
||||
fprintf(stdout, "Jitter buffer min size....... %d\n", jitterStat.jbMinSize);
|
||||
fprintf(stdout, "Jitter buffer Max size....... %d\n", jitterStat.jbMaxSize);
|
||||
fprintf(stdout, "Jitter buffer Average size... %d\n", jitterStat.jbAvgSize);
|
||||
fprintf(stdout, "Change Count................. %d ms\n", jitterStat.jbChangeCount);
|
||||
fprintf(stdout, "Late Loss.................... %d ms\n", jitterStat.lateLossMs);
|
||||
fprintf(stdout, "Accelerate................... %d ms\n", jitterStat.accelerateMs);
|
||||
fprintf(stdout, "Flushed...................... %d ms\n", jitterStat.flushedMs);
|
||||
fprintf(stdout, "Generated Silence............ %d ms\n", jitterStat.generatedSilentMs);
|
||||
fprintf(stdout, "Interpolated Voice........... %d ms\n", jitterStat.interpolatedVoiceMs);
|
||||
fprintf(stdout, "Interpolated Silence......... %d ms\n", jitterStat.interpolatedSilentMs);
|
||||
fprintf(stdout, "No tiny expand............... %d\n", jitterStat.numExpandTiny);
|
||||
fprintf(stdout, "No small expand.............. %d\n", jitterStat.numExpandSmall);
|
||||
fprintf(stdout, "No Medium expand............. %d\n", jitterStat.numExpandMedium);
|
||||
fprintf(stdout, "No long expand............... %d\n", jitterStat.numExpandLong);
|
||||
fprintf(stdout, "longest expand............... %d ms\n", jitterStat.longestExpandDurationMs);
|
||||
fprintf(stdout, "No IAT 500................... %d ms\n", jitterStat.countIAT500ms);
|
||||
fprintf(stdout, "No IAT 1000.................. %d ms\n", jitterStat.countIAT1000ms);
|
||||
fprintf(stdout, "No IAT 2000.................. %d ms\n", jitterStat.countIAT2000ms);
|
||||
fprintf(stdout, "longest IAT.................. %d ms\n", jitterStat.longestIATms);
|
||||
fprintf(stdout, "Min packet delay............. %d ms\n", jitterStat.minPacketDelayMs);
|
||||
fprintf(stdout, "Max packet delay............. %d ms\n", jitterStat.maxPacketDelayMs);
|
||||
fprintf(stdout, "Average packet delay......... %d ms\n", jitterStat.avgPacketDelayMs);
|
||||
}
|
||||
|
||||
CHECK_ERROR_MT(myACM->SetMinimumPlayoutDelay(*myMinDelay));
|
||||
|
@ -104,38 +104,6 @@ typedef struct
|
||||
* (in Q14) */
|
||||
} WebRtcNetEQ_NetworkStatistics;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WebRtc_UWord32 jbMinSize; /* smallest Jitter Buffer size during call in ms */
|
||||
WebRtc_UWord32 jbMaxSize; /* largest Jitter Buffer size during call in ms */
|
||||
WebRtc_UWord32 jbAvgSize; /* the average JB size, measured over time - ms */
|
||||
WebRtc_UWord32 jbChangeCount; /* number of times the Jitter Buffer changed
|
||||
* (using Accelerate or Pre-emptive Expand) */
|
||||
WebRtc_UWord32 lateLossMs; /* amount (in ms) of audio data received late */
|
||||
WebRtc_UWord32 accelerateMs; /* milliseconds removed to reduce jitter buffer size */
|
||||
WebRtc_UWord32 flushedMs; /* milliseconds discarded through buffer flushing */
|
||||
WebRtc_UWord32 generatedSilentMs; /* milliseconds of generated silence */
|
||||
WebRtc_UWord32 interpolatedVoiceMs; /* milliseconds of synthetic audio data
|
||||
* (non-background noise) */
|
||||
WebRtc_UWord32 interpolatedSilentMs; /* milliseconds of synthetic audio data
|
||||
* (background noise level) */
|
||||
WebRtc_UWord32 countExpandMoreThan120ms; /* count of tiny expansions in output audio */
|
||||
WebRtc_UWord32 countExpandMoreThan250ms; /* count of small expansions in output audio */
|
||||
WebRtc_UWord32 countExpandMoreThan500ms; /* count of medium expansions in output audio */
|
||||
WebRtc_UWord32 countExpandMoreThan2000ms; /* count of long expansions in output audio */
|
||||
WebRtc_UWord32 longestExpandDurationMs; /* duration of longest audio drop-out */
|
||||
WebRtc_UWord32 countIAT500ms; /* count of times we got small network outage (inter-arrival
|
||||
* time in [500, 1000) ms) */
|
||||
WebRtc_UWord32 countIAT1000ms; /* count of times we got medium network outage
|
||||
* (inter-arrival time in [1000, 2000) ms) */
|
||||
WebRtc_UWord32 countIAT2000ms; /* count of times we got large network outage
|
||||
* (inter-arrival time >= 2000 ms) */
|
||||
WebRtc_UWord32 longestIATms; /* longest packet inter-arrival time in ms */
|
||||
WebRtc_UWord32 minPacketDelayMs; /* min time incoming Packet "waited" to be played */
|
||||
WebRtc_UWord32 maxPacketDelayMs; /* max time incoming Packet "waited" to be played */
|
||||
WebRtc_UWord32 avgPacketDelayMs; /* avg time incoming Packet "waited" to be played */
|
||||
} WebRtcNetEQ_JitterStatistics;
|
||||
|
||||
/*
|
||||
* Get the "in-call" statistics from NetEQ.
|
||||
* The statistics are reset after the query.
|
||||
@ -152,18 +120,6 @@ int WebRtcNetEQ_GetPreferredBufferSize(void *inst, WebRtc_UWord16 *preferredBuff
|
||||
*/
|
||||
int WebRtcNetEQ_GetCurrentDelay(const void *inst, WebRtc_UWord16 *currentDelayMs);
|
||||
|
||||
/*
|
||||
* Get the "post-call" jitter statistics from NetEQ.
|
||||
* The statistics are not reset by the query. Use the function
|
||||
* WebRtcNetEQ_ResetJitterStatistics to reset the statistics.
|
||||
*/
|
||||
int WebRtcNetEQ_GetJitterStatistics(void *inst, WebRtcNetEQ_JitterStatistics *jitterStats);
|
||||
|
||||
/*
|
||||
* Reset "post-call" jitter statistics.
|
||||
*/
|
||||
int WebRtcNetEQ_ResetJitterStatistics(void *inst);
|
||||
|
||||
/***********************************************/
|
||||
/* Functions for post-decode VAD functionality */
|
||||
/***********************************************/
|
||||
|
@ -648,18 +648,7 @@ int main(int argc, char* argv[])
|
||||
printf(" fraction_lost : %d (%f%%)\n", RTCPstat.fraction_lost, (float)(100.0*RTCPstat.fraction_lost/256.0));
|
||||
printf(" jitter : %d\n", (int) RTCPstat.jitter);
|
||||
|
||||
WebRtcNetEQ_JitterStatistics jitterStats;
|
||||
WebRtcNetEQ_GetJitterStatistics(NetEQvector[0]->instance(), &jitterStats);
|
||||
|
||||
printf("\nPost-call statistics:\n");
|
||||
printf(" Call duration ms : %u\n", simClock-start_clock);
|
||||
printf(" Expand (voice) ms : %u \t(%.2f%%)\n", jitterStats.interpolatedVoiceMs, (float) 100.0 * jitterStats.interpolatedVoiceMs/(simClock-start_clock));
|
||||
printf(" Expand (silence) ms : %u \t(%.2f%%)\n", jitterStats.interpolatedSilentMs, (float) 100.0 * jitterStats.interpolatedSilentMs/(simClock-start_clock));
|
||||
printf(" Accelerate ms : %u \t(%.2f%%)\n", jitterStats.accelerateMs, (float) 100.0 * jitterStats.accelerateMs/(simClock-start_clock));
|
||||
printf(" Flushed ms : %u \t(%.2f%%)\n", jitterStats.flushedMs, (float) 100.0 * jitterStats.flushedMs/(simClock-start_clock));
|
||||
printf(" JB avg size ms : %u\n", jitterStats.jbAvgSize);
|
||||
printf(" JB max size ms : %u\n", jitterStats.jbMaxSize);
|
||||
printf(" Max inter-arrival ms: %u\n", jitterStats.longestIATms);
|
||||
printf("\n Call duration ms : %u\n", simClock-start_clock);
|
||||
|
||||
printf("\nComplexity estimates (including sub-components):\n");
|
||||
printf(" RecIn complexity : %.2f MCPS\n", NetEQvector[0]->getRecInTime() / ((float) 1000*(simClock-start_clock)));
|
||||
|
@ -1593,79 +1593,6 @@ int WebRtcNetEQ_GetCurrentDelay(const void *inst, WebRtc_UWord16 *currentDelayMs
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Get the "post-call" jitter statistics from NetEQ.
|
||||
* The statistics are not reset by the query. Use the function WebRtcNetEQ_ResetJitterStatistics
|
||||
* to reset the statistics. */
|
||||
int WebRtcNetEQ_GetJitterStatistics(void *inst, WebRtcNetEQ_JitterStatistics *jitterStats)
|
||||
{
|
||||
|
||||
MainInst_t *NetEqMainInst = (MainInst_t*) inst;
|
||||
|
||||
/* collect statistics not yet transfered to post-call statistics */
|
||||
NetEqMainInst->MCUinst.statInst.accelerateMs
|
||||
+= WebRtcSpl_DivU32U16(
|
||||
WEBRTC_SPL_UMUL_32_16( NetEqMainInst->DSPinst.statInst.accelerateLength, (WebRtc_UWord16) 1000),
|
||||
NetEqMainInst->MCUinst.fs);
|
||||
|
||||
jitterStats->jbMinSize = NetEqMainInst->MCUinst.statInst.jbMinSize; /* smallest Jitter Buffer size during call - mSec */
|
||||
jitterStats->jbMaxSize = NetEqMainInst->MCUinst.statInst.jbMaxSize; /* largest Jitter Buffer size during call - mSec */
|
||||
jitterStats->jbAvgSize = NetEqMainInst->MCUinst.statInst.jbAvgSizeQ16 >> 16; /* the average JB size, measured over time - mSec */
|
||||
jitterStats->jbChangeCount = NetEqMainInst->MCUinst.statInst.jbChangeCount; /* number of times the Jitter Buffer changed */
|
||||
jitterStats->lateLossMs = (NetEqMainInst->MCUinst.PacketBuffer_inst.totalDiscardedPackets
|
||||
* NetEqMainInst->MCUinst.PacketBuffer_inst.packSizeSamples * 1000)
|
||||
/ NetEqMainInst->MCUinst.fs; /* number of frames received late */
|
||||
jitterStats->accelerateMs = NetEqMainInst->MCUinst.statInst.accelerateMs; /* milliseconds removed to reduce jitter buffer size */
|
||||
jitterStats->flushedMs = (NetEqMainInst->MCUinst.PacketBuffer_inst.totalFlushedPackets
|
||||
* NetEqMainInst->MCUinst.PacketBuffer_inst.packSizeSamples * 1000)
|
||||
/ NetEqMainInst->MCUinst.fs;
|
||||
jitterStats->generatedSilentMs = NetEqMainInst->MCUinst.statInst.generatedSilentMs; /* number of generated silence frames */
|
||||
jitterStats->countExpandMoreThan120ms
|
||||
= NetEqMainInst->MCUinst.statInst.countExpandMoreThan120ms; /* count of tiny BFI events output audio */
|
||||
jitterStats->countExpandMoreThan250ms
|
||||
= NetEqMainInst->MCUinst.statInst.countExpandMoreThan250ms; /* count of small BFI events output audio */
|
||||
jitterStats->countExpandMoreThan500ms
|
||||
= NetEqMainInst->MCUinst.statInst.countExpandMoreThan500ms; /* count of medium BFI events output audio */
|
||||
jitterStats->countExpandMoreThan2000ms
|
||||
= NetEqMainInst->MCUinst.statInst.countExpandMoreThan2000ms; /* count of large BFI events output audio */
|
||||
jitterStats->longestExpandDurationMs
|
||||
= NetEqMainInst->MCUinst.statInst.longestExpandDurationMs; /* mSec duration of longest audio drop-out */
|
||||
jitterStats->countIAT500ms
|
||||
= NetEqMainInst->MCUinst.BufferStat_inst.Automode_inst.countIAT500ms; /* count of times we got small network outage */
|
||||
jitterStats->countIAT1000ms
|
||||
= NetEqMainInst->MCUinst.BufferStat_inst.Automode_inst.countIAT1000ms; /* count of times we got medium network outage */
|
||||
jitterStats->countIAT2000ms
|
||||
= NetEqMainInst->MCUinst.BufferStat_inst.Automode_inst.countIAT2000ms; /* count of times we got large network outage */
|
||||
jitterStats->longestIATms
|
||||
= NetEqMainInst->MCUinst.BufferStat_inst.Automode_inst.longestIATms; /* mSec duration of longest network outage */
|
||||
jitterStats->minPacketDelayMs = NetEqMainInst->MCUinst.statInst.minPacketDelayMs; /* min time incoming frame "waited" to be played */
|
||||
jitterStats->maxPacketDelayMs = NetEqMainInst->MCUinst.statInst.maxPacketDelayMs; /* max time incoming frame "waited" to be played */
|
||||
jitterStats->avgPacketDelayMs = NetEqMainInst->MCUinst.statInst.avgPacketDelayMs; /* avg time incoming frame "waited" to be played */
|
||||
|
||||
jitterStats->interpolatedVoiceMs
|
||||
= WebRtcSpl_DivU32U16(
|
||||
WEBRTC_SPL_UMUL_32_16( NetEqMainInst->DSPinst.statInst.expandedVoiceSamples, (WebRtc_UWord16) 1000),
|
||||
NetEqMainInst->MCUinst.fs); /* interpolated voice in ms */
|
||||
jitterStats->interpolatedSilentMs
|
||||
= WebRtcSpl_DivU32U16(
|
||||
WEBRTC_SPL_UMUL_32_16( NetEqMainInst->DSPinst.statInst.expandedNoiseSamples, (WebRtc_UWord16) 1000),
|
||||
NetEqMainInst->MCUinst.fs); /* interpolated silence in ms */
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Reset "post-call" jitter statistics. */
|
||||
int WebRtcNetEQ_ResetJitterStatistics(void *inst)
|
||||
{
|
||||
|
||||
MainInst_t *NetEqMainInst = (MainInst_t*) inst;
|
||||
|
||||
WebRtcNetEQ_ResetMcuJitterStat(&(NetEqMainInst->MCUinst));
|
||||
|
||||
WebRtcNetEQ_ClearPostCallStats(&(NetEqMainInst->DSPinst));
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* WebRtcNetEQ_SetVADInstance(...)
|
||||
*
|
||||
|
@ -35,19 +35,11 @@ public:
|
||||
// The statistics are reset after the query.
|
||||
virtual int GetNetworkStatistics(int channel, NetworkStatistics& stats) = 0;
|
||||
|
||||
// Get the "post-call" jitter statistics from NetEQ.
|
||||
// The statistics are not reset by the query. Use the function
|
||||
// ResetJitterStatistics() to reset.
|
||||
virtual int GetJitterStatistics(int channel, JitterStatistics& stats) = 0;
|
||||
|
||||
// Get the optimal buffer size calculated for the current network
|
||||
// conditions.
|
||||
virtual int GetPreferredBufferSize(
|
||||
int channel, unsigned short& preferredBufferSize) = 0;
|
||||
|
||||
// Reset "post-call" jitter statistics.
|
||||
virtual int ResetJitterStatistics(int channel) = 0;
|
||||
|
||||
protected:
|
||||
VoENetEqStats() {}
|
||||
virtual ~VoENetEqStats() {}
|
||||
|
@ -6107,15 +6107,6 @@ Channel::GetNetworkStatistics(NetworkStatistics& stats)
|
||||
(ACMNetworkStatistics &)stats);
|
||||
}
|
||||
|
||||
int
|
||||
Channel::GetJitterStatistics(JitterStatistics& stats)
|
||||
{
|
||||
WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId),
|
||||
"Channel::GetNetworkStatistics()");
|
||||
return _audioCodingModule.JitterStatistics(
|
||||
(ACMJitterStatistics &)stats);
|
||||
}
|
||||
|
||||
int
|
||||
Channel::GetPreferredBufferSize(unsigned short& preferredBufferSize)
|
||||
{
|
||||
@ -6125,14 +6116,6 @@ Channel::GetPreferredBufferSize(unsigned short& preferredBufferSize)
|
||||
(WebRtc_UWord16 &)preferredBufferSize);
|
||||
}
|
||||
|
||||
int
|
||||
Channel::ResetJitterStatistics()
|
||||
{
|
||||
WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId),
|
||||
"Channel::ResetJitterStatistics()");
|
||||
return _audioCodingModule.ResetJitterStatistics();
|
||||
}
|
||||
|
||||
int
|
||||
Channel::GetDelayEstimate(int& delayMs) const
|
||||
{
|
||||
|
@ -243,9 +243,7 @@ public:
|
||||
|
||||
// VoENetEqStats
|
||||
int GetNetworkStatistics(NetworkStatistics& stats);
|
||||
int GetJitterStatistics(JitterStatistics& stats);
|
||||
int GetPreferredBufferSize(unsigned short& preferredBufferSize);
|
||||
int ResetJitterStatistics();
|
||||
|
||||
// VoEVideoSync
|
||||
int GetDelayEstimate(int& delayMs) const;
|
||||
|
@ -95,32 +95,6 @@ int VoENetEqStatsImpl::GetNetworkStatistics(int channel,
|
||||
return channelPtr->GetNetworkStatistics(stats);
|
||||
}
|
||||
|
||||
int VoENetEqStatsImpl::GetJitterStatistics(int channel,
|
||||
JitterStatistics& stats)
|
||||
{
|
||||
WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_instanceId,-1),
|
||||
"GetJitterStatistics(channel=%i)", channel);
|
||||
ANDROID_NOT_SUPPORTED();
|
||||
IPHONE_NOT_SUPPORTED();
|
||||
|
||||
if (!_engineStatistics.Initialized())
|
||||
{
|
||||
_engineStatistics.SetLastError(VE_NOT_INITED, kTraceError);
|
||||
return -1;
|
||||
}
|
||||
voe::ScopedChannel sc(_channelManager, channel);
|
||||
voe::Channel* channelPtr = sc.ChannelPtr();
|
||||
if (channelPtr == NULL)
|
||||
{
|
||||
_engineStatistics.SetLastError(
|
||||
VE_CHANNEL_NOT_VALID, kTraceError,
|
||||
"GetJitterStatistics() failed to locate channel");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return channelPtr->GetJitterStatistics(stats);
|
||||
}
|
||||
|
||||
int VoENetEqStatsImpl::GetPreferredBufferSize(
|
||||
int channel,
|
||||
unsigned short& preferredBufferSize)
|
||||
@ -148,31 +122,6 @@ int VoENetEqStatsImpl::GetPreferredBufferSize(
|
||||
return channelPtr->GetPreferredBufferSize(preferredBufferSize);
|
||||
}
|
||||
|
||||
int VoENetEqStatsImpl::ResetJitterStatistics(int channel)
|
||||
{
|
||||
WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_instanceId,-1),
|
||||
"ResetJitterStatistics(channel=%i)", channel);
|
||||
ANDROID_NOT_SUPPORTED();
|
||||
IPHONE_NOT_SUPPORTED();
|
||||
|
||||
if (!_engineStatistics.Initialized())
|
||||
{
|
||||
_engineStatistics.SetLastError(VE_NOT_INITED, kTraceError);
|
||||
return -1;
|
||||
}
|
||||
voe::ScopedChannel sc(_channelManager, channel);
|
||||
voe::Channel* channelPtr = sc.ChannelPtr();
|
||||
if (channelPtr == NULL)
|
||||
{
|
||||
_engineStatistics.SetLastError(
|
||||
VE_CHANNEL_NOT_VALID, kTraceError,
|
||||
"ResetJitterStatistics() failed to locate channel");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return channelPtr->ResetJitterStatistics();
|
||||
}
|
||||
|
||||
#endif // #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API
|
||||
|
||||
} // namespace webrtc
|
||||
|
@ -28,14 +28,9 @@ public:
|
||||
virtual int GetNetworkStatistics(int channel,
|
||||
NetworkStatistics& stats);
|
||||
|
||||
virtual int GetJitterStatistics(int channel,
|
||||
JitterStatistics& stats);
|
||||
|
||||
virtual int GetPreferredBufferSize(int channel,
|
||||
unsigned short& preferredBufferSize);
|
||||
|
||||
virtual int ResetJitterStatistics(int channel);
|
||||
|
||||
protected:
|
||||
VoENetEqStatsImpl();
|
||||
virtual ~VoENetEqStatsImpl();
|
||||
|
@ -3595,59 +3595,9 @@ int VoETestManager::DoStandardTest()
|
||||
TEST_LOG(" preferredBufferSize = %hu \n",
|
||||
nStats.preferredBufferSize);
|
||||
|
||||
JitterStatistics jStats;
|
||||
TEST_MUSTPASS(neteqst->GetJitterStatistics(0, jStats));
|
||||
TEST_LOG("\nJitter statistics: \n");
|
||||
TEST_LOG(" jbMinSize = %u \n",
|
||||
jStats.jbMinSize);
|
||||
TEST_LOG(" jbMaxSize = %u \n",
|
||||
jStats.jbMaxSize);
|
||||
TEST_LOG(" jbAvgSize = %u \n",
|
||||
jStats.jbAvgSize);
|
||||
TEST_LOG(" jbChangeCount = %u \n",
|
||||
jStats.jbChangeCount);
|
||||
TEST_LOG(" lateLossMs = %u \n",
|
||||
jStats.lateLossMs);
|
||||
TEST_LOG(" accelerateMs = %u \n",
|
||||
jStats.accelerateMs);
|
||||
TEST_LOG(" flushedMs = %u \n",
|
||||
jStats.flushedMs);
|
||||
TEST_LOG(" generatedSilentMs = %u \n",
|
||||
jStats.generatedSilentMs);
|
||||
TEST_LOG(" interpolatedVoiceMs = %u \n",
|
||||
jStats.interpolatedVoiceMs);
|
||||
TEST_LOG(" interpolatedSilentMs = %u \n",
|
||||
jStats.interpolatedSilentMs);
|
||||
TEST_LOG(" countExpandMoreThan120ms = %u \n",
|
||||
jStats.countExpandMoreThan120ms);
|
||||
TEST_LOG(" countExpandMoreThan250ms = %u \n",
|
||||
jStats.countExpandMoreThan250ms);
|
||||
TEST_LOG(" countExpandMoreThan500ms = %u \n",
|
||||
jStats.countExpandMoreThan500ms);
|
||||
TEST_LOG(" countExpandMoreThan2000ms = %u \n",
|
||||
jStats.countExpandMoreThan2000ms);
|
||||
TEST_LOG(" longestExpandDurationMs = %u \n",
|
||||
jStats.longestExpandDurationMs);
|
||||
TEST_LOG(" countIAT500ms = %u \n",
|
||||
jStats.countIAT500ms);
|
||||
TEST_LOG(" countIAT1000ms = %u \n",
|
||||
jStats.countIAT1000ms);
|
||||
TEST_LOG(" countIAT2000ms = %u \n",
|
||||
jStats.countIAT2000ms);
|
||||
TEST_LOG(" longestIATms = %u \n",
|
||||
jStats.longestIATms);
|
||||
TEST_LOG(" minPacketDelayMs = %u \n",
|
||||
jStats.minPacketDelayMs);
|
||||
TEST_LOG(" maxPacketDelayMs = %u \n",
|
||||
jStats.maxPacketDelayMs);
|
||||
TEST_LOG(" avgPacketDelayMs = %u \n",
|
||||
jStats.avgPacketDelayMs);
|
||||
|
||||
unsigned short preferredBufferSize;
|
||||
TEST_MUSTPASS(neteqst->GetPreferredBufferSize(0, preferredBufferSize));
|
||||
TEST_MUSTPASS(preferredBufferSize != nStats.preferredBufferSize);
|
||||
|
||||
TEST_MUSTPASS(neteqst->ResetJitterStatistics(0));
|
||||
#else
|
||||
TEST_LOG("Skipping NetEQ statistics tests - "
|
||||
"WEBRTC_VOICE_ENGINE_NETEQ_STATS_API not defined \n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user