diff options
author | popcornmix <popcornmix@gmail.com> | 2013-10-26 21:32:26 +0100 |
---|---|---|
committer | Rainer Hochecker <fernetmenta@online.de> | 2013-10-28 12:54:52 +0100 |
commit | e0801580d0e8350ea6fcd159745dd1dd44506fa2 (patch) | |
tree | 132617e2df79812b4b1bd194c9a8dc7661f2fc56 | |
parent | f2286ac963b111a567f090ee90eb79c44cf1889b (diff) |
[rbp/omxplayer] Support timeout value of streamsilence
-rw-r--r-- | xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.cpp | 34 | ||||
-rw-r--r-- | xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h | 6 | ||||
-rw-r--r-- | xbmc/cores/omxplayer/OMXAudio.cpp | 7 |
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; } |