Merge branch 'master' of github.com:OpenELEC/OpenELEC.tv into openelec-3.0

This commit is contained in:
Stephan Raue 2013-02-24 23:38:54 +01:00
commit 3f3e198c9b
34 changed files with 1350 additions and 954 deletions

View File

@ -1,14 +1,9 @@
3.0.3 3.0.2
new addon settings: added addon settings
enable HW PID filter (enabled for RPi by default) enable HW PID filter (enabled for RPi by default)
enable IR receiver enable IR receiver
allow sharing local tuner over network allow sharing local tuner over network
use network tuners 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 sundtek's binaries are downloaded on first run
automatically download new version of the binaries if available automatically download new version of the binaries if available
added preload library to .profile (to run mediaclient, w_scan, ... from console) added preload library to .profile (to run mediaclient, w_scan, ... from console)

View File

@ -1,9 +1,6 @@
# #
# sundtek.conf # 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) # enable HW PID filter (default on for RPi)
use_hwpidfilter=off use_hwpidfilter=off

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -18,9 +18,9 @@
# http://www.gnu.org/copyleft/gpl.html # http://www.gnu.org/copyleft/gpl.html
################################################################################ ################################################################################
PKG_NAME="sundtek" PKG_NAME="sundtek-mediatv"
PKG_VERSION="3.0" PKG_VERSION="3.0"
PKG_REV="3" PKG_REV="2"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="nonfree" PKG_LICENSE="nonfree"
PKG_SITE="http://support.sundtek.com/" PKG_SITE="http://support.sundtek.com/"

View File

@ -22,7 +22,7 @@
. /etc/profile . /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 ###" logger -t Sundtek "### Sundtek manual start ###"
. $ADDON_DIR/bin/userspace-driver.sh . $ADDON_DIR/bin/userspace-driver.sh

View File

@ -22,7 +22,7 @@
. /etc/profile . /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 export LD_PRELOAD=$ADDON_DIR/lib/libmediaclient.so

View File

@ -32,10 +32,9 @@ net_tuner_num_fix() {
echo $num echo $num
} }
ADDON_DIR="$HOME/.xbmc/addons/driver.dvb.sundtek" ADDON_DIR="$HOME/.xbmc/addons/driver.dvb.sundtek-mediatv"
ADDON_HOME="$HOME/.xbmc/userdata/addon_data/driver.dvb.sundtek" ADDON_HOME="$HOME/.xbmc/userdata/addon_data/driver.dvb.sundtek-mediatv"
ADDON_SETTINGS="$ADDON_HOME/settings.xml" ADDON_SETTINGS="$ADDON_HOME/settings.xml"
SUNDTEK_READY="/var/run/sundtek.ready"
mkdir -p $ADDON_HOME mkdir -p $ADDON_HOME
@ -45,9 +44,11 @@ else
# in case of missing entries in addon home's sundtek.conf # in case of missing entries in addon home's sundtek.conf
entry_set="$(grep use_hwpidfilter $ADDON_HOME/sundtek.conf 2>/dev/null)" entry_set="$(grep use_hwpidfilter $ADDON_HOME/sundtek.conf 2>/dev/null)"
if [ -z "$entry_set" ]; then 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=.*|# 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|\(^device_attach=.*\)|\1\n\n# enable HW PID filter\nuse_hwpidfilter=off\n|g' $ADDON_HOME/sundtek.conf
sed -i 's|^#first_adapter=.*|first_adapter=0|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
fi fi
@ -74,6 +75,10 @@ if [ "$AUTO_UPDATE" = "true" -a -f $ADDON_DIR/bin/mediasrv ]; then
fi fi
if [ ! -f $ADDON_DIR/bin/mediasrv ]; then 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 ###" logger -t Sundtek "### Downloading installer ###"
cd $ADDON_DIR cd $ADDON_DIR
mkdir -p bin lib tmp mkdir -p bin lib tmp
@ -90,7 +95,7 @@ if [ ! -f $ADDON_DIR/bin/mediasrv ]; then
# enable HW PID filter on RPi by default # 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_DIR/config/sundtek.conf
sed -i 's|^use_hwpidfilter=.*|use_hwpidfilter=on|g' $ADDON_HOME/sundtek.conf sed -i 's|^use_hwpidfilter=.*|use_hwpidfilter=on|g' $ADDON_HOME/sundtek.conf
sed -i 's|.*id="ENABLE_HW_PID_FILTER" value=.*|<setting id="ENABLE_HW_PID_FILTER" value="true" />|' $ADDON_SETTINGS sed -i 's|.*id="ENABLE_HW_PID_FILTER".*|<setting id="ENABLE_HW_PID_FILTER" value="true" />|' $ADDON_SETTINGS
else else
logger -t Sundtek "### Unsupported architecture ###" logger -t Sundtek "### Unsupported architecture ###"
cd .. cd ..
@ -124,15 +129,18 @@ if [ ! -f $ADDON_HOME/driver-version.txt ]; then
cp $ADDON_DIR/driver-version.txt $ADDON_HOME/ cp $ADDON_DIR/driver-version.txt $ADDON_HOME/
fi fi
# enable to install same addon version again # enable to install same addon package version again
rm -f /storage/.xbmc/addons/packages/driver.dvb.sundtek-* rm -f /storage/.xbmc/addons/packages/driver.dvb.sundtek*
# add alias for /opt/bin/mediaclient # add alias for /opt/bin/mediaclient
alias_set="$(grep libmediaclient.so /storage/.profile 2>/dev/null)" alias_set="$(grep libmediaclient.so /storage/.profile 2>/dev/null)"
if [ -z "$alias_set" ]; then if [ -z "$alias_set" ]; then
echo "" >>/storage/.profile 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 echo "" >>/storage/.profile
else
# fix name
sed -i 's|/driver.dvb.sundtek/|/driver.dvb.sundtek-mediatv/|g' /storage/.profile
fi fi
export LD_PRELOAD=$ADDON_DIR/lib/libmediaclient.so export LD_PRELOAD=$ADDON_DIR/lib/libmediaclient.so
@ -160,7 +168,6 @@ fi
if [ -z "$(pidof mediasrv)" ]; then if [ -z "$(pidof mediasrv)" ]; then
rm -f /var/log/mediasrv.log rm -f /var/log/mediasrv.log
rm -f /var/log/mediaclient.log rm -f /var/log/mediaclient.log
rm -f $SUNDTEK_READY
SUNDTEK_CONF_TMP=/tmp/sundtek.conf SUNDTEK_CONF_TMP=/tmp/sundtek.conf
cp $ADDON_HOME/sundtek.conf $SUNDTEK_CONF_TMP 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 cp $SUNDTEK_CONF_TMP $ADDON_HOME/sundtek.conf
fi fi
#rm "$SUNDTEK_CONF_TMP"
mediasrv --wait-for-devices -p $ADDON_DIR/bin -c $ADDON_HOME/sundtek.conf -d mediasrv --wait-for-devices -p $ADDON_DIR/bin -c $ADDON_HOME/sundtek.conf -d
# wait for device to get attached or connected # wait few seconds
for i in $(seq 1 240); do [ -z "$SETTLE_TIME" ] && SETTLE_TIME=0
if [ -f $SUNDTEK_READY ]; then SETTLE_TIME=$(( $SETTLE_TIME *1 ))
rm -f $SUNDTEK_READY if [ $SETTLE_TIME -gt 0 ]; then
logger -t Sundtek "### Sundtek ready ###" logger -t Sundtek "### Settle for $SETTLE_TIME sec ###"
sleep $SETTLE_TIME
if [ -n $SETTLE_TIME -a $SETTLE_TIME -gt 0 ]; then fi
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
if [ "$ANALOG_TV" = "true" ]; then if [ "$ANALOG_TV" = "true" ]; then
logger -t Sundtek "### Switching to analog TV mode ###" logger -t Sundtek "### Switching to analog TV mode ###"
@ -292,3 +285,5 @@ if [ -z "$(pidof mediasrv)" ]; then
fi fi
)& )&
fi fi
logger -t Sundtek "### Sundtek ready ###"

