mirror of
https://github.com/JulianGro/overte.git
synced 2025-08-04 12:07:30 +02:00
Fixed/improved Standard Deviation code used to get jitter
This commit is contained in:
parent
74452b7cc5
commit
3e62aa5169
1 changed files with 21 additions and 23 deletions
|
@ -57,6 +57,7 @@ bool stopAudioReceiveThread = false;
|
||||||
|
|
||||||
timeval firstPlaybackTimer;
|
timeval firstPlaybackTimer;
|
||||||
int packetsReceivedThisPlayback = 0;
|
int packetsReceivedThisPlayback = 0;
|
||||||
|
float usecsAtStartup = 0;
|
||||||
|
|
||||||
#define LOG_SAMPLE_DELAY 0
|
#define LOG_SAMPLE_DELAY 0
|
||||||
|
|
||||||
|
@ -224,10 +225,16 @@ void *receiveAudioViaUDP(void *args) {
|
||||||
int16_t *receivedData = new int16_t[PACKET_LENGTH_SAMPLES];
|
int16_t *receivedData = new int16_t[PACKET_LENGTH_SAMPLES];
|
||||||
ssize_t receivedBytes;
|
ssize_t receivedBytes;
|
||||||
|
|
||||||
|
// Init Jitter timer values
|
||||||
timeval previousReceiveTime, currentReceiveTime = {};
|
timeval previousReceiveTime, currentReceiveTime = {};
|
||||||
|
gettimeofday(&previousReceiveTime, NULL);
|
||||||
|
gettimeofday(¤tReceiveTime, NULL);
|
||||||
|
|
||||||
|
int totalPacketsReceived = 0;
|
||||||
|
|
||||||
|
stdev.reset();
|
||||||
|
|
||||||
if (LOG_SAMPLE_DELAY) {
|
if (LOG_SAMPLE_DELAY) {
|
||||||
gettimeofday(&previousReceiveTime, NULL);
|
|
||||||
|
|
||||||
char *directory = new char[50];
|
char *directory = new char[50];
|
||||||
char *filename = new char[50];
|
char *filename = new char[50];
|
||||||
|
@ -245,30 +252,24 @@ void *receiveAudioViaUDP(void *args) {
|
||||||
|
|
||||||
while (!stopAudioReceiveThread) {
|
while (!stopAudioReceiveThread) {
|
||||||
if (sharedAudioData->audioSocket->receive((void *)receivedData, &receivedBytes)) {
|
if (sharedAudioData->audioSocket->receive((void *)receivedData, &receivedBytes)) {
|
||||||
bool firstSample = (currentReceiveTime.tv_sec == 0);
|
|
||||||
|
|
||||||
gettimeofday(¤tReceiveTime, NULL);
|
gettimeofday(¤tReceiveTime, NULL);
|
||||||
|
totalPacketsReceived++;
|
||||||
|
|
||||||
if (LOG_SAMPLE_DELAY) {
|
if (LOG_SAMPLE_DELAY) {
|
||||||
if (!firstSample) {
|
// write time difference (in microseconds) between packet receipts to file
|
||||||
// write time difference (in microseconds) between packet receipts to file
|
double timeDiff = diffclock(&previousReceiveTime, ¤tReceiveTime);
|
||||||
double timeDiff = diffclock(&previousReceiveTime, ¤tReceiveTime);
|
logFile << timeDiff << std::endl;
|
||||||
logFile << timeDiff << std::endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compute and report standard deviation for jitter calculation
|
double tDiff = diffclock(&previousReceiveTime, ¤tReceiveTime);
|
||||||
if (firstSample) {
|
//printf("tDiff %4.1f\n", tDiff);
|
||||||
|
// Discard first few received packets for computing jitter (often they pile up on start)
|
||||||
|
if (totalPacketsReceived > 3) stdev.addValue(tDiff);
|
||||||
|
if (stdev.getSamples() > 500) {
|
||||||
|
sharedAudioData->measuredJitter = stdev.getStDev();
|
||||||
|
printf("Avg: %4.2f, Stdev: %4.2f\n", stdev.getAverage(), sharedAudioData->measuredJitter);
|
||||||
stdev.reset();
|
stdev.reset();
|
||||||
} else {
|
|
||||||
double tDiff = diffclock(&previousReceiveTime, ¤tReceiveTime);
|
|
||||||
//printf(\n";
|
|
||||||
stdev.addValue(tDiff);
|
|
||||||
if (stdev.getSamples() > 500) {
|
|
||||||
sharedAudioData->measuredJitter = stdev.getStDev();
|
|
||||||
printf("Avg: %4.2f, Stdev: %4.2f\n", stdev.getAverage(), sharedAudioData->measuredJitter);
|
|
||||||
stdev.reset();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioRingBuffer *ringBuffer = sharedAudioData->ringBuffer;
|
AudioRingBuffer *ringBuffer = sharedAudioData->ringBuffer;
|
||||||
|
@ -280,14 +281,11 @@ void *receiveAudioViaUDP(void *args) {
|
||||||
else {
|
else {
|
||||||
//printf("Audio packet received at %6.0f\n", usecTimestampNow()/1000);
|
//printf("Audio packet received at %6.0f\n", usecTimestampNow()/1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packetsReceivedThisPlayback == 1) gettimeofday(&firstPlaybackTimer, NULL);
|
if (packetsReceivedThisPlayback == 1) gettimeofday(&firstPlaybackTimer, NULL);
|
||||||
|
|
||||||
ringBuffer->parseData(receivedData, PACKET_LENGTH_BYTES);
|
ringBuffer->parseData(receivedData, PACKET_LENGTH_BYTES);
|
||||||
|
|
||||||
if (LOG_SAMPLE_DELAY) {
|
previousReceiveTime = currentReceiveTime;
|
||||||
gettimeofday(&previousReceiveTime, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue