xbmc-pvr: merge with package 'xbmc'

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2012-09-03 16:47:37 +02:00
parent 0e7f129621
commit 352d53effa
89 changed files with 7 additions and 33662 deletions

View File

@ -19,11 +19,7 @@
################################################################################
PKG_NAME="xbmc-theme-Confluence"
if [ "$PVR" = yes ]; then
PKG_VERSION="pvr-11.0.2"
else
PKG_VERSION="11.0.1"
fi
PKG_VERSION="11.0.2"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -1,14 +0,0 @@
--- xbmc-theme-Confluence-11.0.1/720p/IncludesHomeMenuItems.xml 2012-03-31 08:37:23.304505434 +0400
+++ xbmc-theme-Confluence-11.0.1/720p/IncludesHomeMenuItems.patch.xml 2012-03-31 08:39:57.894660377 +0400
@@ -183,6 +183,11 @@
<label>5</label>
<onclick>ActivateWindow(Settings)</onclick>
</control>
+ <control type="button" id="90120">
+ <include>ButtonHomeSubCommonValues</include>
+ <label>[COLOR FF757677]Open[/COLOR][COLOR FF8ABEE2]ELEC[/COLOR]</label>
+ <onclick>RunAddon(os.openelec.settings)</onclick>
+ </control>
<control type="button" id="90123">
<include>ButtonHomeSubCommonValues</include>
<label>7</label>

View File

@ -1,62 +0,0 @@
From 3e1367b680b26123e9e1aa09f8caf2a932d47572 Mon Sep 17 00:00:00 2001
From: Lars Op den Kamp <lars@opdenkamp.eu>
Date: Tue, 17 Apr 2012 01:57:43 +0200
Subject: [PATCH 2/2] cec: libCEC 1.6 support and fixes. libCEC 1.6+ is needed
when using firmware v2 on the CEC adapter, which adds
wake over CEC * added a new setting to control
whether to put the TV in standby when the player is put
in standby. * added some button mappings: all menu
related buttons -> menu, previous channel -> teletext,
added support for the channels list on samsung, mapped
next fav -> menu (when available) * display the
firmware version in the peripheral manager (if
available) * handle the new CEC alert callback
(libCEC 1.6+) * replaced 'Put this PC in standby mode
when the TV is switched off' with an enum that allows
the user to chose between 'Ignore', 'Suspend' and
'Shutdown' * fixed - crash when changing settings
without libCEC started. * fixed - range of wake and
power-off devices * fixed - update the correct
standby device setting ('standby_devices' not
'wake_devices') * fixed - don't get the settings from
the eeprom, but always use the settings provided in
xbmc
---
.../720p/DialogPeripheralManager.xml | 4 +-
configure.in | 2 +-
language/English/strings.xml | 5 +-
project/BuildDependencies/scripts/libcec_d.txt | 2 +-
system/peripherals.xml | 15 +-
tools/darwin/depends/libcec/Makefile | 2 +-
xbmc/peripherals/bus/PeripheralBus.cpp | 1 +
xbmc/peripherals/devices/Peripheral.h | 2 +
xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 160 ++++++++++++++++----
xbmc/peripherals/devices/PeripheralCecAdapter.h | 4 +
10 files changed, 152 insertions(+), 45 deletions(-)
diff --git a/720p/DialogPeripheralManager.xml b/720p/DialogPeripheralManager.xml
index 07954d0..5717017 100644
--- a/720p/DialogPeripheralManager.xml
+++ b/720p/DialogPeripheralManager.xml
@@ -117,7 +117,7 @@
<posy>50</posy>
<width>520</width>
<height>20</height>
- <label>$LOCALIZE[35501]: [COLOR=grey2]$INFO[ListItem.Property(Class)][/COLOR]</label>
+ <label>$LOCALIZE[35501]: [COLOR=grey2]$INFO[ListItem.Property(Class)][/COLOR] $LOCALIZE[19114]: [COLOR=grey2]$INFO[ListItem.Property(Version)][/COLOR]</label>
<align>left</align>
<aligny>center</aligny>
<font>font12</font>
@@ -173,7 +173,7 @@
<posy>50</posy>
<width>520</width>
<height>20</height>
- <label>$LOCALIZE[35501]: [COLOR=grey2]$INFO[ListItem.Property(Class)][/COLOR]</label>
+ <label>$LOCALIZE[35501]: [COLOR=grey2]$INFO[ListItem.Property(Class)][/COLOR] $LOCALIZE[19114]: [COLOR=grey2]$INFO[ListItem.Property(Version)][/COLOR]</label>
<align>left</align>
<aligny>center</aligny>
<font>font12</font>
--
1.7.5.4

View File

@ -29,9 +29,7 @@ mkdir -p $INSTALL/usr/bin
cp $PKG_DIR/scripts/gputemp $INSTALL/usr/bin
cp $PKG_DIR/scripts/wait_on_xbmc_exit $INSTALL/usr/bin
cp $PKG_BUILD/tools/EventClients/Clients/XBMC\ Send/xbmc-send.py $INSTALL/usr/bin/xbmc-send
if [ "$PVR" = yes ]; then
cp $PKG_DIR/scripts/setwakeup.sh $INSTALL/usr/bin
fi
cp $PKG_DIR/scripts/setwakeup.sh $INSTALL/usr/bin
mkdir -p $INSTALL/usr/lib/xbmc
cp $PKG_BUILD/xbmc.bin $INSTALL/usr/lib/xbmc

View File

@ -19,11 +19,7 @@
################################################################################
PKG_NAME="xbmc"
if [ "$PVR" = yes ]; then
PKG_VERSION="pvr-11.0.2"
else
PKG_VERSION="11.0.1"
fi
PKG_VERSION="11.0.2"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"
@ -46,6 +42,10 @@ PKG_AUTORECONF="no"
PKG_DEPENDS="$PKG_DEPENDS Imaging"
PKG_DEPENDS="$PKG_DEPENDS simplejson"
# various PVR clients
PKG_DEPENDS="$PKG_DEPENDS xbmc-addon-xvdr xbmc-addon-njoy"
PKG_DEPENDS="$PKG_DEPENDS xbmc-addon-xvdr xbmc-addon-vuplus"
if [ "$DISPLAYSERVER" = "xorg-server" ]; then
# for libX11 support
PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libX11 libXext"
@ -149,8 +149,3 @@ fi
if [ "$XVBA" = yes ]; then
PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS xf86-video-fglrx"
fi
if [ "$PVR" = yes ]; then
PKG_DEPENDS="$PKG_DEPENDS xbmc-addon-xvdr xbmc-addon-njoy"
PKG_DEPENDS="$PKG_DEPENDS xbmc-addon-xvdr xbmc-addon-vuplus"
fi

View File

@ -1,29 +0,0 @@
From 35e4a2eb5515fe72d87b6d78b0567609df79df2b Mon Sep 17 00:00:00 2001
From: bobo1on1 <bob-nospam-@xbmc.org>
Date: Wed, 28 Mar 2012 21:30:25 +0200
Subject: [PATCH] fixed: possible deadlock
---
xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
index 0cb6602..1c91341 100644
--- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
@@ -140,8 +140,10 @@ void CPeripheralCecAdapter::Announce(AnnouncementFlag flag, const char *sender,
else if (flag == System && !strcmp(sender, "xbmc") && !strcmp(message, "OnSleep"))
{
// this will also power off devices when we're the active source
- CSingleLock lock(m_critSection);
- m_bStop = true;
+ {
+ CSingleLock lock(m_critSection);
+ m_bStop = true;
+ }
WaitForThreadExit(0);
}
else if (flag == System && !strcmp(sender, "xbmc") && !strcmp(message, "OnWake"))
--
1.7.5.4

View File

@ -1,41 +0,0 @@
From de4cd8d63257af1cb9060c4b2b304a82655adb99 Mon Sep 17 00:00:00 2001
From: bobo1on1 <bob-nospam-@xbmc.org>
Date: Wed, 28 Mar 2012 21:31:46 +0200
Subject: [PATCH] fixed: make sure the old thread is stopped before starting a
new one, fixes throwing an exception in the main thread
---
xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
index 1c91341..a898a16 100644
--- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
@@ -148,15 +148,17 @@ void CPeripheralCecAdapter::Announce(AnnouncementFlag flag, const char *sender,
}
else if (flag == System && !strcmp(sender, "xbmc") && !strcmp(message, "OnWake"))
{
- // reconnect to the device
- CSingleLock lock(m_critSection);
- CLog::Log(LOGDEBUG, "%s - reconnecting to the CEC adapter after standby mode", __FUNCTION__);
+ {
+ // reconnect to the device
+ CSingleLock lock(m_critSection);
+ CLog::Log(LOGDEBUG, "%s - reconnecting to the CEC adapter after standby mode", __FUNCTION__);
- // close the previous connection
- m_cecAdapter->Close();
+ // close the previous connection
+ m_cecAdapter->Close();
+ }
// and open a new one
- m_bStop = false;
+ StopThread();
Create();
}
}
--
1.7.5.4

View File

