diff options
author | Henri Herscher <henri@oreka.org> | 2006-01-20 22:38:18 +0000 |
---|---|---|
committer | Henri Herscher <henri@oreka.org> | 2006-01-20 22:38:18 +0000 |
commit | e07f34274b8912f773993ed96624242115440a3b (patch) | |
tree | 6b2f35398ceb7ff5c6a5afc9991f9a3670cb3a27 /orkaudio/AudioTape.cpp | |
parent | 4ab4f3d3b2f0c3c51922eaeea49df162a9c892cd (diff) |
VoIP mixing and decoding does now happen in the batch processing thread instead of immediately. Additionally, the system now supports filter plugins such as codecs.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@120 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/AudioTape.cpp')
-rw-r--r-- | orkaudio/AudioTape.cpp | 55 |
1 files changed, 36 insertions, 19 deletions
diff --git a/orkaudio/AudioTape.cpp b/orkaudio/AudioTape.cpp index fd01b2c..c7ea945 100644 --- a/orkaudio/AudioTape.cpp +++ b/orkaudio/AudioTape.cpp @@ -16,9 +16,10 @@ #include "ace/OS_NS_time.h" #include "Utils.h" #include "ThreadSafeQueue.h" -#include "audiofile/PcmFile.h" #include "LogManager.h" +#include "audiofile/PcmFile.h" #include "audiofile/LibSndFileFile.h" +#include "audiofile/MediaChunkFile.h" #include "messages/TapeMsg.h" AudioTapeDescription::AudioTapeDescription() @@ -69,6 +70,7 @@ AudioTape::AudioTape(CStdString &portId) m_duration = 0; m_direction = CaptureEvent::DirUnkn; m_shouldStop = false; + m_readyForBatchProcessing = false; GenerateFilePathAndIdentifier(); } @@ -77,6 +79,7 @@ AudioTape::AudioTape(CStdString &portId) void AudioTape::AddAudioChunk(AudioChunkRef chunkRef, bool remote) { // Add the chunk to the local queue + if(m_state == StateCreated || m_state == StateActive) { MutexSentinel sentinel(m_mutex); if(remote) @@ -119,26 +122,30 @@ void AudioTape::Write() { m_state = StateActive; - switch(chunkRef->m_encoding) + switch(chunkRef->GetEncoding()) { - case AudioChunk::PcmAudio: - m_audioFileRef.reset(new PcmFile); - break; - case AudioChunk::UlawAudio: - m_audioFileRef.reset(new LibSndFileFile(SF_FORMAT_ULAW | SF_FORMAT_WAV)); - break; - case AudioChunk::AlawAudio: - m_audioFileRef.reset(new LibSndFileFile(SF_FORMAT_ALAW | SF_FORMAT_WAV)); - break; + case PcmAudio: + //m_audioFileRef.reset(new PcmFile); + //break; + case UlawAudio: + //m_audioFileRef.reset(new LibSndFileFile(SF_FORMAT_ULAW | SF_FORMAT_WAV)); + //break; + case AlawAudio: + //m_audioFileRef.reset(new LibSndFileFile(SF_FORMAT_ALAW | SF_FORMAT_WAV)); + //break; default: - LOG4CXX_ERROR(LOG.portLog, "#" + m_portId + ": received unsupported audio encoding from capture plugin:" + FileFormatToString(chunkRef->m_encoding)); - m_state = StateError; + //LOG4CXX_ERROR(LOG.portLog, "#" + m_portId + ": received unsupported audio encoding from capture plugin:" + FileFormatToString(chunkRef->GetEncoding())); + //m_state = StateError; + + // ########### + // All other encodings: output as a media chunk file + m_audioFileRef.reset(new MediaChunkFile()); } if (m_state == StateActive) { // A file format was successfully added to the tape, open it CStdString file = CONFIG.m_audioOutputPath + "/" + m_filePath + m_fileIdentifier; - m_audioFileRef->Open(file, AudioFile::WRITE, false, chunkRef->m_sampleRate); + m_audioFileRef->Open(file, AudioFile::WRITE, false, chunkRef->GetSampleRate()); // determine what final extension the file will have after optional compression if(CONFIG.m_storageAudioFormat == FfNative) @@ -172,18 +179,17 @@ void AudioTape::Write() } } - if (m_shouldStop) + if ( (m_shouldStop && m_state != StateStopped) || m_state == StateError) { m_state = StateStopped; - } - - if (m_state == StateStopped || m_state == StateError) - { if(m_audioFileRef.get()) { m_audioFileRef->Close(); + m_readyForBatchProcessing = true; } } + + } void AudioTape::SetShouldStop() @@ -317,6 +323,17 @@ AudioFileRef AudioTape::GetAudioFileRef() return m_audioFileRef; } +bool AudioTape::IsReadyForBatchProcessing() +{ + if(m_readyForBatchProcessing) + { + m_readyForBatchProcessing = false; // toggle to ensure not processed twice + return true; + } + return false; +} + + //======================================== // File format related methods |