mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
xbmc: update to xbmc-12.2-71eb528
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
679c2f278c
commit
20dfd9745e
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xbmc-theme-Confluence"
|
||||
PKG_VERSION="12.2-18397e1"
|
||||
PKG_VERSION="12.2-71eb528"
|
||||
if [ "$XBMC" = "master" ]; then
|
||||
PKG_VERSION="13.alpha-2435cf3"
|
||||
elif [ "$XBMC" = "xbmc-aml" ]; then
|
||||
|
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xbmc"
|
||||
PKG_VERSION="12.2-18397e1"
|
||||
PKG_VERSION="12.2-71eb528"
|
||||
if [ "$XBMC" = "master" ]; then
|
||||
PKG_VERSION="13.alpha-2435cf3"
|
||||
elif [ "$XBMC" = "xbmc-aml" ]; then
|
||||
|
@ -1,746 +0,0 @@
|
||||
From 1a93a46fe38c926ccd7658ce6f8c827d0491c117 Mon Sep 17 00:00:00 2001
|
||||
From: stupid-boy <amushatov@gmail.com>
|
||||
Date: Wed, 13 Feb 2013 23:47:07 +0200
|
||||
Subject: [PATCH 1/2] [OMXPlayer] Both HDMI and Analog output
|
||||
|
||||
---
|
||||
xbmc/cores/omxplayer/OMXAudio.cpp | 407 +++++++++++++++++++++++++-------
|
||||
xbmc/cores/omxplayer/OMXAudio.h | 12 +-
|
||||
xbmc/cores/omxplayer/OMXPlayerAudio.cpp | 9 +-
|
||||
xbmc/settings/GUISettings.cpp | 2 +
|
||||
xbmc/settings/GUISettings.h | 3 +
|
||||
5 files changed, 341 insertions(+), 92 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/omxplayer/OMXAudio.cpp b/xbmc/cores/omxplayer/OMXAudio.cpp
|
||||
index 10c3329..1470685 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXAudio.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXAudio.cpp
|
||||
@@ -111,8 +111,7 @@
|
||||
m_eEncoding (OMX_AUDIO_CodingPCM),
|
||||
m_extradata (NULL ),
|
||||
m_extrasize (0 ),
|
||||
- m_last_pts (DVD_NOPTS_VALUE),
|
||||
- m_omx_render (NULL )
|
||||
+ m_last_pts (DVD_NOPTS_VALUE)
|
||||
{
|
||||
m_vizBufferSize = m_vizRemapBufferSize = VIS_PACKET_SIZE * sizeof(float);
|
||||
m_vizRemapBuffer = (uint8_t *)_aligned_malloc(m_vizRemapBufferSize,16);
|
||||
@@ -161,7 +160,7 @@ CAEChannelInfo COMXAudio::GetChannelLayout(AEAudioFormat format)
|
||||
return info;
|
||||
}
|
||||
|
||||
-bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *clock, CDVDStreamInfo &hints, bool bUsePassthrough, bool bUseHWDecode)
|
||||
+bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo &hints, bool bUsePassthrough, bool bUseHWDecode)
|
||||
{
|
||||
Deinitialize();
|
||||
|
||||
@@ -320,32 +319,62 @@ bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *
|
||||
|
||||
componentName = "OMX.broadcom.audio_render";
|
||||
|
||||
- if(!m_omx_render)
|
||||
- m_omx_render = new COMXCoreComponent();
|
||||
- if(!m_omx_render)
|
||||
+ std::string device = "";
|
||||
+
|
||||
+ if((g_guiSettings.GetInt("audiooutput.mode") == AUDIO_HDMI) ||
|
||||
+ (g_guiSettings.GetInt("audiooutput.mode") == AUDIO_BOTH))
|
||||
{
|
||||
- CLog::Log(LOGERROR, "COMXAudio::Initialize error allocate OMX.broadcom.audio_render\n");
|
||||
- return false;
|
||||
+ device = "hdmi";
|
||||
+ if(!m_omx_render_HDMI.Initialize((const std::string)componentName, OMX_IndexParamAudioInit))
|
||||
+ return false;
|
||||
+
|
||||
+ OMX_CONFIG_BRCMAUDIODESTINATIONTYPE audioDest;
|
||||
+ OMX_INIT_STRUCTURE(audioDest);
|
||||
+ strncpy((char *)audioDest.sName, device.c_str(), strlen(device.c_str()));
|
||||
+
|
||||
+ omx_err = m_omx_render_HDMI.SetConfig(OMX_IndexConfigBrcmAudioDestination, &audioDest);
|
||||
+ if (omx_err != OMX_ErrorNone)
|
||||
+ return false;
|
||||
+
|
||||
+ OMX_CONFIG_BOOLEANTYPE configBool;
|
||||
+ OMX_INIT_STRUCTURE(configBool);
|
||||
+ configBool.bEnabled = OMX_FALSE;
|
||||
+
|
||||
+ omx_err = m_omx_render_HDMI.SetConfig(OMX_IndexConfigBrcmClockReferenceSource, &configBool);
|
||||
+ if (omx_err != OMX_ErrorNone)
|
||||
+ return false;
|
||||
}
|
||||
|
||||
- if(!m_omx_render->Initialize((const std::string)componentName, OMX_IndexParamAudioInit))
|
||||
- return false;
|
||||
+ if((g_guiSettings.GetInt("audiooutput.mode") == AUDIO_ANALOG) ||
|
||||
+ (g_guiSettings.GetInt("audiooutput.mode") == AUDIO_BOTH))
|
||||
+ {
|
||||
+ device = "local";
|
||||
+ if(!m_omx_render_analog.Initialize((const std::string)componentName, OMX_IndexParamAudioInit))
|
||||
+ return false;
|
||||
|
||||
- OMX_CONFIG_BRCMAUDIODESTINATIONTYPE audioDest;
|
||||
- OMX_INIT_STRUCTURE(audioDest);
|
||||
- strncpy((char *)audioDest.sName, device.c_str(), strlen(device.c_str()));
|
||||
+ OMX_CONFIG_BRCMAUDIODESTINATIONTYPE audioDest;
|
||||
+ OMX_INIT_STRUCTURE(audioDest);
|
||||
+ strncpy((char *)audioDest.sName, device.c_str(), strlen(device.c_str()));
|
||||
|
||||
- omx_err = m_omx_render->SetConfig(OMX_IndexConfigBrcmAudioDestination, &audioDest);
|
||||
- if (omx_err != OMX_ErrorNone)
|
||||
- return false;
|
||||
+ omx_err = m_omx_render_analog.SetConfig(OMX_IndexConfigBrcmAudioDestination, &audioDest);
|
||||
+ if (omx_err != OMX_ErrorNone)
|
||||
+ return false;
|
||||
|
||||
- OMX_CONFIG_BOOLEANTYPE configBool;
|
||||
- OMX_INIT_STRUCTURE(configBool);
|
||||
- configBool.bEnabled = OMX_FALSE;
|
||||
+ OMX_CONFIG_BOOLEANTYPE configBool;
|
||||
+ OMX_INIT_STRUCTURE(configBool);
|
||||
+ configBool.bEnabled = OMX_FALSE;
|
||||
|
||||
- omx_err = m_omx_render->SetConfig(OMX_IndexConfigBrcmClockReferenceSource, &configBool);
|
||||
- if (omx_err != OMX_ErrorNone)
|
||||
- return false;
|
||||
+ omx_err = m_omx_render_analog.SetConfig(OMX_IndexConfigBrcmClockReferenceSource, &configBool);
|
||||
+ if (omx_err != OMX_ErrorNone)
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ if(g_guiSettings.GetInt("audiooutput.mode") == AUDIO_BOTH)
|
||||
+ {
|
||||
+ componentName = "OMX.broadcom.audio_splitter";
|
||||
+ if(!m_omx_splitter.Initialize((const std::string)componentName, OMX_IndexParamAudioInit))
|
||||
+ return false;
|
||||
+ }
|
||||
|
||||
componentName = "OMX.broadcom.audio_decode";
|
||||
if(!m_omx_decoder.Initialize((const std::string)componentName, OMX_IndexParamAudioInit))
|
||||
@@ -411,13 +440,30 @@ bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *
|
||||
}
|
||||
}
|
||||
|
||||
- m_omx_tunnel_clock.Initialize(m_omx_clock, m_omx_clock->GetInputPort(), m_omx_render, m_omx_render->GetInputPort()+1);
|
||||
+ if( m_omx_render_analog.IsInitialized())
|
||||
+ {
|
||||
+ m_omx_tunnel_clock_analog.Initialize(m_omx_clock, m_omx_clock->GetInputPort(),
|
||||
+ &m_omx_render_analog, m_omx_render_analog.GetInputPort()+1);
|
||||
|
||||
- omx_err = m_omx_tunnel_clock.Establish(false);
|
||||
- if(omx_err != OMX_ErrorNone)
|
||||
+ omx_err = m_omx_tunnel_clock_analog.Establish(false, true);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::Initialize m_omx_tunnel_clock_analog.Establish\n");
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if( m_omx_render_HDMI.IsInitialized())
|
||||
{
|
||||
- CLog::Log(LOGERROR, "COMXAudio::Initialize m_omx_tunnel_clock.Establish\n");
|
||||
- return false;
|
||||
+ m_omx_tunnel_clock_HDMI.Initialize(m_omx_clock, m_omx_clock->GetInputPort()+ ( m_omx_render_analog.IsInitialized() ? 2 : 0),
|
||||
+ &m_omx_render_HDMI, m_omx_render_HDMI.GetInputPort()+1);
|
||||
+
|
||||
+ omx_err = m_omx_tunnel_clock_HDMI.Establish(false, true);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::Initialize m_omx_tunnel_clock_HDMI.Establish\n");
|
||||
+ return false;
|
||||
+ }
|
||||
}
|
||||
|
||||
omx_err = m_omx_decoder.AllocInputBuffers();
|
||||
@@ -443,12 +489,56 @@ bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *
|
||||
return false;
|
||||
}
|
||||
|
||||
- m_omx_tunnel_mixer.Initialize(&m_omx_mixer, m_omx_mixer.GetOutputPort(), m_omx_render, m_omx_render->GetInputPort());
|
||||
- omx_err = m_omx_tunnel_mixer.Establish(false);
|
||||
- if(omx_err != OMX_ErrorNone)
|
||||
+ if(g_guiSettings.GetInt("audiooutput.mode") == AUDIO_ANALOG)
|
||||
{
|
||||
- CLog::Log(LOGERROR, "COMXAudio::Initialize - Error m_omx_tunnel_decoder.Establish 0x%08x", omx_err);
|
||||
- return false;
|
||||
+ m_omx_tunnel_mixer.Initialize(&m_omx_mixer, m_omx_mixer.GetOutputPort(),
|
||||
+ &m_omx_render_analog, m_omx_render_analog.GetInputPort());
|
||||
+ omx_err = m_omx_tunnel_mixer.Establish(false);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::Initialize - Error m_omx_tunnel_decoder.Establish 0x%08x", omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+ else if (g_guiSettings.GetInt("audiooutput.mode") == AUDIO_HDMI)
|
||||
+ {
|
||||
+ m_omx_tunnel_mixer.Initialize(&m_omx_mixer, m_omx_mixer.GetOutputPort(),
|
||||
+ &m_omx_render_HDMI, m_omx_render_HDMI.GetInputPort());
|
||||
+ omx_err = m_omx_tunnel_mixer.Establish(false);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::Initialize - Error m_omx_tunnel_decoder.Establish 0x%08x", omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+ else // AUDIO_BOTH
|
||||
+ {
|
||||
+ m_omx_tunnel_mixer.Initialize(&m_omx_mixer, m_omx_mixer.GetOutputPort(),
|
||||
+ &m_omx_splitter, m_omx_splitter.GetInputPort());
|
||||
+ omx_err = m_omx_tunnel_mixer.Establish(false);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::Initialize - Error m_omx_tunnel_mixer.Establish 0x%08x", omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ m_omx_tunnel_splitter_analog.Initialize(&m_omx_splitter, m_omx_splitter.GetOutputPort(),
|
||||
+ &m_omx_render_analog, m_omx_render_analog.GetInputPort());
|
||||
+ omx_err = m_omx_tunnel_splitter_analog.Establish(false);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::Initialize - Error m_omx_tunnel_splitter_analog.Establish 0x%08x", omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ m_omx_tunnel_splitter_HDMI.Initialize(&m_omx_splitter, m_omx_splitter.GetOutputPort() + 1,
|
||||
+ &m_omx_render_HDMI, m_omx_render_HDMI.GetInputPort());
|
||||
+ omx_err = m_omx_tunnel_splitter_HDMI.Establish(false);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::Initialize - Error m_omx_tunnel_splitter_HDMI.Establish 0x%08x", omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
}
|
||||
|
||||
omx_err = m_omx_mixer.SetStateForComponent(OMX_StateExecuting);
|
||||
@@ -459,7 +549,9 @@ bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *
|
||||
}
|
||||
else
|
||||
{
|
||||
- m_omx_tunnel_decoder.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(), m_omx_render, m_omx_render->GetInputPort());
|
||||
+ // Passthrough work only for HDMI
|
||||
+ m_omx_tunnel_decoder.Initialize(&m_omx_decoder, m_omx_decoder.GetOutputPort(),
|
||||
+ &m_omx_render_HDMI, m_omx_render_HDMI.GetInputPort());
|
||||
omx_err = m_omx_tunnel_decoder.Establish(false);
|
||||
if(omx_err != OMX_ErrorNone)
|
||||
{
|
||||
@@ -474,11 +566,34 @@ bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *
|
||||
}
|
||||
}
|
||||
|
||||
- omx_err = m_omx_render->SetStateForComponent(OMX_StateExecuting);
|
||||
- if(omx_err != OMX_ErrorNone)
|
||||
+ if ( m_omx_splitter.IsInitialized())
|
||||
{
|
||||
- CLog::Log(LOGERROR, "COMXAudio::Initialize - Error setting OMX_StateExecuting 0x%08x", omx_err);
|
||||
- return false;
|
||||
+ omx_err = m_omx_splitter.SetStateForComponent(OMX_StateExecuting);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::Initialize - Error setting OMX_StateExecuting 0x%08x for m_omx_splitter", omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if ( m_omx_render_analog.IsInitialized())
|
||||
+ {
|
||||
+ omx_err = m_omx_render_analog.SetStateForComponent(OMX_StateExecuting);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::Initialize - Error setting OMX_StateExecuting 0x%08x for m_omx_render_analog", omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if ( m_omx_render_HDMI.IsInitialized())
|
||||
+ {
|
||||
+ omx_err = m_omx_render_HDMI.SetStateForComponent(OMX_StateExecuting);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::Initialize - Error setting OMX_StateExecuting 0x%08x for m_omx_render_HDMI", omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
}
|
||||
|
||||
m_omx_decoder.EnablePort(m_omx_decoder.GetInputPort(), true);
|
||||
@@ -570,9 +685,12 @@ bool COMXAudio::Deinitialize()
|
||||
m_omx_tunnel_decoder.Flush();
|
||||
if(!m_Passthrough)
|
||||
m_omx_tunnel_mixer.Flush();
|
||||
- m_omx_tunnel_clock.Flush();
|
||||
|
||||
- m_omx_tunnel_clock.Deestablish();
|
||||
+ m_omx_tunnel_clock_analog.Flush();
|
||||
+ m_omx_tunnel_clock_HDMI.Flush();
|
||||
+ m_omx_tunnel_clock_analog.Deestablish();
|
||||
+ m_omx_tunnel_clock_HDMI.Deestablish();
|
||||
+
|
||||
if(!m_Passthrough)
|
||||
{
|
||||
// workaround for the strange BCM mixer component
|
||||
@@ -587,8 +705,16 @@ bool COMXAudio::Deinitialize()
|
||||
|
||||
m_omx_decoder.FlushInput();
|
||||
|
||||
- if(m_omx_render)
|
||||
- m_omx_render->Deinitialize(true);
|
||||
+ m_omx_tunnel_splitter_analog.Flush();
|
||||
+ m_omx_tunnel_splitter_analog.Deestablish(true);
|
||||
+ m_omx_tunnel_splitter_HDMI.Flush();
|
||||
+ m_omx_tunnel_splitter_HDMI.Deestablish(true);
|
||||
+
|
||||
+ m_omx_splitter.Deinitialize(true);
|
||||
+
|
||||
+ m_omx_render_analog.Deinitialize(true);
|
||||
+ m_omx_render_HDMI.Deinitialize(true);
|
||||
+
|
||||
if(!m_Passthrough)
|
||||
m_omx_mixer.Deinitialize(true);
|
||||
m_omx_decoder.Deinitialize(true);
|
||||
@@ -613,9 +739,6 @@ bool COMXAudio::Deinitialize()
|
||||
m_first_frame = true;
|
||||
m_last_pts = DVD_NOPTS_VALUE;
|
||||
|
||||
- delete m_omx_render;
|
||||
- m_omx_render = NULL;
|
||||
-
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -696,7 +819,7 @@ void COMXAudio::Mute(bool bMute)
|
||||
//***********************************************************************************************
|
||||
bool COMXAudio::SetCurrentVolume(float fVolume)
|
||||
{
|
||||
- CSingleLock lock (m_critSection);
|
||||
+CSingleLock lock (m_critSection);
|
||||
|
||||
if(!m_Initialized || m_Passthrough)
|
||||
return false;
|
||||
@@ -754,22 +877,39 @@ bool COMXAudio::SetCurrentVolume(float fVolume)
|
||||
{
|
||||
OMX_AUDIO_CONFIG_VOLUMETYPE volume;
|
||||
OMX_INIT_STRUCTURE(volume);
|
||||
- volume.nPortIndex = m_omx_render->GetInputPort();
|
||||
+ OMX_ERRORTYPE omx_err;
|
||||
|
||||
volume.bLinear = OMX_TRUE;
|
||||
float hardwareVolume = fVolume * gain * 100.0f;
|
||||
volume.sVolume.nValue = (int)(hardwareVolume + 0.5f);
|
||||
|
||||
- OMX_ERRORTYPE omx_err =
|
||||
- m_omx_render->SetConfig(OMX_IndexConfigAudioVolume, &volume);
|
||||
- if(omx_err != OMX_ErrorNone)
|
||||
+ if(m_omx_render_analog.IsInitialized())
|
||||
{
|
||||
- CLog::Log(LOGERROR, "%s::%s - error setting OMX_IndexConfigAudioVolume, error 0x%08x\n",
|
||||
+ volume.nPortIndex = m_omx_render_analog.GetInputPort();
|
||||
+ omx_err = m_omx_render_analog.SetConfig(OMX_IndexConfigAudioVolume, &volume);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "%s::%s - error setting OMX_IndexConfigAudioVolume, error 0x%08x for m_omx_render_analog\n",
|
||||
CLASSNAME, __func__, omx_err);
|
||||
- return false;
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+ if(m_omx_render_HDMI.IsInitialized())
|
||||
+ {
|
||||
+ volume.nPortIndex = m_omx_render_HDMI.GetInputPort();
|
||||
+ omx_err = m_omx_render_HDMI.SetConfig(OMX_IndexConfigAudioVolume, &volume);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "%s::%s - error setting OMX_IndexConfigAudioVolume, error 0x%08x for m_omx_render_HDMI\n",
|
||||
+ CLASSNAME, __func__, omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
}
|
||||
+
|
||||
}
|
||||
return true;
|
||||
+
|
||||
+ return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -927,7 +1067,18 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
|
||||
m_first_frame = false;
|
||||
//m_omx_render.WaitForEvent(OMX_EventPortSettingsChanged);
|
||||
|
||||
- m_omx_render->DisablePort(m_omx_render->GetInputPort(), false);
|
||||
+ if(m_omx_render_analog.IsInitialized())
|
||||
+ m_omx_render_analog.DisablePort(m_omx_render_analog.GetInputPort(), false);
|
||||
+ if(m_omx_render_HDMI.IsInitialized())
|
||||
+ m_omx_render_HDMI.DisablePort(m_omx_render_HDMI.GetInputPort(), false);
|
||||
+
|
||||
+ if(m_omx_splitter.IsInitialized())
|
||||
+ {
|
||||
+ m_omx_splitter.DisablePort(m_omx_splitter.GetOutputPort(), false);
|
||||
+ m_omx_splitter.DisablePort(m_omx_splitter.GetOutputPort()+1, false);
|
||||
+ m_omx_splitter.DisablePort(m_omx_splitter.GetInputPort(), false);
|
||||
+ }
|
||||
+
|
||||
if(!m_Passthrough)
|
||||
{
|
||||
m_omx_mixer.DisablePort(m_omx_mixer.GetOutputPort(), false);
|
||||
@@ -965,6 +1116,11 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
|
||||
}
|
||||
|
||||
m_pcm_output.nSamplingRate = m_format.m_sampleRate;
|
||||
+ // "Currently this component only supports raw PCM on all audio ports."
|
||||
+ if(m_omx_splitter.IsInitialized())
|
||||
+ {
|
||||
+ m_pcm_output.ePCMMode = OMX_AUDIO_PCMModeLinear;
|
||||
+ }
|
||||
|
||||
/* setup mixer output */
|
||||
m_pcm_output.nPortIndex = m_omx_mixer.GetOutputPort();
|
||||
@@ -981,16 +1137,64 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
|
||||
|
||||
m_pcm_output.nSamplingRate = m_format.m_sampleRate;
|
||||
|
||||
- m_pcm_output.nPortIndex = m_omx_render->GetInputPort();
|
||||
- omx_err = m_omx_render->SetParameter(OMX_IndexParamAudioPcm, &m_pcm_output);
|
||||
- if(omx_err != OMX_ErrorNone)
|
||||
+ if(m_omx_splitter.IsInitialized())
|
||||
{
|
||||
- CLog::Log(LOGERROR, "COMXAudio::AddPackets error SetParameter 1 render omx_err(0x%08x)\n", omx_err);
|
||||
+ m_pcm_output.nPortIndex = m_omx_splitter.GetInputPort();
|
||||
+ omx_err = m_omx_splitter.SetParameter(OMX_IndexParamAudioPcm, &m_pcm_output);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::AddPackets error SetParameter 1 omx_err(0x%08x) for m_omx_splitter\n", omx_err);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ // Splitter will copy input params to output when input port is enabled.
|
||||
+ omx_err = m_omx_splitter.SetStateForComponent(OMX_StateIdle);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::AddPackets - Error setting OMX_StateIdle 0x%08x for m_omx_splitter", omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ m_omx_splitter.EnablePort(m_omx_splitter.GetInputPort(), false);
|
||||
+ m_omx_splitter.DisablePort(m_omx_splitter.GetInputPort(), false);
|
||||
+
|
||||
+ omx_err = m_omx_splitter.SetStateForComponent(OMX_StateExecuting);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::AddPackets - Error setting OMX_StateExecuting 0x%08x for m_omx_splitter", omx_err);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ m_pcm_output.nPortIndex = m_omx_splitter.GetOutputPort();
|
||||
+ omx_err = m_omx_splitter.GetParameter(OMX_IndexParamAudioPcm, &m_pcm_output);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::AddPackets error GetParameter 3 omx_err(0x%08x) for m_omx_splitter\n", omx_err);
|
||||
+ }
|
||||
+
|
||||
+ m_pcm_output.nSamplingRate = m_format.m_sampleRate;
|
||||
}
|
||||
- omx_err = m_omx_render->GetParameter(OMX_IndexParamAudioPcm, &m_pcm_output);
|
||||
- if(omx_err != OMX_ErrorNone)
|
||||
+
|
||||
+ if(m_omx_render_analog.IsInitialized())
|
||||
+ {
|
||||
+ m_pcm_output.nPortIndex = m_omx_render_analog.GetInputPort();
|
||||
+ omx_err = m_omx_render_analog.SetParameter(OMX_IndexParamAudioPcm, &m_pcm_output);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::AddPackets error SetParameter 1 render omx_err(0x%08x) for m_omx_render_analog\n", omx_err);
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+ if(m_omx_render_HDMI.IsInitialized())
|
||||
{
|
||||
- CLog::Log(LOGERROR, "COMXAudio::AddPackets error GetParameter 2 render omx_err(0x%08x)\n", omx_err);
|
||||
+ m_pcm_output.nPortIndex = m_omx_render_HDMI.GetInputPort();
|
||||
+ omx_err = m_omx_render_HDMI.SetParameter(OMX_IndexParamAudioPcm, &m_pcm_output);
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "COMXAudio::AddPackets error SetParameter 1 render omx_err(0x%08x) for m_omx_render_HDMI\n", omx_err);
|
||||
+ }
|
||||
+
|
||||
}
|
||||
|
||||
PrintPCM(&m_pcm_input, std::string("input"));
|
||||
@@ -1000,9 +1204,9 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
|
||||
{
|
||||
OMX_AUDIO_PARAM_PORTFORMATTYPE formatType;
|
||||
OMX_INIT_STRUCTURE(formatType);
|
||||
- formatType.nPortIndex = m_omx_render->GetInputPort();
|
||||
+ formatType.nPortIndex = m_omx_render_HDMI.GetInputPort();
|
||||
|
||||
- omx_err = m_omx_render->GetParameter(OMX_IndexParamAudioPortFormat, &formatType);
|
||||
+ omx_err = m_omx_render_HDMI.GetParameter(OMX_IndexParamAudioPortFormat, &formatType);
|
||||
if(omx_err != OMX_ErrorNone)
|
||||
{
|
||||
CLog::Log(LOGERROR, "COMXAudio::AddPackets error OMX_IndexParamAudioPortFormat omx_err(0x%08x)\n", omx_err);
|
||||
@@ -1011,7 +1215,7 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
|
||||
|
||||
formatType.eEncoding = m_eEncoding;
|
||||
|
||||
- omx_err = m_omx_render->SetParameter(OMX_IndexParamAudioPortFormat, &formatType);
|
||||
+ omx_err = m_omx_render_HDMI.SetParameter(OMX_IndexParamAudioPortFormat, &formatType);
|
||||
if(omx_err != OMX_ErrorNone)
|
||||
{
|
||||
CLog::Log(LOGERROR, "COMXAudio::AddPackets error OMX_IndexParamAudioPortFormat omx_err(0x%08x)\n", omx_err);
|
||||
@@ -1023,7 +1227,7 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
|
||||
OMX_AUDIO_PARAM_DDPTYPE m_ddParam;
|
||||
OMX_INIT_STRUCTURE(m_ddParam);
|
||||
|
||||
- m_ddParam.nPortIndex = m_omx_render->GetInputPort();
|
||||
+ m_ddParam.nPortIndex = m_omx_render_HDMI.GetInputPort();
|
||||
|
||||
m_ddParam.nChannels = m_format.m_channelLayout.Count(); //(m_InputChannels == 6) ? 8 : m_InputChannels;
|
||||
m_ddParam.nSampleRate = m_SampleRate;
|
||||
@@ -1038,13 +1242,13 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
|
||||
m_ddParam.eChannelMapping[i] = OMXChannels[i];
|
||||
}
|
||||
|
||||
- m_omx_render->SetParameter(OMX_IndexParamAudioDdp, &m_ddParam);
|
||||
- m_omx_render->GetParameter(OMX_IndexParamAudioDdp, &m_ddParam);
|
||||
+ m_omx_render_HDMI.SetParameter(OMX_IndexParamAudioDdp, &m_ddParam);
|
||||
+ m_omx_render_HDMI.GetParameter(OMX_IndexParamAudioDdp, &m_ddParam);
|
||||
PrintDDP(&m_ddParam);
|
||||
}
|
||||
else if(m_eEncoding == OMX_AUDIO_CodingDTS)
|
||||
{
|
||||
- m_dtsParam.nPortIndex = m_omx_render->GetInputPort();
|
||||
+ m_dtsParam.nPortIndex = m_omx_render_HDMI.GetInputPort();
|
||||
|
||||
m_dtsParam.nChannels = m_format.m_channelLayout.Count(); //(m_InputChannels == 6) ? 8 : m_InputChannels;
|
||||
m_dtsParam.nBitRate = 0;
|
||||
@@ -1057,13 +1261,24 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
|
||||
m_dtsParam.eChannelMapping[i] = OMXChannels[i];
|
||||
}
|
||||
|
||||
- m_omx_render->SetParameter(OMX_IndexParamAudioDts, &m_dtsParam);
|
||||
- m_omx_render->GetParameter(OMX_IndexParamAudioDts, &m_dtsParam);
|
||||
+ m_omx_render_HDMI.SetParameter(OMX_IndexParamAudioDts, &m_dtsParam);
|
||||
+ m_omx_render_HDMI.GetParameter(OMX_IndexParamAudioDts, &m_dtsParam);
|
||||
PrintDTS(&m_dtsParam);
|
||||
}
|
||||
}
|
||||
|
||||
- m_omx_render->EnablePort(m_omx_render->GetInputPort(), false);
|
||||
+ if(m_omx_render_analog.IsInitialized())
|
||||
+ m_omx_render_analog.EnablePort(m_omx_render_analog.GetInputPort(), false);
|
||||
+ if(m_omx_render_HDMI.IsInitialized())
|
||||
+ m_omx_render_HDMI.EnablePort(m_omx_render_HDMI.GetInputPort(), false);
|
||||
+
|
||||
+ if(m_omx_splitter.IsInitialized())
|
||||
+ {
|
||||
+ m_omx_splitter.EnablePort(m_omx_splitter.GetOutputPort(), false);
|
||||
+ m_omx_splitter.EnablePort(m_omx_splitter.GetOutputPort()+1, false);
|
||||
+ m_omx_splitter.EnablePort(m_omx_splitter.GetInputPort(), false);
|
||||
+ }
|
||||
+
|
||||
if(!m_Passthrough)
|
||||
{
|
||||
m_omx_mixer.EnablePort(m_omx_mixer.GetOutputPort(), false);
|
||||
@@ -1139,21 +1354,49 @@ unsigned int COMXAudio::GetAudioRenderingLatency()
|
||||
if(!m_Initialized)
|
||||
return 0;
|
||||
|
||||
- OMX_PARAM_U32TYPE param;
|
||||
- OMX_INIT_STRUCTURE(param);
|
||||
- param.nPortIndex = m_omx_render->GetInputPort();
|
||||
+ unsigned int latAnalog = 0;
|
||||
+ unsigned int latHDMI = 0;
|
||||
|
||||
- OMX_ERRORTYPE omx_err =
|
||||
- m_omx_render->GetConfig(OMX_IndexConfigAudioRenderingLatency, ¶m);
|
||||
+ // Prefer HDMI latency if both are used
|
||||
+ if(m_omx_render_analog.IsInitialized() && !m_omx_render_HDMI.IsInitialized())
|
||||
+ {
|
||||
+ OMX_PARAM_U32TYPE param;
|
||||
+ OMX_INIT_STRUCTURE(param);
|
||||
+ param.nPortIndex = m_omx_render_analog.GetInputPort();
|
||||
|
||||
- if(omx_err != OMX_ErrorNone)
|
||||
+ OMX_ERRORTYPE omx_err =
|
||||
+ m_omx_render_analog.GetConfig(OMX_IndexConfigAudioRenderingLatency, ¶m);
|
||||
+
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "%s::%s - error getting OMX_IndexConfigAudioRenderingLatency error 0x%08x\n for m_omx_render_analog",
|
||||
+ CLASSNAME, __func__, omx_err);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ latAnalog = param.nU32;
|
||||
+ }
|
||||
+
|
||||
+ if(m_omx_render_HDMI.IsInitialized())
|
||||
{
|
||||
- CLog::Log(LOGERROR, "%s::%s - error getting OMX_IndexConfigAudioRenderingLatency error 0x%08x\n",
|
||||
- CLASSNAME, __func__, omx_err);
|
||||
- return 0;
|
||||
+ OMX_PARAM_U32TYPE param;
|
||||
+ OMX_INIT_STRUCTURE(param);
|
||||
+ param.nPortIndex = m_omx_render_HDMI.GetInputPort();
|
||||
+
|
||||
+ OMX_ERRORTYPE omx_err =
|
||||
+ m_omx_render_HDMI.GetConfig(OMX_IndexConfigAudioRenderingLatency, ¶m);
|
||||
+
|
||||
+ if(omx_err != OMX_ErrorNone)
|
||||
+ {
|
||||
+ CLog::Log(LOGERROR, "%s::%s - error getting OMX_IndexConfigAudioRenderingLatency error 0x%08x\n for m_omx_render_HDMI",
|
||||
+ CLASSNAME, __func__, omx_err);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ latHDMI = param.nU32;
|
||||
}
|
||||
|
||||
- return param.nU32;
|
||||
+ return std::max(latAnalog, latHDMI);
|
||||
}
|
||||
|
||||
void COMXAudio::WaitCompletion()
|
||||
@@ -1188,7 +1431,8 @@ void COMXAudio::WaitCompletion()
|
||||
unsigned int nTimeOut = AUDIO_BUFFER_SECONDS * 1000;
|
||||
while(nTimeOut)
|
||||
{
|
||||
- if(m_omx_render->IsEOS())
|
||||
+ if((m_omx_render_analog.IsInitialized() ? m_omx_render_analog.IsEOS() : true) &&
|
||||
+ (m_omx_render_HDMI.IsInitialized() ? m_omx_render_HDMI.IsEOS() : true))
|
||||
{
|
||||
CLog::Log(LOGDEBUG, "%s::%s - got eos\n", CLASSNAME, __func__);
|
||||
break;
|
||||
@@ -1218,7 +1462,8 @@ void COMXAudio::WaitCompletion()
|
||||
nTimeOut -= 50;
|
||||
}
|
||||
|
||||
- m_omx_render->ResetEos();
|
||||
+ m_omx_render_analog.ResetEos();
|
||||
+ m_omx_render_HDMI.ResetEos();
|
||||
|
||||
return;
|
||||
}
|
||||
diff --git a/xbmc/cores/omxplayer/OMXAudio.h b/xbmc/cores/omxplayer/OMXAudio.h
|
||||
index d812e0a..81aeb7e 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXAudio.h
|
||||
+++ b/xbmc/cores/omxplayer/OMXAudio.h
|
||||
@@ -60,7 +60,7 @@ class COMXAudio
|
||||
float GetCacheTime();
|
||||
float GetCacheTotal();
|
||||
COMXAudio();
|
||||
- bool Initialize(AEAudioFormat format, std::string& device, OMXClock *clock, CDVDStreamInfo &hints, bool bUsePassthrough, bool bUseHWDecode);
|
||||
+ bool Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo &hints, bool bUsePassthrough, bool bUseHWDecode);
|
||||
~COMXAudio();
|
||||
|
||||
unsigned int AddPackets(const void* data, unsigned int len);
|
||||
@@ -132,12 +132,18 @@ class COMXAudio
|
||||
WAVEFORMATEXTENSIBLE m_wave_header;
|
||||
AEAudioFormat m_format;
|
||||
protected:
|
||||
- COMXCoreComponent *m_omx_render;
|
||||
+ void DumpStates();
|
||||
+ COMXCoreComponent m_omx_render_analog;
|
||||
+ COMXCoreComponent m_omx_render_HDMI;
|
||||
+ COMXCoreComponent m_omx_splitter;
|
||||
COMXCoreComponent m_omx_mixer;
|
||||
COMXCoreComponent m_omx_decoder;
|
||||
- COMXCoreTunel m_omx_tunnel_clock;
|
||||
+ COMXCoreTunel m_omx_tunnel_clock_analog;
|
||||
+ COMXCoreTunel m_omx_tunnel_clock_HDMI;
|
||||
COMXCoreTunel m_omx_tunnel_mixer;
|
||||
COMXCoreTunel m_omx_tunnel_decoder;
|
||||
+ COMXCoreTunel m_omx_tunnel_splitter_analog;
|
||||
+ COMXCoreTunel m_omx_tunnel_splitter_HDMI;
|
||||
DllAvUtil m_dllAvUtil;
|
||||
|
||||
OMX_AUDIO_CHANNELTYPE m_input_channels[OMX_AUDIO_MAXCHANNELS];
|
||||
diff --git a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp
|
||||
index 58c3a4f..f3276d2 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXPlayerAudio.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXPlayerAudio.cpp
|
||||
@@ -731,17 +731,10 @@ bool OMXPlayerAudio::OpenDecoder()
|
||||
/* GetDataFormat is setting up evrything */
|
||||
m_format.m_dataFormat = GetDataFormat(m_hints);
|
||||
|
||||
- std::string device = "";
|
||||
-
|
||||
- if(g_guiSettings.GetInt("audiooutput.mode") == AUDIO_HDMI)
|
||||
- device = "hdmi";
|
||||
- else
|
||||
- device = "local";
|
||||
-
|
||||
m_av_clock->Lock();
|
||||
m_av_clock->OMXStop(false);
|
||||
|
||||
- bool bAudioRenderOpen = m_omxAudio.Initialize(m_format, device, m_av_clock, m_hints, m_passthrough, m_hw_decode);
|
||||
+ bool bAudioRenderOpen = m_omxAudio.Initialize(m_format, m_av_clock, m_hints, m_passthrough, m_hw_decode);
|
||||
|
||||
m_codec_name = "";
|
||||
m_bad_state = !bAudioRenderOpen;
|
||||
diff --git a/xbmc/settings/GUISettings.cpp b/xbmc/settings/GUISettings.cpp
|
||||
index e92a82d..e798683 100644
|
||||
--- a/xbmc/settings/GUISettings.cpp
|
||||
+++ b/xbmc/settings/GUISettings.cpp
|
||||
@@ -457,6 +457,8 @@ void CGUISettings::Initialize()
|
||||
audiomode.insert(make_pair(338,AUDIO_ANALOG));
|
||||
#if !defined(TARGET_RASPBERRY_PI)
|
||||
audiomode.insert(make_pair(339,AUDIO_IEC958));
|
||||
+#else
|
||||
+ audiomode.insert(make_pair(593,AUDIO_BOTH));
|
||||
#endif
|
||||
audiomode.insert(make_pair(420,AUDIO_HDMI ));
|
||||
#if defined(TARGET_RASPBERRY_PI)
|
||||
diff --git a/xbmc/settings/GUISettings.h b/xbmc/settings/GUISettings.h
|
||||
index b48ba35..500ec36 100644
|
||||
--- a/xbmc/settings/GUISettings.h
|
||||
+++ b/xbmc/settings/GUISettings.h
|
||||
@@ -84,6 +84,9 @@
|
||||
#define AUDIO_ANALOG 0
|
||||
#define AUDIO_IEC958 1
|
||||
#define AUDIO_HDMI 2
|
||||
+#ifdef TARGET_RASPBERRY_PI
|
||||
+#define AUDIO_BOTH 3
|
||||
+#endif
|
||||
#define AUDIO_IS_BITSTREAM(x) ((x) == AUDIO_IEC958 || (x) == AUDIO_HDMI)
|
||||
|
||||
#define VIDEO_NORMAL 0
|
||||
--
|
||||
1.8.1.6
|
||||
|
||||
|
||||
From 85bb82a3f78a63385767e8e1a7490860077b1b32 Mon Sep 17 00:00:00 2001
|
||||
From: stupid-boy <amushatov@gmail.com>
|
||||
Date: Thu, 7 Mar 2013 20:46:21 +0200
|
||||
Subject: [PATCH 2/2] Seek fixed
|
||||
|
||||
---
|
||||
xbmc/cores/omxplayer/OMXAudio.cpp | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/xbmc/cores/omxplayer/OMXAudio.cpp b/xbmc/cores/omxplayer/OMXAudio.cpp
|
||||
index 1470685..6b0e71a 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXAudio.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXAudio.cpp
|
||||
@@ -749,8 +749,16 @@ void COMXAudio::Flush()
|
||||
|
||||
m_omx_decoder.FlushInput();
|
||||
m_omx_tunnel_decoder.Flush();
|
||||
- if(!m_Passthrough)
|
||||
+ if ( m_omx_mixer.IsInitialized() )
|
||||
+ m_omx_mixer.FlushAll();
|
||||
+ if( m_omx_tunnel_mixer.IsInitialized() )
|
||||
m_omx_tunnel_mixer.Flush();
|
||||
+ if ( m_omx_splitter.IsInitialized() )
|
||||
+ m_omx_splitter.FlushAll();
|
||||
+ if ( m_omx_tunnel_splitter_analog.IsInitialized() )
|
||||
+ m_omx_tunnel_splitter_analog.Flush();
|
||||
+ if ( m_omx_tunnel_splitter_HDMI.IsInitialized() )
|
||||
+ m_omx_tunnel_splitter_HDMI.Flush();
|
||||
|
||||
m_last_pts = DVD_NOPTS_VALUE;
|
||||
m_LostSync = true;
|
||||
--
|
||||
1.8.1.6
|
||||
|
@ -1,169 +0,0 @@
|
||||
diff -Naur xbmc-frodo-0ff0d2e/configure.in xbmc-frodo-0ff0d2e.patch/configure.in
|
||||
--- xbmc-frodo-0ff0d2e/configure.in 2012-10-11 15:45:44.000000000 +0200
|
||||
+++ xbmc-frodo-0ff0d2e.patch/configure.in 2012-10-11 16:49:08.872850880 +0200
|
||||
@@ -452,6 +452,12 @@
|
||||
[use_texturepacker=$enableval],
|
||||
[use_texturepacker=auto])
|
||||
|
||||
+AC_ARG_WITH([texturepacker-root],
|
||||
+ [AS_HELP_STRING([--with-texturepacker-root],
|
||||
+ [root dir to search for librarys and includes if building native TexturePacker (default is \$prefix)])],
|
||||
+ [use_texturepacker_root=$withval],
|
||||
+ [use_texturepacker_root=$prefix])
|
||||
+
|
||||
AC_ARG_WITH([lirc-device],
|
||||
[AS_HELP_STRING([--with-lirc-device=file],
|
||||
[specify the default LIRC device (default is /dev/lircd)])],
|
||||
@@ -2000,13 +2006,13 @@
|
||||
|
||||
USE_TEXTUREPACKER_NATIVE=0
|
||||
if test "x$use_texturepacker" != "xno"; then
|
||||
- final_message="$final_message\n TexturePacker:Yes"
|
||||
USE_TEXTUREPACKER=1
|
||||
- if test "x$use_texturepacker_native" = "xyes"; then
|
||||
+ if test "x$cross_compiling" = "xyes"; then
|
||||
USE_TEXTUREPACKER_NATIVE=1
|
||||
- if [[ ! -d "$USE_TEXTUREPACKER_NATIVE_ROOT" ]]; then
|
||||
- USE_TEXTUREPACKER_NATIVE_ROOT=
|
||||
- fi
|
||||
+ USE_TEXTUREPACKER_NATIVE_ROOT="$use_texturepacker_root"
|
||||
+ final_message="$final_message\n TexturePacker:Native ($USE_TEXTUREPACKER_NATIVE_ROOT)"
|
||||
+ else
|
||||
+ final_message="$final_message\n TexturePacker:Yes"
|
||||
fi
|
||||
else
|
||||
final_message="$final_message\n TexturePacker:No"
|
||||
diff -Naur xbmc-frodo-0ff0d2e/lib/libsquish/Makefile.in xbmc-frodo-0ff0d2e.patch/lib/libsquish/Makefile.in
|
||||
--- xbmc-frodo-0ff0d2e/lib/libsquish/Makefile.in 2012-10-11 15:47:26.000000000 +0200
|
||||
+++ xbmc-frodo-0ff0d2e.patch/lib/libsquish/Makefile.in 2012-10-11 16:49:08.873850900 +0200
|
||||
@@ -11,26 +11,25 @@
|
||||
singlecolourfit.cpp \
|
||||
squish.cpp
|
||||
|
||||
-CXXFLAGS+=-I.
|
||||
-
|
||||
-LIB=libsquish.a
|
||||
-
|
||||
-ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
|
||||
-NATIVE_LIB=libsquish-native.so
|
||||
-CLEAN_FILES+=$(NATIVE_LIB)
|
||||
+LIB = libsquish.a
|
||||
+NATIVE_LIB = libsquish-native.so
|
||||
+CLEAN_FILES += $(NATIVE_LIB)
|
||||
+
|
||||
+HOST_CXX ?= g++
|
||||
+CXXFLAGS += -I.
|
||||
+HOST_CXXFLAGS += -I.
|
||||
|
||||
ifeq ($(findstring Darwin,$(shell uname -s)),Darwin)
|
||||
-NATIVE_ARCH=@DARWIN_NATIVE_ARCH@
|
||||
+ HOST_CXXFLAGS += @DARWIN_NATIVE_ARCH@
|
||||
endif
|
||||
|
||||
-all: $(LIB) $(NATIVE_LIB)
|
||||
+$(LIB): $(SRCS)
|
||||
# TexturePacker links to libsquish and needs to run on build system, so make a native flavor.
|
||||
$(NATIVE_LIB): $(SRCS)
|
||||
ifeq ($(findstring Darwin,$(shell uname -s)),Darwin)
|
||||
- g++ $(NATIVE_ARCH) -I. $(SRCS) -dynamiclib -install_name `pwd`/libsquish-native.so -o $@
|
||||
+ $(HOST_CXX) $(HOST_CXXFLAGS) $(SRCS) -dynamiclib -install_name `pwd`/libsquish-native.so -o $@
|
||||
else
|
||||
- g++ -I. $(SRCS) -shared -fPIC -Wl,-soname,`pwd`/libsquish-native.so -o $@
|
||||
-endif
|
||||
+ $(HOST_CXX) $(HOST_CXXFLAGS) $(SRCS) -shared -fPIC -Wl,-soname,`pwd`/libsquish-native.so -o $@
|
||||
endif
|
||||
|
||||
include ../../Makefile.include
|
||||
diff -Naur xbmc-frodo-0ff0d2e/tools/TexturePacker/Makefile.in xbmc-frodo-0ff0d2e.patch/tools/TexturePacker/Makefile.in
|
||||
--- xbmc-frodo-0ff0d2e/tools/TexturePacker/Makefile.in 2012-10-11 15:47:05.000000000 +0200
|
||||
+++ xbmc-frodo-0ff0d2e.patch/tools/TexturePacker/Makefile.in 2012-10-11 16:49:08.874850920 +0200
|
||||
@@ -1,56 +1,54 @@
|
||||
-DEFINES += -D_LINUX -DUSE_LZO_PACKING
|
||||
+DEFINES += -D_LINUX -DUSE_LZO_PACKING
|
||||
ifneq ($(or $(findstring powerpc,@ARCH@),$(findstring ppc, @ARCH@)),)
|
||||
-DEFINES += -DHOST_BIGENDIAN
|
||||
+DEFINES += -DHOST_BIGENDIAN
|
||||
endif
|
||||
|
||||
-CXXFLAGS+= \
|
||||
+SRCS = \
|
||||
+ md5.cpp \
|
||||
+ SDL_anigif.cpp \
|
||||
+ XBTFWriter.cpp \
|
||||
+ XBMCTex.cpp \
|
||||
+ @abs_top_srcdir@/xbmc/guilib/XBTF.cpp
|
||||
+
|
||||
+TARGET = TexturePacker
|
||||
+CLEAN_FILES = $(TARGET)
|
||||
+
|
||||
+all: $(TARGET)
|
||||
+
|
||||
+HOST_CXX ?= g++
|
||||
+HOST_ROOT_PATH = @USE_TEXTUREPACKER_NATIVE_ROOT@
|
||||
+
|
||||
+LIBS += -lSDL_image -lSDL -llzo2
|
||||
+LIBS += -L@abs_top_srcdir@/lib/libsquish -lsquish
|
||||
+HOST_LIBS += -L$(HOST_ROOT_PATH)/lib -lSDL_image -lSDL -llzo2
|
||||
+HOST_LIBS += -L@abs_top_srcdir@/lib/libsquish -lsquish-native
|
||||
+
|
||||
+CXXFLAGS += \
|
||||
-I. \
|
||||
-I@abs_top_srcdir@/lib \
|
||||
-I@abs_top_srcdir@/xbmc \
|
||||
-I@abs_top_srcdir@/xbmc/linux
|
||||
|
||||
-RPATH=-Wl,-rpath=$(NATIVE_ROOT_PATH)/lib
|
||||
+HOST_CXXFLAGS += \
|
||||
+ -I. \
|
||||
+ -I@abs_top_srcdir@/lib \
|
||||
+ -I@abs_top_srcdir@/xbmc \
|
||||
+ -I@abs_top_srcdir@/xbmc/linux \
|
||||
+ -I$(HOST_ROOT_PATH)/include
|
||||
+
|
||||
+RPATH=-Wl,-rpath=$(HOST_ROOT_PATH)/lib
|
||||
|
||||
-ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
|
||||
-NATIVE_ROOT_PATH=@USE_TEXTUREPACKER_NATIVE_ROOT@
|
||||
-ifdef NATIVE_ROOT_PATH
|
||||
ifeq ($(findstring Darwin,$(shell uname -s)),Darwin)
|
||||
DEFINES += -DTARGET_DARWIN
|
||||
NATIVE_ARCH=@DARWIN_NATIVE_ARCH@
|
||||
RPATH=
|
||||
endif
|
||||
-NATIVE_CXXFLAGS+= -I. \
|
||||
- -I$(NATIVE_ROOT_PATH)/include \
|
||||
- -I@abs_top_srcdir@/lib \
|
||||
- -I@abs_top_srcdir@/xbmc \
|
||||
- -I@abs_top_srcdir@/xbmc/linux
|
||||
-NATIVE_LIBS += -L$(NATIVE_ROOT_PATH)/lib
|
||||
-endif
|
||||
-NATIVE_LIBS += -lSDL_image -lSDL -llzo2
|
||||
-NATIVE_LIBS += -L@abs_top_srcdir@/lib/libsquish -lsquish-native
|
||||
-else
|
||||
-LIBS += -L@abs_top_srcdir@/lib/libsquish -lsquish
|
||||
-endif
|
||||
-
|
||||
-LIBS += -lSDL_image -lSDL -llzo2
|
||||
-
|
||||
-SRCS = \
|
||||
- md5.cpp \
|
||||
- SDL_anigif.cpp \
|
||||
- XBTFWriter.cpp \
|
||||
- XBMCTex.cpp \
|
||||
- @abs_top_srcdir@/xbmc/guilib/XBTF.cpp
|
||||
-
|
||||
-
|
||||
-TARGET = TexturePacker
|
||||
-CLEAN_FILES=$(TARGET)
|
||||
-
|
||||
-all: $(TARGET)
|
||||
|
||||
ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
|
||||
# TexturePacker run native on build system, build it with native tools
|
||||
$(TARGET): $(SRCS) @abs_top_srcdir@/xbmc/guilib/XBTF.h
|
||||
- g++ $(DEFINES) $(NATIVE_ARCH) $(NATIVE_CXXFLAGS) $(SRCS) $(NATIVE_LIBS) $(RPATH) -o $(TARGET)
|
||||
+ make -C @abs_top_srcdir@/lib/libsquish libsquish-native.so
|
||||
+ $(HOST_CXX) $(DEFINES) $(NATIVE_ARCH) $(HOST_CXXFLAGS) $(SRCS) $(HOST_LIBS) $(RPATH) -o $(TARGET)
|
||||
clean:
|
||||
rm -f $(TARGET)
|
||||
else
|
File diff suppressed because it is too large
Load Diff
@ -1,34 +0,0 @@
|
||||
commit 7205cbc5abda0a8571170a132bd30fc54a4aa6b6
|
||||
Author: fritsch <peter.fruehberger@gmail.com>
|
||||
Date: Tue Jun 18 18:59:05 2013 +0200
|
||||
|
||||
VPP: SkipDeint was not only meant for interlaced content (fixes Audio out of sync after pause, ffwd)
|
||||
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
index fbe3fd5..0f138aa 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
@@ -771,8 +771,8 @@ void CVPPThread::Process()
|
||||
if(currentFrame.valid)
|
||||
{
|
||||
bool isInterlaced = currentFrame.DVDPic.iFlags & DVP_FLAG_INTERLACED;
|
||||
- if(currentFrame.DVDPic.iFlags & DVP_FLAG_DROPDEINT)
|
||||
- isInterlaced = false;
|
||||
+ //if(currentFrame.DVDPic.iFlags & DVP_FLAG_DROPDEINT)
|
||||
+ // isInterlaced = false;
|
||||
|
||||
EDEINTERLACEMODE mode = g_settings.m_currentVideoSettings.m_DeinterlaceMode;
|
||||
EINTERLACEMETHOD method = g_settings.m_currentVideoSettings.m_InterlaceMethod;
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
index 6ccef59..b7b82c9 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
@@ -181,7 +181,7 @@ public:
|
||||
virtual void Close();
|
||||
virtual const std::string Name() { return "vaapi"; }
|
||||
virtual CCriticalSection* Section() { if(m_display) return m_display.get(); else return NULL; }
|
||||
- virtual bool CanSkipDeint() { return true; }
|
||||
+ virtual bool CanSkipDeint() { return false; }
|
||||
|
||||
int GetBuffer(AVCodecContext *avctx, AVFrame *pic);
|
||||
void RelBuffer(AVCodecContext *avctx, AVFrame *pic);
|
@ -1,95 +0,0 @@
|
||||
commit 6f1d11cf3e44a37b5d90689bda9fc7df11ae8a52
|
||||
Author: fritsch <peter.fruehberger@gmail.com>
|
||||
Date: Wed Jun 19 20:30:44 2013 +0200
|
||||
|
||||
VPP: Implement proper deinterlace skipping
|
||||
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
index 0f138aa..fcc9ec9 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
@@ -569,10 +569,15 @@ int CDecoder::Check(AVCodecContext* avctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+bool CDecoder::CanSkipDeint()
|
||||
+{
|
||||
+ return m_vppth->CanSkipDeint();
|
||||
+}
|
||||
|
||||
CVPPThread::CVPPThread(CDisplayPtr& display, int width, int height)
|
||||
:CThread("VAAPI VPP Thread")
|
||||
,m_stop(false)
|
||||
+ ,m_skipDeinterlace(false)
|
||||
{
|
||||
m_vpp = new CVPP(display, width, height);
|
||||
}
|
||||
@@ -720,6 +725,11 @@ int CVPPThread::GetOutputQueueSize()
|
||||
return m_output_queue.size();
|
||||
}
|
||||
|
||||
+bool CVPPThread::CanSkipDeint()
|
||||
+{
|
||||
+ return m_skipDeinterlace;
|
||||
+}
|
||||
+
|
||||
void CVPPThread::Flush()
|
||||
{
|
||||
CSingleLock lock(m_work_lock);
|
||||
@@ -771,22 +781,22 @@ void CVPPThread::Process()
|
||||
if(currentFrame.valid)
|
||||
{
|
||||
bool isInterlaced = currentFrame.DVDPic.iFlags & DVP_FLAG_INTERLACED;
|
||||
- //if(currentFrame.DVDPic.iFlags & DVP_FLAG_DROPDEINT)
|
||||
- // isInterlaced = false;
|
||||
|
||||
EDEINTERLACEMODE mode = g_settings.m_currentVideoSettings.m_DeinterlaceMode;
|
||||
EINTERLACEMETHOD method = g_settings.m_currentVideoSettings.m_InterlaceMethod;
|
||||
|
||||
- if (m_vpp->DeintBobReady() && (method == VS_INTERLACEMETHOD_VAAPI_AUTO || method == VS_INTERLACEMETHOD_AUTO)
|
||||
- && (mode == VS_DEINTERLACEMODE_FORCE || (mode == VS_DEINTERLACEMODE_AUTO && isInterlaced)))
|
||||
+ if (m_vpp->DeintBobReady() && !(currentFrame.DVDPic.iFlags & DVP_FLAG_DROPDEINT)
|
||||
+ && (method == VS_INTERLACEMETHOD_VAAPI_AUTO || method == VS_INTERLACEMETHOD_AUTO)
|
||||
+ && (mode == VS_DEINTERLACEMODE_FORCE || (mode == VS_DEINTERLACEMODE_AUTO && isInterlaced)))
|
||||
{
|
||||
bool topField = currentFrame.DVDPic.iFlags & DVP_FLAG_TOP_FIELD_FIRST;
|
||||
-
|
||||
+ m_skipDeinterlace = true;
|
||||
DoDeinterlacing(currentFrame, topField);
|
||||
DoDeinterlacing(currentFrame, !topField);
|
||||
}
|
||||
else
|
||||
{
|
||||
+ m_skipDeinterlace = false;
|
||||
CVPPRenderPicture res;
|
||||
res.valid = true;
|
||||
res.DVDPic = currentFrame.DVDPic;
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
index b7b82c9..8361ff0 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
@@ -134,6 +134,7 @@ public:
|
||||
|
||||
void InsertNewFrame(CVPPDecodedPicture &new_frame);
|
||||
void WaitForOutput(unsigned long msec = 0);
|
||||
+ virtual bool CanSkipDeint();
|
||||
CVPPRenderPicture GetOutputPicture();
|
||||
|
||||
int GetInputQueueSize();
|
||||
@@ -153,6 +154,7 @@ protected:
|
||||
CVPP *m_vpp;
|
||||
|
||||
bool m_stop;
|
||||
+ bool m_skipDeinterlace;
|
||||
|
||||
CCriticalSection m_work_lock;
|
||||
|
||||
@@ -181,7 +183,7 @@ public:
|
||||
virtual void Close();
|
||||
virtual const std::string Name() { return "vaapi"; }
|
||||
virtual CCriticalSection* Section() { if(m_display) return m_display.get(); else return NULL; }
|
||||
- virtual bool CanSkipDeint() { return false; }
|
||||
+ virtual bool CanSkipDeint();
|
||||
|
||||
int GetBuffer(AVCodecContext *avctx, AVFrame *pic);
|
||||
void RelBuffer(AVCodecContext *avctx, AVFrame *pic);
|
@ -1,13 +0,0 @@
|
||||
diff -Naur xbmc-12.2-83bda98/xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.cpp xbmc-12.2-83bda98.patch/xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.cpp
|
||||
--- xbmc-12.2-83bda98/xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.cpp 2013-08-25 21:45:30.000000000 +0200
|
||||
+++ xbmc-12.2-83bda98.patch/xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.cpp 2013-08-26 01:26:41.950633846 +0200
|
||||
@@ -277,7 +277,9 @@
|
||||
case 0: g_guiSettings.SetInt("audiooutput.mode", AUDIO_ANALOG ); break;
|
||||
case 1: g_guiSettings.SetInt("audiooutput.mode", AUDIO_IEC958 ); bitstream = true; break;
|
||||
case 2: g_guiSettings.SetInt("audiooutput.mode", AUDIO_HDMI ); bitstream = true; break;
|
||||
+#ifdef TARGET_RASPBERRY_PI
|
||||
case 3: g_guiSettings.SetInt("audiooutput.mode", AUDIO_BOTH ); break;
|
||||
+#endif
|
||||
}
|
||||
|
||||
EnableSettings(AUDIO_SETTINGS_OUTPUT_TO_ALL_SPEAKERS, bitstream);
|
Loading…
x
Reference in New Issue
Block a user