View File

@ -3,13 +3,13 @@
<category label="1000" > <category label="1000" >
<setting label="" type="lsep" /> <setting label="" type="lsep" />
<setting type="sep" /> <setting type="sep" />
<setting id="AUTO_UPDATE" type="bool" label="1011" default="false" /> <setting id="AUTO_UPDATE" type="bool" label="1011" default="false" />
<setting id="ANALOG_TV" type="bool" label="1012" default="false" enable="false" /> <setting id="ANALOG_TV" type="bool" label="1012" default="false" enable="false" />
<setting id="SETTLE_TIME" type="number" label="1014" default="0" /> <setting id="SETTLE_TIME" type="number" label="1014" default="0" />
<setting id="RUN_USER_SCRIPT" type="bool" label="1015" default="false" /> <setting id="RUN_USER_SCRIPT" type="bool" label="1015" default="false" />
<setting id="ENABLE_HW_PID_FILTER" type="bool" label="1030" default="false" /> <setting id="ENABLE_HW_PID_FILTER" type="bool" label="1030" default="false" />
<setting id="ENABLE_IR_RECEIVER" type="bool" label="1035" default="false" /> <setting id="ENABLE_IR_RECEIVER" type="bool" label="1035" default="false" />
<setting id="LOWEST_ADAPTER_NUM" type="number" label="1040" default="0" /> <setting id="LOWEST_ADAPTER_NUM" type="number" label="1040" default="0" />
</category> </category>
<category label="2000" > <category label="2000" >
<setting label="" type="lsep" /> <setting label="" type="lsep" />

View File