@ -1,630 +0,0 @@
diff -Naur xbmc-pvr-11.0.1/configure.in xbmc-pvr-11.0.1.patch/configure.in
--- xbmc-pvr-11.0.1/configure.in 2012-04-17 14:08:05.972587511 +0200
+++ xbmc-pvr-11.0.1.patch/configure.in 2012-04-17 14:18:39.755586920 +0200
@@ -1173,7 +1173,7 @@
# libcec is dyloaded, so we need to check for its headers and link any depends.
if test "x$use_libcec" != "xno"; then
- PKG_CHECK_MODULES([CEC],[libcec >= 1.5.0],,[use_libcec="no";AC_MSG_RESULT($libcec_disabled)])
+ PKG_CHECK_MODULES([CEC],[libcec >= 1.6.0],,[use_libcec="no";AC_MSG_RESULT($libcec_disabled)])
if test "x$use_libcec" != "xno"; then
INCLUDES="$INCLUDES $CEC_CFLAGS"
diff -Naur xbmc-pvr-11.0.1/language/English/strings.xml xbmc-pvr-11.0.1.patch/language/English/strings.xml
--- xbmc-pvr-11.0.1/language/English/strings.xml 2012-04-17 14:08:05.974587546 +0200
+++ xbmc-pvr-11.0.1.patch/language/English/strings.xml 2012-04-17 14:18:39.757586958 +0200
@@ -2853,7 +2853,7 @@
<string id="36011">Could not detect the CEC port. Set it up manually.</string>
<string id="36012">Could not initialise the CEC adapter. Check your settings.</string>
<string id="36013">Unsupported libCEC interface version. %d is greater than the version XBMC supports (%d)</string>
- <string id="36014">Put this PC in standby mode when the TV is switched off</string>
+ <string id="36014">When the TV is switched off</string>
<string id="36015">HDMI port number</string>
<string id="36016">Connected</string> <!-- max. 13 characters -->
<string id="36017">Adapter found, but libCEC is not available</string>
@@ -2865,4 +2865,7 @@
<string id="36023">Configuration updated</string>
<string id="36024">Failed to set the new configuration. Please check your settings.</string>
<string id="36025">Send 'inactive source' command when stopping XBMC</string>
+ <string id="36026">Put devices in standby mode when putting the PC in standby</string>
+ <string id="36027">This device needs servicing</string>
+ <string id="36028">Ignore</string>
</strings>
diff -Naur xbmc-pvr-11.0.1/system/peripherals.xml xbmc-pvr-11.0.1.patch/system/peripherals.xml
--- xbmc-pvr-11.0.1/system/peripherals.xml 2012-04-17 14:08:05.975587564 +0200
+++ xbmc-pvr-11.0.1.patch/system/peripherals.xml 2012-04-17 14:18:39.757586958 +0200
@@ -14,13 +14,14 @@
<setting key="wake_devices" type="string" value="0" label="36007" order="3" />
<setting key="standby_devices" type="string" value="0" label="36008" order="4" />
<setting key="cec_standby_screensaver" type="bool" value="1" label="36009" order="5" />
- <setting key="standby_pc_on_tv_standby" type="bool" value="1" label="36014" order="6" />
- <setting key="send_inactive_source" type="bool" value="1" label="36025" order="7" />
- <setting key="use_tv_menu_language" type="bool" value="1" label="36018" order="8" />
- <setting key="physical_address" type="string" label="36021" value="0" order="9" />
- <setting key="cec_hdmi_port" type="int" value="1" min="1" max="16" label="36015" order="10" />
- <setting key="connected_device" type="int" label="36019" value="0" min="0" max="15" step="1" order="11" />
- <setting key="port" type="string" value="" label="36022" order="12" />
+ <setting key="standby_pc_on_tv_standby" type="enum" value="13011" label="36014" order="6" lvalues="36028|13005|13011" />
+ <setting key="standby_tv_on_pc_standby" type="bool" value="1" label="36026" order="7" />
+ <setting key="send_inactive_source" type="bool" value="1" label="36025" order="8" />
+ <setting key="use_tv_menu_language" type="bool" value="1" label="36018" order="9" />
+ <setting key="physical_address" type="string" label="36021" value="0" order="10" />
+ <setting key="cec_hdmi_port" type="int" value="1" min="1" max="15" label="36015" order="11" />
+ <setting key="connected_device" type="int" label="36019" value="0" min="0" max="15" step="1" order="12" />
+ <setting key="port" type="string" value="" label="36022" order="13" />
<setting key="tv_vendor" type="int" value="0" configurable="0" />
<setting key="device_name" type="string" value="XBMC" configurable="0" />
diff -Naur xbmc-pvr-11.0.1/xbmc/peripherals/bus/PeripheralBus.cpp xbmc-pvr-11.0.1.patch/xbmc/peripherals/bus/PeripheralBus.cpp
--- xbmc-pvr-11.0.1/xbmc/peripherals/bus/PeripheralBus.cpp 2012-03-27 17:55:34.000000000 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/peripherals/bus/PeripheralBus.cpp 2012-04-17 14:18:39.758586977 +0200
@@ -323,6 +323,7 @@
peripheralFile->SetProperty("bus", PeripheralTypeTranslator::BusTypeToString(peripheral->GetBusType()));
peripheralFile->SetProperty("location", peripheral->Location());
peripheralFile->SetProperty("class", PeripheralTypeTranslator::TypeToString(peripheral->Type()));
+ peripheralFile->SetProperty("version", peripheral->GetVersionInfo());
items.Add(peripheralFile);
}
}
diff -Naur xbmc-pvr-11.0.1/xbmc/peripherals/devices/PeripheralCecAdapter.cpp xbmc-pvr-11.0.1.patch/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
--- xbmc-pvr-11.0.1/xbmc/peripherals/devices/PeripheralCecAdapter.cpp 2012-04-17 14:17:35.207364830 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/peripherals/devices/PeripheralCecAdapter.cpp 2012-04-17 14:18:39.760587015 +0200
@@ -41,7 +41,7 @@
using namespace ANNOUNCEMENT;
using namespace CEC;
-#define CEC_LIB_SUPPORTED_VERSION 0x1500
+#define CEC_LIB_SUPPORTED_VERSION 0x1600
/* time in seconds to ignore standby commands from devices after the screensaver has been activated */
#define SCREENSAVER_TIMEOUT 10
@@ -80,7 +80,9 @@
m_lastKeypress(0),
m_lastChange(VOLUME_CHANGE_NONE),
m_iExitCode(0),
- m_bIsMuted(false) // TODO fetch the correct initial value when system audiostatus is implemented in libCEC
+ m_bIsMuted(false), // TODO fetch the correct initial value when system audiostatus is implemented in libCEC
+ m_bGoingToStandby(false),
+ m_bIsRunning(false)
{
m_button.iButton = 0;
m_button.iDuration = 0;
@@ -96,6 +98,7 @@
m_bStop = true;
StopThread(true);
+ CAnnouncementManager::RemoveAnnouncer(this);
if (m_dll && m_cecAdapter)
{
@@ -110,7 +113,11 @@
{
if (flag == System && !strcmp(sender, "xbmc") && !strcmp(message, "OnQuit") && m_bIsReady)
{
- m_iExitCode = data.asInteger(0);
+ {
+ CSingleLock lock(m_critSection);
+ m_iExitCode = data.asInteger(0);
+ }
+ CAnnouncementManager::RemoveAnnouncer(this);
StopThread(false);
}
else if (flag == GUI && !strcmp(sender, "xbmc") && !strcmp(message, "OnScreensaverDeactivated") && m_bIsReady)
@@ -142,23 +149,22 @@
// this will also power off devices when we're the active source
{
CSingleLock lock(m_critSection);
- m_bStop = true;
+ m_bGoingToStandby = false;
}
- WaitForThreadExit(0);
+ StopThread();
}
else if (flag == System && !strcmp(sender, "xbmc") && !strcmp(message, "OnWake"))
{
{
- // reconnect to the device
CSingleLock lock(m_critSection);
- CLog::Log(LOGDEBUG, "%s - reconnecting to the CEC adapter after standby mode", __FUNCTION__);
-
- // close the previous connection
- m_cecAdapter->Close();
+ m_iExitCode = EXITCODE_RESTARTAPP;
}
- // and open a new one
+ CLog::Log(LOGDEBUG, "%s - reconnecting to the CEC adapter after standby mode", __FUNCTION__);
+ CAnnouncementManager::RemoveAnnouncer(this);
StopThread();
+
+ // and open a new one
Create();
}
}
@@ -172,6 +178,7 @@
m_callbacks.CBCecKeyPress = &CecKeyPress;
m_callbacks.CBCecCommand = &CecCommand;
m_callbacks.CBCecConfigurationChanged = &CecConfiguration;
+ m_callbacks.CBCecAlert = &CecAlert;
m_configuration.callbackParam = this;
m_configuration.callbacks = &m_callbacks;
@@ -200,6 +207,8 @@
else
{
CLog::Log(LOGDEBUG, "%s - using libCEC v%s", __FUNCTION__, m_cecAdapter->ToString((cec_server_version)m_configuration.serverVersion));
+ if (m_configuration.serverVersion >= CEC_SERVER_VERSION_1_6_0)
+ m_strVersionInfo.Format("%d", m_configuration.iFirmwareVersion);
}
m_bStarted = true;
@@ -297,6 +306,13 @@
if (!OpenConnection())
return;
+ {
+ CSingleLock lock(m_critSection);
+ m_iExitCode = EXITCODE_QUIT;
+ m_bGoingToStandby = false;
+ m_bIsRunning = true;
+ }
+
CAnnouncementManager::AddAnnouncer(this);
m_queryThread = new CPeripheralCecAdapterUpdateThread(this, &m_configuration);
@@ -312,8 +328,17 @@
}
delete m_queryThread;
+ m_queryThread = NULL;
+
+ bool bSendStandbyCommands(false);
+ {
+ CSingleLock lock(m_critSection);
+ bSendStandbyCommands = m_iExitCode != EXITCODE_REBOOT &&
+ m_iExitCode != EXITCODE_RESTARTAPP &&
+ (!m_bGoingToStandby || GetSettingBool("standby_tv_on_pc_standby"));
+ }
- if (m_iExitCode != EXITCODE_REBOOT)
+ if (bSendStandbyCommands)
{
if (m_cecAdapter->IsLibCECActiveSource())
{
@@ -337,7 +362,12 @@
m_cecAdapter->Close();
CLog::Log(LOGDEBUG, "%s - CEC adapter processor thread ended", __FUNCTION__);
- m_bStarted = false;
+
+ {
+ CSingleLock lock(m_critSection);
+ m_bStarted = false;
+ m_bIsRunning = false;
+ }
}
bool CPeripheralCecAdapter::HasConnectedAudioSystem(void)
@@ -556,11 +586,15 @@
case CEC_OPCODE_STANDBY:
/* a device was put in standby mode */
CLog::Log(LOGDEBUG, "%s - device %1x was put in standby mode", __FUNCTION__, command.initiator);
- if (command.initiator == CECDEVICE_TV && adapter->m_configuration.bPowerOffOnStandby == 1 &&
+ if (command.initiator == CECDEVICE_TV &&
+ (adapter->m_configuration.bPowerOffOnStandby == 1 || adapter->m_configuration.bShutdownOnStandby == 1) &&
(!adapter->m_screensaverLastActivated.IsValid() || CDateTime::GetCurrentDateTime() - adapter->m_screensaverLastActivated > CDateTimeSpan(0, 0, 0, SCREENSAVER_TIMEOUT)))
{
adapter->m_bStarted = false;
- g_application.getApplicationMessenger().Suspend();
+ if (adapter->m_configuration.bPowerOffOnStandby == 1)
+ g_application.getApplicationMessenger().Suspend();
+ else if (adapter->m_configuration.bShutdownOnStandby == 1)
+ g_application.getApplicationMessenger().Shutdown();
}
break;
case CEC_OPCODE_SET_MENU_LANGUAGE:
@@ -634,6 +668,30 @@
return 1;
}
+int CPeripheralCecAdapter::CecAlert(void *cbParam, const libcec_alert alert, const libcec_parameter &data)
+{
+ (void)data;
+
+ CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam;
+ if (!adapter)
+ return 0;
+
+ int iAlertString(0);
+ switch (alert)
+ {
+ case CEC_ALERT_SERVICE_DEVICE:
+ iAlertString = 36027;
+ break;
+ default:
+ break;
+ }
+
+ if (iAlertString)
+ CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(36000), g_localizeStrings.Get(iAlertString));
+
+ return 1;
+}
+
int CPeripheralCecAdapter::CecKeyPress(void *cbParam, const cec_keypress &key)
{
CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam;
@@ -695,6 +753,10 @@
case CEC_USER_CONTROL_CODE_RIGHT_DOWN:
iButton = XINPUT_IR_REMOTE_RIGHT;
break;
+ case CEC_USER_CONTROL_CODE_NEXT_FAVORITE:
+ case CEC_USER_CONTROL_CODE_SETUP_MENU:
+ case CEC_USER_CONTROL_CODE_CONTENTS_MENU:
+ case CEC_USER_CONTROL_CODE_FAVORITE_MENU:
case CEC_USER_CONTROL_CODE_ROOT_MENU:
iButton = XINPUT_IR_REMOTE_MENU;
break;
@@ -711,7 +773,11 @@
iButton = XINPUT_IR_REMOTE_CHANNEL_PLUS;
break;
case CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL:
+#if defined(XINPUT_IR_REMOTE_TELETEXT)
+ iButton = XINPUT_IR_REMOTE_TELETEXT; // only supported by the pvr branch
+#else
iButton = XINPUT_IR_REMOTE_BACK;
+#endif
break;
case CEC_USER_CONTROL_CODE_SOUND_SELECT:
iButton = XINPUT_IR_REMOTE_LANGUAGE;
@@ -806,13 +872,23 @@
case CEC_USER_CONTROL_CODE_F4_YELLOW:
iButton = XINPUT_IR_REMOTE_YELLOW;
break;
+ case CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE:
+#if defined(XINPUT_IR_REMOTE_GUIDE)
+ iButton = XINPUT_IR_REMOTE_GUIDE;
+#else
+ bHasButton = false;
+#endif
+ break;
+ case CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST:
+#if defined(XINPUT_IR_REMOTE_LIVE_TV)
+ iButton = XINPUT_IR_REMOTE_LIVE_TV;
+#else
+ bHasButton = false;
+#endif
+ break;
case CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION:
case CEC_USER_CONTROL_CODE_EJECT:
- case CEC_USER_CONTROL_CODE_SETUP_MENU:
- case CEC_USER_CONTROL_CODE_CONTENTS_MENU:
- case CEC_USER_CONTROL_CODE_FAVORITE_MENU:
case CEC_USER_CONTROL_CODE_DOT:
- case CEC_USER_CONTROL_CODE_NEXT_FAVORITE:
case CEC_USER_CONTROL_CODE_INPUT_SELECT:
case CEC_USER_CONTROL_CODE_INITIAL_CONFIGURATION:
case CEC_USER_CONTROL_CODE_HELP:
@@ -821,7 +897,6 @@
case CEC_USER_CONTROL_CODE_ANGLE:
case CEC_USER_CONTROL_CODE_SUB_PICTURE:
case CEC_USER_CONTROL_CODE_VIDEO_ON_DEMAND:
- case CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE:
case CEC_USER_CONTROL_CODE_TIMER_PROGRAMMING:
case CEC_USER_CONTROL_CODE_PLAY_FUNCTION:
case CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION:
@@ -894,11 +969,15 @@
else if (bEnabled && !m_cecAdapter && m_bStarted)
InitialiseFeature(FEATURE_CEC);
}
- else
+ else if (IsRunning())
{
SetConfigurationFromSettings();
m_queryThread->UpdateConfiguration(&m_configuration);
}
+ else
+ {
+ InitialiseFeature(FEATURE_CEC);
+ }
}
int CPeripheralCecAdapter::CecLogMessage(void *cbParam, const cec_log_message &message)
@@ -962,7 +1041,7 @@
// set the physical address, when baseDevice or iHDMIPort are not set
if (m_configuration.baseDevice == CECDEVICE_UNKNOWN ||
- m_configuration.iHDMIPort == 0 || m_configuration.iHDMIPort > 4)
+ m_configuration.iHDMIPort == 0 || m_configuration.iHDMIPort > 15)
{
m_configuration.iPhysicalAddress = config.iPhysicalAddress;
CStdString strPhysicalAddress;
@@ -977,7 +1056,7 @@
// set the devices to wake when starting
m_configuration.wakeDevices = config.wakeDevices;
CStdString strWakeDevices;
- for (unsigned int iPtr = 0; iPtr <= 16; iPtr++)
+ for (unsigned int iPtr = CECDEVICE_TV; iPtr <= CECDEVICE_BROADCAST; iPtr++)
if (config.wakeDevices[iPtr])
strWakeDevices.AppendFormat(" %X", iPtr);
SetSetting("wake_devices", strWakeDevices.Trim());
@@ -985,10 +1064,10 @@
// set the devices to power off when stopping
m_configuration.powerOffDevices = config.powerOffDevices;
CStdString strPowerOffDevices;
- for (unsigned int iPtr = 0; iPtr <= 16; iPtr++)
+ for (unsigned int iPtr = CECDEVICE_TV; iPtr <= CECDEVICE_BROADCAST; iPtr++)
if (config.powerOffDevices[iPtr])
strPowerOffDevices.AppendFormat(" %X", iPtr);
- SetSetting("wake_devices", strPowerOffDevices.Trim());
+ SetSetting("standby_devices", strPowerOffDevices.Trim());
// set the boolean settings
m_configuration.bUseTVMenuLanguage = config.bUseTVMenuLanguage;
@@ -1001,17 +1080,27 @@
SetSetting("cec_standby_screensaver", m_configuration.bPowerOffScreensaver == 1);
m_configuration.bPowerOffOnStandby = config.bPowerOffOnStandby;
- SetSetting("standby_pc_on_tv_standby", m_configuration.bPowerOffOnStandby == 1);
if (config.serverVersion >= CEC_SERVER_VERSION_1_5_1)
m_configuration.bSendInactiveSource = config.bSendInactiveSource;
SetSetting("send_inactive_source", m_configuration.bSendInactiveSource == 1);
+
+ if (config.serverVersion >= CEC_SERVER_VERSION_1_6_0)
+ {
+ m_configuration.iFirmwareVersion = config.iFirmwareVersion;
+ m_strVersionInfo.Format("%d", m_configuration.iFirmwareVersion);
+ m_configuration.bShutdownOnStandby = config.bShutdownOnStandby;
+ }
+
+ SetSetting("standby_pc_on_tv_standby",
+ m_configuration.bPowerOffOnStandby == 1 ? 13011 :
+ m_configuration.bShutdownOnStandby == 1 ? 13005 : 36028);
}
void CPeripheralCecAdapter::SetConfigurationFromSettings(void)
{
- // client version 1.5.0
- m_configuration.clientVersion = CEC_CLIENT_VERSION_1_5_1;
+ // client version 1.6.0
+ m_configuration.clientVersion = CEC_CLIENT_VERSION_1_6_0;
// device name 'XBMC'
snprintf(m_configuration.strDeviceName, 13, "%s", GetSettingString("device_name").c_str());
@@ -1061,15 +1150,16 @@
m_configuration.powerOffDevices.Clear();
ReadLogicalAddresses(strStandbyDevices, m_configuration.powerOffDevices);
- // always get the settings from the rom, when supported by the firmware
- m_configuration.bGetSettingsFromROM = 1;
-
// read the boolean settings
m_configuration.bUseTVMenuLanguage = GetSettingBool("use_tv_menu_language") ? 1 : 0;
m_configuration.bActivateSource = GetSettingBool("activate_source") ? 1 : 0;
m_configuration.bPowerOffScreensaver = GetSettingBool("cec_standby_screensaver") ? 1 : 0;
- m_configuration.bPowerOffOnStandby = GetSettingBool("standby_pc_on_tv_standby") ? 1 : 0;
m_configuration.bSendInactiveSource = GetSettingBool("send_inactive_source") ? 1 : 0;
+
+ // read the mutually exclusive boolean settings
+ int iStandbyAction(GetSettingInt("standby_pc_on_tv_standby"));
+ m_configuration.bPowerOffOnStandby = iStandbyAction == 13011 ? 1 : 0;
+ m_configuration.bShutdownOnStandby = iStandbyAction == 13005 ? 1 : 0;
}
void CPeripheralCecAdapter::ReadLogicalAddresses(const CStdString &strString, cec_logical_addresses &addresses)
@@ -1203,6 +1293,12 @@
return true;
}
+bool CPeripheralCecAdapter::IsRunning(void) const
+{
+ CSingleLock lock(m_critSection);
+ return m_bIsRunning;
+}
+
void CPeripheralCecAdapterUpdateThread::Process(void)
{
// set the initial configuration
diff -Naur xbmc-pvr-11.0.1/xbmc/peripherals/devices/PeripheralCecAdapter.h xbmc-pvr-11.0.1.patch/xbmc/peripherals/devices/PeripheralCecAdapter.h
--- xbmc-pvr-11.0.1/xbmc/peripherals/devices/PeripheralCecAdapter.h 2012-04-17 14:08:06.071589381 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/peripherals/devices/PeripheralCecAdapter.h 2012-04-17 14:18:39.761587034 +0200
@@ -115,6 +115,8 @@
static int CecLogMessage(void *cbParam, const CEC::cec_log_message &message);
static int CecCommand(void *cbParam, const CEC::cec_command &command);
static int CecConfiguration(void *cbParam, const CEC::libcec_configuration &config);
+ static int CecAlert(void *cbParam, const CEC::libcec_alert alert, const CEC::libcec_parameter &data);
+ bool IsRunning(void) const;
virtual bool GetNextKey(void);
virtual bool GetNextCecKey(CEC::cec_keypress &key);
@@ -140,6 +142,8 @@
CecVolumeChange m_lastChange;
int m_iExitCode;
bool m_bIsMuted;
+ bool m_bGoingToStandby;
+ bool m_bIsRunning;
CPeripheralCecAdapterUpdateThread*m_queryThread;
CEC::ICECCallbacks m_callbacks;
CCriticalSection m_critSection;
diff -Naur xbmc-pvr-11.0.1/xbmc/peripherals/devices/Peripheral.cpp xbmc-pvr-11.0.1.patch/xbmc/peripherals/devices/Peripheral.cpp
--- xbmc-pvr-11.0.1/xbmc/peripherals/devices/Peripheral.cpp 2012-04-17 14:08:06.104590004 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/peripherals/devices/Peripheral.cpp 2012-04-17 14:18:39.752586865 +0200
@@ -211,7 +211,15 @@
case SETTINGS_TYPE_INT:
{
const CSettingInt *mappedSetting = (const CSettingInt *) setting;
- CSettingInt *intSetting = new CSettingInt(mappedSetting->GetOrder(), strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->m_iMin, mappedSetting->m_iStep, mappedSetting->m_iMax, mappedSetting->GetControlType(), mappedSetting->m_strFormat);
+ CSettingInt *intSetting(NULL);
+ if (mappedSetting->GetControlType() == SPIN_CONTROL_INT)
+ {
+ intSetting = new CSettingInt(mappedSetting->GetOrder(), strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->m_iMin, mappedSetting->m_iStep, mappedSetting->m_iMax, mappedSetting->GetControlType(), mappedSetting->m_strFormat);
+ }
+ else if (mappedSetting->GetControlType() == SPIN_CONTROL_TEXT)
+ {
+ intSetting = new CSettingInt(mappedSetting->GetOrder(), strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->m_entries, mappedSetting->GetControlType());
+ }
if (intSetting)
{
intSetting->SetVisible(mappedSetting->IsVisible());
diff -Naur xbmc-pvr-11.0.1/xbmc/peripherals/devices/Peripheral.h xbmc-pvr-11.0.1.patch/xbmc/peripherals/devices/Peripheral.h
--- xbmc-pvr-11.0.1/xbmc/peripherals/devices/Peripheral.h 2012-04-17 14:08:06.104590004 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/peripherals/devices/Peripheral.h 2012-04-17 14:18:39.758586977 +0200
@@ -53,6 +53,7 @@
const CStdString &DeviceName(void) const { return m_strDeviceName; }
bool IsHidden(void) const { return m_bHidden; }
void SetHidden(bool bSetTo = true) { m_bHidden = bSetTo; }
+ const CStdString &GetVersionInfo(void) const { return m_strVersionInfo; }
/*!
* @brief Check whether this device has the given feature.
@@ -161,6 +162,7 @@
CStdString m_strVendorId;
int m_iProductId;
CStdString m_strProductId;
+ CStdString m_strVersionInfo;
bool m_bInitialised;
bool m_bHidden;
bool m_bError;
diff -Naur xbmc-pvr-11.0.1/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp xbmc-pvr-11.0.1.patch/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp
--- xbmc-pvr-11.0.1/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp 2012-04-17 14:08:06.105590023 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp 2012-04-17 14:18:39.753586884 +0200
@@ -51,6 +51,7 @@
delete m_item;
m_boolSettings.clear();
m_intSettings.clear();
+ m_intTextSettings.clear();
m_floatSettings.clear();
m_stringSettings.clear();
m_settings.clear();
@@ -96,8 +97,23 @@
CSettingInt *intSetting = (CSettingInt *) setting;
if (intSetting)
{
- m_intSettings.insert(make_pair(CStdString(intSetting->GetSetting()), (float) intSetting->GetData()));
- AddSlider(intSetting->GetOrder(), intSetting->GetLabel(), &m_intSettings[intSetting->GetSetting()], (float)intSetting->m_iMin, (float)intSetting->m_iStep, (float)intSetting->m_iMax, CGUIDialogVideoSettings::FormatInteger, false);
+ if (intSetting->GetControlType() == SPIN_CONTROL_INT)
+ {
+ m_intSettings.insert(make_pair(CStdString(intSetting->GetSetting()), (float) intSetting->GetData()));
+ AddSlider(intSetting->GetOrder(), intSetting->GetLabel(), &m_intSettings[intSetting->GetSetting()], (float)intSetting->m_iMin, (float)intSetting->m_iStep, (float)intSetting->m_iMax, CGUIDialogVideoSettings::FormatInteger, false);
+ }
+ else if (intSetting->GetControlType() == SPIN_CONTROL_TEXT)
+ {
+ m_intTextSettings.insert(make_pair(CStdString(intSetting->GetSetting()), intSetting->GetData()));
+ vector<pair<int, int> > entries;
+ map<int, int>::iterator entriesItr = intSetting->m_entries.begin();
+ while (entriesItr != intSetting->m_entries.end())
+ {
+ entries.push_back(make_pair(entriesItr->first, entriesItr->second));
+ ++entriesItr;
+ }
+ AddSpin(intSetting->GetOrder(), intSetting->GetLabel(), &m_intTextSettings[intSetting->GetSetting()], entries);
+ }
}
}
break;
@@ -160,6 +176,13 @@
++intItr;
}
+ map<CStdString, int>::iterator intTextItr = m_intTextSettings.begin();
+ while (intTextItr != m_intTextSettings.end())
+ {
+ peripheral->SetSetting((*intTextItr).first, (*intTextItr).second);
+ ++intTextItr;
+ }
+
map<CStdString, float>::iterator floatItr = m_floatSettings.begin();
while (floatItr != m_floatSettings.end())
{
@@ -210,6 +233,7 @@
/* clear the settings */
m_boolSettings.clear();
m_intSettings.clear();
+ m_intTextSettings.clear();
m_floatSettings.clear();
m_stringSettings.clear();
m_settings.clear();
diff -Naur xbmc-pvr-11.0.1/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h xbmc-pvr-11.0.1.patch/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h
--- xbmc-pvr-11.0.1/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h 2012-03-27 17:55:34.000000000 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h 2012-04-17 14:18:39.753586884 +0200
@@ -44,6 +44,7 @@
bool m_bIsInitialising;
std::map<CStdString, bool> m_boolSettings;
std::map<CStdString, float> m_intSettings;
+ std::map<CStdString, int> m_intTextSettings;
std::map<CStdString, float> m_floatSettings;
std::map<CStdString, CStdString> m_stringSettings;
};
diff -Naur xbmc-pvr-11.0.1/xbmc/peripherals/Peripherals.cpp xbmc-pvr-11.0.1.patch/xbmc/peripherals/Peripherals.cpp
--- xbmc-pvr-11.0.1/xbmc/peripherals/Peripherals.cpp 2012-04-17 14:08:06.106590043 +0200
+++ xbmc-pvr-11.0.1.patch/xbmc/peripherals/Peripherals.cpp 2012-04-17 14:18:39.752586865 +0200
@@ -41,6 +41,7 @@
#include "guilib/LocalizeStrings.h"
#include "dialogs/GUIDialogKaiToast.h"
#include "utils/StringUtils.h"
+#include "Util.h"
#include "guilib/Key.h"
using namespace PERIPHERALS;
@@ -486,29 +487,46 @@
float fMax = currentNode->Attribute("max") ? (float) atof(currentNode->Attribute("max")) : 0;
setting = new CSettingFloat(0, strKey, iLabelId, fValue, fMin, fStep, fMax, SPIN_CONTROL_FLOAT);
}
+ else if (strSettingsType.Equals("enum"))
+ {
+ CStdString strEnums(currentNode->Attribute("lvalues"));
+ if (!strEnums.IsEmpty())
+ {
+ map<int,int> enums;
+ vector<CStdString> valuesVec;
+ CUtil::Tokenize(strEnums, valuesVec, "|");
+ for (unsigned int i = 0; i < valuesVec.size(); i++)
+ enums.insert(make_pair(atoi(valuesVec[i]), atoi(valuesVec[i])));
+ int iValue = currentNode->Attribute("value") ? atoi(currentNode->Attribute("value")) : 0;
+ setting = new CSettingInt(0, strKey, iLabelId, iValue, enums, SPIN_CONTROL_TEXT);
+ }
+ }
else
{
CStdString strValue(currentNode->Attribute("value"));
setting = new CSettingString(0, strKey, iLabelId, strValue, EDIT_CONTROL_INPUT, !bConfigurable, -1);
}
- //TODO add more types if needed
+ if (setting)
+ {
+ //TODO add more types if needed
- /* set the visibility */
- setting->SetVisible(bConfigurable);
+ /* set the visibility */
+ setting->SetVisible(bConfigurable);
- /* set the order */
- int iOrder(0);
- currentNode->Attribute("order", &iOrder);
- /* if the order attribute is invalid or 0, then the setting will be added at the end */
- if (iOrder < 0)
- iOrder = 0;
- setting->SetOrder(iOrder);
- if (iOrder > iMaxOrder)
- iMaxOrder = iOrder;
+ /* set the order */
+ int iOrder(0);
+ currentNode->Attribute("order", &iOrder);
+ /* if the order attribute is invalid or 0, then the setting will be added at the end */
+ if (iOrder < 0)
+ iOrder = 0;
+ setting->SetOrder(iOrder);
+ if (iOrder > iMaxOrder)
+ iMaxOrder = iOrder;
- /* and add this new setting */
- m_settings[strKey] = setting;
+ /* and add this new setting */
+ m_settings[strKey] = setting;
+ }
currentNode = currentNode->NextSiblingElement("setting");
}

View File

