From e0801580d0e8350ea6fcd159745dd1dd44506fa2 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sat, 26 Oct 2013 21:32:26 +0100 Subject: [rbp/omxplayer] Support timeout value of streamsilence --- .../AudioEngine/Engines/PiAudio/PiAudioAE.cpp | 34 ++++++++++++++++++++-- xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h | 6 +++- 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; } -- cgit v1.2.3