@ -23,22 +23,22 @@
. /etc/profile . /etc/profile
LOCKDIR="/var/lock/" LOCKDIR="/var/lock/"
LOCKFILE="sundtek" LOCKFILE="$LOCKDIR/sundtek-mediatv"
case "$1" in case "$1" in
hibernate|suspend) hibernate|suspend)
if [ -n "$(pidof mediasrv)" ]; then if [ -n "$(pidof mediasrv)" ]; then
progress "Shutting down Sundtek DVB driver for suspending..." progress "Shutting down Sundtek DVB driver for suspending..."
mkdir -p "$LOCKDIR" mkdir -p "$LOCKDIR"
touch "$LOCKDIR/$LOCKFILE" touch "$LOCKFILE"
mediaclient --shutdown mediaclient --shutdown
fi fi
;; ;;
thaw|resume) thaw|resume)
if [ -f "$LOCKDIR/$LOCKFILE" ]; then if [ -f "$LOCKFILE" ]; then
# driver started within Tvheadend/VDR # driver started within Tvheadend/VDR
rm -rf "$LOCKDIR/$LOCKFILE" rm -f "$LOCKFILE"
fi fi
;; ;;

View File

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

View File

@ -1,3 +1,6 @@
3.0.4
- update to transmission-2.77
3.0.3 3.0.3
- update to transmission-2.76 - update to transmission-2.76
- update libevent to libevent-2.0.21-stable - update libevent to libevent-2.0.21-stable

View File

@ -19,8 +19,8 @@
################################################################################ ################################################################################
PKG_NAME="transmission" PKG_NAME="transmission"
PKG_VERSION="2.76" PKG_VERSION="2.77"
PKG_REV="3" PKG_REV="4"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="OSS" PKG_LICENSE="OSS"
PKG_SITE="http://www.transmissionbt.com/" PKG_SITE="http://www.transmissionbt.com/"

View File

@ -1,3 +1,6 @@
3.0.5
- update to TVHeadend 3.3.485
3.0.4 3.0.4
- update to TVHeadend 3.3.403 - update to TVHeadend 3.3.403

View File

@ -19,8 +19,8 @@
################################################################################ ################################################################################
PKG_NAME="tvheadend" PKG_NAME="tvheadend"
PKG_VERSION="3.3.403" PKG_VERSION="3.3.485"
PKG_REV="4" PKG_REV="5"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"
PKG_SITE="http://www.lonelycoder.com/hts/tvheadend_overview.html" PKG_SITE="http://www.lonelycoder.com/hts/tvheadend_overview.html"

View File

@ -1,549 +0,0 @@
From d33a276284356e974dcf14e6c86b74064fb0715f Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
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<int> &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<CExclusiveLock> 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 <fernetmenta@online.de>
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<CExclusiveLock> 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 <fernetmenta@online.de>
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<int> 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 <fernetmenta@online.de>
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<int> &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<int> &scalingMethods);
virtual void GetAudioCapabilities(std::vector<int> &audioCaps);
virtual void GetSubtitleCapabilities(std::vector<int> &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

View File

@ -1,75 +0,0 @@
From bf4d77aeb9ff7c198914031ec0d8268dae0c5973 Mon Sep 17 00:00:00 2001
From: unknown <fernetmenta@online.de>
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

View File

@ -6,10 +6,10 @@ diff -Naur a/xbmc/filesystem/CurlFile.cpp b/xbmc/filesystem/CurlFile.cpp
bool CFileCurl::IsInternet(bool checkDNS /* = true */) bool CFileCurl::IsInternet(bool checkDNS /* = true */)
{ {
- CStdString strURL = "http://www.google.com"; - CStdString strURL = "http://www.google.com";
+ CStdString strURL = "http://releases.openelec.tv"; + CStdString strURL = "http://online.openelec.tv";
if (!checkDNS) if (!checkDNS)
- strURL = "http://74.125.19.103"; // www.google.com ip - 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); bool found = Exists(strURL);
Close(); Close();

View File

@ -0,0 +1,23 @@
From 65a8eb83549ef092f6f192c944befa6f762c885d Mon Sep 17 00:00:00 2001
From: ronie <ronie@poedel.net>
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 @@
<?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.addon" version="12.0.0" provider-name="Team XBMC">
+<addon id="xbmc.addon" version="12.1.0" provider-name="Team XBMC">
<backwards-compatibility abi="12.0"/>
<requires>
<import addon="xbmc.core" version="0.1.0"/>
--
1.7.10

View File

@ -0,0 +1,48 @@
From dc648b78c4c571cc0a5d3df3e7b64c21c7d0901e Mon Sep 17 00:00:00 2001
From: fritsch <peter.fruehberger@gmail.com>
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

View File

@ -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;

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -41,6 +41,7 @@ if [ $# -gt 0 ] ; then
intel_reg_write 0x70180 0xDA004400 intel_reg_write 0x70180 0xDA004400
# set new mode # set new mode
xrandr --output $OUTPUT --set "Broadcast RGB" "Full" xrandr --output $OUTPUT --set "Broadcast RGB" "Full"
intel_reg_write 0x70180 0xDA004400
fi fi
else else
echo "Usage: $0 limited | full" echo "Usage: $0 limited | full"

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<advancedsettings>
<!-- audio workaround for fusion -->
<audiooutput>
<dtshdpassthrough>false</dtshdpassthrough>
<multichannellpcm>false</multichannellpcm>
<passthroughaac>false</passthroughaac>
<stereoupmix>false</stereoupmix>
<truehdpassthrough>false</truehdpassthrough>
</audiooutput>
</advancedsettings>

View File

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

View File

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

View File

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