@ -1,39 +0,0 @@
diff -Naur xbmc-9389dc8/configure.in xbmc-9389dc8.patch/configure.in
--- xbmc-9389dc8/configure.in 2011-09-01 17:21:47.000000000 +0200
+++ xbmc-9389dc8.patch/configure.in 2011-09-01 23:30:40.419399392 +0200
@@ -428,6 +428,14 @@
esac
AC_SUBST([ARCH])
+AC_CHECK_PROG(HAVE_GIT,git,"yes","no",)
+if test "$HAVE_GIT" = "yes" -a "$GIT_REV" = ""; then
+ GIT_REV=$(git --no-pager log --abbrev=7 -n 1 --pretty=format:"%h %ci" HEAD | awk '{gsub("-", "");print $2"-"$1}')
+elif test "$GIT_REV" = ""; then
+ GIT_REV="Unknown"
+fi
+final_message="$final_message\n git Rev.:\t${GIT_REV}"
+
# platform debug flags
if test "$use_debug" = "yes"; then
final_message="$final_message\n Debugging:\tYes"
@@ -1177,7 +1185,6 @@
fi
fi
-AC_CHECK_PROG(HAVE_GIT,git,"yes","no",)
# Checks for header files.
AC_HEADER_DIRENT
@@ -1408,12 +1415,6 @@
final_message="$final_message\n Avahi:\tNo"
fi
-if test "$HAVE_GIT" = "yes"; then
- GIT_REV=$(git --no-pager log --abbrev=7 -n 1 --pretty=format:"%h %ci" HEAD | awk '{gsub("-", "");print $2"-"$1}')
-fi
-if test "$GIT_REV" = ""; then
- GIT_REV="Unknown"
-fi
if test "$host_vendor" = "apple"; then
echo "#define GIT_REV \"$GIT_REV\"" > git_revision.h
else

View File

@ -1,119 +0,0 @@
diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdcss/src/libdvdcss.pc.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdcss/src/libdvdcss.pc.in
--- xbmc-pvr-3513480/lib/libdvd/libdvdcss/src/libdvdcss.pc.in 2011-04-25 02:36:42.000000000 +0200
+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdcss/src/libdvdcss.pc.in 2011-04-25 05:01:20.091837122 +0200
@@ -6,5 +6,5 @@
Name: libdvdcss
Description: DVD access and decryption library.
Version: @VERSION@
-Libs: -L${libdir} -ldvdcss
-Cflags: -I{includedir} -I${includedir}/@PACKAGE@
+Libs: -ldvdcss
+Cflags: -I.
diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav-config2.sh xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav-config2.sh
--- xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav-config2.sh 2011-04-25 02:36:42.000000000 +0200
+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav-config2.sh 2011-04-25 05:01:20.549828701 +0200
@@ -56,17 +56,17 @@
fi
if test "$echo_cflags" = "yes"; then
- echo -I$prefix/include $dvdread_cflags $extracflags $threadcflags
+ echo $dvdread_cflags $extracflags $threadcflags
fi
if test "$echo_minicflags" = "yes"; then
- echo -I$prefix/include -I$prefix/include/dvdnav $extracflags $threadcflags
+ echo $extracflags $threadcflags
fi
if test "$echo_libs" = "yes"; then
- echo -L$libdir -ldvdnav $dvdread_libs $threadlib
+ echo -ldvdnav $dvdread_libs $threadlib
fi
if test "$echo_minilibs" = "yes"; then
- echo -L$libdir -ldvdnavmini $threadlib
+ echo -ldvdnavmini $threadlib
fi
diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav-config.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav-config.in
--- xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav-config.in 2011-04-25 02:36:42.000000000 +0200
+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav-config.in 2011-04-25 05:01:20.624827321 +0200
@@ -76,13 +76,13 @@
fi
if test "$echo_cflags" = "yes"; then
- echo -I@includedir@ -I@includedir@/libdvdread @THREAD_CFLAGS@
+ echo @THREAD_CFLAGS@
fi
if test "$echo_libs" = "yes"; then
- echo -L@libdir@ -ldvdnav -ldvdread @THREAD_LIBS@
+ echo -ldvdnav -ldvdread @THREAD_LIBS@
fi
if test "$echo_minilibs" = "yes"; then
- echo -L@libdir@ -ldvdnavmini @THREAD_LIBS@
+ echo -ldvdnavmini @THREAD_LIBS@
fi
diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnavmini.pc.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnavmini.pc.in
--- xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnavmini.pc.in 2011-04-25 02:36:42.000000000 +0200
+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnavmini.pc.in 2011-04-25 05:01:21.042819641 +0200
@@ -7,5 +7,5 @@
Description: DVD Navigation mini library
Version: @VERSION@
-Cflags: -I${includedir} @DVDREAD_CFLAGS@ @THREAD_CFLAGS@
-Libs: -L${libdir} -ldvdnav @THREAD_LIBS@
+Cflags: @DVDREAD_CFLAGS@ @THREAD_CFLAGS@
+Libs: -ldvdnav @THREAD_LIBS@
diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav.pc.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav.pc.in
--- xbmc-pvr-3513480/lib/libdvd/libdvdnav/misc/dvdnav.pc.in 2011-04-25 02:36:42.000000000 +0200
+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdnav/misc/dvdnav.pc.in 2011-04-25 05:01:21.262815601 +0200
@@ -8,5 +8,5 @@
Version: @VERSION@
Requires.private: dvdread >= 4.1.2
-Cflags: -I${includedir} @THREAD_CFLAGS@
-Libs: -L${libdir} -ldvdnav @THREAD_LIBS@
+Cflags: @THREAD_CFLAGS@
+Libs: -ldvdnav @THREAD_LIBS@
diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread-config.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread-config.in
--- xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread-config.in 2011-04-25 02:36:42.000000000 +0200
+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread-config.in 2011-04-25 05:01:21.278815307 +0200
@@ -72,9 +72,9 @@
fi
if test "$echo_cflags" = "yes"; then
- echo -I@includedir@
+ echo ""
fi
if test "$echo_libs" = "yes"; then
- echo -L@libdir@ -ldvdread
+ echo -ldvdread
fi
diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread-config.sh xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread-config.sh
--- xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread-config.sh 2011-04-25 02:36:42.000000000 +0200
+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread-config.sh 2011-04-25 05:01:21.278815307 +0200
@@ -48,9 +48,9 @@
fi
if test "$echo_cflags" = "yes"; then
- echo -I$prefix/include $extracflags
+ echo $extracflags
fi
if test "$echo_libs" = "yes"; then
- echo -L$libdir $dvdreadlib
+ echo $dvdreadlib
fi
diff -Naur xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread.pc.in xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread.pc.in
--- xbmc-pvr-3513480/lib/libdvd/libdvdread/misc/dvdread.pc.in 2011-04-25 02:36:42.000000000 +0200
+++ xbmc-pvr-3513480.patch/lib/libdvd/libdvdread/misc/dvdread.pc.in 2011-04-25 05:01:21.279815289 +0200
@@ -7,5 +7,5 @@
Description: Low level DVD access library
Version: @VERSION@
-Cflags: -I${includedir}
-Libs: -L${libdir} -ldvdread
+Cflags: -I.
+Libs: -ldvdread

View File

@ -1,12 +0,0 @@
diff -Naur xbmc-dab646e/xbmc/screensavers/rsxs-0.9/lib/argp-namefrob.h xbmc-dab646e.patch/xbmc/screensavers/rsxs-0.9/lib/argp-namefrob.h
--- xbmc-dab646e/xbmc/screensavers/rsxs-0.9/lib/argp-namefrob.h 2011-09-27 15:56:19.000000000 +0200
+++ xbmc-dab646e.patch/xbmc/screensavers/rsxs-0.9/lib/argp-namefrob.h 2011-10-16 02:13:13.805433847 +0200
@@ -17,7 +17,7 @@
with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-#if !_LIBC
+#if 0
/* This code is written for inclusion in gnu-libc, and uses names in the
namespace reserved for libc. If we're not compiling in libc, define those
names to be the normal ones instead. */

View File

@ -1,199 +0,0 @@
diff -Naur xbmc-pvr-11.0.1/configure.in xbmc-pvr-11.0.1.patch/configure.in
--- xbmc-pvr-11.0.1/configure.in 2012-03-27 17:55:54.000000000 +0200
+++ xbmc-pvr-11.0.1.patch/configure.in 2012-06-19 04:44:55.985036378 +0200
@@ -385,6 +385,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)])],
@@ -466,8 +472,7 @@
use_cpu=cortex-a8
check_sdl_arch=[`file /opt/local/lib/libSDL_image.dylib | awk '{V=7; print $V}'`]
if test "x$check_sdl_arch" = "xi386"; then
- use_texturepacker_native=yes
- USE_TEXTUREPACKER_NATIVE_ROOT="/opt/local"
+ use_texturepacker_root="/opt/local"
else
use_texturepacker=no
fi
@@ -484,8 +489,6 @@
*86-apple-darwin*)
use_joystick=no
use_vtbdecoder=no
- use_texturepacker_native=yes
- USE_TEXTUREPACKER_NATIVE_ROOT="$prefix"
ARCH="x86-osx"
AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX -D_LINUX")
;;
@@ -1649,17 +1652,17 @@
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
+ USE_TEXTUREPACKER=1
+ final_message="$final_message\n TexturePacker:Yes"
fi
else
- final_message="$final_message\n TexturePacker:No"
USE_TEXTUREPACKER=0
+ final_message="$final_message\n TexturePacker:No"
fi
if test "$use_mid" = "yes"; then
diff -Naur xbmc-pvr-11.0.1/lib/libsquish/Makefile.in xbmc-pvr-11.0.1.patch/lib/libsquish/Makefile.in
--- xbmc-pvr-11.0.1/lib/libsquish/Makefile.in 2012-03-27 17:55:41.000000000 +0200
+++ xbmc-pvr-11.0.1.patch/lib/libsquish/Makefile.in 2012-06-19 02:45:32.926185206 +0200
@@ -1,6 +1,6 @@
ARCH=@ARCH@
-SRCS= \
+SRCS = \
alpha.cpp \
clusterfit.cpp \
colourblock.cpp \
@@ -11,27 +11,30 @@
singlecolourfit.cpp \
squish.cpp
-CXXFLAGS+=-I.
+LIB = libsquish.a
+NATIVE_LIB = libsquish-native.so
+CLEAN_FILES += $(NATIVE_LIB)
+
+HOST_CXX ?= g++
+CXXFLAGS += -I.
+HOST_CXXFLAGS += -I.
+
ifeq ($(findstring powerpc,$(ARCH)),powerpc)
- CXXFLAGS+=-DSQUISH_USE_ALTIVEC=1 -maltivec
+ CXXFLAGS += -DSQUISH_USE_ALTIVEC=1 -maltivec
+ HOST_CXXFLAGS += -DSQUISH_USE_ALTIVEC=1 -maltivec
else ifeq ($(findstring x86,$(ARCH)), x86)
- CXXFLAGS+=-DSQUISH_USE_SSE=2 -msse2
+ CXXFLAGS += -DSQUISH_USE_SSE=2 -msse2
+ HOST_CXXFLAGS += -DSQUISH_USE_SSE=2 -msse2
endif
-LIB=libsquish.a
-
-ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
-NATIVE_LIB=libsquish-native.so
-CLEAN_FILES+=$(NATIVE_LIB)
+$(LIB): $(SRCS)
-all: $(LIB) $(NATIVE_LIB)
# TexturePacker links to libsquish and needs to run on build system, so make a native flavor.
$(NATIVE_LIB): $(SRCS)
ifeq ($(findstring osx,$(ARCH)),osx)
- g++ -m32 -DSQUISH_USE_SSE=2 -msse2 -I. $(SRCS) -dynamiclib -install_name `pwd`/libsquish-native.so -o $@
+ $(HOST_CXX) -m32 $(HOST_CXXFLAGS) $(SRCS) -dynamiclib -install_name `pwd`/libsquish-native.so -o $@
else
- g++ -DSQUISH_USE_SSE=2 -msse2 -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-pvr-11.0.1/tools/TexturePacker/Makefile.in xbmc-pvr-11.0.1.patch/tools/TexturePacker/Makefile.in
--- xbmc-pvr-11.0.1/tools/TexturePacker/Makefile.in 2012-03-27 17:55:51.000000000 +0200
+++ xbmc-pvr-11.0.1.patch/tools/TexturePacker/Makefile.in 2012-06-19 04:47:54.700638167 +0200
@@ -1,47 +1,52 @@
-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+= \
- -I. \
- -I@abs_top_srcdir@/lib \
- -I@abs_top_srcdir@/xbmc \
- -I@abs_top_srcdir@/xbmc/linux
-
-ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
-NATIVE_ROOT_PATH=@USE_TEXTUREPACKER_NATIVE_ROOT@
-ifdef NATIVE_ROOT_PATH
-ifeq ($(findstring osx,@ARCH@),osx)
-CXXFLAGS+= -m32
-endif
-CXXFLAGS+= -I$(NATIVE_ROOT_PATH)/include
-LIBS += -L$(NATIVE_ROOT_PATH)/lib
-endif
-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 = \
+SRCS = \
md5.cpp \
SDL_anigif.cpp \
XBTFWriter.cpp \
XBMCTex.cpp \
@abs_top_srcdir@/xbmc/guilib/XBTF.cpp
-
-TARGET = TexturePacker
-CLEAN_FILES=$(TARGET)
+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
+
+HOST_CXXFLAGS += \
+ -I. \
+ -I@abs_top_srcdir@/lib \
+ -I@abs_top_srcdir@/xbmc \
+ -I@abs_top_srcdir@/xbmc/linux \
+ -I$(HOST_ROOT_PATH)/include
+
+ifeq ($(findstring osx,@ARCH@),osx)
+CXXFLAGS += -m32
+HOST_CXXFLAGS += -m32
+endif
+
ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
# TexturePacker run native on build system, build it with native tools
$(TARGET): $(SRCS)
- g++ $(DEFINES) $(CXXFLAGS) $(SRCS) $(LIBS) -o $(TARGET)
+ make -C @abs_top_srcdir@/lib/libsquish libsquish-native.so
+ $(HOST_CXX) $(DEFINES) $(HOST_CXXFLAGS) $(SRCS) $(HOST_LIBS) -o $(TARGET)
+
clean:
rm -f $(TARGET)
else

View File

@ -1,13 +0,0 @@
diff -Naur xbmc-10.1-Dharma/xbmc/Application.cpp xbmc-10.1-Dharma.patch/xbmc/Application.cpp
--- xbmc-10.1-Dharma/xbmc/Application.cpp 2011-03-08 02:49:14.000000000 +0100
+++ xbmc-10.1-Dharma.patch/xbmc/Application.cpp 2011-05-06 01:41:52.853741840 +0200
@@ -2515,8 +2515,8 @@
if (!m_pPlayer->IsPaused())
{ // unpaused - set the playspeed back to normal
SetPlaySpeed(1);
+ g_audioManager.Enable(m_pPlayer->IsPaused() && !g_audioContext.IsPassthroughActive());
}
- g_audioManager.Enable(m_pPlayer->IsPaused() && !g_audioContext.IsPassthroughActive());
return true;
}
if (!m_pPlayer->IsPaused())

View File

@ -1,21 +0,0 @@
diff -Naur xbmc-pvr-3513480/configure.in xbmc-pvr-3513480.patch/configure.in
--- xbmc-pvr-3513480/configure.in 2011-04-25 02:36:33.000000000 +0200
+++ xbmc-pvr-3513480.patch/configure.in 2011-04-25 05:14:49.220848143 +0200
@@ -885,6 +885,9 @@
AC_MSG_NOTICE($external_ffmpeg_disabled)
USE_EXTERNAL_FFMPEG=0
AC_DEFINE([PIX_FMT_VDPAU_MPEG4_IN_AVUTIL], [1], [Whether AVUtil defines PIX_FMT_VDPAU_MPEG4.])
+
+ # check for yasm
+ AC_CHECK_PROG(HAVE_YASM,yasm,"yes","no",)
fi
# Python
@@ -1547,6 +1550,7 @@
`if test "$use_arch" != "no"; then echo --arch=$use_arch; fi`\
`if test "$use_cpu" != "no"; then echo --cpu=$use_cpu; fi`\
--target-os=$(tolower $(uname -s)) \
+ `if test "$HAVE_YASM" = "yes"; then echo --enable-yasm; fi` \
--disable-muxers \
--enable-muxer=spdif \
--enable-muxer=adts \

View File

@ -1,125 +0,0 @@
diff -Naur xbmc-pvr-3513480/configure.in xbmc-pvr-3513480.patch/configure.in
--- xbmc-pvr-3513480/configure.in 2011-04-25 05:46:35.000000000 +0200
+++ xbmc-pvr-3513480.patch/configure.in 2011-04-25 05:50:02.982401390 +0200
@@ -72,6 +72,8 @@
rsxs_disabled="== RSXS disabled. =="
pulse_not_found="== Could not find libpulse. PulseAudio support disabled. =="
pulse_disabled="== PulseAudio support manually disabled. =="
+lame_not_found="== Could not find libmp3lame. LAME support disabled. =="
+lame_disabled="== LAME support manually disabled. =="
dvdcss_enabled="== DVDCSS support enabled. =="
dvdcss_disabled="== DVDCSS support disabled. =="
hal_not_found="== Could not find hal. HAL support disabled. =="
@@ -244,6 +246,12 @@
[use_ffmpeg_libvorbis=$enableval],
[use_ffmpeg_libvorbis=no])
+AC_ARG_ENABLE([lame],
+ [AS_HELP_STRING([--enable-lame],
+ [enable lame support (default is yes)])],
+ [use_lame=$enableval],
+ [use_lame=yes])
+
AC_ARG_ENABLE([dvdcss],
[AS_HELP_STRING([--enable-dvdcss],
[enable DVDCSS support (default is yes)])],
@@ -758,6 +766,20 @@
USE_PULSE=0
fi
+# LAME
+if test "$use_lame" = "yes"; then
+ AC_CHECK_LIB([mp3lame], [main],
+ AC_DEFINE([HAVE_LIBMP3LAME], [1], [Define to 1 if you have the 'libmp3lame' library (-lmp3lame).]),
+ use_lame=no;AC_MSG_RESULT($lame_not_found))
+else
+ AC_MSG_RESULT($lame_disabled)
+fi
+if test "$use_lame" = "yes"; then
+ AC_SUBST([HAVE_LIBMP3LAME], 1)
+else
+ AC_SUBST([HAVE_LIBMP3LAME], 0)
+fi
+
# HAL
if test "$host_vendor" = "apple" ; then
use_hal="no"
@@ -1311,6 +1333,12 @@
final_message="$final_message\n HAL Support:\tNo"
fi
+if test "$use_lame" = "yes"; then
+ final_message="$final_message\n LAME:\t\tYes"
+else
+ final_message="$final_message\n LAME:\t\tNo"
+fi
+
# DVDCSS
if test "$use_dvdcss" = "yes"; then
AC_MSG_NOTICE($dvdcss_enabled)
diff -Naur xbmc-pvr-3513480/configure.in.orig xbmc-pvr-3513480.patch/configure.in.orig
diff -Naur xbmc-pvr-3513480/Makefile.in.orig xbmc-pvr-3513480.patch/Makefile.in.orig
diff -Naur xbmc-pvr-3513480/xbmc/cdrip/CDDARipper.cpp xbmc-pvr-3513480.patch/xbmc/cdrip/CDDARipper.cpp
--- xbmc-pvr-3513480/xbmc/cdrip/CDDARipper.cpp 2011-04-25 02:36:33.000000000 +0200
+++ xbmc-pvr-3513480.patch/xbmc/cdrip/CDDARipper.cpp 2011-04-25 05:48:10.487548571 +0200
@@ -27,7 +27,11 @@
#include "CDDAReader.h"
#include "utils/StringUtils.h"
#include "Util.h"
+
+#ifdef HAVE_LIBMP3LAME
#include "EncoderLame.h"
+#endif
+
#include "EncoderWav.h"
#include "EncoderVorbis.h"
#include "EncoderFFmpeg.h"
@@ -78,9 +82,16 @@
case CDDARIP_ENCODER_FLAC:
m_pEncoder = new CEncoderFlac();
break;
- default:
+#ifdef HAVE_LIBMP3LAME
+ case CDDARIP_ENCODER_LAME:
m_pEncoder = new CEncoderLame();
break;
+#else
+ default:
+ CLog::Log(LOGERROR,"invalid encoder selected");
+ return false;
+ break;
+#endif
}
// we have to set the tags before we init the Encoder
diff -Naur xbmc-pvr-3513480/xbmc/cdrip/Makefile.in xbmc-pvr-3513480.patch/xbmc/cdrip/Makefile.in
--- xbmc-pvr-3513480/xbmc/cdrip/Makefile.in 2011-04-25 02:36:33.000000000 +0200
+++ xbmc-pvr-3513480.patch/xbmc/cdrip/Makefile.in 2011-04-25 05:51:13.013064387 +0200
@@ -3,10 +3,13 @@
Encoder.cpp \
EncoderFFmpeg.cpp \
EncoderFlac.cpp \
- EncoderLame.cpp \
EncoderVorbis.cpp \
EncoderWav.cpp \
+ifeq (@HAVE_LIBMP3LAME@,1)
+ SRCS+=EncoderLame.cpp
+endif
+
LIB=cdrip.a
include @abs_top_srcdir@/Makefile.include
diff -Naur xbmc-pvr-3513480/xbmc/settings/GUISettings.cpp xbmc-pvr-3513480.patch/xbmc/settings/GUISettings.cpp
--- xbmc-pvr-3513480/xbmc/settings/GUISettings.cpp 2011-04-25 05:47:12.000000000 +0200
+++ xbmc-pvr-3513480.patch/xbmc/settings/GUISettings.cpp 2011-04-25 05:48:47.956833472 +0200
@@ -324,7 +324,9 @@
AddPath(acd,"audiocds.recordingpath",20000,"select writable folder",BUTTON_CONTROL_PATH_INPUT,false,657);
AddString(acd, "audiocds.trackpathformat", 13307, "%A - %B/[%N. ][%A - ]%T", EDIT_CONTROL_INPUT, false, 16016);
map<int,int> encoders;
+#ifdef HAVE_LIBMP3LAME
encoders.insert(make_pair(34000,CDDARIP_ENCODER_LAME));
+#endif
encoders.insert(make_pair(34001,CDDARIP_ENCODER_VORBIS));
encoders.insert(make_pair(34002,CDDARIP_ENCODER_WAV));
encoders.insert(make_pair(34005,CDDARIP_ENCODER_FLAC));

