Skip to content

Commit

Permalink
[rbp/omxplayer] Support timeout value of streamsilence
Browse files Browse the repository at this point in the history
  • Loading branch information
popcornmix authored and FernetMenta committed Oct 28, 2013
1 parent f2286ac commit e080158
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 4 deletions.
34 changes: 31 additions & 3 deletions xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.cpp
Expand Up @@ -32,6 +32,7 @@ using namespace PiAudioAE;
#endif

CPiAudioAE::CPiAudioAE()
: CThread("CPiAudio")
{
}

Expand All @@ -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);
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -131,7 +159,7 @@ bool CPiAudioAE::SupportsRaw(AEDataFormat format)

bool CPiAudioAE::SupportsSilenceTimeout()
{
return false;
return true;
}

void CPiAudioAE::OnSettingsChange(const std::string& setting)
Expand Down
6 changes: 5 additions & 1 deletion xbmc/cores/AudioEngine/Engines/PiAudio/PiAudioAE.h
Expand Up @@ -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();
Expand Down Expand Up @@ -69,8 +70,11 @@ class CPiAudioAE : public IAE

protected:
void UpdateStreamSilence();
void UpdateStreamSilence(bool enable);
// polled via the interface
float m_aeVolume;
bool m_aeMuted;
int m_extSilenceTimeout;
XbmcThreads::EndTime m_extSilenceTimer;
};
};
7 changes: 7 additions & 0 deletions xbmc/cores/omxplayer/OMXAudio.cpp
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit e080158

Please sign in to comment.