diff options
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 3 | ||||
-rw-r--r-- | orkaudio/filters/rtpmixer/RtpMixer.cpp | 13 | ||||
-rw-r--r-- | orkbasecxx/AudioCapture.cpp | 21 | ||||
-rw-r--r-- | orkbasecxx/AudioCapture.h | 4 | ||||
-rw-r--r-- | orkbasecxx/Filter.cpp | 8 | ||||
-rw-r--r-- | orkbasecxx/audiofile/LibSndFileFile.cpp | 3 | ||||
-rw-r--r-- | orkbasecxx/audiofile/MediaChunkFile.cpp | 2 | ||||
-rw-r--r-- | orkbasecxx/audiofile/PcmFile.cpp | 3 | ||||
-rw-r--r-- | orkbasecxx/filters/gsm/GsmFilters.cpp | 4 |
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);
}
|