From abdf9da6f72462aff76e87f38a1ab9cb31f3e396 Mon Sep 17 00:00:00 2001 From: Henri Herscher Date: Sat, 8 Apr 2006 23:41:43 +0000 Subject: 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 --- orkbasecxx/Filter.cpp | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) (limited to 'orkbasecxx/Filter.cpp') 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