summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2008-07-09 14:49:53 +0000
committerHenri Herscher <henri@oreka.org>2008-07-09 14:49:53 +0000
commit34724e7903c9b9ee2c1ce90addfb571d77049855 (patch)
tree6e473b9cca9bdbd6c1749615692d822a3e7082d0
parente96e0a5242cd0434bb1ca056a7a68685d237646f (diff)
Fixed RTP mixer problem where recordings could go garbled in certain cases.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@551 09dcff7a-b715-0410-9601-b79a96267cd0
-rw-r--r--orkaudio/filters/rtpmixer/RtpMixer.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/orkaudio/filters/rtpmixer/RtpMixer.cpp b/orkaudio/filters/rtpmixer/RtpMixer.cpp
index c20c5d5..b254fd7 100644
--- a/orkaudio/filters/rtpmixer/RtpMixer.cpp
+++ b/orkaudio/filters/rtpmixer/RtpMixer.cpp
@@ -97,6 +97,7 @@ private:
bool m_invalidChannelReported;
size_t m_numProcessedSamples;
bool m_error;
+ bool m_oneS1PacketState;
// Statistics related variables
AudioChunkRef m_lastChunkS1;
@@ -161,6 +162,7 @@ RtpMixer::RtpMixer()
m_seqNumDiscontinuitiesS1 = 0;
m_seqNumDiscontinuitiesS2 = 0;
m_numChannels = 0;
+ m_oneS1PacketState = false;
m_rtpMixerChannels.clear();
}
@@ -372,6 +374,19 @@ void RtpMixer::AudioChunkIn(AudioChunkRef& chunk)
DoStats(details, m_lastChunkS2->GetDetails(), m_seqNumMissesS2, m_seqMaxGapS2,
m_seqNumOutOfOrderS2, m_seqNumDiscontinuitiesS2);
}
+ if(m_oneS1PacketState)
+ {
+ m_timestampCorrectiveDelta = (double)details->m_timestamp - (double)m_writeTimestamp;
+ m_oneS1PacketState = false;
+ }
+ else
+ {
+ if(!m_timestampCorrectiveDelta && (m_writeTimestamp != 0))
+ {
+ m_timestampCorrectiveDelta = (double)details->m_timestamp - (double)m_writeTimestamp;
+ }
+ }
+
m_lastChunkS2 = chunk;
// Corrective delta always only applied to side 2.
double tmp = (double)details->m_timestamp - m_timestampCorrectiveDelta;
@@ -439,6 +454,7 @@ void RtpMixer::AudioChunkIn(AudioChunkRef& chunk)
LOG4CXX_DEBUG(m_log, "first chunk");
m_writeTimestamp = correctedTimestamp;
m_readTimestamp = m_writeTimestamp;
+ m_oneS1PacketState = true;
StoreRtpPacket(chunk, correctedTimestamp);
}
else
@@ -499,6 +515,9 @@ void RtpMixer::ManageOutOfRangeTimestamp(AudioChunkRef& chunk)
CStdString logMsg;
AudioChunkDetails* details = chunk->GetDetails();
+
+ logMsg.Format("ManageOutOfRangeTimestamp - channel:%d", details->m_channel);
+ LOG4CXX_DEBUG(m_log, logMsg);
if(details->m_channel == 1)
{
// 1. Ship what we have