diff options
-rw-r--r-- | orkbasecxx/CapturePort.cpp | 20 | ||||
-rw-r--r-- | orkbasecxx/CapturePort.h | 3 |
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; |