diff --git a/packages/addons/driver/sundtek/addon b/packages/addons/driver/sundtek-mediatv/addon
similarity index 100%
rename from packages/addons/driver/sundtek/addon
rename to packages/addons/driver/sundtek-mediatv/addon
diff --git a/packages/addons/driver/sundtek/changelog.txt b/packages/addons/driver/sundtek-mediatv/changelog.txt
similarity index 89%
rename from packages/addons/driver/sundtek/changelog.txt
rename to packages/addons/driver/sundtek-mediatv/changelog.txt
index be4e096e2a..000cb4f4e1 100644
--- a/packages/addons/driver/sundtek/changelog.txt
+++ b/packages/addons/driver/sundtek-mediatv/changelog.txt
@@ -1,14 +1,9 @@
-3.0.3
- new addon settings:
+3.0.2
+ added addon settings
enable HW PID filter (enabled for RPi by default)
enable IR receiver
allow sharing local tuner over network
use network tuners
-3.0.2
- special version
-3.0.1
- addon renamed to just sundtek
- added addon settings
sundtek's binaries are downloaded on first run
automatically download new version of the binaries if available
added preload library to .profile (to run mediaclient, w_scan, ... from console)
diff --git a/packages/addons/driver/sundtek/config/sundtek.conf b/packages/addons/driver/sundtek-mediatv/config/sundtek.conf
similarity index 78%
rename from packages/addons/driver/sundtek/config/sundtek.conf
rename to packages/addons/driver/sundtek-mediatv/config/sundtek.conf
index 15a81288a6..5f9d4acadb 100644
--- a/packages/addons/driver/sundtek/config/sundtek.conf
+++ b/packages/addons/driver/sundtek-mediatv/config/sundtek.conf
@@ -1,9 +1,6 @@
#
# sundtek.conf
#
-# Call attach/detach script when new device appears/disappears
-# Do not change this line (OpenElec addon require this) !
-device_attach=/storage/.xbmc/addons/driver.dvb.sundtek/bin/device-attached.sh
# enable HW PID filter (default on for RPi)
use_hwpidfilter=off
diff --git a/packages/addons/driver/sundtek/config/sundtek.conf.full b/packages/addons/driver/sundtek-mediatv/config/sundtek.conf.full
similarity index 100%
rename from packages/addons/driver/sundtek/config/sundtek.conf.full
rename to packages/addons/driver/sundtek-mediatv/config/sundtek.conf.full
diff --git a/packages/addons/driver/sundtek/icon/icon.png b/packages/addons/driver/sundtek-mediatv/icon/icon.png
similarity index 100%
rename from packages/addons/driver/sundtek/icon/icon.png
rename to packages/addons/driver/sundtek-mediatv/icon/icon.png
diff --git a/packages/addons/driver/sundtek/meta b/packages/addons/driver/sundtek-mediatv/meta
similarity index 97%
rename from packages/addons/driver/sundtek/meta
rename to packages/addons/driver/sundtek-mediatv/meta
index afeb13dab2..163e8d3de9 100644
--- a/packages/addons/driver/sundtek/meta
+++ b/packages/addons/driver/sundtek-mediatv/meta
@@ -18,9 +18,9 @@
# http://www.gnu.org/copyleft/gpl.html
################################################################################
-PKG_NAME="sundtek"
+PKG_NAME="sundtek-mediatv"
PKG_VERSION="3.0"
-PKG_REV="3"
+PKG_REV="2"
PKG_ARCH="any"
PKG_LICENSE="nonfree"
PKG_SITE="http://support.sundtek.com/"
diff --git a/packages/addons/driver/sundtek/settings-default.xml b/packages/addons/driver/sundtek-mediatv/settings-default.xml
similarity index 100%
rename from packages/addons/driver/sundtek/settings-default.xml
rename to packages/addons/driver/sundtek-mediatv/settings-default.xml
diff --git a/packages/addons/driver/sundtek/source/bin/sundtek.start b/packages/addons/driver/sundtek-mediatv/source/bin/sundtek.start
similarity index 95%
rename from packages/addons/driver/sundtek/source/bin/sundtek.start
rename to packages/addons/driver/sundtek-mediatv/source/bin/sundtek.start
index eed33185de..232caa545d 100644
--- a/packages/addons/driver/sundtek/source/bin/sundtek.start
+++ b/packages/addons/driver/sundtek-mediatv/source/bin/sundtek.start
@@ -22,7 +22,7 @@
. /etc/profile
-ADDON_DIR="$HOME/.xbmc/addons/driver.dvb.sundtek"
+ADDON_DIR="$HOME/.xbmc/addons/driver.dvb.sundtek-mediatv"
logger -t Sundtek "### Sundtek manual start ###"
. $ADDON_DIR/bin/userspace-driver.sh
diff --git a/packages/addons/driver/sundtek/source/bin/sundtek.stop b/packages/addons/driver/sundtek-mediatv/source/bin/sundtek.stop
similarity index 95%
rename from packages/addons/driver/sundtek/source/bin/sundtek.stop
rename to packages/addons/driver/sundtek-mediatv/source/bin/sundtek.stop
index be22e253f3..dff6338175 100644
--- a/packages/addons/driver/sundtek/source/bin/sundtek.stop
+++ b/packages/addons/driver/sundtek-mediatv/source/bin/sundtek.stop
@@ -22,7 +22,7 @@
. /etc/profile
-ADDON_DIR="$HOME/.xbmc/addons/driver.dvb.sundtek"
+ADDON_DIR="$HOME/.xbmc/addons/driver.dvb.sundtek-mediatv"
export LD_PRELOAD=$ADDON_DIR/lib/libmediaclient.so
diff --git a/packages/addons/driver/sundtek/source/bin/userspace-driver.sh b/packages/addons/driver/sundtek-mediatv/source/bin/userspace-driver.sh
similarity index 86%
rename from packages/addons/driver/sundtek/source/bin/userspace-driver.sh
rename to packages/addons/driver/sundtek-mediatv/source/bin/userspace-driver.sh
index 40b93317f9..3b50b046a5 100644
--- a/packages/addons/driver/sundtek/source/bin/userspace-driver.sh
+++ b/packages/addons/driver/sundtek-mediatv/source/bin/userspace-driver.sh
@@ -32,10 +32,9 @@ net_tuner_num_fix() {
echo $num
}
-ADDON_DIR="$HOME/.xbmc/addons/driver.dvb.sundtek"
-ADDON_HOME="$HOME/.xbmc/userdata/addon_data/driver.dvb.sundtek"
+ADDON_DIR="$HOME/.xbmc/addons/driver.dvb.sundtek-mediatv"
+ADDON_HOME="$HOME/.xbmc/userdata/addon_data/driver.dvb.sundtek-mediatv"
ADDON_SETTINGS="$ADDON_HOME/settings.xml"
-SUNDTEK_READY="/var/run/sundtek.ready"
mkdir -p $ADDON_HOME
@@ -45,9 +44,11 @@ else
# in case of missing entries in addon home's sundtek.conf
entry_set="$(grep use_hwpidfilter $ADDON_HOME/sundtek.conf 2>/dev/null)"
if [ -z "$entry_set" ]; then
- sed -i 's|\(^device_attach=.*\)|\1\n# enable listening on network\nenablenetwork=off|g' $ADDON_HOME/sundtek.conf
- sed -i 's|\(^device_attach=.*\)|\1\n\n# enable HW PID filter\nuse_hwpidfilter=off\n|g' $ADDON_HOME/sundtek.conf
+ sed -i 's|^device_attach=.*|# device_attach not used anymore\n\n# enable HW PID filter\nuse_hwpidfilter=off\n\n# enable listening on network\nenablenetwork=off|g' $ADDON_HOME/sundtek.conf
sed -i 's|^#first_adapter=.*|first_adapter=0|g' $ADDON_HOME/sundtek.conf
+
+ sed -i 's|.*network tuner IP address (OpenELEC specific).*||g' $ADDON_HOME/sundtek.conf
+ sed -i 's|.*network_tuner_ip=.*||g' $ADDON_HOME/sundtek.conf
fi
fi
@@ -74,6 +75,10 @@ if [ "$AUTO_UPDATE" = "true" -a -f $ADDON_DIR/bin/mediasrv ]; then
fi
if [ ! -f $ADDON_DIR/bin/mediasrv ]; then
+ # remove renamed addon if exist
+ rm -fr "$HOME/.xbmc/addons/driver.dvb.sundtek"
+ rm -fr "$HOME/userdata/addon_data/driver.dvb.sundtek"
+
logger -t Sundtek "### Downloading installer ###"
cd $ADDON_DIR
mkdir -p bin lib tmp
@@ -90,7 +95,7 @@ if [ ! -f $ADDON_DIR/bin/mediasrv ]; then
# enable HW PID filter on RPi by default
sed -i 's|^use_hwpidfilter=.*|use_hwpidfilter=on|g' $ADDON_DIR/config/sundtek.conf
sed -i 's|^use_hwpidfilter=.*|use_hwpidfilter=on|g' $ADDON_HOME/sundtek.conf
- sed -i 's|.*id="ENABLE_HW_PID_FILTER" value=.*||' $ADDON_SETTINGS
+ sed -i 's|.*id="ENABLE_HW_PID_FILTER".*||' $ADDON_SETTINGS
else
logger -t Sundtek "### Unsupported architecture ###"
cd ..
@@ -124,15 +129,18 @@ if [ ! -f $ADDON_HOME/driver-version.txt ]; then
cp $ADDON_DIR/driver-version.txt $ADDON_HOME/
fi
-# enable to install same addon version again
-rm -f /storage/.xbmc/addons/packages/driver.dvb.sundtek-*
+# enable to install same addon package version again
+rm -f /storage/.xbmc/addons/packages/driver.dvb.sundtek*
# add alias for /opt/bin/mediaclient
alias_set="$(grep libmediaclient.so /storage/.profile 2>/dev/null)"
if [ -z "$alias_set" ]; then
echo "" >>/storage/.profile
- echo "[ -f /storage/.xbmc/addons/driver.dvb.sundtek/lib/libmediaclient.so ] && export LD_PRELOAD=/storage/.xbmc/addons/driver.dvb.sundtek/lib/libmediaclient.so" >>/storage/.profile
+ echo "[ -f /storage/.xbmc/addons/driver.dvb.sundtek-mediatv/lib/libmediaclient.so ] && export LD_PRELOAD=/storage/.xbmc/addons/driver.dvb.sundtek-mediatv/lib/libmediaclient.so" >>/storage/.profile
echo "" >>/storage/.profile
+else
+ # fix name
+ sed -i 's|/driver.dvb.sundtek/|/driver.dvb.sundtek-mediatv/|g' /storage/.profile
fi
export LD_PRELOAD=$ADDON_DIR/lib/libmediaclient.so
@@ -160,7 +168,6 @@ fi
if [ -z "$(pidof mediasrv)" ]; then
rm -f /var/log/mediasrv.log
rm -f /var/log/mediaclient.log
- rm -f $SUNDTEK_READY
SUNDTEK_CONF_TMP=/tmp/sundtek.conf
cp $ADDON_HOME/sundtek.conf $SUNDTEK_CONF_TMP
@@ -247,29 +254,15 @@ if [ -z "$(pidof mediasrv)" ]; then
cp $SUNDTEK_CONF_TMP $ADDON_HOME/sundtek.conf
fi
- #rm "$SUNDTEK_CONF_TMP"
-
mediasrv --wait-for-devices -p $ADDON_DIR/bin -c $ADDON_HOME/sundtek.conf -d
- # wait for device to get attached or connected
- for i in $(seq 1 240); do
- if [ -f $SUNDTEK_READY ]; then
- rm -f $SUNDTEK_READY
- logger -t Sundtek "### Sundtek ready ###"
-
- if [ -n $SETTLE_TIME -a $SETTLE_TIME -gt 0 ]; then
- logger -t Sundtek "### Settle for $SETTLE_TIME sec ###"
- sleep $SETTLE_TIME
- fi
-
- break
- elif [ "$i" = "240" ]; then
- logger -t Sundtek "### No Sundtek device attached or connected ###"
- return
- else
- usleep 500000
- fi
- done
+ # wait few seconds
+ [ -z "$SETTLE_TIME" ] && SETTLE_TIME=0
+ SETTLE_TIME=$(( $SETTLE_TIME *1 ))
+ if [ $SETTLE_TIME -gt 0 ]; then
+ logger -t Sundtek "### Settle for $SETTLE_TIME sec ###"
+ sleep $SETTLE_TIME
+ fi
if [ "$ANALOG_TV" = "true" ]; then
logger -t Sundtek "### Switching to analog TV mode ###"
@@ -292,3 +285,5 @@ if [ -z "$(pidof mediasrv)" ]; then
fi
)&
fi
+
+logger -t Sundtek "### Sundtek ready ###"
diff --git a/packages/addons/driver/sundtek/source/default.py b/packages/addons/driver/sundtek-mediatv/source/default.py
similarity index 100%
rename from packages/addons/driver/sundtek/source/default.py
rename to packages/addons/driver/sundtek-mediatv/source/default.py
diff --git a/packages/addons/driver/sundtek/source/resources/language/English/strings.xml b/packages/addons/driver/sundtek-mediatv/source/resources/language/English/strings.xml
similarity index 100%
rename from packages/addons/driver/sundtek/source/resources/language/English/strings.xml
rename to packages/addons/driver/sundtek-mediatv/source/resources/language/English/strings.xml
diff --git a/packages/addons/driver/sundtek/source/resources/settings.xml b/packages/addons/driver/sundtek-mediatv/source/resources/settings.xml
similarity index 72%
rename from packages/addons/driver/sundtek/source/resources/settings.xml
rename to packages/addons/driver/sundtek-mediatv/source/resources/settings.xml
index cd2d13eedd..6b4940cfdc 100644
--- a/packages/addons/driver/sundtek/source/resources/settings.xml
+++ b/packages/addons/driver/sundtek-mediatv/source/resources/settings.xml
@@ -3,13 +3,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/packages/addons/driver/sundtek/source/sleep.d/sundtek.power b/packages/addons/driver/sundtek-mediatv/source/sleep.d/sundtek-mediatv.power
similarity index 91%
rename from packages/addons/driver/sundtek/source/sleep.d/sundtek.power
rename to packages/addons/driver/sundtek-mediatv/source/sleep.d/sundtek-mediatv.power
index b81f5ea9cc..967e1dee91 100644
--- a/packages/addons/driver/sundtek/source/sleep.d/sundtek.power
+++ b/packages/addons/driver/sundtek-mediatv/source/sleep.d/sundtek-mediatv.power
@@ -23,22 +23,22 @@
. /etc/profile
LOCKDIR="/var/lock/"
-LOCKFILE="sundtek"
+LOCKFILE="$LOCKDIR/sundtek-mediatv"
case "$1" in
hibernate|suspend)
if [ -n "$(pidof mediasrv)" ]; then
progress "Shutting down Sundtek DVB driver for suspending..."
mkdir -p "$LOCKDIR"
- touch "$LOCKDIR/$LOCKFILE"
+ touch "$LOCKFILE"
mediaclient --shutdown
fi
;;
thaw|resume)
- if [ -f "$LOCKDIR/$LOCKFILE" ]; then
+ if [ -f "$LOCKFILE" ]; then
# driver started within Tvheadend/VDR
- rm -rf "$LOCKDIR/$LOCKFILE"
+ rm -f "$LOCKFILE"
fi
;;
diff --git a/packages/addons/driver/sundtek/source/bin/device-attached.sh b/packages/addons/driver/sundtek/source/bin/device-attached.sh
deleted file mode 100644
index 9b62feb274..0000000000
--- a/packages/addons/driver/sundtek/source/bin/device-attached.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-
-################################################################################
-# This file is part of OpenELEC - http://www.openelec.tv
-# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
-#
-# 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 OpenELEC.tv; see the file COPYING. If not, write to
-# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
-# http://www.gnu.org/copyleft/gpl.html
-################################################################################
-
-SUNDTEK_READY="/var/run/sundtek.ready"
-
-touch $SUNDTEK_READY
diff --git a/packages/addons/service/downloadmanager/transmission/changelog.txt b/packages/addons/service/downloadmanager/transmission/changelog.txt
index 5948f06547..170c42563f 100644
--- a/packages/addons/service/downloadmanager/transmission/changelog.txt
+++ b/packages/addons/service/downloadmanager/transmission/changelog.txt
@@ -1,3 +1,6 @@
+3.0.4
+- update to transmission-2.77
+
3.0.3
- update to transmission-2.76
- update libevent to libevent-2.0.21-stable
diff --git a/packages/addons/service/downloadmanager/transmission/meta b/packages/addons/service/downloadmanager/transmission/meta
index beea61d136..f22bac6e70 100644
--- a/packages/addons/service/downloadmanager/transmission/meta
+++ b/packages/addons/service/downloadmanager/transmission/meta
@@ -19,8 +19,8 @@
################################################################################
PKG_NAME="transmission"
-PKG_VERSION="2.76"
-PKG_REV="3"
+PKG_VERSION="2.77"
+PKG_REV="4"
PKG_ARCH="any"
PKG_LICENSE="OSS"
PKG_SITE="http://www.transmissionbt.com/"
diff --git a/packages/addons/service/downloadmanager/transmission/patches/transmission-2.76-automake-1.13.patch b/packages/addons/service/downloadmanager/transmission/patches/transmission-2.77-automake-1.13.patch
similarity index 100%
rename from packages/addons/service/downloadmanager/transmission/patches/transmission-2.76-automake-1.13.patch
rename to packages/addons/service/downloadmanager/transmission/patches/transmission-2.77-automake-1.13.patch
diff --git a/packages/addons/service/multimedia/tvheadend/changelog.txt b/packages/addons/service/multimedia/tvheadend/changelog.txt
index f3b59c4772..151f64fad0 100644
--- a/packages/addons/service/multimedia/tvheadend/changelog.txt
+++ b/packages/addons/service/multimedia/tvheadend/changelog.txt
@@ -1,3 +1,6 @@
+3.0.5
+- update to TVHeadend 3.3.485
+
3.0.4
- update to TVHeadend 3.3.403
diff --git a/packages/addons/service/multimedia/tvheadend/meta b/packages/addons/service/multimedia/tvheadend/meta
index 75b6582070..81cb85629c 100644
--- a/packages/addons/service/multimedia/tvheadend/meta
+++ b/packages/addons/service/multimedia/tvheadend/meta
@@ -19,8 +19,8 @@
################################################################################
PKG_NAME="tvheadend"
-PKG_VERSION="3.3.403"
-PKG_REV="4"
+PKG_VERSION="3.3.485"
+PKG_REV="5"
PKG_ARCH="any"
PKG_LICENSE="GPL"
PKG_SITE="http://www.lonelycoder.com/hts/tvheadend_overview.html"
diff --git a/packages/mediacenter/xbmc/patches/todo/xbmc-995.10-xvba_rpi_fixes-81496e1.patch b/packages/mediacenter/xbmc/patches/todo/xbmc-995.10-xvba_rpi_fixes-81496e1.patch
deleted file mode 100644
index 029e8fa7a0..0000000000
--- a/packages/mediacenter/xbmc/patches/todo/xbmc-995.10-xvba_rpi_fixes-81496e1.patch
+++ /dev/null
@@ -1,549 +0,0 @@
-From d33a276284356e974dcf14e6c86b74064fb0715f Mon Sep 17 00:00:00 2001
-From: xbmc
-Date: Sun, 10 Feb 2013 18:38:56 +0100
-Subject: [PATCH 1/4] renderer: add buffering - get clock via IPlayer
-
----
- xbmc/cores/IPlayer.h | 2 ++
- xbmc/cores/VideoRenderers/RenderManager.cpp | 9 ++++++---
- xbmc/cores/VideoRenderers/RenderManager.h | 3 +--
- xbmc/cores/dvdplayer/DVDPlayer.cpp | 7 ++++++-
- xbmc/cores/dvdplayer/DVDPlayer.h | 2 ++
- 5 files changed, 17 insertions(+), 6 deletions(-)
-
-diff --git a/xbmc/cores/IPlayer.h b/xbmc/cores/IPlayer.h
-index 5ed88d1..f136998 100644
---- a/xbmc/cores/IPlayer.h
-+++ b/xbmc/cores/IPlayer.h
-@@ -229,6 +229,8 @@ class IPlayer
- */
- virtual void GetSubtitleCapabilities(std::vector &subCaps) { subCaps.assign(1,IPC_SUBS_ALL); };
-
-+ virtual double GetClock(double& absolute, bool interpolated = true) {return 0; };
-+
- protected:
- IPlayerCallback& m_callback;
- };
-diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp
-index 9290f80..4664426 100644
---- a/xbmc/cores/VideoRenderers/RenderManager.cpp
-+++ b/xbmc/cores/VideoRenderers/RenderManager.cpp
-@@ -325,7 +325,7 @@ void CXBMCRenderManager::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
- m_presentevent.Set();
- }
-
--unsigned int CXBMCRenderManager::PreInit(CDVDClock *pClock)
-+unsigned int CXBMCRenderManager::PreInit()
- {
- CRetakeLock lock(m_sharedSection);
-
-@@ -333,7 +333,6 @@ unsigned int CXBMCRenderManager::PreInit(CDVDClock *pClock)
- m_presenterr = 0.0;
- m_errorindex = 0;
- memset(m_errorbuff, 0, sizeof(m_errorbuff));
-- m_pClock = pClock;
-
- m_bIsStarted = false;
- m_bPauseDrawing = false;
-@@ -1045,7 +1044,11 @@ void CXBMCRenderManager::PrepareNextRender()
- }
-
- double iClockSleep, iPlayingClock, iCurrentClock;
-- iPlayingClock = m_pClock->GetClock(iCurrentClock, false);
-+ if (g_application.m_pPlayer)
-+ iPlayingClock = g_application.m_pPlayer->GetClock(iCurrentClock, false);
-+ else
-+ iPlayingClock = iCurrentClock = 0;
-+
- iClockSleep = m_renderBuffers[idx].pts - iPlayingClock;
-
- if (m_speed)
-diff --git a/xbmc/cores/VideoRenderers/RenderManager.h b/xbmc/cores/VideoRenderers/RenderManager.h
-index 6746957..b931f7d 100644
---- a/xbmc/cores/VideoRenderers/RenderManager.h
-+++ b/xbmc/cores/VideoRenderers/RenderManager.h
-@@ -72,7 +72,7 @@ class CXBMCRenderManager
- int AddVideoPicture(DVDVideoPicture& picture);
-
- void FlipPage(volatile bool& bStop, double timestamp = 0.0, int source = -1, EFIELDSYNC sync = FS_NONE, int speed = 0);
-- unsigned int PreInit(CDVDClock *pClock);
-+ unsigned int PreInit();
- void UnInit();
- bool Flush();
-
-@@ -225,7 +225,6 @@ class CXBMCRenderManager
- int m_presentsource;
- CEvent m_presentevent;
- CEvent m_flushEvent;
-- CDVDClock *m_pClock;
-
-
- OVERLAY::CRenderer m_overlays;
-diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
-index 9e6e470..d0c7cd2 100644
---- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
-+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
-@@ -463,7 +463,7 @@ bool CDVDPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &options)
- m_ready.Reset();
-
- #if defined(HAS_VIDEO_PLAYBACK)
-- g_renderManager.PreInit(&m_clock);
-+ g_renderManager.PreInit();
- #endif
-
- Create();
-@@ -4129,3 +4129,8 @@ bool CDVDPlayer::CachePVRStream(void) const
- !g_PVRManager.IsPlayingRecording() &&
- g_advancedSettings.m_bPVRCacheInDvdPlayer;
- }
-+
-+double CDVDPlayer::GetClock(double& absolute, bool interpolated)
-+{
-+ return m_clock.GetClock(absolute, interpolated);
-+}
-diff --git a/xbmc/cores/dvdplayer/DVDPlayer.h b/xbmc/cores/dvdplayer/DVDPlayer.h
-index 35bf762..ab73950 100644
---- a/xbmc/cores/dvdplayer/DVDPlayer.h
-+++ b/xbmc/cores/dvdplayer/DVDPlayer.h
-@@ -254,6 +254,8 @@ class CDVDPlayer : public IPlayer, public CThread, public IDVDPlayer
- virtual bool SwitchChannel(const PVR::CPVRChannel &channel);
- virtual bool CachePVRStream(void) const;
-
-+ virtual double GetClock(double& absolute, bool interpolated = true);
-+
- enum ECacheState
- { CACHESTATE_DONE = 0
- , CACHESTATE_FULL // player is filling up the demux queue
---
-1.7.10
-
-
-From 113de500903cbe1933e1a50fc7809b8f6b7f2636 Mon Sep 17 00:00:00 2001
-From: xbmc
-Date: Fri, 15 Feb 2013 17:00:47 +0100
-Subject: [PATCH 2/4] buffering: some rework
-
----
- xbmc/cores/VideoRenderers/OverlayRenderer.cpp | 17 +++++++----------
- xbmc/cores/VideoRenderers/OverlayRenderer.h | 5 ++---
- xbmc/cores/VideoRenderers/RenderManager.cpp | 10 +++-------
- xbmc/cores/VideoRenderers/RenderManager.h | 4 ++--
- xbmc/cores/dvdplayer/DVDPlayerVideo.cpp | 18 +++++++++++++++++-
- 5 files changed, 31 insertions(+), 23 deletions(-)
-
-diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
-index 94aaaf5..f7f74ce 100644
---- a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
-+++ b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
-@@ -93,24 +93,28 @@ long COverlayMainThread::Release()
-
- CRenderer::~CRenderer()
- {
-- for(int i = 0; i < 2; i++)
-+ for(int i = 0; i < 10; i++)
- Release(m_buffers[i]);
- }
-
--void CRenderer::AddOverlay(CDVDOverlay* o, double pts)
-+void CRenderer::AddOverlay(CDVDOverlay* o, double pts, int index)
- {
- CSingleLock lock(m_section);
-
-+ m_decode = index;
-+
- SElement e;
- e.pts = pts;
- e.overlay_dvd = o->Acquire();
- m_buffers[m_decode].push_back(e);
- }
-
--void CRenderer::AddOverlay(COverlay* o, double pts)
-+void CRenderer::AddOverlay(COverlay* o, double pts, int index)
- {
- CSingleLock lock(m_section);
-
-+ m_decode = index;
-+
- SElement e;
- e.pts = pts;
- e.overlay = o->Acquire();
-@@ -163,13 +167,6 @@ void CRenderer::Flip()
- m_render = (m_render + 1) % m_iNumBuffers;
- }
-
--void CRenderer::SetBuffer(int idx)
--{
-- CSingleLock lock(m_section);
-- Release(m_buffers[idx]);
-- m_decode = idx;
--}
--
- void CRenderer::ReleaseBuffer(int idx)
- {
- CSingleLock lock(m_section);
-diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.h b/xbmc/cores/VideoRenderers/OverlayRenderer.h
-index c6740a5..0921fc5 100644
---- a/xbmc/cores/VideoRenderers/OverlayRenderer.h
-+++ b/xbmc/cores/VideoRenderers/OverlayRenderer.h
-@@ -92,14 +92,13 @@
- CRenderer();
- ~CRenderer();
-
-- void AddOverlay(CDVDOverlay* o, double pts);
-- void AddOverlay(COverlay* o, double pts);
-+ void AddOverlay(CDVDOverlay* o, double pts, int index);
-+ void AddOverlay(COverlay* o, double pts, int index);
- void AddCleanup(COverlay* o);
- void Flip();
- void Render();
- void Flush();
- void SetNumBuffers(int numBuffers) { m_iNumBuffers = numBuffers; }
-- void SetBuffer(int idx);
- void ReleaseBuffer(int idx);
-
- protected:
-diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp
-index 4664426..7094913 100644
---- a/xbmc/cores/VideoRenderers/RenderManager.cpp
-+++ b/xbmc/cores/VideoRenderers/RenderManager.cpp
-@@ -228,7 +228,7 @@ CStdString CXBMCRenderManager::GetVSyncState()
- return state;
- }
-
--bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation)
-+bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation, bool buffering)
- {
- /* make sure any queued frame was fully presented */
- double timeout = m_presenttime + 0.1;
-@@ -248,8 +248,8 @@ bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsi
- return false;
- }
-
-- // check if decoder supports buffering
-- m_bCodecSupportsBuffering = false;
-+ // set buffering
-+ m_bCodecSupportsBuffering = buffering;
- if (format == RENDER_FMT_VDPAU
- || format == RENDER_FMT_VDPAU_420
- || format == RENDER_FMT_XVBA)
-@@ -959,10 +959,6 @@ int CXBMCRenderManager::WaitForBuffer(volatile bool& bStop)
- }
- lock.Leave();
-
-- { CRetakeLock lock(m_sharedSection);
-- m_overlays.SetBuffer((m_iOutputRenderBuffer + 1) % m_iNumRenderBuffers);
-- }
--
- if (bStop)
- return -1;
-
-diff --git a/xbmc/cores/VideoRenderers/RenderManager.h b/xbmc/cores/VideoRenderers/RenderManager.h
-index b931f7d..27bb8a2 100644
---- a/xbmc/cores/VideoRenderers/RenderManager.h
-+++ b/xbmc/cores/VideoRenderers/RenderManager.h
-@@ -66,7 +66,7 @@ class CXBMCRenderManager
- void SetViewMode(int iViewMode);
-
- // Functions called from mplayer
-- bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation);
-+ bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation, bool buffering);
- bool IsConfigured();
-
- int AddVideoPicture(DVDVideoPicture& picture);
-@@ -79,7 +79,7 @@ class CXBMCRenderManager
- void AddOverlay(CDVDOverlay* o, double pts)
- {
- CSharedLock lock(m_sharedSection);
-- m_overlays.AddOverlay(o, pts);
-+ m_overlays.AddOverlay(o, pts, (m_iOutputRenderBuffer + 1) % m_iNumRenderBuffers);
- }
-
- void AddCleanup(OVERLAY::COverlay* o)
-diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
-index 109d75b..8a6599c 100644
---- a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
-+++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
-@@ -1132,53 +1132,69 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
- }
-
- CStdString formatstr;
-+ bool buffering;
-
- switch(pPicture->format)
- {
- case RENDER_FMT_YUV420P:
- formatstr = "YV12";
-+ buffering = true;
- break;
- case RENDER_FMT_YUV420P16:
- formatstr = "YV12P16";
-+ buffering = true;
- break;
- case RENDER_FMT_YUV420P10:
- formatstr = "YV12P10";
-+ buffering = true;
- break;
- case RENDER_FMT_NV12:
- formatstr = "NV12";
-+ buffering = true;
- break;
- case RENDER_FMT_UYVY422:
- formatstr = "UYVY";
-+ buffering = true;
- break;
- case RENDER_FMT_YUYV422:
- formatstr = "YUY2";
-+ buffering = true;
- break;
- case RENDER_FMT_VDPAU:
- formatstr = "VDPAU";
-+ buffering = true;
- break;
- case RENDER_FMT_VDPAU_420:
- formatstr = "VDPAU_420";
-+ buffering = true;
- break;
- case RENDER_FMT_DXVA:
- formatstr = "DXVA";
-+ buffering = false;
- break;
- case RENDER_FMT_VAAPI:
- formatstr = "VAAPI";
-+ buffering = false;
- break;
- case RENDER_FMT_OMXEGL:
- formatstr = "OMXEGL";
-+ buffering = false;
- break;
- case RENDER_FMT_CVBREF:
- formatstr = "BGRA";
-+ buffering = false;
- break;
- case RENDER_FMT_BYPASS:
- formatstr = "BYPASS";
-+ buffering = false;
- break;
- case RENDER_FMT_NONE:
- formatstr = "NONE";
-+ buffering = false;
- break;
- case RENDER_FMT_XVBA:
- formatstr = "XVBA";
-+ buffering = true;
- break;
- }
-
-@@ -1189,7 +1205,7 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
- }
-
- CLog::Log(LOGDEBUG,"%s - change configuration. %dx%d. framerate: %4.2f. format: %s",__FUNCTION__,pPicture->iWidth, pPicture->iHeight, config_framerate, formatstr.c_str());
-- if(!g_renderManager.Configure(pPicture->iWidth, pPicture->iHeight, pPicture->iDisplayWidth, pPicture->iDisplayHeight, config_framerate, flags, pPicture->format, pPicture->extended_format, m_hints.orientation))
-+ if(!g_renderManager.Configure(pPicture->iWidth, pPicture->iHeight, pPicture->iDisplayWidth, pPicture->iDisplayHeight, config_framerate, flags, pPicture->format, pPicture->extended_format, m_hints.orientation, buffering))
- {
- CLog::Log(LOGERROR, "%s - failed to configure renderer", __FUNCTION__);
- return EOS_ABORT;
---
-1.7.10
-
-
-From 4d71be9fa0e34dccbb977199f1bde2f200f8b56e Mon Sep 17 00:00:00 2001
-From: xbmc
-Date: Sat, 16 Feb 2013 08:32:18 +0100
-Subject: [PATCH 3/4] add buffering for GLES
-
----
- xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp | 10 ----------
- xbmc/cores/VideoRenderers/LinuxRendererGLES.h | 6 ++++--
- 2 files changed, 4 insertions(+), 12 deletions(-)
-
-diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
-index 2a59e2b..1bf2f3b 100644
---- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
-+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
-@@ -135,13 +135,6 @@
- delete m_dllSwScale;
- }
-
--void CLinuxRendererGLES::ManageTextures()
--{
-- m_NumYV12Buffers = 2;
-- //m_iYV12RenderBuffer = 0;
-- return;
--}
--
- bool CLinuxRendererGLES::ValidateRenderTarget()
- {
- if (!m_bValidated)
-@@ -395,7 +388,6 @@ void CLinuxRendererGLES::Update(bool bPauseDrawing)
- {
- if (!m_bConfigured) return;
- ManageDisplay();
-- ManageTextures();
- }
-
- void CLinuxRendererGLES::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
-@@ -409,7 +401,6 @@ void CLinuxRendererGLES::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
- if (m_renderMethod & RENDER_BYPASS)
- {
- ManageDisplay();
-- ManageTextures();
- // if running bypass, then the player might need the src/dst rects
- // for sizing video playback on a layer other than the gles layer.
- if (m_RenderUpdateCallBackFn)
-@@ -449,7 +440,6 @@ void CLinuxRendererGLES::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
- return;
-
- ManageDisplay();
-- ManageTextures();
-
- g_graphicsContext.BeginPaint();
-
-diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
-index c6b69db..7bdc3bc 100644
---- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
-+++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
-@@ -41,7 +41,7 @@
- class COpenMaxVideo;
- typedef std::vector Features;
-
--#define NUM_BUFFERS 3
-+#define NUM_BUFFERS 10
-
-
- #undef ALIGN
-@@ -138,6 +138,9 @@ class CLinuxRendererGLES : public CBaseRenderer
- virtual void UnInit();
- virtual void Reset(); /* resets renderer after seek for example */
- virtual void ReorderDrawPoints();
-+ virtual void SetProcessorSize(int numBuffers) { m_NumYV12Buffers = numBuffers; }
-+ virtual unsigned int GetMaxProcessorSize() { return NUM_BUFFERS; }
-+ virtual unsigned int GetProcessorSize() { return m_NumYV12Buffers; }
-
- virtual void RenderUpdate(bool clear, DWORD flags = 0, DWORD alpha = 255);
-
-@@ -162,7 +165,6 @@ class CLinuxRendererGLES : public CBaseRenderer
- protected:
- virtual void Render(DWORD flags, int index);
-
-- virtual void ManageTextures();
- int NextYV12Texture();
- virtual bool ValidateRenderTarget();
- virtual void LoadShaders(int field=FIELD_FULL);
---
-1.7.10
-
-
-From 81496e1f405980d3be6b05c883bdbfb65d617e3e Mon Sep 17 00:00:00 2001
-From: xbmc
-Date: Sun, 10 Feb 2013 18:40:30 +0100
-Subject: [PATCH 4/4] OMXPlayer: adopt to buffering in renderer
-
----
- xbmc/cores/omxplayer/OMXPlayer.cpp | 5 +++++
- xbmc/cores/omxplayer/OMXPlayer.h | 2 ++
- xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 24 +++++++++++++++++++-----
- 3 files changed, 26 insertions(+), 5 deletions(-)
-
-diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
-index 60aa9ab..1acb9e2 100644
---- a/xbmc/cores/omxplayer/OMXPlayer.cpp
-+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
-@@ -4210,4 +4210,9 @@ void COMXPlayer::GetSubtitleCapabilities(std::vector &subCaps)
- subCaps.push_back(IPC_SUBS_ALL);
- }
-
-+double COMXPlayer::GetClock(double& absolute, bool interpolated)
-+{
-+ return m_av_clock.GetClock(absolute, interpolated);
-+}
-+
- #endif
-diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h
-index ca824c2..57fc7a0 100644
---- a/xbmc/cores/omxplayer/OMXPlayer.h
-+++ b/xbmc/cores/omxplayer/OMXPlayer.h
-@@ -332,6 +332,8 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer
- virtual void GetScalingMethods(std::vector &scalingMethods);
- virtual void GetAudioCapabilities(std::vector &audioCaps);
- virtual void GetSubtitleCapabilities(std::vector &subCaps);
-+
-+ virtual double GetClock(double& absolute, bool interpolated = true);
- protected:
- friend class COMXSelectionStreams;
-
-diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp
-index 5f3f050..88c75db 100644
---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp
-+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp
-@@ -158,6 +158,8 @@ bool OMXPlayerVideo::OpenStream(CDVDStreamInfo &hints)
- m_open = true;
- m_send_eos = false;
-
-+ g_renderManager.EnableBuffering(false);
-+
- return true;
- }
-
-@@ -358,7 +360,7 @@ void OMXPlayerVideo::Output(int iGroupId, double pts, bool bDropPacket)
-
- if(!g_renderManager.Configure(m_hints.width, m_hints.height,
- iDisplayWidth, iDisplayHeight, m_fps, flags, format, 0,
-- m_hints.orientation))
-+ m_hints.orientation, true))
- {
- CLog::Log(LOGERROR, "%s - failed to configure renderer", __FUNCTION__);
- return;
-@@ -452,13 +454,22 @@ void OMXPlayerVideo::Output(int iGroupId, double pts, bool bDropPacket)
- m_dropbase = 0.0f;
- #endif
-
-- double pts_media = m_av_clock->OMXMediaTime(false, false);
-- ProcessOverlays(iGroupId, pts_media);
--
- if (!CThread::m_bStop && m_av_clock->GetAbsoluteClock(false) < (iCurrentClock + iSleepTime + DVD_MSEC_TO_TIME(500)) )
- return;
-
-- g_renderManager.FlipPage(CThread::m_bStop, (iCurrentClock + iSleepTime) / DVD_TIME_BASE, -1, FS_NONE);
-+ int buffer = g_renderManager.WaitForBuffer(m_bStop);
-+ while (buffer < 0 && !CThread::m_bStop)
-+ {
-+ Sleep(1);
-+ buffer = g_renderManager.WaitForBuffer(m_bStop);
-+ }
-+ if (buffer < 0)
-+ return;
-+
-+ double pts_media = m_av_clock->OMXMediaTime(false, false);
-+ ProcessOverlays(iGroupId, pts_media);
-+
-+ g_renderManager.FlipPage(CThread::m_bStop, pts, -1, FS_NONE, m_speed);
-
- //m_av_clock->WaitAbsoluteClock((iCurrentClock + iSleepTime));
- }
-@@ -569,6 +580,7 @@ void OMXPlayerVideo::Process()
- m_av_clock->OMXReset(false);
- m_av_clock->UnLock();
- m_started = false;
-+ g_renderManager.EnableBuffering(false);
- }
- else if (pMsg->IsType(CDVDMsg::GENERAL_FLUSH)) // private message sent by (COMXPlayerVideo::Flush())
- {
-@@ -580,6 +592,7 @@ void OMXPlayerVideo::Process()
- m_omxVideo.Reset();
- m_av_clock->OMXReset(false);
- m_av_clock->UnLock();
-+ g_renderManager.EnableBuffering(false);
- }
- else if (pMsg->IsType(CDVDMsg::PLAYER_SETSPEED))
- {
-@@ -664,6 +677,7 @@ void OMXPlayerVideo::Process()
- m_codecname = m_omxVideo.GetDecoderName();
- m_started = true;
- m_messageParent.Put(new CDVDMsgInt(CDVDMsg::PLAYER_STARTED, DVDPLAYER_VIDEO));
-+ g_renderManager.EnableBuffering(true);
- }
-
- // guess next frame pts. iDuration is always valid
---
-1.7.10
-
diff --git a/packages/mediacenter/xbmc/patches/todo/xbmc-995.11-multi-screen_fix_compilation_on_windows.patch b/packages/mediacenter/xbmc/patches/todo/xbmc-995.11-multi-screen_fix_compilation_on_windows.patch
deleted file mode 100644
index 265c9ae628..0000000000
--- a/packages/mediacenter/xbmc/patches/todo/xbmc-995.11-multi-screen_fix_compilation_on_windows.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From bf4d77aeb9ff7c198914031ec0d8268dae0c5973 Mon Sep 17 00:00:00 2001
-From: unknown
-Date: Fri, 18 Jan 2013 15:16:38 +0100
-Subject: [PATCH] multi-screen: fix compilation on windows
-
----
- xbmc/settings/GUIWindowSettingsCategory.cpp | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
-
-diff --git a/xbmc/settings/GUIWindowSettingsCategory.cpp b/xbmc/settings/GUIWindowSettingsCategory.cpp
-index bb29daa..c468a73 100644
---- a/xbmc/settings/GUIWindowSettingsCategory.cpp
-+++ b/xbmc/settings/GUIWindowSettingsCategory.cpp
-@@ -525,12 +525,14 @@ void CGUIWindowSettingsCategory::CreateSettings()
- FillInRefreshRates(strSetting, g_guiSettings.GetResolution(), false);
- continue;
- }
-+#if defined(HAS_GLX)
- else if (strSetting.Equals("videoscreen.monitor"))
- {
- AddSetting(pSetting, group->GetWidth(), iControlID);
- FillInMonitors(strSetting);
- continue;
- }
-+#endif
- else if (strSetting.Equals("lookandfeel.skintheme"))
- {
- AddSetting(pSetting, group->GetWidth(), iControlID);
-@@ -1463,6 +1465,7 @@ void CGUIWindowSettingsCategory::OnSettingChanged(BaseSettingControlPtr pSetting
- // Cascade
- FillInResolutions("videoscreen.resolution", mode, RES_DESKTOP, true);
- }
-+#if defined(HAS_GLX)
- else if (strSetting.Equals("videoscreen.monitor"))
- {
- CSettingString *pSettingString = (CSettingString *)pSettingControl->GetSetting();
-@@ -1477,6 +1480,7 @@ void CGUIWindowSettingsCategory::OnSettingChanged(BaseSettingControlPtr pSetting
- FillInResolutions("videoscreen.resolution", mode, RES_DESKTOP, true);
- }
- }
-+#endif
- else if (strSetting.Equals("videoscreen.resolution"))
- {
- RESOLUTION nextRes = (RESOLUTION) g_guiSettings.GetInt("videoscreen.resolution");
-@@ -2431,6 +2435,7 @@ DisplayMode CGUIWindowSettingsCategory::FillInScreens(CStdString strSetting, RES
-
- void CGUIWindowSettingsCategory::FillInMonitors(CStdString strSetting)
- {
-+#if defined(HAS_GLX)
- // we expect "videoscreen.monitor" but it might be hidden on some platforms,
- // so check that we actually have a visable control.
- BaseSettingControlPtr control = GetSetting(strSetting);
-@@ -2456,6 +2461,7 @@ void CGUIWindowSettingsCategory::FillInMonitors(CStdString strSetting)
- pControl->SetValue(currentMonitor);
- g_guiSettings.SetString("videoscreen.monitor", g_settings.m_ResInfo[RES_DESKTOP].strOutput);
- }
-+#endif
- }
-
-
-@@ -2587,7 +2593,10 @@ void CGUIWindowSettingsCategory::OnRefreshRateChanged(RESOLUTION nextRes)
- RESOLUTION lastRes = g_graphicsContext.GetVideoResolution();
- bool cancelled = false;
-
-- bool outputChanged = !g_Windowing.IsCurrentOutput(g_guiSettings.GetString("videoscreen.monitor"));
-+ bool outputChanged = true;
-+#if defined(HAS_GLX)
-+ outputChanged = !g_Windowing.IsCurrentOutput(g_guiSettings.GetString("videoscreen.monitor"));
-+#endif
-
- g_guiSettings.SetResolution(nextRes);
- g_graphicsContext.SetVideoResolution(nextRes, outputChanged);
---
-1.7.10
-
diff --git a/packages/mediacenter/xbmc/patches/xbmc-457-fix_connection_check-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-457-fix_connection_check-0.1.patch
index e2ff800e71..2bb87be74e 100644
--- a/packages/mediacenter/xbmc/patches/xbmc-457-fix_connection_check-0.1.patch
+++ b/packages/mediacenter/xbmc/patches/xbmc-457-fix_connection_check-0.1.patch
@@ -6,10 +6,10 @@ diff -Naur a/xbmc/filesystem/CurlFile.cpp b/xbmc/filesystem/CurlFile.cpp
bool CFileCurl::IsInternet(bool checkDNS /* = true */)
{
- CStdString strURL = "http://www.google.com";
-+ CStdString strURL = "http://releases.openelec.tv";
++ CStdString strURL = "http://online.openelec.tv";
if (!checkDNS)
- strURL = "http://74.125.19.103"; // www.google.com ip
-+ strURL = "http://212.101.13.11"; // openelec.tv ip
++ strURL = "http://212.101.13.11"; // online.openelec.tv ip
bool found = Exists(strURL);
Close();
diff --git a/packages/mediacenter/xbmc/patches/xbmc-990.01-bump_xbmc_addon_version.patch b/packages/mediacenter/xbmc/patches/xbmc-990.01-bump_xbmc_addon_version.patch
new file mode 100644
index 0000000000..21407ac94d
--- /dev/null
+++ b/packages/mediacenter/xbmc/patches/xbmc-990.01-bump_xbmc_addon_version.patch
@@ -0,0 +1,23 @@
+From 65a8eb83549ef092f6f192c944befa6f762c885d Mon Sep 17 00:00:00 2001
+From: ronie
+Date: Sat, 23 Feb 2013 17:40:04 +0100
+Subject: [PATCH] bump xbmc.addon to 12.1.0
+
+---
+ addons/xbmc.addon/addon.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/addons/xbmc.addon/addon.xml b/addons/xbmc.addon/addon.xml
+index db32072..7d38949 100644
+--- a/addons/xbmc.addon/addon.xml
++++ b/addons/xbmc.addon/addon.xml
+@@ -1,5 +1,5 @@
+
+-
++
+
+
+
+--
+1.7.10
+
diff --git a/packages/mediacenter/xbmc/patches/xbmc-991.15-ae-fix-segfault.patch b/packages/mediacenter/xbmc/patches/xbmc-991.15-ae-fix-segfault.patch
new file mode 100644
index 0000000000..c18991e6b8
--- /dev/null
+++ b/packages/mediacenter/xbmc/patches/xbmc-991.15-ae-fix-segfault.patch
@@ -0,0 +1,48 @@
+From dc648b78c4c571cc0a5d3df3e7b64c21c7d0901e Mon Sep 17 00:00:00 2001
+From: fritsch
+Date: Sat, 23 Feb 2013 10:44:33 +0100
+Subject: [PATCH] AE: fix segfault after indirection patches
+
+---
+ xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp b/xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp
+index cfb7be5..6ec78c5 100644
+--- a/xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp
++++ b/xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp
+@@ -728,7 +728,6 @@ void CSoftAE::PauseStream(CSoftAEStream *stream)
+ CSingleLock streamLock(m_streamLock);
+ RemoveStream(m_playingStreams, stream);
+ stream->m_paused = true;
+- streamLock.Leave();
+
+ m_reOpen = true;
+ m_wake.Set();
+@@ -874,7 +873,10 @@ IAEStream *CSoftAE::FreeStream(IAEStream *stream)
+ RemoveStream(m_streams , (CSoftAEStream*)stream);
+ // Reopen is old behaviour. Not opening when masterstream stops means clipping on S/PDIF.
+ if(!m_isSuspended && (m_masterStream == stream))
++ {
+ m_reOpen = true;
++ m_masterStream = NULL;
++ }
+
+ delete (CSoftAEStream*)stream;
+ return NULL;
+@@ -1058,11 +1060,11 @@ void CSoftAE::Run()
+ bool restart = false;
+
+ /* with the new non blocking implementation - we just reOpen here, when it tells reOpen */
+- if (!m_reOpen && (this->*m_outputStageFn)(hasAudio) > 0)
++ if ((this->*m_outputStageFn)(hasAudio) > 0)
+ hasAudio = false; /* taken some audio - reset our silence flag */
+
+ /* if we have enough room in the buffer */
+- if (!m_reOpen && m_buffer.Free() >= m_frameSize)
++ if (m_buffer.Free() >= m_frameSize)
+ {
+ /* take some data for our use from the buffer */
+ uint8_t *out = (uint8_t*)m_buffer.Take(m_frameSize);
+--
+1.7.10
diff --git a/packages/mediacenter/xbmc/patches.x86/xbmc-995.01-xvba_support-1ea917e.patch b/packages/mediacenter/xbmc/patches/xbmc-995.01-xvba_support-1ea917e.patch
similarity index 100%
rename from packages/mediacenter/xbmc/patches.x86/xbmc-995.01-xvba_support-1ea917e.patch
rename to packages/mediacenter/xbmc/patches/xbmc-995.01-xvba_support-1ea917e.patch
diff --git a/packages/mediacenter/xbmc/patches/xbmc-995.09-revert-rpi-fixes.patch b/packages/mediacenter/xbmc/patches/xbmc-995.09-revert-rpi-fixes.patch
new file mode 100644
index 0000000000..b7d03823ff
--- /dev/null
+++ b/packages/mediacenter/xbmc/patches/xbmc-995.09-revert-rpi-fixes.patch
@@ -0,0 +1,64 @@
+diff -Naur xbmc-12.0.2/xbmc/cores/omxplayer/OMXPlayerVideo.cpp xbmc-12.0.2.patch/xbmc/cores/omxplayer/OMXPlayerVideo.cpp
+--- xbmc-12.0.2/xbmc/cores/omxplayer/OMXPlayerVideo.cpp 2013-02-19 19:04:39.000000000 +0100
++++ xbmc-12.0.2.patch/xbmc/cores/omxplayer/OMXPlayerVideo.cpp 2013-02-22 18:18:47.298296862 +0100
+@@ -124,7 +124,6 @@
+ m_started = false;
+ m_stalled = m_messageQueue.GetPacketCount(CDVDMsg::DEMUXER_PACKET) == 0;
+ m_autosync = 1;
+- m_iSleepEndTime = DVD_NOPTS_VALUE;
+
+ m_audio_count = m_av_clock->HasAudio();
+
+@@ -453,23 +452,13 @@
+ m_dropbase = 0.0f;
+ #endif
+
+- // DVDPlayer sleeps until m_iSleepEndTime here before calling FlipPage.
+- // Video playback in asynchronous in OMXPlayer, so we don't want to do that here, as it prevents the video fifo from being kept full.
+- // So, we keep track of when FlipPage would have been called on DVDPlayer and return early if it is not time.
+- // m_iSleepEndTime == DVD_NOPTS_VALUE means we are not waiting to call FlipPage, otherwise it is the time we want to call FlipPage
+- if (m_iSleepEndTime == DVD_NOPTS_VALUE) {
+- m_iSleepEndTime = iCurrentClock + iSleepTime;
+- }
+-
+- if (!CThread::m_bStop && m_av_clock->GetAbsoluteClock(false) < m_iSleepEndTime + DVD_MSEC_TO_TIME(500))
+- return;
+-
+ double pts_media = m_av_clock->OMXMediaTime(false, false);
+ ProcessOverlays(iGroupId, pts_media);
+
+- g_renderManager.FlipPage(CThread::m_bStop, m_iSleepEndTime / DVD_TIME_BASE, -1, FS_NONE);
++ while(!CThread::m_bStop && m_av_clock->GetAbsoluteClock(false) < (iCurrentClock + iSleepTime + DVD_MSEC_TO_TIME(500)) )
++ Sleep(1);
+
+- m_iSleepEndTime = DVD_NOPTS_VALUE;
++ g_renderManager.FlipPage(CThread::m_bStop, (iCurrentClock + iSleepTime) / DVD_TIME_BASE, -1, FS_NONE);
+
+ //m_av_clock->WaitAbsoluteClock((iCurrentClock + iSleepTime));
+ }
+@@ -580,14 +569,12 @@
+ m_av_clock->OMXReset(false);
+ m_av_clock->UnLock();
+ m_started = false;
+- m_iSleepEndTime = DVD_NOPTS_VALUE;
+ }
+ else if (pMsg->IsType(CDVDMsg::GENERAL_FLUSH)) // private message sent by (COMXPlayerVideo::Flush())
+ {
+ CLog::Log(LOGDEBUG, "COMXPlayerVideo - CDVDMsg::GENERAL_FLUSH");
+ m_stalled = true;
+ m_started = false;
+- m_iSleepEndTime = DVD_NOPTS_VALUE;
+ m_av_clock->Lock();
+ m_av_clock->OMXStop(false);
+ m_omxVideo.Reset();
+diff -Naur xbmc-12.0.2/xbmc/cores/omxplayer/OMXPlayerVideo.h xbmc-12.0.2.patch/xbmc/cores/omxplayer/OMXPlayerVideo.h
+--- xbmc-12.0.2/xbmc/cores/omxplayer/OMXPlayerVideo.h 2013-02-19 19:04:39.000000000 +0100
++++ xbmc-12.0.2.patch/xbmc/cores/omxplayer/OMXPlayerVideo.h 2013-02-22 18:18:44.166310881 +0100
+@@ -49,7 +49,6 @@
+ bool m_open;
+ CDVDStreamInfo m_hints;
+ double m_iCurrentPts;
+- double m_iSleepEndTime;
+ OMXClock *m_av_clock;
+ COMXVideo m_omxVideo;
+ float m_fFrameRate;
diff --git a/packages/mediacenter/xbmc/patches/xbmc-995.10-xvba_rpi_fixes-059b89b.patch b/packages/mediacenter/xbmc/patches/xbmc-995.10-xvba_rpi_fixes-059b89b.patch
new file mode 100644
index 0000000000..a93becfe17
--- /dev/null
+++ b/packages/mediacenter/xbmc/patches/xbmc-995.10-xvba_rpi_fixes-059b89b.patch
@@ -0,0 +1,1148 @@
+From bc4a2f53976c71c403b91ab1aa6138f966a90480 Mon Sep 17 00:00:00 2001
+From: unknown
+Date: Fri, 18 Jan 2013 15:16:38 +0100
+Subject: [PATCH 1/7] multi-screen: fix compilation on windows
+
+---
+ xbmc/settings/GUIWindowSettingsCategory.cpp | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/xbmc/settings/GUIWindowSettingsCategory.cpp b/xbmc/settings/GUIWindowSettingsCategory.cpp
+index cacb32a..cbf0acb 100644
+--- a/xbmc/settings/GUIWindowSettingsCategory.cpp
++++ b/xbmc/settings/GUIWindowSettingsCategory.cpp
+@@ -528,12 +528,14 @@ void CGUIWindowSettingsCategory::CreateSettings()
+ FillInRefreshRates(strSetting, g_guiSettings.GetResolution(), false);
+ continue;
+ }
++#if defined(HAS_GLX)
+ else if (strSetting.Equals("videoscreen.monitor"))
+ {
+ AddSetting(pSetting, group->GetWidth(), iControlID);
+ FillInMonitors(strSetting);
+ continue;
+ }
++#endif
+ else if (strSetting.Equals("lookandfeel.skintheme"))
+ {
+ AddSetting(pSetting, group->GetWidth(), iControlID);
+@@ -1483,6 +1485,7 @@ void CGUIWindowSettingsCategory::OnSettingChanged(BaseSettingControlPtr pSetting
+ // Cascade
+ FillInResolutions("videoscreen.resolution", mode, RES_DESKTOP, true);
+ }
++#if defined(HAS_GLX)
+ else if (strSetting.Equals("videoscreen.monitor"))
+ {
+ CSettingString *pSettingString = (CSettingString *)pSettingControl->GetSetting();
+@@ -1497,6 +1500,7 @@ void CGUIWindowSettingsCategory::OnSettingChanged(BaseSettingControlPtr pSetting
+ FillInResolutions("videoscreen.resolution", mode, RES_DESKTOP, true);
+ }
+ }
++#endif
+ else if (strSetting.Equals("videoscreen.resolution"))
+ {
+ RESOLUTION nextRes = (RESOLUTION) g_guiSettings.GetInt("videoscreen.resolution");
+@@ -2451,6 +2455,7 @@ DisplayMode CGUIWindowSettingsCategory::FillInScreens(CStdString strSetting, RES
+
+ void CGUIWindowSettingsCategory::FillInMonitors(CStdString strSetting)
+ {
++#if defined(HAS_GLX)
+ // we expect "videoscreen.monitor" but it might be hidden on some platforms,
+ // so check that we actually have a visable control.
+ BaseSettingControlPtr control = GetSetting(strSetting);
+@@ -2476,6 +2481,7 @@ void CGUIWindowSettingsCategory::FillInMonitors(CStdString strSetting)
+ pControl->SetValue(currentMonitor);
+ g_guiSettings.SetString("videoscreen.monitor", g_settings.m_ResInfo[RES_DESKTOP].strOutput);
+ }
++#endif
+ }
+
+
+@@ -2607,7 +2613,10 @@ void CGUIWindowSettingsCategory::OnRefreshRateChanged(RESOLUTION nextRes)
+ RESOLUTION lastRes = g_graphicsContext.GetVideoResolution();
+ bool cancelled = false;
+
+- bool outputChanged = !g_Windowing.IsCurrentOutput(g_guiSettings.GetString("videoscreen.monitor"));
++ bool outputChanged = true;
++#if defined(HAS_GLX)
++ outputChanged = !g_Windowing.IsCurrentOutput(g_guiSettings.GetString("videoscreen.monitor"));
++#endif
+
+ g_guiSettings.SetResolution(nextRes);
+ g_graphicsContext.SetVideoResolution(nextRes, outputChanged);
+--
+1.7.10
+
+
+From 3724a6e137d00f92b5eb4e419883ae239f0562f8 Mon Sep 17 00:00:00 2001
+From: xbmc
+Date: Fri, 22 Feb 2013 09:57:17 +0100
+Subject: [PATCH 2/7] buffering back ports
+
+---
+ xbmc/cores/IPlayer.h | 5 ++
+ xbmc/cores/VideoRenderers/BaseRenderer.h | 7 ++-
+ xbmc/cores/VideoRenderers/LinuxRendererGL.h | 6 +-
+ xbmc/cores/VideoRenderers/OverlayRenderer.cpp | 17 +++---
+ xbmc/cores/VideoRenderers/OverlayRenderer.h | 8 +--
+ xbmc/cores/VideoRenderers/RenderManager.cpp | 64 +++++++++++++---------
+ xbmc/cores/VideoRenderers/RenderManager.h | 73 ++++++++++++++++++++++---
+ xbmc/cores/dvdplayer/DVDPlayer.cpp | 7 ++-
+ xbmc/cores/dvdplayer/DVDPlayer.h | 2 +
+ xbmc/cores/dvdplayer/DVDPlayerVideo.cpp | 18 +++++-
+ 10 files changed, 150 insertions(+), 57 deletions(-)
+
+diff --git a/xbmc/cores/IPlayer.h b/xbmc/cores/IPlayer.h
+index f2aa227..cbf2faa 100644
+--- a/xbmc/cores/IPlayer.h
++++ b/xbmc/cores/IPlayer.h
+@@ -229,6 +229,11 @@ class IPlayer
+ */
+ virtual void GetSubtitleCapabilities(std::vector &subCaps) { subCaps.assign(1,IPC_SUBS_ALL); };
+
++ /*!
++ \brief called by RenderManager in order to schedule frames
++ */
++ virtual double GetClock(double& absolute, bool interpolated = true) {return 0; };
++
+ protected:
+ IPlayerCallback& m_callback;
+ };
+diff --git a/xbmc/cores/VideoRenderers/BaseRenderer.h b/xbmc/cores/VideoRenderers/BaseRenderer.h
+index b02d536..60b7197 100644
+--- a/xbmc/cores/VideoRenderers/BaseRenderer.h
++++ b/xbmc/cores/VideoRenderers/BaseRenderer.h
+@@ -26,10 +26,11 @@
+
+ #define MAX_PLANES 3
+ #define MAX_FIELDS 3
++#define NUM_BUFFERS 10
+
+ typedef struct YV12Image
+ {
+- BYTE * plane[MAX_PLANES];
++ uint8_t* plane[MAX_PLANES];
+ int planesize[MAX_PLANES];
+ unsigned stride[MAX_PLANES];
+ unsigned width;
+@@ -84,8 +85,8 @@ class CBaseRenderer
+ virtual void Flush() {};
+
+ virtual unsigned int GetProcessorSize() { return 0; }
+- virtual unsigned int GetMaxProcessorSize() { return 0; }
+- virtual void SetProcessorSize(int numBuffers) { }
++ virtual unsigned int GetMaxBufferSize() { return 0; }
++ virtual void SetBufferSize(int numBuffers) { }
+ virtual void ReleaseBuffer(int idx) { }
+
+ virtual bool Supports(ERENDERFEATURE feature) { return false; }
+diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.h b/xbmc/cores/VideoRenderers/LinuxRendererGL.h
+index e76624b..a189892 100644
+--- a/xbmc/cores/VideoRenderers/LinuxRendererGL.h
++++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.h
+@@ -46,8 +46,6 @@
+ namespace XVBA { class CXvbaRenderPicture; }
+
+
+-#define NUM_BUFFERS 10
+-
+ #undef ALIGN
+ #define ALIGN(value, alignment) (((value)+((alignment)-1))&~((alignment)-1))
+ #define CLAMP(a, min, max) ((a) > (max) ? (max) : ( (a) < (min) ? (min) : a ))
+@@ -141,8 +139,8 @@ class CLinuxRendererGL : public CBaseRenderer
+ virtual void Reset(); /* resets renderer after seek for example */
+ virtual void Flush();
+ virtual void ReleaseBuffer(int idx);
+- virtual void SetProcessorSize(int numBuffers) { m_NumYV12Buffers = numBuffers; }
+- virtual unsigned int GetMaxProcessorSize() { return NUM_BUFFERS; }
++ virtual void SetBufferSize(int numBuffers) { m_NumYV12Buffers = numBuffers; }
++ virtual unsigned int GetMaxBufferSize() { return NUM_BUFFERS; }
+ virtual unsigned int GetProcessorSize() { return m_NumYV12Buffers; }
+
+ #ifdef HAVE_LIBVDPAU
+diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
+index 94aaaf5..5236390 100644
+--- a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
++++ b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
+@@ -93,24 +93,28 @@ long COverlayMainThread::Release()
+
+ CRenderer::~CRenderer()
+ {
+- for(int i = 0; i < 2; i++)
++ for(int i = 0; i < NUM_BUFFERS; i++)
+ Release(m_buffers[i]);
+ }
+
+-void CRenderer::AddOverlay(CDVDOverlay* o, double pts)
++void CRenderer::AddOverlay(CDVDOverlay* o, double pts, int index)
+ {
+ CSingleLock lock(m_section);
+
++ m_decode = index;
++
+ SElement e;
+ e.pts = pts;
+ e.overlay_dvd = o->Acquire();
+ m_buffers[m_decode].push_back(e);
+ }
+
+-void CRenderer::AddOverlay(COverlay* o, double pts)
++void CRenderer::AddOverlay(COverlay* o, double pts, int index)
+ {
+ CSingleLock lock(m_section);
+
++ m_decode = index;
++
+ SElement e;
+ e.pts = pts;
+ e.overlay = o->Acquire();
+@@ -163,13 +167,6 @@ void CRenderer::Flip()
+ m_render = (m_render + 1) % m_iNumBuffers;
+ }
+
+-void CRenderer::SetBuffer(int idx)
+-{
+- CSingleLock lock(m_section);
+- Release(m_buffers[idx]);
+- m_decode = idx;
+-}
+-
+ void CRenderer::ReleaseBuffer(int idx)
+ {
+ CSingleLock lock(m_section);
+diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.h b/xbmc/cores/VideoRenderers/OverlayRenderer.h
+index c6740a5..66c592a 100644
+--- a/xbmc/cores/VideoRenderers/OverlayRenderer.h
++++ b/xbmc/cores/VideoRenderers/OverlayRenderer.h
+@@ -23,6 +23,7 @@
+ #pragma once
+
+ #include "threads/CriticalSection.h"
++#include "BaseRenderer.h"
+
+ #include
+
+@@ -92,14 +93,13 @@
+ CRenderer();
+ ~CRenderer();
+
+- void AddOverlay(CDVDOverlay* o, double pts);
+- void AddOverlay(COverlay* o, double pts);
++ void AddOverlay(CDVDOverlay* o, double pts, int index);
++ void AddOverlay(COverlay* o, double pts, int index);
+ void AddCleanup(COverlay* o);
+ void Flip();
+ void Render();
+ void Flush();
+ void SetNumBuffers(int numBuffers) { m_iNumBuffers = numBuffers; }
+- void SetBuffer(int idx);
+ void ReleaseBuffer(int idx);
+
+ protected:
+@@ -127,7 +127,7 @@
+ void Release(SElementV& list);
+
+ CCriticalSection m_section;
+- SElementV m_buffers[10];
++ SElementV m_buffers[NUM_BUFFERS];
+ int m_iNumBuffers;
+ int m_decode;
+ int m_render;
+diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp
+index 9290f80..ca454eb 100644
+--- a/xbmc/cores/VideoRenderers/RenderManager.cpp
++++ b/xbmc/cores/VideoRenderers/RenderManager.cpp
+@@ -228,7 +228,7 @@ CStdString CXBMCRenderManager::GetVSyncState()
+ return state;
+ }
+
+-bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation)
++bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation, bool buffering)
+ {
+ /* make sure any queued frame was fully presented */
+ double timeout = m_presenttime + 0.1;
+@@ -248,12 +248,8 @@ bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsi
+ return false;
+ }
+
+- // check if decoder supports buffering
+- m_bCodecSupportsBuffering = false;
+- if (format == RENDER_FMT_VDPAU
+- || format == RENDER_FMT_VDPAU_420
+- || format == RENDER_FMT_XVBA)
+- m_bCodecSupportsBuffering = true;
++ // set buffering
++ m_bCodecSupportsBuffering = buffering;
+
+ bool result = m_pRenderer->Configure(width, height, d_width, d_height, fps, flags, format, extended_format, orientation);
+ if(result)
+@@ -325,7 +321,7 @@ void CXBMCRenderManager::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
+ m_presentevent.Set();
+ }
+
+-unsigned int CXBMCRenderManager::PreInit(CDVDClock *pClock)
++unsigned int CXBMCRenderManager::PreInit()
+ {
+ CRetakeLock lock(m_sharedSection);
+
+@@ -333,7 +329,6 @@ unsigned int CXBMCRenderManager::PreInit(CDVDClock *pClock)
+ m_presenterr = 0.0;
+ m_errorindex = 0;
+ memset(m_errorbuff, 0, sizeof(m_errorbuff));
+- m_pClock = pClock;
+
+ m_bIsStarted = false;
+ m_bPauseDrawing = false;
+@@ -617,10 +612,12 @@ void CXBMCRenderManager::FlipPage(volatile bool& bStop, double timestamp /* = 0L
+ }
+ }
+
+- FlipFreeBuffer();
+- m_renderBuffers[m_iOutputRenderBuffer].pts = timestamp;
+- m_renderBuffers[m_iOutputRenderBuffer].presentfield = presentfield;
+- m_renderBuffers[m_iOutputRenderBuffer].presentmethod = presentmethod;
++ if (FlipFreeBuffer() >= 0)
++ {
++ m_renderBuffers[m_iOutputRenderBuffer].pts = timestamp;
++ m_renderBuffers[m_iOutputRenderBuffer].presentfield = presentfield;
++ m_renderBuffers[m_iOutputRenderBuffer].presentmethod = presentmethod;
++ }
+ m_speed = speed;
+ }
+
+@@ -880,9 +877,17 @@ int CXBMCRenderManager::AddVideoPicture(DVDVideoPicture& pic)
+ #endif
+ m_pRenderer->ReleaseImage(index, false);
+
++ m_bRenderBufferUsed = true;
+ return index;
+ }
+
++void CXBMCRenderManager::AddOverlay(CDVDOverlay* o, double pts)
++{
++ CSharedLock lock(m_sharedSection);
++ m_overlays.AddOverlay(o, pts, (m_iOutputRenderBuffer + 1) % m_iNumRenderBuffers);
++ m_bRenderBufferUsed = true;
++}
++
+ bool CXBMCRenderManager::Supports(ERENDERFEATURE feature)
+ {
+ CSharedLock lock(m_sharedSection);
+@@ -939,31 +944,28 @@ EINTERLACEMETHOD CXBMCRenderManager::AutoInterlaceMethodInternal(EINTERLACEMETHO
+ return mInt;
+ }
+
+-int CXBMCRenderManager::WaitForBuffer(volatile bool& bStop)
++int CXBMCRenderManager::WaitForBuffer(volatile bool& bStop, int timeout)
+ {
+ CSharedLock lock(m_sharedSection);
+ if (!m_pRenderer)
+ return -1;
+
+ //wait up to a second as this is our slowest allowed output rate
+- double timeout = GetPresentTime() + 0.1;
++ double maxwait = GetPresentTime() + (float)timeout/1000;
+ while(!HasFreeBuffer() && !bStop)
+ {
+ lock.Leave();
+- m_flipEvent.WaitMSec(50);
+- if(GetPresentTime() > timeout && !bStop)
++ m_flipEvent.WaitMSec(std::min(50, timeout));
++ if(GetPresentTime() > maxwait && !bStop)
+ {
+- CLog::Log(LOGWARNING, "CRenderManager::WaitForBuffer - timeout waiting for buffer");
++ if (timeout != 0)
++ CLog::Log(LOGWARNING, "CRenderManager::WaitForBuffer - timeout waiting for buffer");
+ return -1;
+ }
+ lock.Enter();
+ }
+ lock.Leave();
+
+- { CRetakeLock lock(m_sharedSection);
+- m_overlays.SetBuffer((m_iOutputRenderBuffer + 1) % m_iNumRenderBuffers);
+- }
+-
+ if (bStop)
+ return -1;
+
+@@ -987,10 +989,17 @@ int CXBMCRenderManager::FlipFreeBuffer()
+ // See "Render Buffer State Description" in header for information.
+ if (HasFreeBuffer())
+ {
++ if (!m_bRenderBufferUsed)
++ {
++ return -1;
++ }
++ m_bRenderBufferUsed = false;
+ m_bAllRenderBuffersDisplayed = false;
+ m_iOutputRenderBuffer = (m_iOutputRenderBuffer + 1) % m_iNumRenderBuffers;
+ return m_iOutputRenderBuffer;
+ }
++ else
++ return -1;
+ }
+
+ bool CXBMCRenderManager::HasFreeBuffer()
+@@ -1013,7 +1022,7 @@ bool CXBMCRenderManager::HasFreeBuffer()
+
+ void CXBMCRenderManager::ResetRenderBuffer()
+ {
+- m_iNumRenderBuffers = m_pRenderer->GetMaxProcessorSize();
++ m_iNumRenderBuffers = m_pRenderer->GetMaxBufferSize();
+ m_iNumRenderBuffers = std::min(5, m_iNumRenderBuffers);
+ m_iNumRenderBuffers = std::max(2, m_iNumRenderBuffers);
+
+@@ -1022,7 +1031,7 @@ void CXBMCRenderManager::ResetRenderBuffer()
+
+ CLog::Log(LOGNOTICE,"CXBMCRenderManager::ResetRenderBuffer - using %d render buffers", m_iNumRenderBuffers);
+ m_overlays.SetNumBuffers(m_iNumRenderBuffers);
+- m_pRenderer->SetProcessorSize(m_iNumRenderBuffers);
++ m_pRenderer->SetBufferSize(m_iNumRenderBuffers);
+
+ m_iCurrentRenderBuffer = 0;
+ m_iOutputRenderBuffer = 0;
+@@ -1031,6 +1040,7 @@ void CXBMCRenderManager::ResetRenderBuffer()
+ m_sleeptime = 1.0;
+ m_presentPts = DVD_NOPTS_VALUE;
+ m_speed = 0;
++ m_bRenderBufferUsed = false;
+ }
+
+ void CXBMCRenderManager::PrepareNextRender()
+@@ -1045,7 +1055,11 @@ void CXBMCRenderManager::PrepareNextRender()
+ }
+
+ double iClockSleep, iPlayingClock, iCurrentClock;
+- iPlayingClock = m_pClock->GetClock(iCurrentClock, false);
++ if (g_application.m_pPlayer)
++ iPlayingClock = g_application.m_pPlayer->GetClock(iCurrentClock, false);
++ else
++ iPlayingClock = iCurrentClock = 0;
++
+ iClockSleep = m_renderBuffers[idx].pts - iPlayingClock;
+
+ if (m_speed)
+diff --git a/xbmc/cores/VideoRenderers/RenderManager.h b/xbmc/cores/VideoRenderers/RenderManager.h
+index 6746957..1a460c7 100644
+--- a/xbmc/cores/VideoRenderers/RenderManager.h
++++ b/xbmc/cores/VideoRenderers/RenderManager.h
+@@ -66,21 +66,44 @@ class CXBMCRenderManager
+ void SetViewMode(int iViewMode);
+
+ // Functions called from mplayer
+- bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation);
++ /**
++ * Called by video player to configure renderer
++ * @param width width of decoded frame
++ * @param height height of decoded frame
++ * @param d_width displayed width of frame (aspect ratio)
++ * @param d_height displayed height of frame
++ * @param fps frames per second of video
++ * @param flags see RenderFlags.h
++ * @param format see RenderFormats.h
++ * @param extended_format used by DXVA
++ * @param orientation
++ * @param buffering enable buffering in renderer, defaults to false
++ */
++ bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation, bool buffering = false);
+ bool IsConfigured();
+
+ int AddVideoPicture(DVDVideoPicture& picture);
+
++ /**
++ * Called by video player to flip render buffers
++ * If buffering is enabled this method does not block. In case of disabled buffering
++ * this method blocks waiting for the render thread to pass by.
++ * When buffering is used there might be no free buffer available after the call to
++ * this method. Player has to call WaitForBuffer. A free buffer will become
++ * available after the main thread has flipped front / back buffers.
++ *
++ * @param bStop reference to stop flag of calling thread
++ * @param timestamp pts of frame delivered with AddVideoPicture
++ * @param source depreciated
++ * @param sync signals frame, top, or bottom field
++ * @param speed current speed of player, needed to calculate presenttime when buffering is avtive
++ */
+ void FlipPage(volatile bool& bStop, double timestamp = 0.0, int source = -1, EFIELDSYNC sync = FS_NONE, int speed = 0);
+- unsigned int PreInit(CDVDClock *pClock);
++ unsigned int PreInit();
+ void UnInit();
+ bool Flush();
+
+- void AddOverlay(CDVDOverlay* o, double pts)
+- {
+- CSharedLock lock(m_sharedSection);
+- m_overlays.AddOverlay(o, pts);
+- }
++ void AddOverlay(CDVDOverlay* o, double pts);
+
+ void AddCleanup(OVERLAY::COverlay* o)
+ {
+@@ -132,11 +155,43 @@ class CXBMCRenderManager
+ CSharedSection& GetSection() { return m_sharedSection; };
+
+ void RegisterRenderUpdateCallBack(const void *ctx, RenderUpdateCallBackFn fn);
+- int WaitForBuffer(volatile bool& bStop);
++
++ /**
++ * If player uses buffering it has to wait for a buffer before it calls
++ * AddVideoPicture and AddOverlay. It waits for max 50 ms before it returns -1
++ * in case no buffer is available. Player may call this in a loop and decides
++ * by itself when it wants to drop a frame.
++ * If no buffering is requested in Configure, player does not need to call this,
++ * because FlipPage will block.
++ */
++ int WaitForBuffer(volatile bool& bStop, int timeout = 100);
++
++ /**
++ * Called by application right after flip. The buffer which has been rendered to
++ * display becomes available for player to deliver a new frame.
++ */
+ void NotifyDisplayFlip();
++
++ /**
++ * Can be called by player for lateness detection. This is done best by
++ * looking at the end of the queue.
++ */
+ bool GetStats(double &sleeptime, double &pts, int &bufferLevel);
++
++ /**
++ * Called by application (main thread) to query if there is any frame to render
++ */
+ bool HasFrame();
++
++ /**
++ * Video player can dynamically enable/disable buffering. In situations like
++ * rewind buffering is not ideal.
++ */
+ void EnableBuffering(bool enable);
++
++ /**
++ * Video player call this on flush in oder to discard any queued frames
++ */
+ void DiscardBuffer();
+
+ protected:
+@@ -202,6 +257,7 @@ class CXBMCRenderManager
+ bool m_bUseBuffering;
+ bool m_bCodecSupportsBuffering;
+ int m_speed;
++ bool m_bRenderBufferUsed;
+ CEvent m_flipEvent;
+
+ struct
+@@ -225,7 +281,6 @@ class CXBMCRenderManager
+ int m_presentsource;
+ CEvent m_presentevent;
+ CEvent m_flushEvent;
+- CDVDClock *m_pClock;
+
+
+ OVERLAY::CRenderer m_overlays;
+diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
+index 07df0d8..18fae70 100644
+--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
++++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
+@@ -463,7 +463,7 @@ bool CDVDPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &options)
+ m_ready.Reset();
+
+ #if defined(HAS_VIDEO_PLAYBACK)
+- g_renderManager.PreInit(&m_clock);
++ g_renderManager.PreInit();
+ #endif
+
+ Create();
+@@ -4097,3 +4097,8 @@ bool CDVDPlayer::CachePVRStream(void) const
+ !g_PVRManager.IsPlayingRecording() &&
+ g_advancedSettings.m_bPVRCacheInDvdPlayer;
+ }
++
++double CDVDPlayer::GetClock(double& absolute, bool interpolated)
++{
++ return m_clock.GetClock(absolute, interpolated);
++}
+diff --git a/xbmc/cores/dvdplayer/DVDPlayer.h b/xbmc/cores/dvdplayer/DVDPlayer.h
+index 70ecea9..2b67d4c 100644
+--- a/xbmc/cores/dvdplayer/DVDPlayer.h
++++ b/xbmc/cores/dvdplayer/DVDPlayer.h
+@@ -252,6 +252,8 @@ class CDVDPlayer : public IPlayer, public CThread, public IDVDPlayer
+ virtual bool SwitchChannel(const PVR::CPVRChannel &channel);
+ virtual bool CachePVRStream(void) const;
+
++ virtual double GetClock(double& absolute, bool interpolated = true);
++
+ enum ECacheState
+ { CACHESTATE_DONE = 0
+ , CACHESTATE_FULL // player is filling up the demux queue
+diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
+index d26ab9c..19ba35d 100644
+--- a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
++++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
+@@ -1117,53 +1117,69 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
+ }
+
+ CStdString formatstr;
++ bool buffering;
+
+ switch(pPicture->format)
+ {
+ case RENDER_FMT_YUV420P:
+ formatstr = "YV12";
++ buffering = true;
+ break;
+ case RENDER_FMT_YUV420P16:
+ formatstr = "YV12P16";
++ buffering = true;
+ break;
+ case RENDER_FMT_YUV420P10:
+ formatstr = "YV12P10";
++ buffering = true;
+ break;
+ case RENDER_FMT_NV12:
+ formatstr = "NV12";
++ buffering = true;
+ break;
+ case RENDER_FMT_UYVY422:
+ formatstr = "UYVY";
++ buffering = true;
+ break;
+ case RENDER_FMT_YUYV422:
+ formatstr = "YUY2";
++ buffering = true;
+ break;
+ case RENDER_FMT_VDPAU:
+ formatstr = "VDPAU";
++ buffering = true;
+ break;
+ case RENDER_FMT_VDPAU_420:
+ formatstr = "VDPAU_420";
++ buffering = true;
+ break;
+ case RENDER_FMT_DXVA:
+ formatstr = "DXVA";
++ buffering = true;
+ break;
+ case RENDER_FMT_VAAPI:
+ formatstr = "VAAPI";
++ buffering = false;
+ break;
+ case RENDER_FMT_OMXEGL:
+ formatstr = "OMXEGL";
++ buffering = false;
+ break;
+ case RENDER_FMT_CVBREF:
+ formatstr = "BGRA";
++ buffering = false;
+ break;
+ case RENDER_FMT_BYPASS:
+ formatstr = "BYPASS";
++ buffering = false;
+ break;
+ case RENDER_FMT_NONE:
+ formatstr = "NONE";
++ buffering = false;
+ break;
+ case RENDER_FMT_XVBA:
+ formatstr = "XVBA";
++ buffering = true;
+ break;
+ }
+
+@@ -1174,7 +1190,7 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts)
+ }
+
+ CLog::Log(LOGDEBUG,"%s - change configuration. %dx%d. framerate: %4.2f. format: %s",__FUNCTION__,pPicture->iWidth, pPicture->iHeight, config_framerate, formatstr.c_str());
+- if(!g_renderManager.Configure(pPicture->iWidth, pPicture->iHeight, pPicture->iDisplayWidth, pPicture->iDisplayHeight, config_framerate, flags, pPicture->format, pPicture->extended_format, m_hints.orientation))
++ if(!g_renderManager.Configure(pPicture->iWidth, pPicture->iHeight, pPicture->iDisplayWidth, pPicture->iDisplayHeight, config_framerate, flags, pPicture->format, pPicture->extended_format, m_hints.orientation, buffering))
+ {
+ CLog::Log(LOGERROR, "%s - failed to configure renderer", __FUNCTION__);
+ return EOS_ABORT;
+--
+1.7.10
+
+
+From 1cfeec2846a58b7e2ad44471bb085cef9d2c687d Mon Sep 17 00:00:00 2001
+From: xbmc
+Date: Sat, 16 Feb 2013 08:32:18 +0100
+Subject: [PATCH 3/7] add buffering for GLES
+
+---
+ xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp | 10 ----------
+ xbmc/cores/VideoRenderers/LinuxRendererGLES.h | 6 ++++--
+ 2 files changed, 4 insertions(+), 12 deletions(-)
+
+diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
+index 2a59e2b..1bf2f3b 100644
+--- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
++++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
+@@ -135,13 +135,6 @@
+ delete m_dllSwScale;
+ }
+
+-void CLinuxRendererGLES::ManageTextures()
+-{
+- m_NumYV12Buffers = 2;
+- //m_iYV12RenderBuffer = 0;
+- return;
+-}
+-
+ bool CLinuxRendererGLES::ValidateRenderTarget()
+ {
+ if (!m_bValidated)
+@@ -395,7 +388,6 @@ void CLinuxRendererGLES::Update(bool bPauseDrawing)
+ {
+ if (!m_bConfigured) return;
+ ManageDisplay();
+- ManageTextures();
+ }
+
+ void CLinuxRendererGLES::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
+@@ -409,7 +401,6 @@ void CLinuxRendererGLES::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
+ if (m_renderMethod & RENDER_BYPASS)
+ {
+ ManageDisplay();
+- ManageTextures();
+ // if running bypass, then the player might need the src/dst rects
+ // for sizing video playback on a layer other than the gles layer.
+ if (m_RenderUpdateCallBackFn)
+@@ -449,7 +440,6 @@ void CLinuxRendererGLES::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
+ return;
+
+ ManageDisplay();
+- ManageTextures();
+
+ g_graphicsContext.BeginPaint();
+
+diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
+index c6b69db..5bae10d 100644
+--- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
++++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
+@@ -41,7 +41,7 @@
+ class COpenMaxVideo;
+ typedef std::vector Features;
+
+-#define NUM_BUFFERS 3
++#define NUM_BUFFERS 10
+
+
+ #undef ALIGN
+@@ -138,6 +138,9 @@ class CLinuxRendererGLES : public CBaseRenderer
+ virtual void UnInit();
+ virtual void Reset(); /* resets renderer after seek for example */
+ virtual void ReorderDrawPoints();
++ virtual void SetBufferSize(int numBuffers) { m_NumYV12Buffers = numBuffers; }
++ virtual unsigned int GetMaxBufferSize() { return NUM_BUFFERS; }
++ virtual unsigned int GetProcessorSize() { return m_NumYV12Buffers; }
+
+ virtual void RenderUpdate(bool clear, DWORD flags = 0, DWORD alpha = 255);
+
+@@ -162,7 +165,6 @@ class CLinuxRendererGLES : public CBaseRenderer
+ protected:
+ virtual void Render(DWORD flags, int index);
+
+- virtual void ManageTextures();
+ int NextYV12Texture();
+ virtual bool ValidateRenderTarget();
+ virtual void LoadShaders(int field=FIELD_FULL);
+--
+1.7.10
+
+
+From 20fe728e43350442747c05adde545103516f377b Mon Sep 17 00:00:00 2001
+From: xbmc
+Date: Sun, 10 Feb 2013 18:40:30 +0100
+Subject: [PATCH 4/7] OMXPlayer: adapt to buffering
+
+---
+ xbmc/cores/omxplayer/OMXPlayer.cpp | 6 ++++++
+ xbmc/cores/omxplayer/OMXPlayer.h | 2 ++
+ xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 21 +++++++++++++--------
+ 3 files changed, 21 insertions(+), 8 deletions(-)
+
+diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
+index 60aa9ab..b4eda41 100644
+--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
++++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
+@@ -4210,4 +4210,10 @@ void COMXPlayer::GetSubtitleCapabilities(std::vector &subCaps)
+ subCaps.push_back(IPC_SUBS_ALL);
+ }
+
++double COMXPlayer::GetClock(double& absolute, bool interpolated)
++{
++ m_av_clock.GetClock(absolute, interpolated);
++ return m_av_clock.OMXMediaTime(false, false);
++}
++
+ #endif
+diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h
+index d606e84..ad9d1e6 100644
+--- a/xbmc/cores/omxplayer/OMXPlayer.h
++++ b/xbmc/cores/omxplayer/OMXPlayer.h
+@@ -332,6 +332,8 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer
+ virtual void GetScalingMethods(std::vector &scalingMethods);
+ virtual void GetAudioCapabilities(std::vector &audioCaps);
+ virtual void GetSubtitleCapabilities(std::vector &subCaps);
++
++ virtual double GetClock(double& absolute, bool interpolated = true);
+ protected:
+ friend class COMXSelectionStreams;
+
+diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp
+index 90f94aa..ecf4c9a 100644
+--- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp
++++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp
+@@ -158,6 +158,8 @@ bool OMXPlayerVideo::OpenStream(CDVDStreamInfo &hints)
+ m_open = true;
+ m_send_eos = false;
+
++ g_renderManager.EnableBuffering(false);
++
+ return true;
+ }
+
+@@ -358,7 +360,7 @@ void OMXPlayerVideo::Output(int iGroupId, double pts, bool bDropPacket)
+
+ if(!g_renderManager.Configure(m_hints.width, m_hints.height,
+ iDisplayWidth, iDisplayHeight, m_fps, flags, format, 0,
+- m_hints.orientation))
++ m_hints.orientation, true))
+ {
+ CLog::Log(LOGERROR, "%s - failed to configure renderer", __FUNCTION__);
+ return;
+@@ -452,15 +454,15 @@ void OMXPlayerVideo::Output(int iGroupId, double pts, bool bDropPacket)
+ m_dropbase = 0.0f;
+ #endif
+
+- double pts_media = m_av_clock->OMXMediaTime(false, false);
+- ProcessOverlays(iGroupId, pts_media);
+-
+- while(!CThread::m_bStop && m_av_clock->GetAbsoluteClock(false) < (iCurrentClock + iSleepTime + DVD_MSEC_TO_TIME(500)) )
+- Sleep(1);
++ int buffer = g_renderManager.WaitForBuffer(m_bStop, 0);
++ if (buffer < 0)
++ return;
+
+- g_renderManager.FlipPage(CThread::m_bStop, (iCurrentClock + iSleepTime) / DVD_TIME_BASE, -1, FS_NONE);
++ double pts_overlay = m_av_clock->OMXMediaTime(false, false)
++ + 2* (double)DVD_TIME_BASE / g_graphicsContext.GetFPS();
++ ProcessOverlays(iGroupId, pts_overlay);
+
+- //m_av_clock->WaitAbsoluteClock((iCurrentClock + iSleepTime));
++ g_renderManager.FlipPage(CThread::m_bStop, pts_overlay, -1, FS_NONE, m_speed);
+ }
+
+ void OMXPlayerVideo::Process()
+@@ -569,6 +571,7 @@ void OMXPlayerVideo::Process()
+ m_av_clock->OMXReset(false);
+ m_av_clock->UnLock();
+ m_started = false;
++ g_renderManager.EnableBuffering(false);
+ }
+ else if (pMsg->IsType(CDVDMsg::GENERAL_FLUSH)) // private message sent by (COMXPlayerVideo::Flush())
+ {
+@@ -580,6 +583,7 @@ void OMXPlayerVideo::Process()
+ m_omxVideo.Reset();
+ m_av_clock->OMXReset(false);
+ m_av_clock->UnLock();
++ g_renderManager.EnableBuffering(false);
+ }
+ else if (pMsg->IsType(CDVDMsg::PLAYER_SETSPEED))
+ {
+@@ -664,6 +668,7 @@ void OMXPlayerVideo::Process()
+ m_codecname = m_omxVideo.GetDecoderName();
+ m_started = true;
+ m_messageParent.Put(new CDVDMsgInt(CDVDMsg::PLAYER_STARTED, DVDPLAYER_VIDEO));
++ g_renderManager.EnableBuffering(true);
+ }
+
+ // guess next frame pts. iDuration is always valid
+--
+1.7.10
+
+
+From 192e1b003ddbda567342c42fb20ce5c7dee28ab1 Mon Sep 17 00:00:00 2001
+From: xbmc
+Date: Thu, 21 Feb 2013 18:09:07 +0100
+Subject: [PATCH 5/7] fix ass subs for GLES
+
+---
+ xbmc/cores/VideoRenderers/OverlayRendererGL.cpp | 33 +++++++++++++++--------
+ 1 file changed, 22 insertions(+), 11 deletions(-)
+
+diff --git a/xbmc/cores/VideoRenderers/OverlayRendererGL.cpp b/xbmc/cores/VideoRenderers/OverlayRendererGL.cpp
+index 4375d19..ed8e48d 100644
+--- a/xbmc/cores/VideoRenderers/OverlayRendererGL.cpp
++++ b/xbmc/cores/VideoRenderers/OverlayRendererGL.cpp
+@@ -359,7 +359,7 @@ static void LoadTexture(GLenum target
+
+ void COverlayGlyphGL::Render(SRenderState& state)
+ {
+- if (m_texture == 0)
++ if ((m_texture == 0) || (m_count == 0))
+ return;
+
+ glEnable(GL_TEXTURE_2D);
+@@ -418,21 +418,32 @@ void COverlayGlyphGL::Render(SRenderState& state)
+ GLint colLoc = g_Windowing.GUIShaderGetCol();
+ GLint tex0Loc = g_Windowing.GUIShaderGetCoord0();
+
+- glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(VERTEX), (char*)m_vertex + offsetof(VERTEX, x));
+- glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VERTEX), (char*)m_vertex + offsetof(VERTEX, r));
+- glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(VERTEX), (char*)m_vertex + offsetof(VERTEX, u));
++ // stack object until VBOs will be used
++ std::vector vecVertices( 6 * m_count);
++ VERTEX *vertices = &vecVertices[0];
++
++ for (int i=0; i
+Date: Sun, 24 Feb 2013 09:55:00 +0100
+Subject: [PATCH 6/7] flip free buffer after overlay has been released
+
+---
+ xbmc/cores/VideoRenderers/OverlayRenderer.cpp | 19 ++++++++++++-------
+ xbmc/cores/VideoRenderers/OverlayRenderer.h | 6 +++---
+ xbmc/cores/VideoRenderers/RenderManager.cpp | 6 ++++--
+ xbmc/cores/VideoRenderers/RenderManager.h | 1 +
+ 4 files changed, 20 insertions(+), 12 deletions(-)
+
+diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
+index 5236390..3039751 100644
+--- a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
++++ b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
+@@ -127,27 +127,32 @@ void CRenderer::AddCleanup(COverlay* o)
+ m_cleanup.push_back(o->Acquire());
+ }
+
+-void CRenderer::Release(SElementV& list)
++long CRenderer::Release(SElementV& list)
+ {
+ SElementV l = list;
+ list.clear();
+
++ long count = 0;
+ for(SElementV::iterator it = l.begin(); it != l.end(); it++)
+ {
+ if(it->overlay)
+- it->overlay->Release();
++ count += it->overlay->Release();
+ if(it->overlay_dvd)
+- it->overlay_dvd->Release();
++ count += it->overlay_dvd->Release();
+ }
++ return count;
+ }
+
+-void CRenderer::Release(COverlayV& list)
++long CRenderer::Release(COverlayV& list)
+ {
+ COverlayV l = list;
+ list.clear();
+
++ long count = 0;
+ for(COverlayV::iterator it = l.begin(); it != l.end(); it++)
+- (*it)->Release();
++ count += (*it)->Release();
++
++ return count;
+ }
+
+ void CRenderer::Flush()
+@@ -167,10 +172,10 @@ void CRenderer::Flip()
+ m_render = (m_render + 1) % m_iNumBuffers;
+ }
+
+-void CRenderer::ReleaseBuffer(int idx)
++long CRenderer::ReleaseBuffer(int idx)
+ {
+ CSingleLock lock(m_section);
+- Release(m_buffers[idx]);
++ return Release(m_buffers[idx]);
+ }
+
+ void CRenderer::Render()
+diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.h b/xbmc/cores/VideoRenderers/OverlayRenderer.h
+index 66c592a..2fcac4a 100644
+--- a/xbmc/cores/VideoRenderers/OverlayRenderer.h
++++ b/xbmc/cores/VideoRenderers/OverlayRenderer.h
+@@ -100,7 +100,7 @@
+ void Render();
+ void Flush();
+ void SetNumBuffers(int numBuffers) { m_iNumBuffers = numBuffers; }
+- void ReleaseBuffer(int idx);
++ long ReleaseBuffer(int idx);
+
+ protected:
+
+@@ -123,8 +123,8 @@
+ COverlay* Convert(CDVDOverlay* o, double pts);
+ COverlay* Convert(CDVDOverlaySSA* o, double pts);
+
+- void Release(COverlayV& list);
+- void Release(SElementV& list);
++ long Release(COverlayV& list);
++ long Release(SElementV& list);
+
+ CCriticalSection m_section;
+ SElementV m_buffers[NUM_BUFFERS];
+diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp
+index ca454eb..bc2e403 100644
+--- a/xbmc/cores/VideoRenderers/RenderManager.cpp
++++ b/xbmc/cores/VideoRenderers/RenderManager.cpp
+@@ -989,7 +989,7 @@ int CXBMCRenderManager::FlipFreeBuffer()
+ // See "Render Buffer State Description" in header for information.
+ if (HasFreeBuffer())
+ {
+- if (!m_bRenderBufferUsed)
++ if (!m_bRenderBufferUsed && !m_bOverlayReleased)
+ {
+ return -1;
+ }
+@@ -1041,6 +1041,7 @@ void CXBMCRenderManager::ResetRenderBuffer()
+ m_presentPts = DVD_NOPTS_VALUE;
+ m_speed = 0;
+ m_bRenderBufferUsed = false;
++ m_bOverlayReleased = false;
+ }
+
+ void CXBMCRenderManager::PrepareNextRender()
+@@ -1119,7 +1120,8 @@ void CXBMCRenderManager::NotifyDisplayFlip()
+ && m_iDisplayedRenderBuffer != m_iCurrentRenderBuffer)
+ {
+ m_pRenderer->ReleaseBuffer(m_iDisplayedRenderBuffer);
+- m_overlays.ReleaseBuffer(m_iDisplayedRenderBuffer);
++ if (m_overlays.ReleaseBuffer(m_iDisplayedRenderBuffer) > 0)
++ m_bOverlayReleased = true;
+ }
+ }
+
+diff --git a/xbmc/cores/VideoRenderers/RenderManager.h b/xbmc/cores/VideoRenderers/RenderManager.h
+index 1a460c7..fd85882 100644
+--- a/xbmc/cores/VideoRenderers/RenderManager.h
++++ b/xbmc/cores/VideoRenderers/RenderManager.h
+@@ -258,6 +258,7 @@ class CXBMCRenderManager
+ bool m_bCodecSupportsBuffering;
+ int m_speed;
+ bool m_bRenderBufferUsed;
++ bool m_bOverlayReleased;
+ CEvent m_flipEvent;
+
+ struct
+--
+1.7.10
+
+
+From 059b89b5e0b50af7560783a4e6a0638ab9f2680c Mon Sep 17 00:00:00 2001
+From: xbmc
+Date: Sun, 24 Feb 2013 17:38:25 +0100
+Subject: [PATCH 7/7] RverlayRenderer: align buffers with index in
+ renderManager
+
+---
+ xbmc/cores/VideoRenderers/OverlayRenderer.cpp | 7 +++++--
+ xbmc/cores/VideoRenderers/OverlayRenderer.h | 2 +-
+ xbmc/cores/VideoRenderers/RenderManager.cpp | 5 +++--
+ 3 files changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
+index 3039751..5592eca 100644
+--- a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
++++ b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp
+@@ -166,10 +166,13 @@ void CRenderer::Flush()
+ Release(m_cleanup);
+ }
+
+-void CRenderer::Flip()
++void CRenderer::Flip(int source)
+ {
+ CSingleLock lock(m_section);
+- m_render = (m_render + 1) % m_iNumBuffers;
++ if( source >= 0 && source < m_iNumBuffers )
++ m_render = source;
++ else
++ m_render = (m_render + 1) % m_iNumBuffers;
+ }
+
+ long CRenderer::ReleaseBuffer(int idx)
+diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.h b/xbmc/cores/VideoRenderers/OverlayRenderer.h
+index 2fcac4a..627dd9f 100644
+--- a/xbmc/cores/VideoRenderers/OverlayRenderer.h
++++ b/xbmc/cores/VideoRenderers/OverlayRenderer.h
+@@ -96,7 +96,7 @@
+ void AddOverlay(CDVDOverlay* o, double pts, int index);
+ void AddOverlay(COverlay* o, double pts, int index);
+ void AddCleanup(COverlay* o);
+- void Flip();
++ void Flip(int source);
+ void Render();
+ void Flush();
+ void SetNumBuffers(int numBuffers) { m_iNumBuffers = numBuffers; }
+diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp
+index bc2e403..099eb4d 100644
+--- a/xbmc/cores/VideoRenderers/RenderManager.cpp
++++ b/xbmc/cores/VideoRenderers/RenderManager.cpp
+@@ -303,7 +303,7 @@ void CXBMCRenderManager::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
+ if(m_presentstep == PRESENT_FLIP)
+ {
+ FlipRenderBuffer();
+- m_overlays.Flip();
++ m_overlays.Flip(m_presentsource);
+ m_pRenderer->FlipPage(m_presentsource);
+ m_presentstep = PRESENT_FRAME;
+ m_presentevent.Set();
+@@ -703,7 +703,7 @@ void CXBMCRenderManager::Present()
+ if(m_presentstep == PRESENT_FLIP)
+ {
+ FlipRenderBuffer();
+- m_overlays.Flip();
++ m_overlays.Flip(m_presentsource);
+ m_pRenderer->FlipPage(m_presentsource);
+ m_presentstep = PRESENT_FRAME;
+ m_presentevent.Set();
+@@ -994,6 +994,7 @@ int CXBMCRenderManager::FlipFreeBuffer()
+ return -1;
+ }
+ m_bRenderBufferUsed = false;
++ m_bOverlayReleased = false;
+ m_bAllRenderBuffersDisplayed = false;
+ m_iOutputRenderBuffer = (m_iOutputRenderBuffer + 1) % m_iNumRenderBuffers;
+ return m_iOutputRenderBuffer;
+--
+1.7.10
+
diff --git a/packages/mediacenter/xbmc/unpack b/packages/mediacenter/xbmc/unpack
deleted file mode 100755
index f21b1bc057..0000000000
--- a/packages/mediacenter/xbmc/unpack
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-
-################################################################################
-# This file is part of OpenELEC - http://www.openelec.tv
-# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
-#
-# 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 OpenELEC.tv; see the file COPYING. If not, write to
-# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
-# http://www.gnu.org/copyleft/gpl.html
-################################################################################
-
-. config/options $1
-
-echo "### Applying architecture based patches ###"
-
-if [ ! $TARGET_ARCH = arm ]; then
- for patch in `ls $PKG_DIR/patches.x86`; do
- cat $PKG_DIR/patches.x86/$patch | patch -d \
- `echo $PKG_BUILD | cut -f1 -d\ ` -p1
- done
-fi
diff --git a/packages/x11/other/intel-gpu-tools/scripts/set-intel-color-space b/packages/x11/other/intel-gpu-tools/scripts/set-intel-color-space
index be054bd483..c09fac667a 100755
--- a/packages/x11/other/intel-gpu-tools/scripts/set-intel-color-space
+++ b/packages/x11/other/intel-gpu-tools/scripts/set-intel-color-space
@@ -41,6 +41,7 @@ if [ $# -gt 0 ] ; then
intel_reg_write 0x70180 0xDA004400
# set new mode
xrandr --output $OUTPUT --set "Broadcast RGB" "Full"
+ intel_reg_write 0x70180 0xDA004400
fi
else
echo "Usage: $0 limited | full"
diff --git a/projects/Fusion/xbmc/advancedsettings.xml b/projects/Fusion/xbmc/advancedsettings.xml
new file mode 100644
index 0000000000..a77140b427
--- /dev/null
+++ b/projects/Fusion/xbmc/advancedsettings.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ false
+ false
+ false
+ false
+ false
+
+
diff --git a/projects/Ultra/filesystem/etc/init.d/03_oemscript b/projects/Ultra/filesystem/etc/init.d/03_oemscript
deleted file mode 100644
index 17676f18c0..0000000000
--- a/projects/Ultra/filesystem/etc/init.d/03_oemscript
+++ /dev/null
@@ -1,41 +0,0 @@
-################################################################################
-# This file is part of OpenELEC - http://www.openelec.tv
-# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
-#
-# 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 OpenELEC.tv; see the file COPYING. If not, write to
-# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
-# http://www.gnu.org/copyleft/gpl.html
-################################################################################
-
-#
-# OEM scripts
-#
-# runlevels: openelec, installer, textmode
-
-if [ ! -f /etc/asound.conf -a ! -f $HOME/.config/asound.conf ]; then
-
- DMI_BOARD_VENDOR=`cat /sys/class/dmi/id/board_vendor`
-# DMI_BOARD_VERSION=`cat /sys/class/dmi/id/board_version`
- SYSTEM_CPU=`grep -m1 model /proc/cpuinfo | awk '{print $3}'`
-
- if [ "$DMI_BOARD_VENDOR" = "XtReAmEr" ]; then
- if [ "$SYSTEM_CPU" = "28" ]; then
- # Xtreamer Ultra 1
- cp /usr/share/xtreamer/asound.conf.ultra1 /run/asound.conf
- elif [ "$SYSTEM_CPU" = "54" ]; then
- # Xtreamer Ultra 2
- cp /usr/share/xtreamer/asound.conf.ultra2 /run/asound.conf
- fi
- fi
-fi
diff --git a/projects/Ultra/filesystem/usr/share/xtreamer/asound.conf.ultra1 b/projects/Ultra/filesystem/usr/share/xtreamer/asound.conf.ultra1
deleted file mode 100644
index f214e3c83f..0000000000
--- a/projects/Ultra/filesystem/usr/share/xtreamer/asound.conf.ultra1
+++ /dev/null
@@ -1,85 +0,0 @@
-pcm.!default {
- type plug
- slave {
- pcm "both"
- }
-}
-
-pcm.both {
- type route
- slave {
- pcm multi
- channels 6
- }
- ttable.0.0 1.0
- ttable.1.1 1.0
- ttable.0.2 1.0
- ttable.1.3 1.0
- ttable.0.4 1.0
- ttable.1.5 1.0
-}
-
-pcm.multi {
- type multi
- slaves.a {
- pcm "hdmi_hw"
- channels 2
- }
- slaves.b {
- pcm "digital_hw"
- channels 2
- }
- slaves.c {
- pcm "analog_hw"
- channels 2
- }
- bindings.0.slave a
- bindings.0.channel 0
- bindings.1.slave a
- bindings.1.channel 1
- bindings.2.slave b
- bindings.2.channel 0
- bindings.3.slave b
- bindings.3.channel 1
- bindings.4.slave c
- bindings.4.channel 0
- bindings.5.slave c
- bindings.5.channel 1
-}
-
-pcm.hdmi_hw {
- type hw
- card 1
- device 7
- channels 2
-}
-
-pcm.hdmi_formatted {
- type plug
- slave {
- pcm hdmi_hw
- rate 48000
- channels 2
- }
-}
-
-pcm.hdmi_complete {
- type softvol
- slave.pcm hdmi_formatted
- control.name hdmi_volume
- control.card 1
-}
-
-pcm.digital_hw {
- type hw
- card 0
- device 1
- channels 2
-}
-
-pcm.analog_hw {
- type hw
- card 0
- device 0
- channels 2
-}
diff --git a/projects/Ultra/filesystem/usr/share/xtreamer/asound.conf.ultra2 b/projects/Ultra/filesystem/usr/share/xtreamer/asound.conf.ultra2
deleted file mode 100644
index 8ea89e09c1..0000000000
--- a/projects/Ultra/filesystem/usr/share/xtreamer/asound.conf.ultra2
+++ /dev/null
@@ -1,85 +0,0 @@
-pcm.!default {
- type plug
- slave {
- pcm "both"
- }
-}
-
-pcm.both {
- type route
- slave {
- pcm multi
- channels 6
- }
- ttable.0.0 1.0
- ttable.1.1 1.0
- ttable.0.2 1.0
- ttable.1.3 1.0
- ttable.0.4 1.0
- ttable.1.5 1.0
-}
-
-pcm.multi {
- type multi
- slaves.a {
- pcm "hdmi_hw"
- channels 2
- }
- slaves.b {
- pcm "digital_hw"
- channels 2
- }
- slaves.c {
- pcm "analog_hw"
- channels 2
- }
- bindings.0.slave a
- bindings.0.channel 0
- bindings.1.slave a
- bindings.1.channel 1
- bindings.2.slave b
- bindings.2.channel 0
- bindings.3.slave b
- bindings.3.channel 1
- bindings.4.slave c
- bindings.4.channel 0
- bindings.5.slave c
- bindings.5.channel 1
-}
-
-pcm.hdmi_hw {
- type hw
- card 1
- device 3
- channels 2
-}
-
-pcm.hdmi_formatted {
- type plug
- slave {
- pcm hdmi_hw
- rate 48000
- channels 2
- }
-}
-
-pcm.hdmi_complete {
- type softvol
- slave.pcm hdmi_formatted
- control.name hdmi_volume
- control.card 1
-}
-
-pcm.digital_hw {
- type hw
- card 0
- device 1
- channels 2
-}
-
-pcm.analog_hw {
- type hw
- card 0
- device 0
- channels 2
-}