aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRainer Hochecker <fernetmenta@online.de>2013-10-22 20:48:44 +0200
committerRainer Hochecker <fernetmenta@online.de>2013-10-28 12:54:52 +0100
commita3269a0114c04d7918bf69dcb2398fc9c8e0f19e (patch)
treee76c7c5b770eac08d0601ab0b271752fc12353f4
parent9dfe424eafbfbb9d2ecb18c1f4b927a04c4be383 (diff)
ActiveAE: implement timeout for streamsilence
-rw-r--r--xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp19
-rw-r--r--xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h3
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;