View File

@ -1,18 +0,0 @@
diff -Naur xbmc-a3c804b/xbmc/interfaces/python/XBPython.cpp xbmc-a3c804b.patch/xbmc/interfaces/python/XBPython.cpp
--- xbmc-a3c804b/xbmc/interfaces/python/XBPython.cpp 2011-08-17 23:40:00.000000000 +0200
+++ xbmc-a3c804b.patch/xbmc/interfaces/python/XBPython.cpp 2011-08-18 03:50:49.652475572 +0200
@@ -335,11 +335,9 @@
// at http://docs.python.org/using/cmdline.html#environment-variables
#if !defined(_WIN32)
- /* PYTHONOPTIMIZE is set off intentionally when using external Python.
- Reason for this is because we cannot be sure what version of Python
- was used to compile the various Python object files (i.e. .pyo,
- .pyc, etc.). */
- // check if we are running as real xbmc.app or just binary
+ // Required for python to find optimized code (pyo) files
+ setenv("PYTHONOPTIMIZE", "1", 1);
+ // check if we are running as real xbmc.app or just binary
if (!CUtil::GetFrameworksPath(true).IsEmpty())
{
// using external python, it's build looking for xxx/lib/python2.6

View File

@ -1,12 +0,0 @@
diff -Naur xbmc-pvr-3513480/userdata/LCD.xml xbmc-pvr-3513480.patch/userdata/LCD.xml
--- xbmc-pvr-3513480/userdata/LCD.xml 2011-04-25 02:36:33.000000000 +0200
+++ xbmc-pvr-3513480.patch/userdata/LCD.xml 2011-04-25 05:27:34.956125133 +0200
@@ -21,7 +21,7 @@
<line>Freemem: $INFO[System.FreeMemory]</line>
</video>
<general>
- <line>XBMC running...</line>
+ <line>*** OpenELEC ***</line>
<line>$INFO[System.Time] $INFO[System.Date]</line>
<line>Freemem: $INFO[System.FreeMemory]</line>
<line>$INFO[System.ScreenWidth]x$INFO[System.ScreenHeight] $INFO[System.ScreenMode]</line>

View File

@ -1,11 +0,0 @@
diff -Naur xbmc-10.1-Dharma/userdata/RssFeeds.xml xbmc-10.1-Dharma.patch/userdata/RssFeeds.xml
--- xbmc-10.1-Dharma/userdata/RssFeeds.xml 2011-03-08 02:49:24.000000000 +0100
+++ xbmc-10.1-Dharma.patch/userdata/RssFeeds.xml 2011-06-14 17:07:08.450880123 +0200
@@ -3,6 +3,7 @@
<!-- RSS feeds. To have multiple feeds, just add a feed to the set. You can also have multiple sets. !-->
<!-- To use different sets in your skin, each must be called from skin with a unique id. !-->
<set id="1">
+ <feed updateinterval="30">http://openelec.tv/news?format=feed&type=rss</feed>
<feed updateinterval="30">http://feeds.feedburner.com/xbmc</feed>
</set>
</rssfeeds>

View File

@ -1,12 +0,0 @@
diff -Naur xbmc-30a9070/system/keymaps/keyboard.xml xbmc-30a9070.patch/system/keymaps/keyboard.xml
--- xbmc-30a9070/system/keymaps/keyboard.xml 2011-07-28 06:20:13.000000000 +0200
+++ xbmc-30a9070.patch/system/keymaps/keyboard.xml 2011-07-28 09:39:57.210973380 +0200
@@ -90,7 +90,7 @@
<numpadseven>Number7</numpadseven>
<numpadeight>Number8</numpadeight>
<numpadnine>Number9</numpadnine>
- <backslash>ToggleFullScreen</backslash>
+ <!-- <backslash>ToggleFullScreen</backslash> -->
<home>FirstPage</home>
<end>LastPage</end>
<!-- Multimedia keyboard keys -->

View File

@ -1,15 +0,0 @@
diff -Naur xbmc-10.1-Dharma/xbmc/FileSystem/FileCurl.cpp xbmc-10.1-Dharma.patch/xbmc/FileSystem/FileCurl.cpp
--- xbmc-10.1-Dharma/xbmc/filesystem/FileCurl.cpp 2011-03-08 02:49:14.000000000 +0100
+++ xbmc-10.1-Dharma.patch/xbmc/filesystem/FileCurl.cpp 2011-10-17 19:21:04.180783870 +0200
@@ -803,9 +803,9 @@
// Detect whether we are "online" or not! Very simple and dirty!
bool CFileCurl::IsInternet(bool checkDNS /* = true */)
{
- CStdString strURL = "http://www.google.com";
+ CStdString strURL = "http://www.openelec.tv";
if (!checkDNS)
- strURL = "http://74.125.19.103"; // www.google.com ip
+ strURL = "http://212.101.13.10"; // www.openelec.tv ip
bool found = Exists(strURL);
Close();

View File

@ -1,71 +0,0 @@
diff -Naur xbmc-10.1-Dharma/system/Lircmap.xml xbmc-10.1-Dharma.patch/system/Lircmap.xml
--- xbmc-10.1-Dharma/system/Lircmap.xml 2011-06-18 01:43:43.132101246 +0200
+++ xbmc-10.1-Dharma.patch/system/Lircmap.xml 2011-06-18 01:44:53.777025290 +0200
@@ -365,7 +365,6 @@
<remote device="linux-input-layer">
<altname>cx23885_remote</altname>
- <altname>devinput</altname>
<left>KEY_LEFT</left>
<right>KEY_RIGHT</right>
<up>KEY_UP</up>
@@ -452,4 +451,59 @@
<mypictures>yellow</mypictures>
<myvideo>blue</myvideo>
</remote>
+
+ <remote device="devinput">
+ <left>KEY_LEFT</left>
+ <right>KEY_RIGHT</right>
+ <up>KEY_UP</up>
+ <down>KEY_DOWN</down>
+ <select>KEY_OK</select>
+ <enter>KEY_ENTER</enter>
+ <clear>KEY_DELETE</clear>
+ <start>KEY_PROG1</start>
+ <back>KEY_EXIT</back>
+ <record>KEY_RECORD</record>
+ <play>KEY_PLAY</play>
+ <pause>KEY_PAUSE</pause>
+ <stop>KEY_STOP</stop>
+ <forward>KEY_FASTFORWARD</forward>
+ <reverse>KEY_REWIND</reverse>
+ <volumeplus>KEY_VOLUMEUP</volumeplus>
+ <volumeminus>KEY_VOLUMEDOWN</volumeminus>
+ <channelplus>KEY_CHANNELUP</channelplus>
+ <channelminus>KEY_CHANNELDOWN</channelminus>
+ <skipplus>KEY_NEXT</skipplus>
+ <skipminus>KEY_PREVIOUS</skipminus>
+ <title>KEY_EPG</title>
+ <subtitle>KEY_SUBTITLE</subtitle>
+ <language>KEY_LANGUAGE</language>
+ <info>KEY_INFO</info>
+ <display>KEY_ZOOM</display>
+ <mute>KEY_MUTE</mute>
+ <power>KEY_POWER</power>
+ <eject>KEY_EJECT</eject>
+ <menu>KEY_DVD</menu>
+ <menu>KEY_MENU</menu>
+ <myvideo>KEY_VIDEO</myvideo>
+ <mymusic>KEY_AUDIO</mymusic>
+ <mypictures>KEY_CAMERA</mypictures>
+ <mytv>KEY_TUNER</mytv>
+ <teletext>KEY_TEXT</teletext>
+ <one>KEY_NUMERIC_1</one>
+ <two>KEY_NUMERIC_2</two>
+ <three>KEY_NUMERIC_3</three>
+ <four>KEY_NUMERIC_4</four>
+ <five>KEY_NUMERIC_5</five>
+ <six>KEY_NUMERIC_6</six>
+ <seven>KEY_NUMERIC_7</seven>
+ <eight>KEY_NUMERIC_8</eight>
+ <nine>KEY_NUMERIC_9</nine>
+ <zero>KEY_NUMERIC_0</zero>
+ <star>KEY_NUMERIC_STAR</star>
+ <hash>KEY_NUMERIC_POUND</hash>
+ <red>KEY_RED</red>
+ <green>KEY_GREEN</green>
+ <yellow>KEY_YELLOW</yellow>
+ <blue>KEY_BLUE</blue>
+ </remote>
</lircmap>

View File

@ -1,144 +0,0 @@
From ab72a555c5dd8585ac6e101d9f5966e25500867d Mon Sep 17 00:00:00 2001
From: Giftie <giftie61@hotmail.com>
Date: Thu, 5 Jan 2012 19:32:14 -0700
Subject: [PATCH] Updated auto cd rip modified:
language/English/strings.xml modified:
xbmc/cdrip/CDDARipper.cpp modified:
xbmc/settings/GUISettings.cpp modified:
xbmc/settings/GUISettings.h modified:
xbmc/storage/MediaManager.cpp modified: xbmc/Autorun.cpp
Author: Giftie <giftie61@hotmail.com>
Committer: Giftie <giftie61@hotmail.com>
---
language/English/strings.xml | 5 ++++-
xbmc/Autorun.cpp | 15 ++++++++++++---
xbmc/settings/GUISettings.cpp | 8 +++++++-
xbmc/settings/GUISettings.h | 5 +++++
xbmc/storage/MediaManager.cpp | 7 +++++--
5 files changed, 33 insertions(+), 7 deletions(-)
diff --git a/language/English/strings.xml b/language/English/strings.xml
index ca2ac4d..ae22214 100644
--- a/language/English/strings.xml
+++ b/language/English/strings.xml
@@ -1344,7 +1344,7 @@
<string id="14082">Show EXIF picture information</string>
<string id="14083">Use a fullscreen window rather than true fullscreen</string>
<string id="14084">Queue songs on selection</string>
- <string id="14085">Play audio CDs automatically</string>
+ <string id="14085"></string>
<string id="14086">Playback</string>
<string id="14087">DVDs</string>
<string id="14088">Play DVDs automatically</string>
@@ -1355,6 +1355,9 @@
<string id="14093">Security</string>
<string id="14094">Input devices</string>
<string id="14095">Power saving</string>
+ <string id="14096">Rip</string>
+ <string id="14097">Audio CD Insert Action</string>
+ <string id="14098">Play</string>
<string id="15015">Remove</string>
<string id="15016">Games</string>
diff --git a/xbmc/Autorun.cpp b/xbmc/Autorun.cpp
index 846b28d..3cd6f75 100644
--- a/xbmc/Autorun.cpp
+++ b/xbmc/Autorun.cpp
@@ -43,6 +43,9 @@
#include "dialogs/GUIDialogYesNo.h"
#include "utils/URIUtils.h"
#include "utils/log.h"
+#ifdef HAS_CDDA_RIPPER
+#include "cdrip/CDDARipper.h"
+#endif
using namespace std;
using namespace XFILE;
@@ -69,13 +72,19 @@ void CAutorun::ExecuteAutorun(const CStdString& path, bool bypassSettings, bool
g_application.ResetScreenSaver();
g_application.WakeUpScreenSaverAndDPMS(); // turn off the screensaver if it's active
-
+#ifdef HAS_CDDA_RIPPER
+ if ( g_guiSettings.GetInt("audiocds.autoaction") == AUTOCD_RIP && pInfo->IsAudio(1) && !g_settings.GetCurrentProfile().musicLocked())
+ {
+ CCDDARipper ripper;
+ ripper.RipCD();
+ }
+#endif
PlayDisc(path, bypassSettings, startFromBeginning);
}
bool CAutorun::PlayDisc(const CStdString& path, bool bypassSettings, bool startFromBeginning)
{
- if ( !bypassSettings && !g_guiSettings.GetBool("audiocds.autorun") && !g_guiSettings.GetBool("dvds.autorun"))
+ if ( !bypassSettings && !g_guiSettings.GetInt("audiocds.autoaction") == AUTOCD_PLAY && !g_guiSettings.GetBool("dvds.autorun"))
return false;
int nSize = g_playlistPlayer.GetPlaylist( PLAYLIST_MUSIC ).size();
@@ -276,7 +285,7 @@ bool CAutorun::RunDisc(IDirectory* pDir, const CStdString& strDrive, int& nAdded
}
}
// then music
- if (!bPlaying && (bypassSettings || g_guiSettings.GetBool("audiocds.autorun")) && bAllowMusic)
+ if (!bPlaying && (bypassSettings || g_guiSettings.GetInt("audiocds.autoaction") == AUTOCD_PLAY) && bAllowMusic)
{
for (int i = 0; i < vecItems.Size(); i++)
{
diff --git a/xbmc/settings/GUISettings.cpp b/xbmc/settings/GUISettings.cpp
index 6cce6ac..a0c7bf5 100644
--- a/xbmc/settings/GUISettings.cpp
+++ b/xbmc/settings/GUISettings.cpp
@@ -318,7 +318,13 @@ void CGUISettings::Initialize()
AddString(scr, "scrobbler.librefmpass", 15219, "", EDIT_CONTROL_MD5_INPUT, false, 15219);
CSettingsCategory* acd = AddCategory(3, "audiocds", 620);
- AddBool(acd, "audiocds.autorun", 14085, false);
+ map<int,int> autocd;
+ autocd.insert(make_pair(16018, AUTOCD_NONE));
+ autocd.insert(make_pair(14098, AUTOCD_PLAY));
+#ifdef HAS_CDDA_RIPPER
+ autocd.insert(make_pair(14096, AUTOCD_RIP));
+#endif
+ AddInt(acd,"audiocds.autoaction",14097,AUTOCD_NONE, autocd, SPIN_CONTROL_TEXT);
AddBool(acd, "audiocds.usecddb", 227, true);
AddSeparator(acd, "audiocds.sep1");
AddPath(acd,"audiocds.recordingpath",20000,"select writable folder",BUTTON_CONTROL_PATH_INPUT,false,657);
diff --git a/xbmc/settings/GUISettings.h b/xbmc/settings/GUISettings.h
index 5501064..8751624 100644
--- a/xbmc/settings/GUISettings.h
+++ b/xbmc/settings/GUISettings.h
@@ -64,6 +64,11 @@
#define KARAOKE_COLOR_START 0
#define KARAOKE_COLOR_END 4
+// CDDA Autoaction defines
+#define AUTOCD_NONE 0
+#define AUTOCD_PLAY 1
+#define AUTOCD_RIP 2
+
// CDDA ripper defines
#define CDDARIP_ENCODER_LAME 0
#define CDDARIP_ENCODER_VORBIS 1
diff --git a/xbmc/storage/MediaManager.cpp b/xbmc/storage/MediaManager.cpp
index ced4ad0..316e8c9 100644
--- a/xbmc/storage/MediaManager.cpp
+++ b/xbmc/storage/MediaManager.cpp
@@ -624,8 +624,11 @@ void CMediaManager::ProcessEvents()
void CMediaManager::OnStorageAdded(const CStdString &label, const CStdString &path)
{
- if (g_guiSettings.GetBool("audiocds.autorun") || g_guiSettings.GetBool("dvds.autorun"))
- CJobManager::GetInstance().AddJob(new CAutorunMediaJob(label, path), this, CJob::PRIORITY_HIGH);
+ if (g_guiSettings.GetInt("audiocds.autoaction") != AUTOCD_NONE || g_guiSettings.GetBool("dvds.autorun"))
+ if ( g_guiSettings.GetInt("audiocds.autoaction") == AUTOCD_RIP)
+ CJobManager::GetInstance().AddJob(new CAutorunMediaJob(label, path), this, CJob::PRIORITY_LOW);
+ else
+ CJobManager::GetInstance().AddJob(new CAutorunMediaJob(label, path), this, CJob::PRIORITY_HIGH);
else
CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(13021), label, TOAST_DISPLAY_TIME, false);
}
--
1.7.5.4

View File

@ -1,37 +0,0 @@
diff -Naur xbmc-pvr-fc63e66/language/English/strings.xml xbmc-pvr-fc63e66.patch/language/English/strings.xml
--- xbmc-pvr-fc63e66/language/English/strings.xml 2012-03-19 21:20:31.531809910 +0100
+++ xbmc-pvr-fc63e66.patch/language/English/strings.xml 2012-03-19 21:21:56.576430020 +0100
@@ -1360,6 +1360,7 @@
<string id="14096">Rip</string>
<string id="14097">Audio CD Insert Action</string>
<string id="14098">Play</string>
+ <string id="14099">Eject disc when Audio CD ripping is complete</string>
<string id="15015">Remove</string>
<string id="15016">Games</string>
diff -Naur xbmc-pvr-fc63e66/xbmc/cdrip/CDDARipper.cpp xbmc-pvr-fc63e66.patch/xbmc/cdrip/CDDARipper.cpp
--- xbmc-pvr-fc63e66/xbmc/cdrip/CDDARipper.cpp 2012-03-16 22:27:56.000000000 +0100
+++ xbmc-pvr-fc63e66.patch/xbmc/cdrip/CDDARipper.cpp 2012-03-19 21:21:07.725417655 +0100
@@ -332,6 +332,11 @@
}
CLog::Log(LOGINFO, "Ripped CD succesfull");
+ if (g_guiSettings.GetBool("audiocds.ejectonrip"))
+ {
+ CLog::Log(LOGINFO, "Ejecting CD");
+ CIoSupport::EjectTray();
+ }
return true;
}
diff -Naur xbmc-pvr-fc63e66/xbmc/settings/GUISettings.cpp xbmc-pvr-fc63e66.patch/xbmc/settings/GUISettings.cpp
--- xbmc-pvr-fc63e66/xbmc/settings/GUISettings.cpp 2012-03-19 21:20:31.533809950 +0100
+++ xbmc-pvr-fc63e66.patch/xbmc/settings/GUISettings.cpp 2012-03-19 21:21:07.734417841 +0100
@@ -349,6 +349,7 @@
AddInt(acd, "audiocds.quality", 622, CDDARIP_QUALITY_CBR, qualities, SPIN_CONTROL_TEXT);
AddInt(acd, "audiocds.bitrate", 623, 192, 128, 32, 320, SPIN_CONTROL_INT_PLUS, MASK_KBPS);
AddInt(acd, "audiocds.compressionlevel", 665, 5, 0, 1, 8, SPIN_CONTROL_INT_PLUS);
+ AddBool(acd, "audiocds.ejectonrip", 14099, false);
#ifdef HAS_KARAOKE
CSettingsCategory* kar = AddCategory(3, "karaoke", 13327);

View File

@ -1,32 +0,0 @@
From 5c62df65cb2ef1c7dcebbf07bd6d180960ab6715 Mon Sep 17 00:00:00 2001
From: theuni <theuni-nospam-@xbmc.org>
Date: Wed, 4 Apr 2012 14:53:51 -0400
Subject: [PATCH] ffmpeg: disable ffmpeg's crystalhd implementation for now
---
configure.in | 2 ++
1 file changed, 2 insertions(+)
diff --git a/configure.in b/configure.in
index 0d80719..40e9fb5 100755
--- a/configure.in
+++ b/configure.in
@@ -2041,6 +2041,7 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
--disable-ffmpeg \
--disable-doc \
--disable-decoder=mpeg_xvmc \
+ --disable-crystalhd \
--enable-postproc \
--enable-gpl \
--enable-protocol=http \
@@ -2080,6 +2081,7 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
--disable-ffplay \
--disable-ffserver \
--disable-ffmpeg \
+ --disable-crystalhd \
--enable-shared \
--disable-doc \
--enable-postproc \
--
1.7.10

View File

@ -1,41 +0,0 @@
From d1e06c28d3eb6cd689b8cbc5b96babe81707baa7 Mon Sep 17 00:00:00 2001
From: Rainer Hochecker <fernetmenta@online.de>
Date: Sun, 15 Apr 2012 14:00:22 +0200
Subject: [PATCH] ffmpeg: avfilter depends on avformat
---
lib/DllAvFilter.h | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/lib/DllAvFilter.h b/lib/DllAvFilter.h
index 5c83654..6ae5d15 100644
--- a/lib/DllAvFilter.h
+++ b/lib/DllAvFilter.h
@@ -25,6 +25,7 @@
#endif
#include "DynamicDll.h"
#include "DllAvCodec.h"
+#include "DllAvFormat.h"
#include "DllSwResample.h"
#include "utils/log.h"
@@ -203,6 +204,7 @@ class DllAvFilter : public DllDynamic, DllAvFilterInterface
/* dependencies of libavfilter */
DllAvUtil m_dllAvUtil;
DllSwResample m_dllSwResample;
+ DllAvFormat m_dllAvFormat;
public:
int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name)
@@ -251,6 +253,8 @@ class DllAvFilter : public DllDynamic, DllAvFilterInterface
return false;
if (!m_dllSwResample.Load())
return false;
+ if (!m_dllAvFormat.Load())
+ return false;
return DllDynamic::Load();
}
};
--
1.7.10

