summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp3
-rw-r--r--orkaudio/filters/rtpmixer/RtpMixer.cpp13
-rw-r--r--orkbasecxx/AudioCapture.cpp21
-rw-r--r--orkbasecxx/AudioCapture.h4
-rw-r--r--orkbasecxx/Filter.cpp8
-rw-r--r--orkbasecxx/audiofile/LibSndFileFile.cpp3
-rw-r--r--orkbasecxx/audiofile/MediaChunkFile.cpp2
-rw-r--r--orkbasecxx/audiofile/PcmFile.cpp3
-rw-r--r--orkbasecxx/filters/gsm/GsmFilters.cpp4
9 files changed, 34 insertions, 27 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
index 3151d0c..ba7ecf1 100644
--- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
+++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
@@ -463,8 +463,9 @@ bool RtpSession::AddRtpPacket(RtpPacketInfoRef& rtpPacket)
details.m_sequenceNumber = rtpPacket->m_seqNum;
details.m_channel = channel;
details.m_encoding = AlawAudio;
+ details.m_numBytes = rtpPacket->m_payloadSize;
AudioChunkRef chunk(new AudioChunk());
- chunk->SetBuffer(rtpPacket->m_payload, rtpPacket->m_payloadSize, details);
+ chunk->SetBuffer(rtpPacket->m_payload, details);
g_audioChunkCallBack(chunk, m_capturePort);
m_lastUpdated = rtpPacket->m_arrivalTimestamp;
diff --git a/orkaudio/filters/rtpmixer/RtpMixer.cpp b/orkaudio/filters/rtpmixer/RtpMixer.cpp
index d7fc6de..f651673 100644
--- a/orkaudio/filters/rtpmixer/RtpMixer.cpp
+++ b/orkaudio/filters/rtpmixer/RtpMixer.cpp
@@ -401,9 +401,10 @@ void RtpMixer::CreateShipment(size_t silenceSize, bool force)
AudioChunkRef chunk(new AudioChunk());
AudioChunkDetails details;
details.m_encoding = PcmAudio;
+ details.m_numBytes = byteSize;
if(CheckChunkDetails(details))
{
- chunk->SetBuffer((void*)m_readPtr, byteSize, details);
+ chunk->SetBuffer((void*)m_readPtr, details);
m_outputQueue.push(chunk);
}
m_shippedSamples += shortSize;
@@ -423,9 +424,10 @@ void RtpMixer::CreateShipment(size_t silenceSize, bool force)
chunk.reset(new AudioChunk());
AudioChunkDetails details;
details.m_encoding = PcmAudio;
+ details.m_numBytes = byteSize;
if(CheckChunkDetails(details))
{
- chunk->SetBuffer((void*)m_buffer, byteSize, details);
+ chunk->SetBuffer((void*)m_buffer, details);
m_outputQueue.push(chunk);
}
m_shippedSamples += shortSize;
@@ -442,9 +444,10 @@ void RtpMixer::CreateShipment(size_t silenceSize, bool force)
AudioChunkRef chunk(new AudioChunk());
AudioChunkDetails details;
details.m_encoding = PcmAudio;
+ details.m_numBytes = byteSize;
if(CheckChunkDetails(details))
{
- chunk->CreateBuffer(byteSize, details);
+ chunk->CreateBuffer(details);
m_outputQueue.push(chunk);
}
m_shippedSamples += silenceSize;
@@ -479,6 +482,10 @@ bool RtpMixer::CheckChunkDetails(AudioChunkDetails& details)
LOG4CXX_ERROR(m_log, "RtpMixer: output chunk too big");
return false;
}
+ if(details.m_numBytes == 0)
+ {
+ return false;
+ }
return true;
}
diff --git a/orkbasecxx/AudioCapture.cpp b/orkbasecxx/AudioCapture.cpp
index 87461ac..7a46739 100644
--- a/orkbasecxx/AudioCapture.cpp
+++ b/orkbasecxx/AudioCapture.cpp
@@ -32,32 +32,30 @@ AudioChunk::~AudioChunk()
}
}
-void* AudioChunk::CreateBuffer(size_t numBytes, AudioChunkDetails& details)
+void* AudioChunk::CreateBuffer(AudioChunkDetails& details)
{
if(m_pBuffer)
{
free(m_pBuffer);
m_pBuffer = NULL;
- m_details.m_numBytes = 0;
}
- if(numBytes)
+ if(details.m_numBytes)
{
- m_pBuffer = calloc(numBytes, 1);
+ m_pBuffer = calloc(details.m_numBytes, 1);
}
if (!m_pBuffer)
{
- CStdString numBytesString = IntToString(numBytes);
+ CStdString numBytesString = IntToString(details.m_numBytes);
throw("AudioChunk::AudioChunk: could not calloc a buffer of size:" + numBytesString);
}
else
{
m_details = details;
- m_details.m_numBytes = numBytes;
}
return m_pBuffer;
}
-void AudioChunk::SetBuffer(void* pBuffer, size_t numBytes, AudioChunkDetails& details)
+void AudioChunk::SetBuffer(void* pBuffer, AudioChunkDetails& details)
{
if(m_pBuffer)
{
@@ -65,19 +63,18 @@ void AudioChunk::SetBuffer(void* pBuffer, size_t numBytes, AudioChunkDetails& de
m_pBuffer = NULL;
m_details.m_numBytes = 0;
}
- if(numBytes && pBuffer)
+ if(details.m_numBytes && pBuffer)
{
- m_pBuffer = malloc(numBytes);
+ m_pBuffer = malloc(details.m_numBytes);
if (!m_pBuffer)
{
- CStdString numBytesString = IntToString(numBytes);
+ CStdString numBytesString = IntToString(details.m_numBytes);
throw("AudioChunk::AudioChunk: could not malloc a buffer of size:" + numBytesString);
}
else
{
- memcpy(m_pBuffer, pBuffer, numBytes);
+ memcpy(m_pBuffer, pBuffer, details.m_numBytes);
m_details = details;
- m_details.m_numBytes = numBytes;
}
}
}
diff --git a/orkbasecxx/AudioCapture.h b/orkbasecxx/AudioCapture.h
index 9690ba3..4ebc639 100644
--- a/orkbasecxx/AudioCapture.h
+++ b/orkbasecxx/AudioCapture.h
@@ -64,10 +64,10 @@ public:
~AudioChunk();
/** Allocate a new empty buffer (zeroed) */
- void* CreateBuffer(size_t numBytes, AudioChunkDetails& details);
+ void* CreateBuffer(AudioChunkDetails& details);
/** Copy external buffer to internal buffer. Create internal buffer if necessary */
- void SetBuffer(void* pBuffer, size_t numBytes, AudioChunkDetails& details);
+ void SetBuffer(void* pBuffer, AudioChunkDetails& details);
/** Computes the Root-Mean-Square power value of the buffer */
double ComputeRms();
diff --git a/orkbasecxx/Filter.cpp b/orkbasecxx/Filter.cpp
index f154148..df25c1d 100644
--- a/orkbasecxx/Filter.cpp
+++ b/orkbasecxx/Filter.cpp
@@ -119,9 +119,9 @@ void AlawToPcmFilter::AudioChunkIn(AudioChunkRef& inputAudioChunk)
m_outputAudioChunk.reset(new AudioChunk());
outputDetails.m_rtpPayloadType = -1; // Override details that this filter changes
outputDetails.m_encoding = PcmAudio;
-
int numSamples = inputAudioChunk->GetNumSamples();
- short* outputBuffer = (short*)m_outputAudioChunk->CreateBuffer(numSamples*2, outputDetails);
+ outputDetails.m_numBytes = numSamples*2;
+ short* outputBuffer = (short*)m_outputAudioChunk->CreateBuffer(outputDetails);
char* inputBuffer = (char*)inputAudioChunk->m_pBuffer;
@@ -198,9 +198,9 @@ void UlawToPcmFilter::AudioChunkIn(AudioChunkRef& inputAudioChunk)
m_outputAudioChunk.reset(new AudioChunk());
outputDetails.m_rtpPayloadType = -1; // Override details that this filter changes
outputDetails.m_encoding = PcmAudio;
-
int numSamples = inputAudioChunk->GetNumSamples();
- short* outputBuffer = (short*)m_outputAudioChunk->CreateBuffer(numSamples*2, outputDetails);
+ outputDetails.m_numBytes = numSamples*2;
+ short* outputBuffer = (short*)m_outputAudioChunk->CreateBuffer(outputDetails);
char* inputBuffer = (char*)inputAudioChunk->m_pBuffer;
diff --git a/orkbasecxx/audiofile/LibSndFileFile.cpp b/orkbasecxx/audiofile/LibSndFileFile.cpp
index 0589466..0eba13a 100644
--- a/orkbasecxx/audiofile/LibSndFileFile.cpp
+++ b/orkbasecxx/audiofile/LibSndFileFile.cpp
@@ -113,7 +113,8 @@ int LibSndFileFile::ReadChunkMono(AudioChunkRef& chunk)
numRead = sf_read_short(m_pFile, temp, 8000);
AudioChunkDetails details;
details.m_encoding = PcmAudio;
- chunk->SetBuffer(temp, sizeof(short)*numRead, details);
+ details.m_numBytes = sizeof(short)*numRead;
+ chunk->SetBuffer(temp, details);
}
else
{
diff --git a/orkbasecxx/audiofile/MediaChunkFile.cpp b/orkbasecxx/audiofile/MediaChunkFile.cpp
index d750399..e8fc437 100644
--- a/orkbasecxx/audiofile/MediaChunkFile.cpp
+++ b/orkbasecxx/audiofile/MediaChunkFile.cpp
@@ -136,7 +136,7 @@ int MediaChunkFile::ReadChunkMono(AudioChunkRef& chunkRef)
{
throw(CStdString("Incomplete chunk in file:")+ m_filename);
}
- chunkRef->SetBuffer(temp, details.m_numBytes, details);
+ chunkRef->SetBuffer(temp, details);
}
}
}
diff --git a/orkbasecxx/audiofile/PcmFile.cpp b/orkbasecxx/audiofile/PcmFile.cpp
index 9d1a6d0..706cb18 100644
--- a/orkbasecxx/audiofile/PcmFile.cpp
+++ b/orkbasecxx/audiofile/PcmFile.cpp
@@ -73,7 +73,8 @@ int PcmFile::ReadChunkMono(AudioChunkRef& chunkRef)
numRead = ACE_OS::fread(temp, sizeof(short), PCM_FILE_DEFAULT_CHUNK_NUM_SAMPLES, m_stream);
AudioChunkDetails details;
details.m_encoding = PcmAudio;
- chunkRef->SetBuffer(temp, sizeof(short)*numRead, details);
+ details.m_numBytes = sizeof(short)*numRead;
+ chunkRef->SetBuffer(temp, details);
}
else
{
diff --git a/orkbasecxx/filters/gsm/GsmFilters.cpp b/orkbasecxx/filters/gsm/GsmFilters.cpp
index 90ab6d5..af32571 100644
--- a/orkbasecxx/filters/gsm/GsmFilters.cpp
+++ b/orkbasecxx/filters/gsm/GsmFilters.cpp
@@ -59,9 +59,9 @@ void GsmToPcmFilter::AudioChunkIn(AudioChunkRef& inputAudioChunk)
m_outputAudioChunk.reset(new AudioChunk());
outputDetails.m_rtpPayloadType = -1; // Override details that this filter changes
outputDetails.m_encoding = PcmAudio;
-
int numSamples = 160; // standard GSM frame is 33 bytes for 160 PCM samples (20 ms)
- short* outputBuffer = (short*)m_outputAudioChunk->CreateBuffer(numSamples*2, outputDetails);
+ outputDetails.m_numBytes = numSamples*2;
+ short* outputBuffer = (short*)m_outputAudioChunk->CreateBuffer(outputDetails);
unsigned char* inputBuffer = (unsigned char*)inputAudioChunk->m_pBuffer;
gsm_decode(gsmState, inputBuffer, outputBuffer);
}