diff options
author | Henri Herscher <henri@oreka.org> | 2006-04-08 23:41:43 +0000 |
---|---|---|
committer | Henri Herscher <henri@oreka.org> | 2006-04-08 23:41:43 +0000 |
commit | abdf9da6f72462aff76e87f38a1ab9cb31f3e396 (patch) | |
tree | 419344577d1c05202bb52dd3326c774ba7a5a2cd | |
parent | 598aeab247a5ceba95a4e5664b1f78c382377b5d (diff) |
Improved robustness of filters (sanity checks for each incoming audio chunk)
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@210 09dcff7a-b715-0410-9601-b79a96267cd0
-rw-r--r-- | orkaudio/filters/rtpmixer/RtpMixer.cpp | 28 | ||||
-rw-r--r-- | orkbasecxx/Filter.cpp | 45 |
2 files changed, 59 insertions, 14 deletions
diff --git a/orkaudio/filters/rtpmixer/RtpMixer.cpp b/orkaudio/filters/rtpmixer/RtpMixer.cpp index 6219b84..225af98 100644 --- a/orkaudio/filters/rtpmixer/RtpMixer.cpp +++ b/orkaudio/filters/rtpmixer/RtpMixer.cpp @@ -26,6 +26,7 @@ #include <queue> #include "Filter.h" #include "AudioCapture.h" +#include <log4cxx/logger.h> extern "C" { #include "g711.h" @@ -68,7 +69,7 @@ private: short* m_bufferEnd; short m_buffer[NUM_SAMPLES_CIRCULAR_BUFFER]; unsigned int m_shippedSamples; - + log4cxx::LoggerPtr m_log; }; RtpMixer::RtpMixer() @@ -78,7 +79,7 @@ RtpMixer::RtpMixer() m_bufferEnd = m_buffer + NUM_SAMPLES_CIRCULAR_BUFFER; m_writeTimestamp = 0; m_readTimestamp = 0; - //m_log = Logger::getLogger("rtpringbuffer"); + m_log = log4cxx::Logger::getLogger("rtpmixer"); m_shippedSamples = 0; } @@ -89,7 +90,20 @@ FilterRef RtpMixer::Instanciate() } void RtpMixer::AudioChunkIn(AudioChunkRef& chunk) -{ +{ + CStdString logMsg; + + if(chunk.get() == NULL) + { + LOG4CXX_DEBUG(m_log, "Null input chunk"); + return; + } + else if(chunk->GetNumSamples() == 0) + { + LOG4CXX_DEBUG(m_log, "Empty input chunk"); + return; + } + AudioChunkDetails* details = chunk->GetDetails(); if(details->m_encoding != PcmAudio) { @@ -144,9 +158,11 @@ void RtpMixer::AudioChunkIn(AudioChunkRef& chunk) { //LOG4CXX_DEBUG(m_log, m_capturePort + " packet too old, dropped"); } - CStdString debug; - debug.Format("free:%u used:%u wr:%x rd:%x wrts:%u rdts:%d", FreeSpace(), UsedSpace(), m_writePtr, m_readPtr, m_writeTimestamp, m_readTimestamp); - //LOG4CXX_DEBUG(m_log, debug); + if(m_log->isDebugEnabled()) + { + logMsg.Format("free:%u used:%u wr:%x rd:%x wrts:%u rdts:%d", FreeSpace(), UsedSpace(), m_writePtr, m_readPtr, m_writeTimestamp, m_readTimestamp); + LOG4CXX_DEBUG(m_log, logMsg); + } } void RtpMixer::AudioChunkOut(AudioChunkRef& chunk) diff --git a/orkbasecxx/Filter.cpp b/orkbasecxx/Filter.cpp index b1c0d4c..ae0c2c9 100644 --- a/orkbasecxx/Filter.cpp +++ b/orkbasecxx/Filter.cpp @@ -99,10 +99,25 @@ FilterRef AlawToPcmFilter::Instanciate() void AlawToPcmFilter::AudioChunkIn(AudioChunkRef& inputAudioChunk) { + m_outputAudioChunk.reset(); + + if(inputAudioChunk.get() == NULL) + { + return; + } + if(inputAudioChunk->GetNumSamples() == 0) + { + return; + } + AudioChunkDetails outputDetails = *inputAudioChunk->GetDetails(); + if(outputDetails.m_rtpPayloadType != GetInputRtpPayloadType()) + { + return; + } + // Create output buffer m_outputAudioChunk.reset(new AudioChunk()); - AudioChunkDetails outputDetails = *inputAudioChunk->GetDetails(); // pass through all details - outputDetails.m_rtpPayloadType = -1; // and override the ones that this filter changes + outputDetails.m_rtpPayloadType = -1; // Override details that this filter changes outputDetails.m_encoding = PcmAudio; int numSamples = inputAudioChunk->GetNumSamples(); @@ -114,7 +129,6 @@ void AlawToPcmFilter::AudioChunkIn(AudioChunkRef& inputAudioChunk) { outputBuffer[i] = (short)alaw2linear(inputBuffer[i]); } - } void AlawToPcmFilter::AudioChunkOut(AudioChunkRef& chunk) @@ -154,10 +168,26 @@ FilterRef UlawToPcmFilter::Instanciate() void UlawToPcmFilter::AudioChunkIn(AudioChunkRef& inputAudioChunk) { + m_outputAudioChunk.reset(); + + if(inputAudioChunk.get() == NULL) + { + return; + } + else if(inputAudioChunk->GetNumSamples() == 0) + { + return; + } + + AudioChunkDetails outputDetails = *inputAudioChunk->GetDetails(); + if(outputDetails.m_rtpPayloadType != GetInputRtpPayloadType()) + { + return; + } + // Create output buffer m_outputAudioChunk.reset(new AudioChunk()); - AudioChunkDetails outputDetails = *inputAudioChunk->GetDetails(); // pass through all details - outputDetails.m_rtpPayloadType = -1; // and override the ones that this filter changes + outputDetails.m_rtpPayloadType = -1; // Override details that this filter changes outputDetails.m_encoding = PcmAudio; int numSamples = inputAudioChunk->GetNumSamples(); @@ -168,8 +198,7 @@ void UlawToPcmFilter::AudioChunkIn(AudioChunkRef& inputAudioChunk) for(int i=0; i<numSamples; i++) { outputBuffer[i] = (short)ulaw2linear(inputBuffer[i]); - } - + } } void UlawToPcmFilter::AudioChunkOut(AudioChunkRef& chunk) @@ -195,4 +224,4 @@ CStdString UlawToPcmFilter::GetName() int UlawToPcmFilter::GetInputRtpPayloadType() { return 0x0; -}
\ No newline at end of file +} |