View File

@ -1,11 +0,0 @@
diff -Naur xbmc-11.0.1/xbmc/threads/platform/pthreads/ThreadImpl.h xbmc-11.0.1.patch/xbmc/threads/platform/pthreads/ThreadImpl.h
--- xbmc-11.0.1/xbmc/threads/platform/pthreads/ThreadImpl.h 2012-03-23 07:22:04.215885089 +0100
+++ xbmc-11.0.1.patch/xbmc/threads/platform/pthreads/ThreadImpl.h 2012-03-23 07:24:07.875383186 +0100
@@ -22,6 +22,7 @@
#pragma once
#include <pthread.h>
+#include <unistd.h>
struct threadOpaque
{

View File

@ -1,12 +0,0 @@
diff -Naur xbmc-11.0.1/xbmc/settings/GUIWindowSettingsCategory.cpp xbmc-11.0.1.patch/xbmc/settings/GUIWindowSettingsCategory.cpp
--- xbmc-11.0.1/xbmc/settings/GUIWindowSettingsCategory.cpp 2012-06-30 19:13:51.558262433 +0200
+++ xbmc-11.0.1.patch/xbmc/settings/GUIWindowSettingsCategory.cpp 2012-06-30 19:59:14.545818328 +0200
@@ -553,7 +553,7 @@
{
bool hasInterop = false;
#ifdef GL_NV_vdpau_interop
- hasInterop = true;
+ hasInterop = false;
#endif
CGUIControl *pControl = (CGUIControl *)GetControl(pSettingControl->GetID());
if (pControl && hasInterop && glewIsSupported("GL_NV_vdpau_interop"))

View File

@ -1,29 +0,0 @@
From 9687cc6b6f90fb40e39060eff9e4d8283254b770 Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Fri, 13 Jul 2012 18:57:37 +0200
Subject: [PATCH] linuxrenderer: delete texture targets on reconfigure
---
xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
index 7c46cfd..85fc50c 100644
--- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
+++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
@@ -261,6 +261,12 @@ bool CLinuxRendererGL::ValidateRenderTarget()
else
CLog::Log(LOGNOTICE,"Using GL_TEXTURE_2D");
+ // function pointer for texture might change in
+ // call to LoadShaders
+ glFinish();
+ for (int i = 0 ; i < m_NumYV12Buffers ; i++)
+ (this->*m_textureDelete)(i);
+
// create the yuv textures
LoadShaders();
--
1.7.10

View File

@ -1,37 +0,0 @@
From 497941802e56121adf03428d964e225c80989afd Mon Sep 17 00:00:00 2001
From: elupus <elupus@xbmc.org>
Date: Sat, 7 Apr 2012 00:08:34 +0200
Subject: [PATCH] fixed: still frames at the start of a VTS in dvd could end
up not showing
This occured due to a change in behavior in updated ffmpeg. Old code would
return EOF once after a VTS change to trigger demuxer flush, however
updated ffmpeg will read multiple times causing demuxer reset actions
to get executed after actual data having been processed by demuxer.
---
.../cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
index dbdff52..3ae4843 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
@@ -419,9 +419,12 @@ int CDVDInputStreamNavigator::ProcessBlock(BYTE* dest_buffer, int* read)
iNavresult = NAVRESULT_HOLD;
}
else
+ {
iNavresult = m_pDVDPlayer->OnDVDNavResult(buf, DVDNAV_VTS_CHANGE);
-
- m_bInMenu = (0 == m_dll.dvdnav_is_domain_vts(m_dvdnav));
+ m_holdmode = HOLDMODE_HELD;
+ m_lastevent = DVDNAV_NOP;
+ m_bInMenu = (0 == m_dll.dvdnav_is_domain_vts(m_dvdnav));
+ }
}
break;
--
1.7.10

View File

@ -1,304 +0,0 @@
diff -Naur xbmc-f3b0020/xbmc/guilib/GUIToggleButtonControl.h xbmc-f3b0020.patch/xbmc/guilib/GUIToggleButtonControl.h
--- xbmc-f3b0020/xbmc/guilib/GUIToggleButtonControl.h 2011-12-10 22:16:22.000000000 +0100
+++ xbmc-f3b0020.patch/xbmc/guilib/GUIToggleButtonControl.h 2011-12-17 18:43:42.183704449 +0100
@@ -57,6 +57,7 @@
virtual CStdString GetDescription() const;
void SetToggleSelect(const CStdString &toggleSelect);
void SetAltClickActions(const CGUIAction &clickActions);
+ bool IsSelected() const { return m_bSelected; };
protected:
virtual bool UpdateColors();
diff -Naur xbmc-f3b0020/xbmc/interfaces/python/xbmcmodule/control.h xbmc-f3b0020.patch/xbmc/interfaces/python/xbmcmodule/control.h
--- xbmc-f3b0020/xbmc/interfaces/python/xbmcmodule/control.h 2011-12-10 22:16:21.000000000 +0100
+++ xbmc-f3b0020.patch/xbmc/interfaces/python/xbmcmodule/control.h 2011-12-17 18:43:42.216705084 +0100
@@ -135,6 +135,11 @@
typedef struct {
PyObject_HEAD_XBMC_CONTROL
+ bool bIsSelected;
+ } ControlToggle;
+
+ typedef struct {
+ PyObject_HEAD_XBMC_CONTROL
std::string strFont;
color_t textColor;
std::vector<std::string> vecLabels;
@@ -263,7 +268,8 @@
extern PyTypeObject ControlRadioButton_Type;
extern PyTypeObject ControlSlider_Type;
extern PyTypeObject ControlEdit_Type;
-
+ extern PyTypeObject ControlToggle_Type;
+
CGUIControl* ControlLabel_Create(ControlLabel* pControl);
CGUIControl* ControlFadeLabel_Create(ControlFadeLabel* pControl);
CGUIControl* ControlTextBox_Create(ControlTextBox* pControl);
@@ -276,6 +282,7 @@
CGUIControl* ControlRadioButton_Create(ControlRadioButton* pControl);
CGUIControl* ControlSlider_Create(ControlSlider* pControl);
CGUIControl* ControlEdit_Create(ControlEdit* pControl);
+ CGUIControl* ControlToggle_Create(ControlToggle* pControl);
void initControl_Type();
void initControlSpin_Type();
@@ -291,6 +298,7 @@
void initControlRadioButton_Type();
void initControlSlider_Type();
void initControlEdit_Type();
+ void initControlToggle_Type();
}
#ifdef __cplusplus
diff -Naur xbmc-f3b0020/xbmc/interfaces/python/xbmcmodule/controltogglebutton.cpp xbmc-f3b0020.patch/xbmc/interfaces/python/xbmcmodule/controltogglebutton.cpp
--- xbmc-f3b0020/xbmc/interfaces/python/xbmcmodule/controltogglebutton.cpp 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-f3b0020.patch/xbmc/interfaces/python/xbmcmodule/controltogglebutton.cpp 2011-12-17 18:43:42.217705104 +0100
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2005-2011 Team XBMC
+ * http://www.xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#include <Python.h>
+
+#include "guilib/GUIToggleButtonControl.h"
+#include "guilib/GUIFontManager.h"
+#include "control.h"
+#include "pyutil.h"
+
+using namespace std;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+namespace PYXBMC
+{
+ PyObject* ControlToggle_New(
+ PyTypeObject *type,
+ PyObject *args,
+ PyObject *kwds )
+ {
+ static const char *keywords[] = {
+ "x", "y", "width", "height", "label",
+ "focusTexture", "noFocusTexture",
+ "textOffsetX", "textOffsetY", "alignment",
+ "font", "textColor", "disabledColor", "angle", "shadowColor", "focusedColor", NULL };
+ ControlToggle *self;
+ char* cFont = NULL;
+ char* cTextureFocus = NULL;
+ char* cTextureNoFocus = NULL;
+ char* cTextColor = NULL;
+ char* cDisabledColor = NULL;
+ char* cShadowColor = NULL;
+ char* cFocusedColor = NULL;
+
+ PyObject* pObjectText;
+
+ self = (ControlToggle*)type->tp_alloc(type, 0);
+ if (!self) return NULL;
+ new(&self->bIsSelected) bool();
+
+ if (!PyArg_ParseTupleAndKeywords(
+ args,
+ kwds,
+ (char*)"llllO|sslllssslss",
+ (char**)keywords,
+ &self->dwPosX,
+ &self->dwPosY,
+ &self->dwWidth,
+ &self->dwHeight,
+ &pObjectText,
+ &cTextureFocus,
+ &cTextureNoFocus,
+ &cFont,
+ &cTextColor,
+ &cDisabledColor,
+ &cShadowColor,
+ &cFocusedColor))
+ {
+ Py_DECREF( self );
+ return NULL;
+ }
+
+
+ cTextureFocus :
+ PyXBMCGetDefaultImage((char*)"button", (char*)"texturefocus", (char*)"button-focus.png");
+ cTextureNoFocus :
+ PyXBMCGetDefaultImage((char*)"button", (char*)"texturenofocus", (char*)"button-nofocus.jpg");
+
+ return (PyObject*)self;
+ }
+
+ void ControlToggle_Dealloc(ControlToggle* self)
+ {
+ self->ob_type->tp_free((PyObject*)self);
+ }
+
+
+ // isSelected() Method
+ PyDoc_STRVAR(isSelected__doc__,
+ "isSelected() -- Returns the toggle buttons's selected status.\n"
+ "\n"
+ "example:\n"
+ " - is = self.togglebutton.isSelected()\n");
+
+ PyObject* ControlToggle_IsSelected(ControlToggle *self, PyObject *args)
+ {
+ bool isSelected = false;
+
+ PyXBMCGUILock();
+ if (self->pGUIControl)
+ isSelected = ((CGUIToggleButtonControl*)self->pGUIControl)->IsSelected();
+ PyXBMCGUIUnlock();
+
+ return Py_BuildValue((char*)"b", isSelected);
+ }
+
+
+ PyMethodDef ControlToggle_methods[] = {
+ {(char*)"isSelected", (PyCFunction)ControlToggle_IsSelected, METH_VARARGS, isSelected__doc__},
+ {NULL, NULL, 0, NULL}
+ };
+
+ // ControlRadioButton class
+ PyDoc_STRVAR(ControlToggle__doc__,
+ "ControlRadioButton class.\n"
+ "\n"
+ "ControlRadioButton(x, y, width, height, label[, focusTexture, noFocusTexture, textOffsetX, textOffsetY,\n"
+ " alignment, font, textColor, disabledColor, angle, shadowColor, focusedColor,\n"
+ " radioFocusTexture, noRadioFocusTexture])\n"
+ "\n"
+ "x : integer - x coordinate of control.\n"
+ "y : integer - y coordinate of control.\n"
+ "width : integer - width of control.\n"
+ "height : integer - height of control.\n"
+ "label : string or unicode - text string.\n"
+ "focusTexture : [opt] string - filename for focus texture.\n"
+ "noFocusTexture : [opt] string - filename for no focus texture.\n"
+ "textOffsetX : [opt] integer - x offset of label.\n"
+ "textOffsetY : [opt] integer - y offset of label.\n"
+ "alignment : [opt] integer - alignment of label - *Note, see xbfont.h\n"
+ "font : [opt] string - font used for label text. (e.g. 'font13')\n"
+ "textColor : [opt] hexstring - color of enabled radio button's label. (e.g. '0xFFFFFFFF')\n"
+ "disabledColor : [opt] hexstring - color of disabled radio button's label. (e.g. '0xFFFF3300')\n"
+ "angle : [opt] integer - angle of control. (+ rotates CCW, - rotates CW)\n"
+ "shadowColor : [opt] hexstring - color of radio button's label's shadow. (e.g. '0xFF000000')\n"
+ "focusedColor : [opt] hexstring - color of focused radio button's label. (e.g. '0xFF00FFFF')\n"
+ "radioFocusTexture : [opt] string - filename for radio focus texture.\n"
+ "noRadioFocusTexture : [opt] string - filename for radio no focus texture.\n"
+ "\n"
+ "*Note, You can use the above as keywords for arguments and skip certain optional arguments.\n"
+ " Once you use a keyword, all following arguments require the keyword.\n"
+ " After you create the control, you need to add it to the window with addControl().\n"
+ "\n"
+ "example:\n"
+ " - self.radiobutton = xbmcgui.ControlToggleButton(100, 250, 200, 50, 'Status', font='font14')\n");
+
+ // Restore code and data sections to normal.
+
+ PyTypeObject ControlToggle_Type;
+
+ void initControlToggle_Type()
+ {
+ PyXBMCInitializeTypeObject(&ControlToggle_Type);
+
+ ControlToggle_Type.tp_name = (char*)"xbmcgui.ControlToggleButton";
+ ControlToggle_Type.tp_basicsize = sizeof(ControlToggle);
+ ControlToggle_Type.tp_dealloc = (destructor)ControlToggle_Dealloc;
+ ControlToggle_Type.tp_compare = 0;
+ ControlToggle_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;
+ ControlToggle_Type.tp_doc = ControlToggle__doc__;
+ ControlToggle_Type.tp_methods = ControlToggle_methods;
+ ControlToggle_Type.tp_base = &Control_Type;
+ ControlToggle_Type.tp_new = ControlToggle_New;
+ }
+}
+
+#ifdef __cplusplus
+}
+#endif
diff -Naur xbmc-f3b0020/xbmc/interfaces/python/xbmcmodule/Makefile.in xbmc-f3b0020.patch/xbmc/interfaces/python/xbmcmodule/Makefile.in
--- xbmc-f3b0020/xbmc/interfaces/python/xbmcmodule/Makefile.in 2011-12-10 22:16:21.000000000 +0100
+++ xbmc-f3b0020.patch/xbmc/interfaces/python/xbmcmodule/Makefile.in 2011-12-17 18:44:47.447960296 +0100
@@ -13,6 +13,7 @@
controlslider.cpp \
controlspin.cpp \
controltextbox.cpp \
+ controltogglebutton.cpp \
dialog.cpp \
GUIPythonWindow.cpp \
GUIPythonWindowDialog.cpp \
diff -Naur xbmc-f3b0020/xbmc/interfaces/python/xbmcmodule/window.cpp xbmc-f3b0020.patch/xbmc/interfaces/python/xbmcmodule/window.cpp
--- xbmc-f3b0020/xbmc/interfaces/python/xbmcmodule/window.cpp 2011-12-10 22:16:21.000000000 +0100
+++ xbmc-f3b0020.patch/xbmc/interfaces/python/xbmcmodule/window.cpp 2011-12-17 18:43:42.218705123 +0100
@@ -277,6 +277,12 @@
if (li.font) ((ControlEdit*)pControl)->strFont = li.font->GetFontName();
((ControlButton*)pControl)->align = li.align;
break;
+ case CGUIControl::GUICONTROL_TOGGLEBUTTON:
+ pControl = (Control*)ControlToggle_Type.tp_alloc(&ControlToggle_Type, 0);
+ new(&((ControlToggle*)pControl)->bIsSelected) bool();
+
+ break;
+
default:
break;
}
diff -Naur xbmc-f3b0020/xbmc/interfaces/python/xbmcmodule/xbmcguimodule.cpp xbmc-f3b0020.patch/xbmc/interfaces/python/xbmcmodule/xbmcguimodule.cpp
--- xbmc-f3b0020/xbmc/interfaces/python/xbmcmodule/xbmcguimodule.cpp 2011-12-10 22:16:21.000000000 +0100
+++ xbmc-f3b0020.patch/xbmc/interfaces/python/xbmcmodule/xbmcguimodule.cpp 2011-12-17 18:43:42.219705142 +0100
@@ -138,6 +138,7 @@
initAction_Type();
initControlRadioButton_Type();
initControlEdit_Type();
+ initControlToggle_Type();
if (PyType_Ready(&Window_Type) < 0 ||
PyType_Ready(&WindowDialog_Type) < 0 ||
@@ -160,7 +161,8 @@
PyType_Ready(&ControlSlider_Type) < 0 ||
PyType_Ready(&ControlRadioButton_Type) < 0 ||
PyType_Ready(&ControlEdit_Type) < 0 ||
- PyType_Ready(&Action_Type) < 0)
+ PyType_Ready(&Action_Type) < 0 ||
+ PyType_Ready(&ControlToggle_Type) < 0)
return;
}
@@ -200,6 +202,7 @@
Py_INCREF(&Action_Type);
Py_INCREF(&ControlRadioButton_Type);
Py_INCREF(&ControlEdit_Type);
+ Py_INCREF(&ControlToggle_Type);
pXbmcGuiModule = Py_InitModule3((char*)"xbmcgui", xbmcGuiMethods, xbmcgui_module_documentation);
@@ -227,7 +230,8 @@
PyModule_AddObject(pXbmcGuiModule, (char*)"Action", (PyObject *)&Action_Type);
PyModule_AddObject(pXbmcGuiModule, (char*)"ControlRadioButton", (PyObject*)&ControlRadioButton_Type);
PyModule_AddObject(pXbmcGuiModule, (char*)"ControlEdit", (PyObject*)&ControlEdit_Type);
-
+ PyModule_AddObject(pXbmcGuiModule, (char*)"ControlToggle", (PyObject*)&ControlToggle_Type);
+
PyModule_AddStringConstant(pXbmcGuiModule, (char*)"__author__", (char*)PY_XBMC_AUTHOR);
PyModule_AddStringConstant(pXbmcGuiModule, (char*)"__date__", (char*)"14 July 2006");
PyModule_AddStringConstant(pXbmcGuiModule, (char*)"__version__", (char*)"1.2");
diff -Naur xbmc-f3b0020/XBMC.xcodeproj/project.pbxproj xbmc-f3b0020.patch/XBMC.xcodeproj/project.pbxproj

