summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins/voip
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/voip
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/voip')
-rw-r--r--orkaudio/audiocaptureplugins/voip/Rtp.cpp13
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp18
2 files changed, 27 insertions, 4 deletions
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;
}
}