aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpopcornmix <popcornmix@gmail.com>2013-10-26 21:32:26 +0100
committerRainer Hochecker <fernetmenta@online.de>2013-10-28 12:54:52 +0100
commite0801580d0e8350ea6fcd159745dd1dd44506fa2 (patch)
tree132617e2df79812b4b1bd194c9a8dc7661f2fc56
parentf2286ac963b111a567f090ee90eb79c44cf1889b (diff)
[rbp/omxplayer] Support timeout value of streamsilence
-rw-r--r--xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.cpp34
-rw-r--r--xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h6
-rw-r--r--xbmc/cores/omxplayer/OMXAudio.cpp7
3 files changed, 43 insertions, 4 deletions
diff --git a/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.cpp b/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.cpp
index 9eb46b7897..ccf40b0ea8 100644
--- a/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.cpp
+++ b/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.cpp
@@ -32,6 +32,7 @@ using namespace PiAudioAE;
#endif
CPiAudioAE::CPiAudioAE()
+: CThread("CPiAudio")
{
}
@@ -42,14 +43,39 @@ CPiAudioAE::~CPiAudioAE()
bool CPiAudioAE::Initialize()
{
UpdateStreamSilence();
+ Create();
return true;
}
+void CPiAudioAE::Process()
+{
+ while(!m_bStop)
+ {
+ /* thread just currently checks once a second if it's time to disable streamsilence */
+ Sleep(1000);
+
+ if (m_extSilenceTimer.IsTimePast())
+ {
+ UpdateStreamSilence(false);
+ m_extSilenceTimer.Set(XbmcThreads::EndTime::InfiniteValue);
+ }
+ }
+}
+
void CPiAudioAE::UpdateStreamSilence()
{
+ if (CSettings::Get().GetInt("audiooutput.streamsilence") > 0)
+ m_extSilenceTimeout = CSettings::Get().GetInt("audiooutput.streamsilence") * 60000;
+ else
+ m_extSilenceTimeout = XbmcThreads::EndTime::InfiniteValue;
+ m_extSilenceTimer.Set(m_extSilenceTimeout);
+ UpdateStreamSilence(CSettings::Get().GetString("audiooutput.audiodevice") == "HDMI" &&
+ CSettings::Get().GetInt("audiooutput.streamsilence") != 0);
+}
+
+void CPiAudioAE::UpdateStreamSilence(bool enable)
+{
#if defined(TARGET_RASPBERRY_PI)
- bool enable = CSettings::Get().GetString("audiooutput.audiodevice") == "HDMI" &&
- CSettings::Get().GetInt("audiooutput.streamsilence") != 0;
char response[80] = "";
char command[80] = "";
sprintf(command, "force_audio hdmi %d", enable);
@@ -94,6 +120,8 @@ IAEStream *CPiAudioAE::MakeStream(enum AEDataFormat dataFormat, unsigned int sam
IAEStream *CPiAudioAE::FreeStream(IAEStream *stream)
{
+ // will retrigger the streamsilence timer
+ UpdateStreamSilence();
return NULL;
}
@@ -131,7 +159,7 @@ bool CPiAudioAE::SupportsRaw(AEDataFormat format)
bool CPiAudioAE::SupportsSilenceTimeout()
{
- return false;
+ return true;
}
void CPiAudioAE::OnSettingsChange(const std::string& setting)
diff --git a/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h b/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h
index 4836ed6861..944fba89d5 100644
--- a/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h
+++ b/xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h
@@ -29,13 +29,14 @@
namespace PiAudioAE
{
-class CPiAudioAE : public IAE
+class CPiAudioAE : public IAE, public CThread
{
protected:
friend class ::CAEFactory;
CPiAudioAE();
virtual ~CPiAudioAE();
virtual bool Initialize();
+ virtual void Process();
public:
virtual bool Suspend();
@@ -69,8 +70,11 @@ public:
protected:
void UpdateStreamSilence();
+ void UpdateStreamSilence(bool enable);
// polled via the interface
float m_aeVolume;
bool m_aeMuted;
+ int m_extSilenceTimeout;
+ XbmcThreads::EndTime m_extSilenceTimer;
};
};
diff --git a/xbmc/cores/omxplayer/OMXAudio.cpp b/xbmc/cores/omxplayer/OMXAudio.cpp
index 74ac027bed..764f26a604 100644
--- a/xbmc/cores/omxplayer/OMXAudio.cpp
+++ b/xbmc/cores/omxplayer/OMXAudio.cpp
@@ -39,6 +39,7 @@
#include "settings/Settings.h"
#include "guilib/LocalizeStrings.h"
#include "cores/AudioEngine/Utils/AEConvert.h"
+#include "cores/AudioEngine/AEFactory.h"
using namespace std;
@@ -776,6 +777,9 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo
CLog::Log(LOGDEBUG, "COMXAudio::Initialize device passthrough %d hwdecode %d",
m_Passthrough, m_HWDecode);
+ /* dummy call to inform PiAudioAE that audo is active */
+ CAEFactory::MakeStream((enum AEDataFormat)0, 0, 0, (CAEChannelInfo)0, 0);
+
return true;
}
@@ -842,6 +846,9 @@ bool COMXAudio::Deinitialize()
m_last_pts = DVD_NOPTS_VALUE;
+ /* dummy call to inform PiAudioAE that audo is inactive */
+ CAEFactory::FreeStream(0);
+
return true;
}