View File

@ -1,27 +0,0 @@
From f025c39679b438cb91a0ef0f205736ff92fddeac Mon Sep 17 00:00:00 2001
From: Vic Lee <llyzs@163.com>
Date: Thu, 10 Feb 2011 09:36:15 +0800
Subject: [PATCH 5/5] UDisk: device must be remount in DeviceChanged event
Signed-off-by: Vic Lee <llyzs@163.com>
---
xbmc/linux/UDisksProvider.cpp | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/xbmc/storage/linux/UDisksProvider.cpp b/xbmc/storage/linux/UDisksProvider.cpp
index 8e9b378..e24502a 100644
--- a/xbmc/storage/linux/UDisksProvider.cpp
+++ b/xbmc/storage/linux/UDisksProvider.cpp
@@ -368,6 +368,8 @@ void CUDisksProvider::DeviceChanged(const char *object, IStorageEventsCallback *
{
bool mounted = device->m_isMounted;
device->Update();
+ if (g_advancedSettings.m_handleMounting)
+ device->Mount();
if (!mounted && device->m_isMounted && callback)
callback->OnStorageAdded(device->m_Label, device->m_MountPath);
else if (mounted && !device->m_isMounted && callback)
--
1.7.2.3

View File

@ -1,36 +0,0 @@
From f52dd9a555e8e4b087ec6fbf040dc1f1155c4136 Mon Sep 17 00:00:00 2001
From: "S. Davilla" <davilla@4pi.com>
Date: Sat, 21 Apr 2012 14:11:56 -0400
Subject: [PATCH] fixed, failure to broswe for smb shares. this hits all 1st
time installs
---
xbmc/filesystem/SmbFile.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/xbmc/filesystem/FileSmb.cpp b/xbmc/filesystem/FileSmb.cpp
index 382553c..c390031 100644
--- a/xbmc/filesystem/FileSmb.cpp
+++ b/xbmc/filesystem/FileSmb.cpp
@@ -61,7 +61,6 @@ SMBCSRV* xb_smbc_cache(SMBCCTX* c, const char* server, const char* share, const
m_IdleTimeout = 0;
#endif
m_context = NULL;
- smbc_init(xb_smbc_auth, 0);
}
CSMB::~CSMB()
@@ -149,6 +148,10 @@ void CSMB::Init()
}
#endif
+ // reads smb.conf so this MUST be after we create smb.conf
+ // multiple smbc_init calls are ignored by libsmbclient.
+ smbc_init(xb_smbc_auth, 0);
+
#ifdef TARGET_WINDOWS
// set the log function
set_log_callback(xb_smbc_log);
--
1.7.10

View File

@ -1,13 +0,0 @@
diff --git a/xbmc/storage/linux/UDisksProvider.cpp b/xbmc/storage/linux/UDisksProvider.cpp
index 6afc1a8..c940e69 100644
--- a/xbmc/storage/linux/UDisksProvider.cpp
+++ b/xbmc/storage/linux/UDisksProvider.cpp
@@ -356,7 +356,7 @@ void CUDisksProvider::DeviceChanged(const char *object, IStorageEventsCallback *
{
bool mounted = device->m_isMounted;
device->Update();
- if (g_advancedSettings.m_handleMounting)
+ if (g_advancedSettings.m_handleMounting && device->m_isOptical)
device->Mount();
if (!mounted && device->m_isMounted && callback)
callback->OnStorageAdded(device->m_Label, device->m_MountPath);

View File

@ -1,13 +0,0 @@
diff --git a/tools/EventClients/Clients/WiiRemote/WiiUse_WiiRemote.h b/tools/EventClients/Clients/WiiRemote/WiiUse_WiiRemote.h
index dbdbb94..6f68715 100644
--- a/tools/EventClients/Clients/WiiRemote/WiiUse_WiiRemote.h
+++ b/tools/EventClients/Clients/WiiRemote/WiiUse_WiiRemote.h
@@ -27,7 +27,7 @@
#include "../../lib/c++/xbmcclient.h"
#endif
//#ifndef WIN32
-// #include <unistd.h>
+ #include <unistd.h>
//#endif
#include "wiiuse.h"
//#define ICON_PATH "../../"

View File

@ -1,101 +0,0 @@
diff --git a/xbmc/ApplicationMessenger.cpp b/xbmc/ApplicationMessenger.cpp
index 7ef2027..bea711b 100644
--- a/xbmc/ApplicationMessenger.cpp
+++ b/xbmc/ApplicationMessenger.cpp
@@ -73,6 +73,9 @@
#include "utils/JobManager.h"
#include "storage/DetectDVDType.h"
+#include "pvr/PVRManager.h"
+
+using namespace PVR;
using namespace std;
CDelayedMessage::CDelayedMessage(ThreadMessage& msg, unsigned int delay)
@@ -261,12 +264,14 @@ void CApplicationMessenger::ProcessMessage(ThreadMessage *pMsg)
case TMSG_HIBERNATE:
{
+ g_PVRManager.SetWakeupCommand();
g_powerManager.Hibernate();
}
break;
case TMSG_SUSPEND:
{
+ g_PVRManager.SetWakeupCommand();
g_powerManager.Suspend();
}
break;
diff --git a/xbmc/pvr/PVRManager.h b/xbmc/pvr/PVRManager.h
index 94a8c9a..99280c6 100644
--- a/xbmc/pvr/PVRManager.h
+++ b/xbmc/pvr/PVRManager.h
@@ -450,6 +450,11 @@ namespace PVR
*/
void LoadCurrentChannelSettings(void);
+ /*!
+ * @brief Executes "pvrpowermanagement.setwakeupcmd"
+ */
+ bool SetWakeupCommand(void);
+
protected:
/*!
* @brief PVR update and control thread.
@@ -525,11 +530,6 @@ namespace PVR
void ShowProgressDialog(const CStdString &strText, int iProgress);
/*!
- * @brief Executes "pvrpowermanagement.setwakeupcmd"
- */
- bool SetWakeupCommand(void);
-
- /*!
* @brief Hide the progress dialog if it's visible.
*/
void HideProgressDialog(void);
diff --git a/xbmc/pvr/timers/PVRTimers.cpp b/xbmc/pvr/timers/PVRTimers.cpp
index cfba9bb..4e757d6 100644
--- a/xbmc/pvr/timers/PVRTimers.cpp
+++ b/xbmc/pvr/timers/PVRTimers.cpp
@@ -714,8 +714,7 @@ CDateTime CPVRTimers::GetNextEventTime(void) const
const CDateTimeSpan prewakeup(0, 0, g_guiSettings.GetInt("pvrpowermanagement.prewakeup"), 0);
const CDateTimeSpan idle(0, 0, g_guiSettings.GetInt("pvrpowermanagement.backendidletime"), 0);
- CDateTime timerwakeuptime;
- CDateTime dailywakeuptime;
+ CDateTime retVal;
/* Check next active time */
CPVRTimerInfoTag timer;
@@ -724,15 +723,16 @@ CDateTime CPVRTimers::GetNextEventTime(void) const
const CDateTime start = timer.StartAsUTC();
if ((start - idle) > now) {
- timerwakeuptime = start - prewakeup;
+ retVal = start - prewakeup;
} else {
- timerwakeuptime = now + idle;
+ retVal = now + idle;
}
}
/* check daily wake up */
if (dailywakup)
{
+ CDateTime dailywakeuptime;
dailywakeuptime.SetFromDBTime(g_guiSettings.GetString("pvrpowermanagement.dailywakeuptime", false));
dailywakeuptime = dailywakeuptime.GetAsUTCDateTime();
@@ -746,8 +746,9 @@ CDateTime CPVRTimers::GetNextEventTime(void) const
const CDateTimeSpan oneDay(1,0,0,0);
dailywakeuptime += oneDay;
}
+ if (dailywakeuptime < retVal)
+ retVal = dailywakeuptime;
}
- const CDateTime retVal((dailywakeuptime < timerwakeuptime) ? dailywakeuptime : timerwakeuptime);
return retVal;
}

View File

@ -1,23 +0,0 @@
diff --git a/Makefile.include.in b/Makefile.include.in
index b70245d..0537b86 100644
--- a/Makefile.include.in
+++ b/Makefile.include.in
@@ -1,4 +1,4 @@
-AR=ar
+AR=@AR@
ARFLAGS=crus
RM=rm -rf
SHELL=@SHELL@
diff --git a/configure.in b/configure.in
index 7348529..baea8e0 100755
--- a/configure.in
+++ b/configure.in
@@ -22,7 +22,7 @@ AC_DEFUN([XB_FIND_SONAME],
AC_MSG_CHECKING([for lib$2 soname])
$1_FILENAME=$($CC -nostdlib -o /dev/null $LDFLAGS -l$2 -Wl,-M 2>/dev/null | grep "^LOAD.*$2" | awk '{V=2; print $V}')
if [[ ! -z $$1_FILENAME ]]; then
- $1_SONAME=$(objdump -p $$1_FILENAME | grep "SONAME.*$2" | awk '{V=2; print $V}')
+ $1_SONAME=$($OBJDUMP -p $$1_FILENAME | grep "SONAME.*$2" | awk '{V=2; print $V}')
fi
else
AC_MSG_CHECKING([for lib$2 dylib])

View File

@ -1,99 +0,0 @@
From 268d6a01b6a7dea0d53b042c246c95e87f4fc3d8 Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Thu, 26 Jul 2012 15:43:24 +0200
Subject: [PATCH] move deleting gl textures to TextureManager, fixes asic hang
on AMD
---
xbmc/Application.cpp | 4 ++--
xbmc/guilib/GUIFontTTFGL.cpp | 3 ++-
xbmc/guilib/TextureManager.cpp | 13 +++++++++++++
xbmc/guilib/TextureManager.h | 2 ++
4 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
index 71d8a4e..b66459a 100644
--- a/xbmc/Application.cpp
+++ b/xbmc/Application.cpp
@@ -2231,8 +2231,6 @@ void CApplication::Render()
g_Windowing.EndRender();
- g_TextureManager.FreeUnusedTextures();
-
// reset our info cache - we do this at the end of Render so that it is
// fresh for the next process(), or after a windowclose animation (where process()
// isn't called)
@@ -2270,6 +2268,8 @@ void CApplication::Render()
}
CTimeUtils::UpdateFrameTime(flip);
+ g_TextureManager.FreeUnusedTextures();
+
g_renderManager.UpdateResolution();
g_renderManager.ManageCaptures();
}
diff --git a/xbmc/guilib/GUIFontTTFGL.cpp b/xbmc/guilib/GUIFontTTFGL.cpp
index 87e07ca..6c93eb8 100644
--- a/xbmc/guilib/GUIFontTTFGL.cpp
+++ b/xbmc/guilib/GUIFontTTFGL.cpp
@@ -24,6 +24,7 @@
#include "GUIFontTTFGL.h"
#include "GUIFontManager.h"
#include "Texture.h"
+#include "TextureManager.h"
#include "GraphicContext.h"
#include "gui3d.h"
#include "utils/log.h"
@@ -234,7 +235,7 @@ void CGUIFontTTFGL::DeleteHardwareTexture()
if (m_bTextureLoaded)
{
if (glIsTexture(m_nTexture))
- glDeleteTextures(1, (GLuint*) &m_nTexture);
+ g_TextureManager.ReleaseHwTexture(m_nTexture);
m_bTextureLoaded = false;
}
}
diff --git a/xbmc/guilib/TextureManager.cpp b/xbmc/guilib/TextureManager.cpp
index 9ef7889..ccd0d03 100644
--- a/xbmc/guilib/TextureManager.cpp
+++ b/xbmc/guilib/TextureManager.cpp
@@ -457,6 +457,19 @@ void CGUITextureManager::FreeUnusedTextures()
for (ivecTextures i = m_unusedTextures.begin(); i != m_unusedTextures.end(); ++i)
delete *i;
m_unusedTextures.clear();
+
+#if defined(HAS_GL) || defined(HAS_GLES)
+ for (unsigned int i = 0; i < m_unusedHwTextures.size(); ++i)
+ {
+ glDeleteTextures(1, (GLuint*) &m_unusedHwTextures[i]);
+ }
+#endif
+ m_unusedHwTextures.clear();
+}
+
+void CGUITextureManager::ReleaseHwTexture(unsigned int texture)
+{
+ m_unusedHwTextures.push_back(texture);
}
void CGUITextureManager::Cleanup()
diff --git a/xbmc/guilib/TextureManager.h b/xbmc/guilib/TextureManager.h
index dd47f48..001f470 100644
--- a/xbmc/guilib/TextureManager.h
+++ b/xbmc/guilib/TextureManager.h
@@ -124,9 +124,11 @@ class CGUITextureManager
void RemoveTexturePath(const CStdString &texturePath); ///< Remove a path from the paths to check when loading media
void FreeUnusedTextures(); ///< Free textures (called from app thread only)
+ void ReleaseHwTexture(unsigned int texture);
protected:
std::vector<CTextureMap*> m_vecTextures;
std::vector<CTextureMap*> m_unusedTextures;
+ std::vector<unsigned int> m_unusedHwTextures;
typedef std::vector<CTextureMap*>::iterator ivecTextures;
// we have 2 texture bundles (one for the base textures, one for the theme)
CTextureBundle m_TexBundle[2];
--
1.7.10

View File

