summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2006-01-20 22:38:18 +0000
committerHenri Herscher <henri@oreka.org>2006-01-20 22:38:18 +0000
commite07f34274b8912f773993ed96624242115440a3b (patch)
tree6b2f35398ceb7ff5c6a5afc9991f9a3670cb3a27 /orkaudio/audiocaptureplugins
parent4ab4f3d3b2f0c3c51922eaeea49df162a9c892cd (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/audiocaptureplugins')
-rw-r--r--orkaudio/audiocaptureplugins/generator/Generator.cpp4
-rw-r--r--orkaudio/audiocaptureplugins/sounddevice/SoundDevice.cpp18
-rw-r--r--orkaudio/audiocaptureplugins/voip/Rtp.cpp13
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp18
4 files changed, 45 insertions, 8 deletions
diff --git a/orkaudio/audiocaptureplugins/generator/Generator.cpp b/orkaudio/audiocaptureplugins/generator/Generator.cpp
index 8deb07a..d97d0e4 100644
--- a/orkaudio/audiocaptureplugins/generator/Generator.cpp
+++ b/orkaudio/audiocaptureplugins/generator/Generator.cpp
@@ -126,7 +126,9 @@ void Run()
// send audio buffer
AudioChunkRef chunkRef(new AudioChunk);
int sampleOffset = (elapsed % numChunks)*NUM_SAMPLES_PER_CHUNK;
- chunkRef->SetBuffer(audioBuffer+sampleOffset, sizeof(short)*NUM_SAMPLES_PER_CHUNK, AudioChunk::PcmAudio);
+ AudioChunkDetails details;
+ details.m_encoding = PcmAudio;
+ chunkRef->SetBuffer(audioBuffer+sampleOffset, sizeof(short)*NUM_SAMPLES_PER_CHUNK, details);
g_audioChunkCallBack(chunkRef, portName);
}
diff --git a/orkaudio/audiocaptureplugins/sounddevice/SoundDevice.cpp b/orkaudio/audiocaptureplugins/sounddevice/SoundDevice.cpp
index 5326152..db791ad 100644
--- a/orkaudio/audiocaptureplugins/sounddevice/SoundDevice.cpp
+++ b/orkaudio/audiocaptureplugins/sounddevice/SoundDevice.cpp
@@ -65,12 +65,20 @@ int portAudioCallBack(void *inputBuffer, void *outputBuffer, unsigned long frame
leftBuffer[sampleId] = inputSamples[2*sampleId+1];
}
AudioChunkRef chunkRef(new AudioChunk);
- chunkRef->SetBuffer(rightBuffer, sizeof(short)*framesPerBuffer, AudioChunk::PcmAudio, 0, 0, DLLCONFIG.m_sampleRate);
+ AudioChunkDetails rightDetails;
+ rightDetails.m_encoding = PcmAudio;
+ rightDetails.m_sampleRate = DLLCONFIG.m_sampleRate;
+ rightDetails.m_channel = 1;
+ chunkRef->SetBuffer(rightBuffer, sizeof(short)*framesPerBuffer, rightDetails);
portName.Format("port%d-%d", device->deviceID, 1);
g_audioChunkCallBack(chunkRef, portName);
chunkRef.reset(new AudioChunk);
- chunkRef->SetBuffer(leftBuffer, sizeof(short)*framesPerBuffer, AudioChunk::PcmAudio, 0, 0, DLLCONFIG.m_sampleRate);
+ AudioChunkDetails leftDetails;
+ leftDetails.m_encoding = PcmAudio;
+ leftDetails.m_sampleRate = DLLCONFIG.m_sampleRate;
+ leftDetails.m_channel = 1;
+ chunkRef->SetBuffer(leftBuffer, sizeof(short)*framesPerBuffer, leftDetails);
portName.Format("port%d-%d", device->deviceID, 2);
g_audioChunkCallBack(chunkRef, portName);
@@ -81,7 +89,11 @@ int portAudioCallBack(void *inputBuffer, void *outputBuffer, unsigned long frame
{
// mono
AudioChunkRef chunkRef(new AudioChunk);
- chunkRef->SetBuffer(inputSamples, sizeof(short)*framesPerBuffer, AudioChunk::PcmAudio, 0, 0, DLLCONFIG.m_sampleRate);
+ AudioChunkDetails details;
+ details.m_encoding = PcmAudio;
+ details.m_sampleRate = DLLCONFIG.m_sampleRate;
+ details.m_channel = 1;
+ chunkRef->SetBuffer(inputSamples, sizeof(short)*framesPerBuffer, details);
portName.Format("port%d", device->deviceID);
g_audioChunkCallBack(chunkRef, portName);
}
diff --git a/orkaudio/audiocaptureplugins/voip/Rtp.cpp b/orkaudio/audiocaptureplugins/voip/Rtp.cpp
index 23c236e..49d0815 100644
--- a/orkaudio/audiocaptureplugins/voip/Rtp.cpp
+++ b/orkaudio/audiocaptureplugins/voip/Rtp.cpp
@@ -36,6 +36,7 @@ void RtpPacketInfo::ToString(CStdString& string)
string.Format("%s,%d %s,%d seq:%u ts:%u len:%d type:%x", sourceIp, m_sourcePort, destIp, m_destPort, m_seqNum, m_timestamp, m_payloadSize, m_payloadType);
}
+//==============================================================================
RtpRingBuffer::RtpRingBuffer()
{
@@ -199,7 +200,9 @@ void RtpRingBuffer::CreateShipment(size_t silenceSize)
size_t shortSize = stopPtr-m_readPtr;
size_t byteSize = shortSize*2;
AudioChunkRef chunk(new AudioChunk());
- chunk->SetBuffer((void*)m_readPtr, byteSize, AudioChunk::PcmAudio);
+ AudioChunkDetails details;
+ details.m_encoding = PcmAudio;
+ chunk->SetBuffer((void*)m_readPtr, byteSize, details);
g_audioChunkCallBack(chunk, m_capturePort);
m_shippedSamples += shortSize;
m_readPtr = CircularPointerAddOffset(m_readPtr ,shortSize);
@@ -216,7 +219,9 @@ void RtpRingBuffer::CreateShipment(size_t silenceSize)
shortSize = wrappedStopPtr - m_buffer;
byteSize = shortSize*2;
chunk.reset(new AudioChunk());
- chunk->SetBuffer((void*)m_buffer, byteSize, AudioChunk::PcmAudio);
+ AudioChunkDetails details;
+ details.m_encoding = PcmAudio;
+ chunk->SetBuffer((void*)m_buffer, byteSize, details);
g_audioChunkCallBack(chunk, m_capturePort);
m_shippedSamples += shortSize;
m_readPtr = CircularPointerAddOffset(m_readPtr ,shortSize);
@@ -233,7 +238,9 @@ void RtpRingBuffer::CreateShipment(size_t silenceSize)
if (silenceBuffer)
{
AudioChunkRef chunk(new AudioChunk());
- chunk->SetBuffer((void*)silenceBuffer, byteSize, AudioChunk::PcmAudio);
+ AudioChunkDetails details;
+ details.m_encoding = PcmAudio;
+ chunk->SetBuffer((void*)silenceBuffer, byteSize, details);
g_audioChunkCallBack(chunk, m_capturePort);
m_shippedSamples += silenceSize;
m_readPtr = CircularPointerAddOffset(m_readPtr ,silenceSize);
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
index 9065eb4..2cac30c 100644
--- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
+++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
@@ -237,6 +237,7 @@ void RtpSession::ReportMetadata()
void RtpSession::AddRtpPacket(RtpPacketInfoRef& rtpPacket)
{
CStdString logMsg;
+ unsigned char channel = 0;
if(m_lastRtpPacket.get() == NULL)
{
@@ -262,6 +263,7 @@ void RtpSession::AddRtpPacket(RtpPacketInfoRef& rtpPacket)
{
// First RTP packet for side 1
m_lastRtpPacketSide1 = rtpPacket;
+ channel = 1;
if(m_log->isInfoEnabled())
{
rtpPacket->ToString(logMsg);
@@ -274,6 +276,7 @@ void RtpSession::AddRtpPacket(RtpPacketInfoRef& rtpPacket)
if(rtpPacket->m_sourceIp.s_addr == m_lastRtpPacketSide1->m_sourceIp.s_addr)
{
m_lastRtpPacketSide1 = rtpPacket;
+ channel = 1;
}
else
{
@@ -288,6 +291,7 @@ void RtpSession::AddRtpPacket(RtpPacketInfoRef& rtpPacket)
}
}
m_lastRtpPacketSide2 = rtpPacket;
+ channel = 2;
}
}
@@ -333,7 +337,19 @@ void RtpSession::AddRtpPacket(RtpPacketInfoRef& rtpPacket)
if(m_started)
{
- m_rtpRingBuffer.AddRtpPacket(rtpPacket);
+ AudioChunkDetails details;
+ details.m_arrivalTimestamp = rtpPacket->m_arrivalTimestamp;
+ details.m_numBytes = rtpPacket->m_payloadSize;
+ details.m_timestamp = rtpPacket->m_timestamp;
+ details.m_rtpPayloadType = rtpPacket->m_payloadType;
+ details.m_sequenceNumber = rtpPacket->m_seqNum;
+ details.m_channel = channel;
+ details.m_encoding = AlawAudio;
+ AudioChunkRef chunk(new AudioChunk());
+ chunk->SetBuffer(rtpPacket->m_payload, rtpPacket->m_payloadSize, details);
+ g_audioChunkCallBack(chunk, m_capturePort); // ##### after
+ //m_rtpRingBuffer.AddRtpPacket(rtpPacket); // ##### before
+
m_lastUpdated = rtpPacket->m_arrivalTimestamp;
}
}