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 -}