From fb31765024fbcf927e8e2e03f33ece531813d7a9 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 13 Feb 2013 10:47:06 -0800 Subject: [PATCH] AudioRingBuffer is a shared class (between mixer and interface) --- mixer/src/AudioRingBuffer.cpp | 51 ------------------- mixer/src/AudioRingBuffer.h | 31 ----------- mixer/src/main.cpp | 8 +-- {interface => shared}/src/AudioRingBuffer.cpp | 0 {interface => shared}/src/AudioRingBuffer.h | 0 5 files changed, 5 insertions(+), 85 deletions(-) delete mode 100644 mixer/src/AudioRingBuffer.cpp delete mode 100644 mixer/src/AudioRingBuffer.h rename {interface => shared}/src/AudioRingBuffer.cpp (100%) rename {interface => shared}/src/AudioRingBuffer.h (100%) diff --git a/mixer/src/AudioRingBuffer.cpp b/mixer/src/AudioRingBuffer.cpp deleted file mode 100644 index 79d805969f..0000000000 --- a/mixer/src/AudioRingBuffer.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// -// AudioRingBuffer.cpp -// interface -// -// Created by Stephen Birarda on 2/1/13. -// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. -// - -#include "AudioRingBuffer.h" - -AudioRingBuffer::AudioRingBuffer(short ringBufferSamples) { - ringBufferLengthSamples = ringBufferSamples; - - started = false; - transmitted = false; - - endOfLastWrite = NULL; - - buffer = new int16_t[ringBufferLengthSamples]; - nextOutput = buffer; -}; - -AudioRingBuffer::~AudioRingBuffer() { - delete[] buffer; -}; - -short AudioRingBuffer::diffLastWriteNextOutput() -{ - if (endOfLastWrite == NULL) { - return 0; - } else { - short sampleDifference = endOfLastWrite - nextOutput; - - if (sampleDifference < 0) { - sampleDifference += ringBufferLengthSamples; - } - - return sampleDifference; - } -} - -short AudioRingBuffer::bufferOverlap(int16_t *pointer, short addedDistance) -{ - short samplesLeft = (buffer + ringBufferLengthSamples) - pointer; - - if (samplesLeft < addedDistance) { - return addedDistance - samplesLeft; - } else { - return 0; - } -} diff --git a/mixer/src/AudioRingBuffer.h b/mixer/src/AudioRingBuffer.h deleted file mode 100644 index 2454dbe916..0000000000 --- a/mixer/src/AudioRingBuffer.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// AudioRingBuffer.h -// interface -// -// Created by Stephen Birarda on 2/1/13. -// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. -// - -#ifndef __interface__AudioRingBuffer__ -#define __interface__AudioRingBuffer__ - -#include -#include - -class AudioRingBuffer { - public: - int16_t *nextOutput; - int16_t *endOfLastWrite; - int16_t *buffer; - short ringBufferLengthSamples; - bool started; - bool transmitted; - - short diffLastWriteNextOutput(); - short bufferOverlap(int16_t *pointer, short addedDistance); - - AudioRingBuffer(short ringBufferSamples); - ~AudioRingBuffer(); -}; - -#endif /* defined(__interface__AudioRingBuffer__) */ diff --git a/mixer/src/main.cpp b/mixer/src/main.cpp index 98b3313925..7d28742d21 100644 --- a/mixer/src/main.cpp +++ b/mixer/src/main.cpp @@ -44,6 +44,7 @@ struct AgentList { unsigned short port; bool active; timeval time; + bool bufferTransmitted; } agents[MAX_AGENTS]; int numAgents = 0; @@ -75,6 +76,7 @@ int addAgent(sockaddr_in agentAddress, void *audioData) { if ((i == numAgents) || (agents[i].active == false)) { is_new = 1; + agents[i].bufferTransmitted = false; } agents[i].address = inet_ntoa(agentAddress.sin_addr); @@ -143,7 +145,7 @@ void *sendBufferThread(void *args) sourceBuffers[b]->started = false; } else { sourceBuffers[b]->started = true; - sourceBuffers[b]->transmitted = true; + agents[b].bufferTransmitted = true; for (int s = 0; s < BUFFER_LENGTH_SAMPLES; s++) { masterMix[s] += sourceBuffers[b]->nextOutput[s]; @@ -162,11 +164,11 @@ void *sendBufferThread(void *args) if (diffclock(&agents[a].time, &sendTime) <= LOGOFF_CHECK_INTERVAL) { int16_t *previousOutput = NULL; - if (sourceBuffers[a]->transmitted) { + if (agents[a].bufferTransmitted) { previousOutput = (sourceBuffers[a]->nextOutput == sourceBuffers[a]->buffer) ? sourceBuffers[a]->buffer + RING_BUFFER_SAMPLES - BUFFER_LENGTH_SAMPLES : sourceBuffers[a]->nextOutput - BUFFER_LENGTH_SAMPLES; - sourceBuffers[a]->transmitted = false; + agents[a].bufferTransmitted = false; } for(int as = 0; as < BUFFER_LENGTH_SAMPLES; as++) { diff --git a/interface/src/AudioRingBuffer.cpp b/shared/src/AudioRingBuffer.cpp similarity index 100% rename from interface/src/AudioRingBuffer.cpp rename to shared/src/AudioRingBuffer.cpp diff --git a/interface/src/AudioRingBuffer.h b/shared/src/AudioRingBuffer.h similarity index 100% rename from interface/src/AudioRingBuffer.h rename to shared/src/AudioRingBuffer.h