mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 18:16:45 +02:00
resolve conflicts on merge with upstream master
This commit is contained in:
commit
22877c7f3a
4 changed files with 112 additions and 13 deletions
|
@ -28,7 +28,7 @@ const float AMPLITUDE_RATIO_AT_90 = 0.5;
|
||||||
const short RING_BUFFER_FRAMES = 10;
|
const short RING_BUFFER_FRAMES = 10;
|
||||||
const short RING_BUFFER_SIZE_SAMPLES = RING_BUFFER_FRAMES * BUFFER_LENGTH_SAMPLES;
|
const short RING_BUFFER_SIZE_SAMPLES = RING_BUFFER_FRAMES * BUFFER_LENGTH_SAMPLES;
|
||||||
|
|
||||||
const short JITTER_BUFFER_LENGTH_MSECS = 1;
|
const short JITTER_BUFFER_LENGTH_MSECS = 26;
|
||||||
const int SAMPLE_RATE = 22050;
|
const int SAMPLE_RATE = 22050;
|
||||||
|
|
||||||
const short NUM_AUDIO_SOURCES = 2;
|
const short NUM_AUDIO_SOURCES = 2;
|
||||||
|
@ -39,6 +39,9 @@ char EC2_WEST_AUDIO_SERVER[] = "54.241.92.53";
|
||||||
|
|
||||||
const int AUDIO_UDP_LISTEN_PORT = 55444;
|
const int AUDIO_UDP_LISTEN_PORT = 55444;
|
||||||
|
|
||||||
|
int starve_counter = 0;
|
||||||
|
|
||||||
|
StDev stdev;
|
||||||
|
|
||||||
#define LOG_SAMPLE_DELAY 1
|
#define LOG_SAMPLE_DELAY 1
|
||||||
|
|
||||||
|
@ -81,7 +84,7 @@ int audioCallback (const void *inputBuffer,
|
||||||
// int16_t *inputRight = ((int16_t **) inputBuffer)[1];
|
// int16_t *inputRight = ((int16_t **) inputBuffer)[1];
|
||||||
|
|
||||||
if (inputLeft != NULL) {
|
if (inputLeft != NULL) {
|
||||||
data->audioSocket->send((char *) EC2_WEST_AUDIO_SERVER, 55443, (void *)inputLeft, BUFFER_LENGTH_BYTES);
|
data->audioSocket->send((char *) WORKCLUB_AUDIO_SERVER, 55443, (void *)inputLeft, BUFFER_LENGTH_BYTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t *outputLeft = ((int16_t **) outputBuffer)[0];
|
int16_t *outputLeft = ((int16_t **) outputBuffer)[0];
|
||||||
|
@ -122,8 +125,8 @@ int audioCallback (const void *inputBuffer,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ringBuffer->diffLastWriteNextOutput() < BUFFER_LENGTH_SAMPLES) {
|
if (ringBuffer->diffLastWriteNextOutput() < BUFFER_LENGTH_SAMPLES) {
|
||||||
std::cout << "Starved\n";
|
starve_counter++;
|
||||||
ringBuffer->nextOutput = ringBuffer->buffer;
|
printf("Starved #%d\n", starve_counter);
|
||||||
ringBuffer->endOfLastWrite = NULL;
|
ringBuffer->endOfLastWrite = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -221,18 +224,29 @@ void *receiveAudioViaUDP(void *args) {
|
||||||
while (true) {
|
while (true) {
|
||||||
if (sharedAudioData->audioSocket->receive((void *)receivedData, receivedBytes)) {
|
if (sharedAudioData->audioSocket->receive((void *)receivedData, receivedBytes)) {
|
||||||
|
|
||||||
|
bool firstSample = (currentReceiveTime.tv_sec == 0);
|
||||||
|
|
||||||
|
gettimeofday(¤tReceiveTime, NULL);
|
||||||
|
|
||||||
if (LOG_SAMPLE_DELAY) {
|
if (LOG_SAMPLE_DELAY) {
|
||||||
if (currentReceiveTime.tv_sec == 0) {
|
if (!firstSample) {
|
||||||
gettimeofday(¤tReceiveTime, NULL);
|
|
||||||
} else {
|
|
||||||
gettimeofday(¤tReceiveTime, NULL);
|
|
||||||
|
|
||||||
// write time difference (in microseconds) between packet receipts to file
|
// write time difference (in microseconds) between packet receipts to file
|
||||||
double timeDiff = diffclock(previousReceiveTime, currentReceiveTime);
|
double timeDiff = diffclock(previousReceiveTime, currentReceiveTime);
|
||||||
logFile << timeDiff << std::endl;
|
logFile << timeDiff << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compute and report standard deviation for jitter calculation
|
||||||
|
if (firstSample) {
|
||||||
|
stdev.reset();
|
||||||
|
} else {
|
||||||
|
stdev.addValue(diffclock(previousReceiveTime, currentReceiveTime));
|
||||||
|
if (stdev.getSamples() > 500) {
|
||||||
|
printf("Avg: %4.2f, Stdev: %4.2f\n", stdev.getAverage(), stdev.getStDev());
|
||||||
|
stdev.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AudioRingBuffer *ringBuffer = sharedAudioData->ringBuffer;
|
AudioRingBuffer *ringBuffer = sharedAudioData->ringBuffer;
|
||||||
|
|
||||||
int16_t *copyToPointer;
|
int16_t *copyToPointer;
|
||||||
|
|
|
@ -14,6 +14,51 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "world.h"
|
#include "world.h"
|
||||||
#include "glm.hpp"
|
#include "glm.hpp"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Standard Deviation Object
|
||||||
|
//
|
||||||
|
|
||||||
|
const int MAX_STDEV_SAMPLES = 1000; // Don't add more than this number of samples.
|
||||||
|
|
||||||
|
StDev::StDev() {
|
||||||
|
data = new float[MAX_STDEV_SAMPLES];
|
||||||
|
sampleCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void StDev::reset() {
|
||||||
|
sampleCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void StDev::addValue(float v) {
|
||||||
|
data[sampleCount++] = v;
|
||||||
|
if (sampleCount == MAX_STDEV_SAMPLES) sampleCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float StDev::getAverage() {
|
||||||
|
float average = 0;
|
||||||
|
for (int i = 0; i < sampleCount; i++) {
|
||||||
|
average += data[i];
|
||||||
|
}
|
||||||
|
if (sampleCount > 0)
|
||||||
|
return average/(float)sampleCount;
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float StDev::getStDev() {
|
||||||
|
float average = getAverage();
|
||||||
|
float stdev = 0;
|
||||||
|
for (int i = 0; i < sampleCount; i++) {
|
||||||
|
stdev += powf(data[i] - average, 2);
|
||||||
|
}
|
||||||
|
if (sampleCount > 1)
|
||||||
|
return sqrt(stdev/(float)(sampleCount - 1.0));
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
float randFloat () {
|
float randFloat () {
|
||||||
return (rand()%10000)/10000.f;
|
return (rand()%10000)/10000.f;
|
||||||
|
@ -101,7 +146,7 @@ double diffclock(timeval clock1,timeval clock2)
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawtext(int x, int y, float scale, float rotate, float thick, int mono, char *string,
|
void drawtext(int x, int y, float scale, float rotate, float thick, int mono, char *string,
|
||||||
float r=1.0, float g=1.0, float b=1.0)
|
float r, float g, float b)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Draws text on screen as stroked so it can be resized
|
// Draws text on screen as stroked so it can be resized
|
||||||
|
@ -126,7 +171,7 @@ void drawtext(int x, int y, float scale, float rotate, float thick, int mono, ch
|
||||||
|
|
||||||
|
|
||||||
void drawvec3(int x, int y, float scale, float rotate, float thick, int mono, glm::vec3 vec,
|
void drawvec3(int x, int y, float scale, float rotate, float thick, int mono, glm::vec3 vec,
|
||||||
float r=1.0, float g=1.0, float b=1.0)
|
float r, float g, float b)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Draws text on screen as stroked so it can be resized
|
// Draws text on screen as stroked so it can be resized
|
||||||
|
|
|
@ -24,4 +24,17 @@ void drawvec3(int x, int y, float scale, float rotate, float thick, int mono, gl
|
||||||
float r=1.0, float g=1.0, float b=1.0);
|
float r=1.0, float g=1.0, float b=1.0);
|
||||||
double diffclock(timeval clock1,timeval clock2);
|
double diffclock(timeval clock1,timeval clock2);
|
||||||
|
|
||||||
|
class StDev {
|
||||||
|
public:
|
||||||
|
StDev();
|
||||||
|
void reset();
|
||||||
|
void addValue(float v);
|
||||||
|
float getAverage();
|
||||||
|
float getStDev();
|
||||||
|
int getSamples() {return sampleCount;};
|
||||||
|
private:
|
||||||
|
float * data;
|
||||||
|
int sampleCount = 0;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -903,8 +903,35 @@ int main(int argc, char** argv)
|
||||||
int test_recv = network_receive(UDP_socket, &from_addr, incoming_packet, delay);
|
int test_recv = network_receive(UDP_socket, &from_addr, incoming_packet, delay);
|
||||||
printf("Received %i bytes\n", test_recv);
|
printf("Received %i bytes\n", test_recv);
|
||||||
|
|
||||||
// Load textures
|
//
|
||||||
//Img.Load("/Users/philip/Downloads/galaxy1.tga");
|
printf("Testing math... standard deviation.\n");
|
||||||
|
StDev stdevtest;
|
||||||
|
stdevtest.reset();
|
||||||
|
stdevtest.addValue(1345);
|
||||||
|
stdevtest.addValue(1301);
|
||||||
|
stdevtest.addValue(1368);
|
||||||
|
stdevtest.addValue(1322);
|
||||||
|
stdevtest.addValue(1310);
|
||||||
|
stdevtest.addValue(1370);
|
||||||
|
stdevtest.addValue(1318);
|
||||||
|
stdevtest.addValue(1350);
|
||||||
|
stdevtest.addValue(1303);
|
||||||
|
stdevtest.addValue(1299);
|
||||||
|
|
||||||
|
if (stdevtest.getSamples() == 10)
|
||||||
|
printf("Samples=PASS ");
|
||||||
|
else
|
||||||
|
printf("Samples=FAIL ");
|
||||||
|
|
||||||
|
if (floor(stdevtest.getAverage()*100.0) == 132859.0)
|
||||||
|
printf("Average=PASS ");
|
||||||
|
else
|
||||||
|
printf("Average=FAIL, avg reported = %5.3f ", floor(stdevtest.getAverage()*100.0));
|
||||||
|
|
||||||
|
if (floor(stdevtest.getStDev()*100.0) == 2746.0)
|
||||||
|
printf("Stdev=PASS \n");
|
||||||
|
else
|
||||||
|
printf("Stdev=FAIL \n");
|
||||||
|
|
||||||
//
|
//
|
||||||
// Try to connect the serial port I/O
|
// Try to connect the serial port I/O
|
||||||
|
|
Loading…
Reference in a new issue