@ -1,148 +0,0 @@
From f01f95af95f287847c850572abe16b6969967ba7 Mon Sep 17 00:00:00 2001
From: Anssi Hannula <anssi@xbmc.org>
Date: Wed, 16 May 2012 19:01:17 +0300
Subject: [PATCH 1/3] fixed: crashes with corrupted rar files
UnrarXLib does not handle invalid files gracefully enough, and some
files can cause it to tell CRarFile that it has written more data into
its buffer than actually fits there, causing CRarFile::Read() to
eventually overread the buffer.
Add checks in CRarFile for the validity of byte counts retrieved from
UnrarXLib to prevent crashes in such situations.
(cherry picked from commit ca9457286994ef0b021744797b8d78fb78260436)
---
xbmc/filesystem/FileRar.cpp | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/xbmc/filesystem/FileRar.cpp b/xbmc/filesystem/FileRar.cpp
index 9c87a35..d026f8f 100644
--- a/xbmc/filesystem/FileRar.cpp
+++ b/xbmc/filesystem/FileRar.cpp
@@ -310,6 +310,14 @@ unsigned int CFileRar::Read(void *lpBuf, int64_t uiBufSize)
m_iDataInBuffer = MAXWINMEMSIZE-m_pExtract->GetDataIO().UnpackToMemorySize;
+ if (m_iDataInBuffer < 0 ||
+ m_iDataInBuffer > MAXWINMEMSIZE - (m_szStartOfBuffer - m_szBuffer))
+ {
+ // invalid data returned by UnrarXLib, prevent a crash
+ CLog::Log(LOGERROR, "CRarFile::Read - Data buffer in inconsistent state");
+ m_iDataInBuffer = 0;
+ }
+
if (m_iDataInBuffer == 0)
break;
@@ -471,6 +479,15 @@ int64_t CFileRar::Seek(int64_t iFilePosition, int iWhence)
}
m_iDataInBuffer = m_pExtract->GetDataIO().m_iSeekTo; // keep data
m_iBufferStart = m_pExtract->GetDataIO().m_iStartOfBuffer;
+
+ if (m_iDataInBuffer < 0 || m_iDataInBuffer > MAXWINMEMSIZE)
+ {
+ // invalid data returned by UnrarXLib, prevent a crash
+ CLog::Log(LOGERROR, "CRarFile::Seek - Data buffer in inconsistent state");
+ m_iDataInBuffer = 0;
+ return -1;
+ }
+
m_szStartOfBuffer = m_szBuffer+MAXWINMEMSIZE-m_iDataInBuffer;
m_iFilePosition = iFilePosition;
--
1.7.10
From de1be4534cf410896b3102f95b6e02019ed64a90 Mon Sep 17 00:00:00 2001
From: Anssi Hannula <anssi@xbmc.org>
Date: Wed, 16 May 2012 17:13:07 +0300
Subject: [PATCH 2/3] fixed: rars that have unpacked size stored on first
volume only
Some multi-volume RAR files have their unpacked size set as 0 in all
volumes except the first one.
Use the previous unpacked size instead of 0 in such cases in order to
support such files properly.
(cherry picked from commit 683457d27736c09415a11d80933553f75139a253)
---
lib/UnrarXLib/volume.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/lib/UnrarXLib/volume.cpp b/lib/UnrarXLib/volume.cpp
index 1f4d5e3..b24e98b 100644
--- a/lib/UnrarXLib/volume.cpp
+++ b/lib/UnrarXLib/volume.cpp
@@ -15,6 +15,7 @@ bool MergeArchive(Archive &Arc,ComprDataIO *DataIO,bool ShowFileName,char Comman
Log(Arc.FileName,St(MDataBadCRC),hd->FileName,Arc.FileName);
}
+ Int64 PrevFullUnpSize = hd->FullUnpSize;
Int64 PosBeforeClose=Arc.Tell();
Arc.Close();
@@ -144,6 +145,13 @@ bool MergeArchive(Archive &Arc,ComprDataIO *DataIO,bool ShowFileName,char Comman
}
}
#endif
+
+ if (hd->FullUnpSize == 0)
+ {
+ // some archives only have correct UnpSize in the first volume
+ hd->FullUnpSize = PrevFullUnpSize;
+ }
+
if (DataIO!=NULL)
{
if (HeaderType==ENDARC_HEAD)
--
1.7.10
From d7bed5ddbbc98d7fedac663410d8e7e64bdf20c7 Mon Sep 17 00:00:00 2001
From: Anssi Hannula <anssi@xbmc.org>
Date: Wed, 16 May 2012 00:14:49 +0300
Subject: [PATCH 3/3] fixed: CRarFile::Read() returning wrong data after some
seek patterns
Certain seek patterns on a file inside a non-compressed rar file can
cause CmdExtract::UnstoreFile() to think that the destination buffer has
been filled (as DestUnpSize counter, originally set to the file size,
reaches zero).
However, counting written bytes using DestUnpSize doesn't make sense for
the UnpackToMemory codepath used for non-compressed rar files, as there
can be seeks which can eventually cause more data to be read than what
the actual file size was. The actual output buffer is internally handled
by ComprDataIO.
The check in UnstoreFile() will result in not all data being written to
the destination buffer, causing CRarFile::Read() to return old stale
data.
Fix that by dropping the unnecessary DestUnpSize handling in
UnpackToMemory codepath of CmdExtract::UnstoreFile().
(cherry picked from commit 840cd4ce4ac8c781e7d35db2ed86d575a42c37e7)
---
lib/UnrarXLib/extract.cpp | 3 ---
1 file changed, 3 deletions(-)
diff --git a/lib/UnrarXLib/extract.cpp b/lib/UnrarXLib/extract.cpp
index b4a8091..368a899 100644
--- a/lib/UnrarXLib/extract.cpp
+++ b/lib/UnrarXLib/extract.cpp
@@ -863,10 +863,7 @@ void CmdExtract::UnstoreFile(ComprDataIO &DataIO,Int64 DestUnpSize)
}
if (Code > 0)
{
- Code=Code<DestUnpSize ? Code:int64to32(DestUnpSize);
DataIO.UnpWrite(&Buffer[0],Code);
- if (DestUnpSize>=0)
- DestUnpSize-=Code;
}
else
{
--
1.7.10

View File

@ -1,31 +0,0 @@
From ab175ba28508445f6aff57386a8ce04b58a86f60 Mon Sep 17 00:00:00 2001
From: Memphiz <memphis@machzwo.de>
Date: Fri, 11 May 2012 19:56:37 +0200
Subject: [PATCH] [fix] - reapply fix for airtunes with AE which was lost
during merge
---
xbmc/network/AirTunesServer.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/xbmc/network/AirTunesServer.cpp b/xbmc/network/AirTunesServer.cpp
index 285a0a6..a60ad09 100644
--- a/xbmc/network/AirTunesServer.cpp
+++ b/xbmc/network/AirTunesServer.cpp
@@ -125,11 +125,11 @@ ao_device* CAirTunesServer::AudioOutputFunctions::ao_open_live(int driver_id, ao
if (ao_get_option(option, "name"))
item.GetMusicInfoTag()->SetTitle(ao_get_option(option, "name"));
- g_application.getApplicationMessenger().PlayFile(item);
-
ThreadMessage tMsg2 = { TMSG_GUI_ACTIVATE_WINDOW, WINDOW_VISUALISATION, 0 };
g_application.getApplicationMessenger().SendMessage(tMsg2, true);
+ g_application.getApplicationMessenger().PlayFile(item);
+
return (ao_device*) device;
}
--
1.7.10

View File

@ -1,527 +0,0 @@
From b73018af2ae69c7cfad0a4461d169a49c7d0dfbf Mon Sep 17 00:00:00 2001
From: Memphiz <memphis@machzwo.de>
Date: Tue, 15 May 2012 19:12:07 +0200
Subject: [PATCH] [airtunes] - implementation for windows using libshairplay
---
xbmc/network/AirTunesServer.cpp | 330 +++++++++++++++++++++++++++++++++++++--
xbmc/network/AirTunesServer.h | 23 +++
2 files changed, 343 insertions(+), 10 deletions(-)
diff --git a/xbmc/network/AirTunesServer.cpp b/xbmc/network/AirTunesServer.cpp
index a60ad09..e14da90 100644
--- a/xbmc/network/AirTunesServer.cpp
+++ b/xbmc/network/AirTunesServer.cpp
@@ -17,7 +17,9 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#if !defined(TARGET_WINDOWS)
#pragma GCC diagnostic ignored "-Wwrite-strings"
+#endif
#include "AirTunesServer.h"
@@ -37,15 +39,243 @@
#include "music/tags/MusicInfoTag.h"
#include "FileItem.h"
#include "GUIInfoManager.h"
+#include "guilib/GUIWindowManager.h"
#include "utils/Variant.h"
#include "settings/AdvancedSettings.h"
+#include "utils/EndianSwap.h"
+
+#include <map>
+#include <string>
+
using namespace XFILE;
+#if defined(TARGET_WINDOWS)
+DllLibShairplay *CAirTunesServer::m_pLibShairplay = NULL;
+#else
DllLibShairport *CAirTunesServer::m_pLibShairport = NULL;
+#endif
CAirTunesServer *CAirTunesServer::ServerInstance = NULL;
CStdString CAirTunesServer::m_macAddress;
+//parse daap metadata - thx to project MythTV
+std::map<std::string, std::string> decodeDMAP(const char *buffer, unsigned int size)
+{
+ std::map<std::string, std::string> result;
+ unsigned int offset = 8;
+ while (offset < size)
+ {
+ std::string tag;
+ tag.append(buffer + offset, 4);
+ offset += 4;
+ uint32_t length = Endian_SwapBE32(*(uint32_t *)(buffer + offset));
+ offset += sizeof(uint32_t);
+ std::string content;
+ content.append(buffer + offset, length);//possible fixme - utf8?
+ offset += length;
+ result[tag] = content;
+ }
+ return result;
+}
+
+void CAirTunesServer::SetMetadataFromBuffer(const char *buffer, unsigned int size)
+{
+ MUSIC_INFO::CMusicInfoTag tag;
+ std::map<std::string, std::string> metadata = decodeDMAP(buffer, size);
+ if(metadata["asal"].length())
+ tag.SetAlbum(metadata["asal"]);//album
+ if(metadata["minm"].length())
+ tag.SetTitle(metadata["minm"]);//title
+ if(metadata["asar"].length())
+ tag.SetArtist(metadata["asar"]);//artist
+ g_infoManager.SetCurrentSongTag(tag);
+}
+
+void CAirTunesServer::SetCoverArtFromBuffer(const char *buffer, unsigned int size)
+{
+ XFILE::CFile tmpFile;
+ const char *tmpFileName = "special://temp/airtunes_album_thumb.jpg";
+
+ if(!size)
+ return;
+
+ if (tmpFile.OpenForWrite(tmpFileName, true))
+ {
+ int writtenBytes=0;
+ writtenBytes = tmpFile.Write(buffer, size);
+ tmpFile.Close();
+
+ if(writtenBytes)
+ {
+ //reset to empty before setting the new one
+ //else it won't get refreshed because the name didn't change
+ g_infoManager.SetCurrentAlbumThumb("");
+ g_infoManager.SetCurrentAlbumThumb(tmpFileName);
+ //update the ui
+ CGUIMessage msg(GUI_MSG_NOTIFY_ALL,0,0,GUI_MSG_REFRESH_THUMBS);
+ g_windowManager.SendThreadMessage(msg);
+ }
+ }
+}
+
+#if defined(TARGET_WINDOWS)
+#define RSA_KEY " \
+-----BEGIN RSA PRIVATE KEY-----\
+MIIEpQIBAAKCAQEA59dE8qLieItsH1WgjrcFRKj6eUWqi+bGLOX1HL3U3GhC/j0Qg90u3sG/1CUt\
+wC5vOYvfDmFI6oSFXi5ELabWJmT2dKHzBJKa3k9ok+8t9ucRqMd6DZHJ2YCCLlDRKSKv6kDqnw4U\
+wPdpOMXziC/AMj3Z/lUVX1G7WSHCAWKf1zNS1eLvqr+boEjXuBOitnZ/bDzPHrTOZz0Dew0uowxf\
+/+sG+NCK3eQJVxqcaJ/vEHKIVd2M+5qL71yJQ+87X6oV3eaYvt3zWZYD6z5vYTcrtij2VZ9Zmni/\
+UAaHqn9JdsBWLUEpVviYnhimNVvYFZeCXg/IdTQ+x4IRdiXNv5hEewIDAQABAoIBAQDl8Axy9XfW\
+BLmkzkEiqoSwF0PsmVrPzH9KsnwLGH+QZlvjWd8SWYGN7u1507HvhF5N3drJoVU3O14nDY4TFQAa\
+LlJ9VM35AApXaLyY1ERrN7u9ALKd2LUwYhM7Km539O4yUFYikE2nIPscEsA5ltpxOgUGCY7b7ez5\
+NtD6nL1ZKauw7aNXmVAvmJTcuPxWmoktF3gDJKK2wxZuNGcJE0uFQEG4Z3BrWP7yoNuSK3dii2jm\
+lpPHr0O/KnPQtzI3eguhe0TwUem/eYSdyzMyVx/YpwkzwtYL3sR5k0o9rKQLtvLzfAqdBxBurciz\
+aaA/L0HIgAmOit1GJA2saMxTVPNhAoGBAPfgv1oeZxgxmotiCcMXFEQEWflzhWYTsXrhUIuz5jFu\
+a39GLS99ZEErhLdrwj8rDDViRVJ5skOp9zFvlYAHs0xh92ji1E7V/ysnKBfsMrPkk5KSKPrnjndM\
+oPdevWnVkgJ5jxFuNgxkOLMuG9i53B4yMvDTCRiIPMQ++N2iLDaRAoGBAO9v//mU8eVkQaoANf0Z\
+oMjW8CN4xwWA2cSEIHkd9AfFkftuv8oyLDCG3ZAf0vrhrrtkrfa7ef+AUb69DNggq4mHQAYBp7L+\
+k5DKzJrKuO0r+R0YbY9pZD1+/g9dVt91d6LQNepUE/yY2PP5CNoFmjedpLHMOPFdVgqDzDFxU8hL\
+AoGBANDrr7xAJbqBjHVwIzQ4To9pb4BNeqDndk5Qe7fT3+/H1njGaC0/rXE0Qb7q5ySgnsCb3DvA\
+cJyRM9SJ7OKlGt0FMSdJD5KG0XPIpAVNwgpXXH5MDJg09KHeh0kXo+QA6viFBi21y340NonnEfdf\
+54PX4ZGS/Xac1UK+pLkBB+zRAoGAf0AY3H3qKS2lMEI4bzEFoHeK3G895pDaK3TFBVmD7fV0Zhov\
+17fegFPMwOII8MisYm9ZfT2Z0s5Ro3s5rkt+nvLAdfC/PYPKzTLalpGSwomSNYJcB9HNMlmhkGzc\
+1JnLYT4iyUyx6pcZBmCd8bD0iwY/FzcgNDaUmbX9+XDvRA0CgYEAkE7pIPlE71qvfJQgoA9em0gI\
+LAuE4Pu13aKiJnfft7hIjbK+5kyb3TysZvoyDnb3HOKvInK7vXbKuU4ISgxB2bB3HcYzQMGsz1qJ\
+2gG0N5hvJpzwwhbhXqFKA4zaaSrw622wDniAK5MlIE0tIAKKP4yxNGjoD2QYjhBGuhvkWKY=\
+-----END RSA PRIVATE KEY-----"
+
+void CAirTunesServer::AudioOutputFunctions::audio_set_metadata(void *cls, void *session, const void *buffer, int buflen)
+{
+ CAirTunesServer::SetMetadataFromBuffer((char *)buffer, buflen);
+}
+
+void CAirTunesServer::AudioOutputFunctions::audio_set_coverart(void *cls, void *session, const void *buffer, int buflen)
+{
+ CAirTunesServer::SetCoverArtFromBuffer((char *)buffer, buflen);
+}
+
+void* CAirTunesServer::AudioOutputFunctions::audio_init(void *cls, int bits, int channels, int samplerate)
+{
+ XFILE::CPipeFile *pipe=(XFILE::CPipeFile *)cls;
+ pipe->OpenForWrite(XFILE::PipesManager::GetInstance().GetUniquePipeName());
+ pipe->SetOpenThreashold(300);
+
+ BXA_FmtHeader header;
+ strncpy(header.fourcc, "BXA ", 4);
+ header.type = BXA_PACKET_TYPE_FMT;
+ header.bitsPerSample = bits;
+ header.channels = channels;
+ header.sampleRate = samplerate;
+ header.durationMs = 0;
+
+ if (pipe->Write(&header, sizeof(header)) == 0)
+ return 0;
+
+ ThreadMessage tMsg = { TMSG_MEDIA_STOP };
+ g_application.getApplicationMessenger().SendMessage(tMsg, true);
+
+ CFileItem item;
+ item.SetPath(pipe->GetName());
+ item.SetMimeType("audio/x-xbmc-pcm");
+
+ ThreadMessage tMsg2 = { TMSG_GUI_ACTIVATE_WINDOW, WINDOW_VISUALISATION, 0 };
+ g_application.getApplicationMessenger().SendMessage(tMsg2, true);
+
+ g_application.getApplicationMessenger().PlayFile(item);
+
+ return "XBMC-AirTunes";//session
+}
+
+void CAirTunesServer::AudioOutputFunctions::audio_set_volume(void *cls, void *session, float volume)
+{
+ //volume from -144 - 0
+ float volPercent = 1 - volume/-144;
+ g_application.SetVolume(volPercent, false);//non-percent volume 0.0-1.0
+}
+
+void CAirTunesServer::AudioOutputFunctions::audio_process(void *cls, void *session, const void *buffer, int buflen)
+{
+ #define NUM_OF_BYTES 64
+ XFILE::CPipeFile *pipe=(XFILE::CPipeFile *)cls;
+ int sentBytes = 0;
+ unsigned char buf[NUM_OF_BYTES];
+
+ while (sentBytes < buflen)
+ {
+ int n = (buflen - sentBytes < NUM_OF_BYTES ? buflen - sentBytes : NUM_OF_BYTES);
+ memcpy(buf, (char*) buffer + sentBytes, n);
+
+ if (pipe->Write(buf, n) == 0)
+ return;
+
+ sentBytes += n;
+ }
+}
+
+void CAirTunesServer::AudioOutputFunctions::audio_flush(void *cls, void *session)
+{
+ XFILE::CPipeFile *pipe=(XFILE::CPipeFile *)cls;
+ pipe->Flush();
+}
+
+void CAirTunesServer::AudioOutputFunctions::audio_destroy(void *cls, void *session)
+{
+ XFILE::CPipeFile *pipe=(XFILE::CPipeFile *)cls;
+ pipe->SetEof();
+ pipe->Close();
+
+ //fix airplay video for ios5 devices
+ //on ios5 when airplaying video
+ //the client first opens an airtunes stream
+ //while the movie is loading
+ //in that case we don't want to stop the player here
+ //because this would stop the airplaying video
+#ifdef HAS_AIRPLAY
+ if (!CAirPlayServer::IsPlaying())
+#endif
+ {
+ ThreadMessage tMsg = { TMSG_MEDIA_STOP };
+ g_application.getApplicationMessenger().SendMessage(tMsg, true);
+ CLog::Log(LOGDEBUG, "AIRTUNES: AirPlay not running - stopping player");
+ }
+}
+
+void shairplay_log(int level, const char *msg)
+{
+ int xbmcLevel = LOGINFO;
+
+ switch(level)
+ {
+ case RAOP_LOG_EMERG: // system is unusable
+ xbmcLevel = LOGFATAL;
+ break;
+ case RAOP_LOG_ALERT: // action must be taken immediately
+ case RAOP_LOG_CRIT: // critical conditions
+ xbmcLevel = LOGSEVERE;
+ break;
+ case RAOP_LOG_ERR: // error conditions
+ xbmcLevel = LOGERROR;
+ break;
+ case RAOP_LOG_WARNING: // warning conditions
+ xbmcLevel = LOGWARNING;
+ break;
+ case RAOP_LOG_NOTICE: // normal but significant condition
+ xbmcLevel = LOGNOTICE;
+ break;
+ case RAOP_LOG_INFO: // informational
+ xbmcLevel = LOGINFO;
+ break;
+ case RAOP_LOG_DEBUG: // debug-level messages
+ xbmcLevel = LOGDEBUG;
+ break;
+ default:
+ break;
+ }
+ CLog::Log(xbmcLevel, "AIRTUNES: %s", msg);
+}
+
+#else
+
struct ao_device_xbmc
{
XFILE::CPipeFile *pipe;
@@ -214,6 +444,17 @@ char* CAirTunesServer::AudioOutputFunctions::ao_get_option(ao_option *options, c
return NULL;
}
+int shairport_log(const char* msg, size_t msgSize)
+{
+ if( g_advancedSettings.m_logEnableAirtunes)
+ {
+ CLog::Log(LOGDEBUG, "AIRTUNES: %s", msg);
+ }
+ return 1;
+}
+
+#endif
+
bool CAirTunesServer::StartServer(int port, bool nonlocal, bool usePassword, const CStdString &password/*=""*/)
{
bool success = false;
@@ -243,7 +484,9 @@ bool CAirTunesServer::StartServer(int port, bool nonlocal, bool usePassword, con
ServerInstance = new CAirTunesServer(port, nonlocal);
if (ServerInstance->Initialize(password))
{
+#ifndef TARGET_WINDOWS
ServerInstance->Create();
+#endif
success = true;
}
@@ -264,6 +507,9 @@ bool CAirTunesServer::StartServer(int port, bool nonlocal, bool usePassword, con
txt["sr"] = "44100";
txt["pw"] = "false";
txt["vn"] = "3";
+ txt["da"] = "true";
+ txt["vs"] = "130.14";
+ txt["md"] = "0,1,2";
txt["txtvers"] = "1";
CZeroconf::GetInstance()->PublishService("servers.airtunes", "_raop._tcp", appName, port, txt);
@@ -276,10 +522,12 @@ void CAirTunesServer::StopServer(bool bWait)
{
if (ServerInstance)
{
+#if !defined(TARGET_WINDOWS)
if (m_pLibShairport->IsLoaded())
{
m_pLibShairport->shairport_exit();
}
+#endif
ServerInstance->StopThread(bWait);
ServerInstance->Deinitialize();
if (bWait)
@@ -295,47 +543,98 @@ void CAirTunesServer::StopServer(bool bWait)
CAirTunesServer::CAirTunesServer(int port, bool nonlocal) : CThread("AirTunesServer")
{
m_port = port;
+#if defined(TARGET_WINDOWS)
+ m_pLibShairplay = new DllLibShairplay();
+ m_pPipe = new XFILE::CPipeFile;
+#else
m_pLibShairport = new DllLibShairport();
+#endif
}
CAirTunesServer::~CAirTunesServer()
{
+#if defined(TARGET_WINDOWS)
+ if (m_pLibShairplay->IsLoaded())
+ {
+ m_pLibShairplay->Unload();
+ }
+ delete m_pLibShairplay;
+ delete m_pPipe;
+#else
if (m_pLibShairport->IsLoaded())
{
m_pLibShairport->Unload();
}
delete m_pLibShairport;
+#endif
}
void CAirTunesServer::Process()
{
m_bStop = false;
+#if !defined(TARGET_WINDOWS)
while (!m_bStop && m_pLibShairport->shairport_is_running())
{
m_pLibShairport->shairport_loop();
}
+#endif
}
-int shairport_log(const char* msg, size_t msgSize)
+bool CAirTunesServer::Initialize(const CStdString &password)
{
- if( g_advancedSettings.m_logEnableAirtunes)
+ bool ret = false;
+
+ Deinitialize();
+
+#if defined(TARGET_WINDOWS)
+ if (m_pLibShairplay->Load())
{
- CLog::Log(LOGDEBUG, "AIRTUNES: %s", msg);
+
+ raop_callbacks_t ao;
+ ao.cls = m_pPipe;
+ ao.audio_init = AudioOutputFunctions::audio_init;
+ ao.audio_set_volume = AudioOutputFunctions::audio_set_volume;
+ ao.audio_set_metadata = AudioOutputFunctions::audio_set_metadata;
+ ao.audio_set_coverart = AudioOutputFunctions::audio_set_coverart;
+ ao.audio_process = AudioOutputFunctions::audio_process;
+ ao.audio_flush = AudioOutputFunctions::audio_flush;
+ ao.audio_destroy = AudioOutputFunctions::audio_destroy;
+ m_pLibShairplay->EnableDelayedUnload(false);
+ m_pRaop = m_pLibShairplay->raop_init(1, &ao, RSA_KEY);//1 - we handle one client at a time max
+ ret = m_pRaop != NULL;
+
+ if(ret)
+ {
+ char macAdr[6];
+ unsigned short port = (unsigned short)m_port;
+
+ m_pLibShairplay->raop_set_log_level(m_pRaop, RAOP_LOG_WARNING);
+ if(g_advancedSettings.m_logEnableAirtunes)
+ {
+ m_pLibShairplay->raop_set_log_level(m_pRaop, RAOP_LOG_DEBUG);
+ }
+
+ m_pLibShairplay->raop_set_log_callback(m_pRaop, shairplay_log);
+
+ CNetworkInterface *net = g_application.getNetwork().GetFirstConnectedInterface();
+
+ if (net)
+ {
+ net->GetMacAddressRaw(macAdr);
+ }
+
+ ret = m_pLibShairplay->raop_start(m_pRaop, &port, macAdr, 6, password.c_str()) >= 0;
+ }
}
- return 1;
-}
-bool CAirTunesServer::Initialize(const CStdString &password)
-{
- bool ret = false;
+#else
+
int numArgs = 3;
CStdString hwStr;
CStdString pwStr;
CStdString portStr;
- Deinitialize();
-
hwStr.Format("--mac=%s", m_macAddress.c_str());
pwStr.Format("--password=%s",password.c_str());
portStr.Format("--server_port=%d",m_port);
@@ -368,16 +667,27 @@ bool CAirTunesServer::Initialize(const CStdString &password)
m_pLibShairport->shairport_main(numArgs, argv);
ret = true;
}
+#endif
return ret;
}
void CAirTunesServer::Deinitialize()
{
+#if defined(TARGET_WINDOWS)
+ if (m_pLibShairplay && m_pLibShairplay->IsLoaded())
+ {
+ m_pLibShairplay->raop_stop(m_pRaop);
+ m_pLibShairplay->raop_destroy(m_pRaop);
+ m_pLibShairplay->Unload();
+ }
+#else
if (m_pLibShairport && m_pLibShairport->IsLoaded())
{
m_pLibShairport->shairport_exit();
m_pLibShairport->Unload();
}
+#endif
}
#endif
+
diff --git a/xbmc/network/AirTunesServer.h b/xbmc/network/AirTunesServer.h
index da893df..4a30e0a 100644
--- a/xbmc/network/AirTunesServer.h
+++ b/xbmc/network/AirTunesServer.h
@@ -26,7 +26,11 @@
#ifdef HAS_AIRTUNES
+#if defined(TARGET_WINDOWS)
+#include "DllLibShairplay.h"
+#else
#include "DllLibShairport.h"
+#endif
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
@@ -41,11 +45,14 @@
class DllLibShairport;
+
class CAirTunesServer : public CThread
{
public:
static bool StartServer(int port, bool nonlocal, bool usePassword, const CStdString &password="");
static void StopServer(bool bWait);
+ static void SetMetadataFromBuffer(const char *buffer, unsigned int size);
+ static void SetCoverArtFromBuffer(const char *buffer, unsigned int size);
protected:
void Process();
@@ -57,13 +64,28 @@ class CAirTunesServer : public CThread
void Deinitialize();
int m_port;
+#if defined(TARGET_WINDOWS)
+ static DllLibShairplay *m_pLibShairplay;//the lib
+ raop_t *m_pRaop;
+ XFILE::CPipeFile *m_pPipe;
+#else
static DllLibShairport *m_pLibShairport;//the lib
+#endif
static CAirTunesServer *ServerInstance;
static CStdString m_macAddress;
class AudioOutputFunctions
{
public:
+#if defined(TARGET_WINDOWS)
+ static void* audio_init(void *cls, int bits, int channels, int samplerate);
+ static void audio_set_volume(void *cls, void *session, float volume);
+ static void audio_set_metadata(void *cls, void *session, const void *buffer, int buflen);
+ static void audio_set_coverart(void *cls, void *session, const void *buffer, int buflen);
+ static void audio_process(void *cls, void *session, const void *buffer, int buflen);
+ static void audio_flush(void *cls, void *session);
+ static void audio_destroy(void *cls, void *session);
+#else
static void ao_initialize(void);
static int ao_play(ao_device *device, char *output_samples, uint32_t num_bytes);
static int ao_default_driver_id(void);
@@ -74,6 +96,7 @@ class CAirTunesServer : public CThread
static int ao_append_option(ao_option **options, const char *key, const char *value);
static void ao_free_options(ao_option *options);
static char* ao_get_option(ao_option *options, const char* key);
+#endif
};
};
--
1.7.10

View File

@ -1,64 +0,0 @@
From b7fb4615609c684a98dc1cc27906aaa0f117837f Mon Sep 17 00:00:00 2001
From: Memphiz <memphis@machzwo.de>
Date: Wed, 9 May 2012 18:53:45 +0200
Subject: [PATCH] [airtunes] - add dmap metadata parsing
---
xbmc/network/AirTunesServer.cpp | 13 ++++++++++++-
xbmc/network/AirTunesServer.h | 2 ++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/xbmc/network/AirTunesServer.cpp b/xbmc/network/AirTunesServer.cpp
index e14da90..2ad097e 100644
--- a/xbmc/network/AirTunesServer.cpp
+++ b/xbmc/network/AirTunesServer.cpp
@@ -47,7 +47,6 @@
#include <map>
#include <string>
-
using namespace XFILE;
#if defined(TARGET_WINDOWS)
@@ -390,6 +389,16 @@ int CAirTunesServer::AudioOutputFunctions::ao_close(ao_device *device)
return 0;
}
+void CAirTunesServer::AudioOutputFunctions::ao_set_metadata(const char *buffer, unsigned int size)
+{
+ CAirTunesServer::SetMetadataFromBuffer(buffer, size);
+}
+
+void CAirTunesServer::AudioOutputFunctions::ao_set_metadata_coverart(const char *buffer, unsigned int size)
+{
+ CAirTunesServer::SetCoverArtFromBuffer(buffer, size);
+}
+
/* -- Device Setup/Playback/Teardown -- */
int CAirTunesServer::AudioOutputFunctions::ao_append_option(ao_option **options, const char *key, const char *value)
{
@@ -658,6 +667,8 @@ bool CAirTunesServer::Initialize(const CStdString &password)
ao.ao_append_option = AudioOutputFunctions::ao_append_option;
ao.ao_free_options = AudioOutputFunctions::ao_free_options;
ao.ao_get_option = AudioOutputFunctions::ao_get_option;
+ ao.ao_set_metadata = AudioOutputFunctions::ao_set_metadata;
+ ao.ao_set_metadata_coverart = AudioOutputFunctions::ao_set_metadata_coverart;
struct printfPtr funcPtr;
funcPtr.extprintf = shairport_log;
diff --git a/xbmc/network/AirTunesServer.h b/xbmc/network/AirTunesServer.h
index 4a30e0a..0a4ce5a 100644
--- a/xbmc/network/AirTunesServer.h
+++ b/xbmc/network/AirTunesServer.h
@@ -96,6 +96,8 @@ class CAirTunesServer : public CThread
static int ao_append_option(ao_option **options, const char *key, const char *value);
static void ao_free_options(ao_option *options);
static char* ao_get_option(ao_option *options, const char* key);
+ static void ao_set_metadata(const char *buffer, unsigned int size);
+ static void ao_set_metadata_coverart(const char *buffer, unsigned int size);
#endif
};
};
--
1.7.10

View File

@ -1,177 +0,0 @@
From 23ce80d7f303aa3fb282a67b973c20a2e84e48d2 Mon Sep 17 00:00:00 2001
From: Memphiz <memphis@machzwo.de>
Date: Fri, 4 May 2012 19:19:26 +0200
Subject: [PATCH 2/2] [nfs] - make impl compatible with latest libnfs and
avoid usage of off64_t and size_t
---
xbmc/filesystem/DllLibNfs.h | 36 ++++++++++++++++++------------------
xbmc/filesystem/NFSFile.cpp | 10 +++++-----
xbmc/filesystem/NFSFile.h | 8 ++++----
3 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/xbmc/filesystem/DllLibNfs.h b/xbmc/filesystem/DllLibNfs.h
index 37dfc9c..54c6872 100644
--- a/xbmc/filesystem/DllLibNfs.h
+++ b/xbmc/filesystem/DllLibNfs.h
@@ -44,8 +44,8 @@ class DllLibNfsInterface
virtual void free_nfs_srvr_list(struct nfs_server_list *srv)=0;
virtual struct nfs_context *nfs_init_context(void)=0;
virtual void nfs_destroy_context(struct nfs_context *nfs)=0;
- virtual size_t nfs_get_readmax(struct nfs_context *nfs)=0;
- virtual size_t nfs_get_writemax(struct nfs_context *nfs)=0;
+ virtual uint64_t nfs_get_readmax(struct nfs_context *nfs)=0;
+ virtual uint64_t nfs_get_writemax(struct nfs_context *nfs)=0;
virtual char *nfs_get_error(struct nfs_context *nfs)=0;
virtual int nfs_close(struct nfs_context *nfs, struct nfsfh *nfsfh)=0;
virtual int nfs_fsync(struct nfs_context *nfs, struct nfsfh *nfsfh)=0;
@@ -57,8 +57,8 @@ class DllLibNfsInterface
virtual int nfs_mount(struct nfs_context *nfs, const char *server, const char *exportname)=0;
virtual int nfs_stat(struct nfs_context *nfs, const char *path, struct stat *st)=0;
virtual int nfs_fstat(struct nfs_context *nfs, struct nfsfh *nfsfh, struct stat *st)=0;
- virtual int nfs_truncate(struct nfs_context *nfs, const char *path, off64_t length)=0;
- virtual int nfs_ftruncate(struct nfs_context *nfs, struct nfsfh *nfsfh, off64_t length)=0;
+ virtual int nfs_truncate(struct nfs_context *nfs, const char *path, uint64_t length)=0;
+ virtual int nfs_ftruncate(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t length)=0;
virtual int nfs_opendir(struct nfs_context *nfs, const char *path, struct nfsdir **nfsdir)=0;
virtual int nfs_statvfs(struct nfs_context *nfs, const char *path, struct statvfs *svfs)=0;
virtual int nfs_chmod(struct nfs_context *nfs, const char *path, int mode)=0;
@@ -73,12 +73,12 @@ class DllLibNfsInterface
virtual int nfs_chown(struct nfs_context *nfs, const char *path, int uid, int gid)=0;
virtual int nfs_fchown(struct nfs_context *nfs, struct nfsfh *nfsfh, int uid, int gid)=0;
virtual int nfs_open(struct nfs_context *nfs, const char *path, int mode, struct nfsfh **nfsfh)=0;
- virtual int nfs_read(struct nfs_context *nfs, struct nfsfh *nfsfh, size_t count, char *buf)=0;
- virtual int nfs_write(struct nfs_context *nfs, struct nfsfh *nfsfh, size_t count, char *buf)=0;
+ virtual int nfs_read(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t count, char *buf)=0;
+ virtual int nfs_write(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t count, char *buf)=0;
virtual int nfs_creat(struct nfs_context *nfs, const char *path, int mode, struct nfsfh **nfsfh)=0;
- virtual int nfs_pread(struct nfs_context *nfs, struct nfsfh *nfsfh, off64_t offset, size_t count, char *buf)=0;
- virtual int nfs_pwrite(struct nfs_context *nfs, struct nfsfh *nfsfh, off64_t offset, size_t count, char *buf)=0;
- virtual int nfs_lseek(struct nfs_context *nfs, struct nfsfh *nfsfh, off64_t offset, int whence, off64_t *current_offset)=0;
+ virtual int nfs_pread(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offset, uint64_t count, char *buf)=0;
+ virtual int nfs_pwrite(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offset, uint64_t count, char *buf)=0;
+ virtual int nfs_lseek(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offset, int whence, uint64_t *current_offset)=0;
};
class DllLibNfs : public DllDynamic, DllLibNfsInterface
@@ -90,8 +90,8 @@ class DllLibNfs : public DllDynamic, DllLibNfsInterface
DEFINE_METHOD1(struct exportnode *, mount_getexports, (const char *p1))
DEFINE_METHOD1(void, mount_free_export_list, (struct exportnode *p1))
DEFINE_METHOD1(void, nfs_destroy_context, (struct nfs_context *p1))
- DEFINE_METHOD1(size_t, nfs_get_readmax, (struct nfs_context *p1))
- DEFINE_METHOD1(size_t, nfs_get_writemax, (struct nfs_context *p1))
+ DEFINE_METHOD1(uint64_t, nfs_get_readmax, (struct nfs_context *p1))
+ DEFINE_METHOD1(uint64_t, nfs_get_writemax, (struct nfs_context *p1))
DEFINE_METHOD1(char *, nfs_get_error, (struct nfs_context *p1))
DEFINE_METHOD2(struct nfsdirent *, nfs_readdir, (struct nfs_context *p1, struct nfsdir *p2))
DEFINE_METHOD2(int, nfs_fsync, (struct nfs_context *p1, struct nfsfh *p2))
@@ -103,8 +103,8 @@ class DllLibNfs : public DllDynamic, DllLibNfsInterface
DEFINE_METHOD3(int, nfs_mount, (struct nfs_context *p1, const char *p2, const char *p3))
DEFINE_METHOD3(int, nfs_stat, (struct nfs_context *p1, const char *p2, struct stat *p3))
DEFINE_METHOD3(int, nfs_fstat, (struct nfs_context *p1, struct nfsfh *p2, struct stat *p3))
- DEFINE_METHOD3(int, nfs_truncate, (struct nfs_context *p1, const char *p2, off64_t p3))
- DEFINE_METHOD3(int, nfs_ftruncate, (struct nfs_context *p1, struct nfsfh *p2, off64_t p3))
+ DEFINE_METHOD3(int, nfs_truncate, (struct nfs_context *p1, const char *p2, uint64_t p3))
+ DEFINE_METHOD3(int, nfs_ftruncate, (struct nfs_context *p1, struct nfsfh *p2, uint64_t p3))
DEFINE_METHOD3(int, nfs_opendir, (struct nfs_context *p1, const char *p2, struct nfsdir **p3))
DEFINE_METHOD3(int, nfs_statvfs, (struct nfs_context *p1, const char *p2, struct statvfs *p3))
DEFINE_METHOD3(int, nfs_chmod, (struct nfs_context *p1, const char *p2, int p3))
@@ -116,15 +116,15 @@ class DllLibNfs : public DllDynamic, DllLibNfsInterface
DEFINE_METHOD3(int, nfs_rename, (struct nfs_context *p1, const char *p2, const char *p3))
DEFINE_METHOD3(int, nfs_link, (struct nfs_context *p1, const char *p2, const char *p3))
DEFINE_METHOD4(int, nfs_open, (struct nfs_context *p1, const char *p2, int p3, struct nfsfh **p4))
- DEFINE_METHOD4(int, nfs_read, (struct nfs_context *p1, struct nfsfh *p2, size_t p3, char *p4))
- DEFINE_METHOD4(int, nfs_write, (struct nfs_context *p1, struct nfsfh *p2, size_t p3, char *p4))
+ DEFINE_METHOD4(int, nfs_read, (struct nfs_context *p1, struct nfsfh *p2, uint64_t p3, char *p4))
+ DEFINE_METHOD4(int, nfs_write, (struct nfs_context *p1, struct nfsfh *p2, uint64_t p3, char *p4))
DEFINE_METHOD4(int, nfs_creat, (struct nfs_context *p1, const char *p2, int p3, struct nfsfh **p4))
DEFINE_METHOD4(int, nfs_readlink, (struct nfs_context *p1, const char *p2, char *p3, int p4))
DEFINE_METHOD4(int, nfs_chown, (struct nfs_context *p1, const char *p2, int p3, int p4))
DEFINE_METHOD4(int, nfs_fchown, (struct nfs_context *p1, struct nfsfh *p2, int p3, int p4))
- DEFINE_METHOD5(int, nfs_pread, (struct nfs_context *p1, struct nfsfh *p2, off64_t p3, size_t p4, char *p5))
- DEFINE_METHOD5(int, nfs_pwrite, (struct nfs_context *p1, struct nfsfh *p2, off64_t p3, size_t p4, char *p5))
- DEFINE_METHOD5(int, nfs_lseek, (struct nfs_context *p1, struct nfsfh *p2, off64_t p3, int p4, off64_t *p5))
+ DEFINE_METHOD5(int, nfs_pread, (struct nfs_context *p1, struct nfsfh *p2, uint64_t p3, uint64_t p4, char *p5))
+ DEFINE_METHOD5(int, nfs_pwrite, (struct nfs_context *p1, struct nfsfh *p2, uint64_t p3, uint64_t p4, char *p5))
+ DEFINE_METHOD5(int, nfs_lseek, (struct nfs_context *p1, struct nfsfh *p2, uint64_t p3, int p4, uint64_t *p5))
diff --git a/xbmc/filesystem/FileNFS.cpp b/xbmc/filesystem/FileNFS.cpp
index 2f820f7..751eb54 100644
--- a/xbmc/filesystem/FileNFS.cpp
+++ b/xbmc/filesystem/FileNFS.cpp
@@ -375,7 +375,7 @@ void CNfsConnection::resetKeepAlive(struct nfsfh *_pFileHandle)
//we were before
void CNfsConnection::keepAlive(struct nfsfh *_pFileHandle)
{
- off64_t offset = 0;
+ uint64_t offset = 0;
char buffer[32];
CLog::Log(LOGNOTICE, "NFS: sending keep alive after %i s.",KEEP_ALIVE_TIMEOUT/2);
CSingleLock lock(*this);
@@ -461,7 +461,7 @@ void CNfsConnection::AddIdleConnection()
int64_t CNFSFile::GetPosition()
{
int ret = 0;
- off64_t offset = 0;
+ uint64_t offset = 0;
CSingleLock lock(gNfsConnection);
if (gNfsConnection.GetNfsContext() == NULL || m_pFileHandle == NULL) return 0;
@@ -587,7 +587,7 @@ unsigned int CNFSFile::Read(void *lpBuf, int64_t uiBufSize)
if (m_pFileHandle == NULL || m_pNfsContext == NULL ) return 0;
- numberOfBytesRead = gNfsConnection.GetImpl()->nfs_read(m_pNfsContext, m_pFileHandle, (size_t)uiBufSize, (char *)lpBuf);
+ numberOfBytesRead = gNfsConnection.GetImpl()->nfs_read(m_pNfsContext, m_pFileHandle, uiBufSize, (char *)lpBuf);
lock.Leave();//no need to keep the connection lock after that
@@ -605,7 +605,7 @@ unsigned int CNFSFile::Read(void *lpBuf, int64_t uiBufSize)
int64_t CNFSFile::Seek(int64_t iFilePosition, int iWhence)
{
int ret = 0;
- off64_t offset = 0;
+ uint64_t offset = 0;
CSingleLock lock(gNfsConnection);
if (m_pFileHandle == NULL || m_pNfsContext == NULL) return -1;
@@ -667,7 +667,7 @@ int CNFSFile::Write(const void* lpBuf, int64_t uiBufSize)
//write chunk
writtenBytes = gNfsConnection.GetImpl()->nfs_write(m_pNfsContext,
m_pFileHandle,
- (size_t)chunkSize,
+ chunkSize,
(char *)lpBuf + numberOfBytesWritten);
//decrease left bytes
leftBytes-= writtenBytes;
diff --git a/xbmc/filesystem/FileNFS.h b/xbmc/filesystem/FileNFS.h
index 47d8d4a..df131b0 100644
--- a/xbmc/filesystem/FileNFS.h
+++ b/xbmc/filesystem/FileNFS.h
@@ -65,8 +65,8 @@ class CNfsConnection : public CCriticalSection
~CNfsConnection();
bool Connect(const CURL &url, CStdString &relativePath);
struct nfs_context *GetNfsContext(){return m_pNfsContext;}
- size_t GetMaxReadChunkSize(){return m_readChunkSize;}
- size_t GetMaxWriteChunkSize(){return m_writeChunkSize;}
+ uint64_t GetMaxReadChunkSize(){return m_readChunkSize;}
+ uint64_t GetMaxWriteChunkSize(){return m_writeChunkSize;}
DllLibNfs *GetImpl(){return m_pLibNfs;}
std::list<CStdString> GetExportList(const CURL &url);
//this functions splits the url into the exportpath (feed to mount) and the rest of the path
@@ -96,8 +96,8 @@ class CNfsConnection : public CCriticalSection
CStdString m_exportPath;//current connected export path
CStdString m_hostName;//current connected host
CStdString m_resolvedHostName;//current connected host - as ip
- size_t m_readChunkSize;//current read chunksize of connected server
- size_t m_writeChunkSize;//current write chunksize of connected server
+ uint64_t m_readChunkSize;//current read chunksize of connected server
+ uint64_t m_writeChunkSize;//current write chunksize of connected server
int m_OpenConnections;//number of open connections
unsigned int m_IdleTimeout;//timeout for idle connection close and dyunload
tFileKeepAliveMap m_KeepAliveTimeouts;//mapping filehandles to its idle timeout
--
1.7.10

View File

@ -1,27 +0,0 @@
diff --git a/xbmc/filesystem/PluginDirectory.cpp b/xbmc/filesystem/PluginDirectory.cpp
index 9e519fb..b64267b 100644
--- a/xbmc/filesystem/PluginDirectory.cpp
+++ b/xbmc/filesystem/PluginDirectory.cpp
@@ -479,7 +479,7 @@ bool CPluginDirectory::WaitOnScriptResult(const CStdString &scriptPath, const CS
}
// check whether we should pop up the progress dialog
- if (!progressBar && XbmcThreads::SystemClockMillis() - startTime > timeBeforeProgressBar)
+ if (!progressBar && XbmcThreads::SystemClockMillis() - startTime > timeBeforeProgressBar && !g_windowManager.HasModalDialog())
{ // loading takes more then 1.5 secs, show a progress dialog
progressBar = (CGUIDialogProgress *)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS);
diff --git a/xbmc/interfaces/python/xbmcmodule/keyboard.cpp b/xbmc/interfaces/python/xbmcmodule/keyboard.cpp
index 0330215..0604a65 100644
--- a/xbmc/interfaces/python/xbmcmodule/keyboard.cpp
+++ b/xbmc/interfaces/python/xbmcmodule/keyboard.cpp
@@ -92,6 +92,9 @@ namespace PYXBMC
if (!PyArg_ParseTuple(args, (char*)"|i", &autoClose)) return NULL;
+ if (g_windowManager.IsWindowActive(WINDOW_DIALOG_PROGRESS))
+ g_windowManager.CloseDialogs();
+
PyXBMCGUILock();
pKeyboard->Initialize();
pKeyboard->SetHeading(self->strHeading);