summaryrefslogtreecommitdiff
path: root/orkaudio/BatchProcessing.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'orkaudio/BatchProcessing.cpp')
-rw-r--r--orkaudio/BatchProcessing.cpp58
1 files changed, 52 insertions, 6 deletions
diff --git a/orkaudio/BatchProcessing.cpp b/orkaudio/BatchProcessing.cpp
index 1a01ac5..90f2b7b 100644
--- a/orkaudio/BatchProcessing.cpp
+++ b/orkaudio/BatchProcessing.cpp
@@ -17,6 +17,7 @@
#include "ace/OS_NS_unistd.h"
#include "audiofile/LibSndFileFile.h"
#include "Daemon.h"
+#include "Filter.h"
BatchProcessing BatchProcessing::m_batchProcessingSingleton;
@@ -42,6 +43,8 @@ void BatchProcessing::AddAudioTape(AudioTapeRef audioTapeRef)
void BatchProcessing::ThreadHandler(void *args)
{
+ CStdString debug;
+
BatchProcessing* pBatchProcessing = BatchProcessing::GetInstance();
int threadId = 0;
{
@@ -55,6 +58,9 @@ void BatchProcessing::ThreadHandler(void *args)
for(;stop == false;)
{
+ AudioFileRef fileRef;
+ AudioFileRef outFileRef;
+
try
{
AudioTapeRef audioTapeRef = pBatchProcessing->m_audioTapeQueue.pop();
@@ -70,12 +76,11 @@ void BatchProcessing::ThreadHandler(void *args)
CStdString threadIdString = IntToString(threadId);
LOG4CXX_INFO(LOG.batchProcessingLog, CStdString("Th") + threadIdString + " processing: " + audioTapeRef->GetIdentifier());
- AudioFileRef fileRef = audioTapeRef->GetAudioFileRef();
+ fileRef = audioTapeRef->GetAudioFileRef();
fileRef->MoveOrig();
fileRef->Open(AudioFile::READ);
AudioChunkRef chunkRef;
- AudioFileRef outFileRef;
switch(CONFIG.m_storageAudioFormat)
{
@@ -95,14 +100,54 @@ void BatchProcessing::ThreadHandler(void *args)
CStdString file = CONFIG.m_audioOutputPath + "/" + audioTapeRef->GetPath() + audioTapeRef->GetIdentifier();
outFileRef->Open(file, AudioFile::WRITE, false, fileRef->GetSampleRate());
+ FilterRef filter;
+ FilterRef decoder1;
+ FilterRef decoder2;
+
+ bool firstChunk = true;
+ bool voIpSession = false;
+
while(fileRef->ReadChunkMono(chunkRef))
{
+ AudioChunkDetails details = *chunkRef->GetDetails();
+ if(firstChunk && details.m_rtpPayloadType != -1)
+ {
+ firstChunk = false;
+ CStdString filterName("VoIpMixer");
+ filter = FilterRegistry::instance()->GetNewFilter(filterName);
+ decoder1 = FilterRegistry::instance()->GetNewFilter(details.m_rtpPayloadType);
+ decoder2 = FilterRegistry::instance()->GetNewFilter(details.m_rtpPayloadType);
+ if(decoder1.get() == NULL || decoder2.get() == NULL)
+ {
+ debug.Format("BatchProcessing - Could not find decoder for RTP payload type:%u", chunkRef->GetDetails()->m_rtpPayloadType);
+ throw(debug);
+ }
+ voIpSession = true;
+ }
+ if(voIpSession)
+ {
+ if(details.m_channel == 2)
+ {
+ decoder2->AudioChunkIn(chunkRef);
+ decoder2->AudioChunkOut(chunkRef);
+ }
+ else
+ {
+ decoder1->AudioChunkIn(chunkRef);
+ decoder1->AudioChunkOut(chunkRef);
+ }
+
+ filter->AudioChunkIn(chunkRef);
+ filter->AudioChunkOut(chunkRef);
+ }
outFileRef->WriteChunk(chunkRef);
}
+ fileRef->Close();
+ outFileRef->Close();
+
if(CONFIG.m_deleteNativeFile)
{
- fileRef->Close();
fileRef->Delete();
CStdString threadIdString = IntToString(threadId);
LOG4CXX_INFO(LOG.batchProcessingLog, CStdString("Th") + threadIdString + " deleting native: " + audioTapeRef->GetIdentifier());
@@ -113,9 +158,10 @@ void BatchProcessing::ThreadHandler(void *args)
{
LOG4CXX_ERROR(LOG.batchProcessingLog, CStdString("BatchProcessing: ") + e);
}
- catch(...)
- {
- }
+ //catch(...)
+ //{
+ // LOG4CXX_ERROR(LOG.batchProcessingLog, CStdString("BatchProcessing: unknown exception"));
+ //}
}
LOG4CXX_INFO(LOG.batchProcessingLog, CStdString("Exiting thread #" + threadIdString));
}