diff options
author | Rainer Hochecker <fernetmenta@online.de> | 2013-10-22 20:48:44 +0200 |
---|---|---|
committer | Rainer Hochecker <fernetmenta@online.de> | 2013-10-28 12:54:52 +0100 |
commit | a3269a0114c04d7918bf69dcb2398fc9c8e0f19e (patch) | |
tree | e76c7c5b770eac08d0601ab0b271752fc12353f4 | |
parent | 9dfe424eafbfbb9d2ecb18c1f4b927a04c4be383 (diff) |
ActiveAE: implement timeout for streamsilence
-rw-r--r-- | xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp | 19 | ||||
-rw-r--r-- | xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h | 3 |
2 files changed, 15 insertions, 7 deletions
diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp index 966b446356..d2a8d127f8 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp @@ -163,7 +163,7 @@ void CActiveAESink::StateMachine(int signal, Protocol *port, Message *msg) m_device = *(data->device); } m_extError = false; - m_extSilence = false; + m_extSilenceTimer = 0; ReturnBuffers(); OpenSink(); @@ -266,10 +266,14 @@ void CActiveAESink::StateMachine(int signal, Protocol *port, Message *msg) switch (signal) { case CSinkControlProtocol::SILENCEMODE: - m_extSilence = *(bool*)msg->data; - if (CSettings::Get().GetBool("audiooutput.streamsilence")) - m_extSilence = true; - if (m_extSilence) + bool silencemode; + silencemode = *(bool*)msg->data; + if (silencemode) + m_extSilenceTimeout = XbmcThreads::EndTime::InfiniteValue; + else + m_extSilenceTimeout = CSettings::Get().GetInt("audiooutput.streamsilence") * 60000; + m_extSilenceTimer.Set(m_extSilenceTimeout); + if (!m_extSilenceTimer.IsTimePast()) { m_state = S_TOP_CONFIGURED_SILENCE; m_extTimeout = 0; @@ -311,6 +315,7 @@ void CActiveAESink::StateMachine(int signal, Protocol *port, Message *msg) { m_state = S_TOP_CONFIGURED_PLAY; m_extTimeout = delay / 2; + m_extSilenceTimer.Set(m_extSilenceTimeout); } return; default: @@ -403,7 +408,7 @@ void CActiveAESink::StateMachine(int signal, Protocol *port, Message *msg) switch (signal) { case CSinkControlProtocol::TIMEOUT: - if (m_extSilence) + if (!m_extSilenceTimer.IsTimePast()) { m_state = S_TOP_CONFIGURED_SILENCE; m_extTimeout = 0; @@ -435,6 +440,8 @@ void CActiveAESink::StateMachine(int signal, Protocol *port, Message *msg) m_sink = NULL; m_state = S_TOP_CONFIGURED_SUSPEND; } + else + m_state = S_TOP_CONFIGURED_PLAY; m_extTimeout = 0; return; default: diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h index 2aebbf60c9..52f4a17db3 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h @@ -116,7 +116,8 @@ protected: bool m_bStateMachineSelfTrigger; int m_extTimeout; bool m_extError; - bool m_extSilence; + int m_extSilenceTimeout; + XbmcThreads::EndTime m_extSilenceTimer; CSampleBuffer m_sampleOfSilence; uint8_t *m_convertBuffer; |