summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2008-05-28 18:59:38 +0000
committerHenri Herscher <henri@oreka.org>2008-05-28 18:59:38 +0000
commitc77ed8ceb4a6576253be4604830399e1280593e9 (patch)
treec47d8fcfd69da26e3254afb927b5d3d48d0d1bd0
parent29a1c9a43ecb56dbf38b2046a68a4a20bd8493c2 (diff)
Corrected non-lookback problem where tape stop was not being sent when the CapturePort expired because in non-lookback, the AudioTape does not go to the active state (not getting any audio chunks). A tape stop is now forced if this is the case.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@541 09dcff7a-b715-0410-9601-b79a96267cd0
-rw-r--r--orkbasecxx/CapturePort.cpp20
-rw-r--r--orkbasecxx/CapturePort.h3
2 files changed, 23 insertions, 0 deletions
diff --git a/orkbasecxx/CapturePort.cpp b/orkbasecxx/CapturePort.cpp
index 13d70e2..b07a6c2 100644
--- a/orkbasecxx/CapturePort.cpp
+++ b/orkbasecxx/CapturePort.cpp
@@ -30,6 +30,7 @@ CapturePort::CapturePort(CStdString& id)
m_vadUp = false;
m_capturing = false;
m_lastUpdated = 0;
+ m_needSendStop = false;
LoadFilters();
}
@@ -238,6 +239,7 @@ void CapturePort::AddCaptureEvent(CaptureEventRef eventRef)
MessageRef msgRef;
audioTapeRef->GetMessage(msgRef);
Reporting::Instance()->AddTapeMessage(msgRef);
+ m_needSendStop = false;
if (m_audioTapeRef->GetAudioFileRef().get())
{
@@ -258,6 +260,7 @@ void CapturePort::AddCaptureEvent(CaptureEventRef eventRef)
MessageRef msgRef;
audioTapeRef->GetMessage(msgRef);
Reporting::Instance()->AddTapeMessage(msgRef);
+ m_needSendStop = true;
break;
}
@@ -299,6 +302,22 @@ bool CapturePort::IsExpired(time_t now)
return false;
}
+void CapturePort::Finalize()
+{
+ if(m_needSendStop)
+ {
+ // Stop message not sent yet for some reason, force it
+ CaptureEventRef stopEvent(new CaptureEvent);
+ stopEvent->m_type = CaptureEvent::EtStop;
+ stopEvent->m_timestamp = time(NULL);
+ AddCaptureEvent(stopEvent);
+
+ MessageRef msgRef;
+ m_audioTapeRef->GetMessage(msgRef);
+ Reporting::Instance()->AddTapeMessage(msgRef);
+ m_needSendStop = false;
+ }
+}
//=======================================
CapturePorts::CapturePorts()
@@ -371,6 +390,7 @@ void CapturePorts::Hoover()
for (std::list<CapturePortRef>::iterator it = toDismiss.begin(); it != toDismiss.end() ; it++)
{
CapturePortRef port = *it;
+ port->Finalize();
m_ports.erase(port->GetId());
LOG4CXX_DEBUG(s_log, port->GetId() + ": Expired");
}
diff --git a/orkbasecxx/CapturePort.h b/orkbasecxx/CapturePort.h
index aa80e29..20bbfe8 100644
--- a/orkbasecxx/CapturePort.h
+++ b/orkbasecxx/CapturePort.h
@@ -40,6 +40,8 @@ public:
void AddAudioChunk(AudioChunkRef chunkRef);
void AddCaptureEvent(CaptureEventRef eventRef);
bool IsExpired(time_t now);
+ void Finalize();
+
private:
void LoadFilters();
void FilterAudioChunk(AudioChunkRef& chunkRef);
@@ -53,6 +55,7 @@ private:
bool m_vadUp;
time_t m_lastUpdated;
std::list<FilterRef> m_filters;
+ bool m_needSendStop;
};
typedef boost::shared_ptr<CapturePort> CapturePortRef;