xbmc: update to xbmc-12.1.2

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2013-04-08 23:40:06 +02:00
parent 0afe383b7c
commit 25bd3d6c1e
56 changed files with 3 additions and 2244 deletions

View File

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="xbmc-theme-Confluence"
PKG_VERSION="12.1"
PKG_VERSION="12.1.2"
if [ "$XBMC" = "master" ]; then
PKG_VERSION="8ad691a"
fi

View File

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="xbmc"
PKG_VERSION="12.1"
PKG_VERSION="12.1.2"
if [ "$XBMC" = "master" ]; then
PKG_VERSION="8ad691a"
fi

View File

@ -1,91 +0,0 @@
From 5016973c68567e0691c9dc6c14d78de9e7d4558c Mon Sep 17 00:00:00 2001
From: popcornmix <popcornmix@gmail.com>
Date: Fri, 25 Jan 2013 23:00:13 +0000
Subject: [PATCH] [rbp] Add support for new video codecs Latest firmware has a
start_x.elf with support for additional codecs. These are
MJPEG, VP6, VP8 and Ogg Theora. They are software GPU
accelerated and should be good for SD resolutions. This
update should be harmless with firmware that doesn't
support the new codecs - they will fail to open and behave
as before.
---
xbmc/cores/omxplayer/OMXVideo.cpp | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/xbmc/cores/omxplayer/OMXVideo.cpp b/xbmc/cores/omxplayer/OMXVideo.cpp
index 9215fd9..45e10fe 100644
--- a/xbmc/cores/omxplayer/OMXVideo.cpp
+++ b/xbmc/cores/omxplayer/OMXVideo.cpp
@@ -69,7 +69,10 @@
#define OMX_MPEG2V_DECODER OMX_VIDEO_DECODER
#define OMX_VC1_DECODER OMX_VIDEO_DECODER
#define OMX_WMV3_DECODER OMX_VIDEO_DECODER
+#define OMX_VP6_DECODER OMX_VIDEO_DECODER
#define OMX_VP8_DECODER OMX_VIDEO_DECODER
+#define OMX_THEORA_DECODER OMX_VIDEO_DECODER
+#define OMX_MJPEG_DECODER OMX_VIDEO_DECODER
#define MAX_TEXT_LENGTH 1024
@@ -145,6 +148,7 @@ bool COMXVideo::NaluFormatStartCodes(enum CodecID codec, uint8_t *in_extradata,
bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, bool deinterlace, bool hdmi_clock_sync)
{
+ bool vflip = false;
Close();
OMX_ERRORTYPE omx_err = OMX_ErrorNone;
@@ -248,6 +252,18 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, bool deinterlace, b
m_codingType = OMX_VIDEO_CodingMPEG4;
m_video_codec_name = "omx-h263";
break;
+ case CODEC_ID_VP6:
+ // this form is encoded upside down
+ vflip = true;
+ // fall through
+ case CODEC_ID_VP6F:
+ case CODEC_ID_VP6A:
+ // (role name) video_decoder.vp6
+ // VP6
+ decoder_name = OMX_VP6_DECODER;
+ m_codingType = OMX_VIDEO_CodingVP6;
+ m_video_codec_name = "omx-vp6";
+ break;
case CODEC_ID_VP8:
// (role name) video_decoder.vp8
// VP8
@@ -255,6 +271,21 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, bool deinterlace, b
m_codingType = OMX_VIDEO_CodingVP8;
m_video_codec_name = "omx-vp8";
break;
+ case CODEC_ID_THEORA:
+ // (role name) video_decoder.theora
+ // theora
+ decoder_name = OMX_THEORA_DECODER;
+ m_codingType = OMX_VIDEO_CodingTheora;
+ m_video_codec_name = "omx-theora";
+ break;
+ case CODEC_ID_MJPEG:
+ case CODEC_ID_MJPEGB:
+ // (role name) video_decoder.mjpg
+ // mjpg
+ decoder_name = OMX_MJPEG_DECODER;
+ m_codingType = OMX_VIDEO_CodingMJPEG;
+ m_video_codec_name = "omx-mjpeg";
+ break;
case CODEC_ID_VC1:
case CODEC_ID_WMV3:
// (role name) video_decoder.vc1
@@ -594,6 +625,8 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, bool deinterlace, b
configDisplay.transform = OMX_DISPLAY_ROT0;
break;
}
+ if (vflip)
+ configDisplay.transform = OMX_DISPLAY_MIRROR_ROT180;
omx_err = m_omx_render.SetConfig(OMX_IndexConfigDisplayRegion, &configDisplay);
if(omx_err != OMX_ErrorNone)
--
1.7.10

View File

@ -1,26 +0,0 @@
From 2c915ea56abd68cf2310eb9d01936d19a2f118ab Mon Sep 17 00:00:00 2001
From: davilla <davilla@4pi.com>
Date: Tue, 19 Mar 2013 13:41:53 -0400
Subject: [PATCH] changed, assert(0) is nasty, this could just be a bad audio
packet
---
xbmc/cores/dvdplayer/DVDPlayerAudio.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp
index 03ba5ea..e075cd6 100644
--- a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp
@@ -284,7 +284,7 @@ int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe, bool bDropPacket)
CLog::Log(LOGERROR, "CDVDPlayerAudio:DecodeFrame - Codec tried to consume more data than available. Potential memory corruption");
m_decode.Release();
m_pAudioCodec->Reset();
- assert(0);
+ return DECODE_FLAG_ERROR;
}
m_decode.data += len;
--
1.8.1.5

View File

@ -1,25 +0,0 @@
From befdcfad8d2b14c9d935c3662a56853d617f884d Mon Sep 17 00:00:00 2001
From: Voyager1 <voyager@xbmc.org>
Date: Sat, 23 Mar 2013 07:19:46 +0100
Subject: [PATCH] [dvdplayer] fix deadlock when trying to go to disc menu
---
xbmc/cores/dvdplayer/DVDPlayer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 3d2ca03..22c89dc 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -3511,7 +3511,7 @@ bool CDVDPlayer::OnAction(const CAction &action)
pMenus->OnMenu();
// send a message to everyone that we've gone to the menu
CGUIMessage msg(GUI_MSG_VIDEO_MENU_STARTED, 0, 0);
- g_windowManager.SendMessage(msg);
+ g_windowManager.SendThreadMessage(msg);
return true;
}
break;
--
1.8.1.5

View File

@ -1,144 +0,0 @@
From f2faaa846e03cbcc1ba11f09baad690c792035c5 Mon Sep 17 00:00:00 2001
From: fritsch <Peter.Fruehberger@gmail.com>
Date: Thu, 28 Feb 2013 00:17:03 +0100
Subject: [PATCH] AE: Revisit Device Opening. Try to set periodSize of 100 ms
and BufferSize of 800 ms
---
xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp | 98 ++++++++++++++++-----------
1 file changed, 59 insertions(+), 39 deletions(-)
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
index fe40d17..821bd2e 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
@@ -38,7 +38,6 @@
#endif
#define ALSA_OPTIONS (SND_PCM_NONBLOCK | SND_PCM_NO_AUTO_FORMAT | SND_PCM_NO_AUTO_CHANNELS | SND_PCM_NO_AUTO_RESAMPLE)
-#define ALSA_PERIODS 16
#define ALSA_MAX_CHANNELS 16
static enum AEChannel ALSAChannelMap[ALSA_MAX_CHANNELS + 1] = {
@@ -328,59 +327,80 @@ bool CAESinkALSA::InitializeHW(AEAudioFormat &format)
}
}
- unsigned int periods;
-
snd_pcm_uframes_t periodSize, bufferSize;
snd_pcm_hw_params_get_buffer_size_max(hw_params, &bufferSize);
+ snd_pcm_hw_params_get_period_size_max(hw_params, &periodSize, NULL);
+
+ /*
+ We want to make sure, that we have approx 500 to 800 ms Buffer with
+ a periodSize of approx 100 ms.
+ It is calced:
+ periodSize = sampleRate / 10
+ buffersize = periodSize * 1 frame * 8.
+ */
+ periodSize = std::min(periodSize, (snd_pcm_uframes_t) sampleRate / 10);
+ bufferSize = std::min(bufferSize, (snd_pcm_uframes_t) periodSize * 8);
+
+ /*
+ According to upstream we should set buffer size first - so make sure it is always at least
+ double of period size to not get underruns
+ */
+ periodSize = std::min(periodSize, bufferSize / 2);
- bufferSize = std::min(bufferSize, (snd_pcm_uframes_t)8192);
- periodSize = bufferSize / ALSA_PERIODS;
- periods = ALSA_PERIODS;
-
- CLog::Log(LOGDEBUG, "CAESinkALSA::InitializeHW - Request: periodSize %lu, periods %u, bufferSize %lu", periodSize, periods, bufferSize);
+ CLog::Log(LOGDEBUG, "CAESinkALSA::InitializeHW - Request: periodSize %lu, bufferSize %lu", periodSize, bufferSize);
- /* work on a copy of the hw params */
snd_pcm_hw_params_t *hw_params_copy;
snd_pcm_hw_params_alloca(&hw_params_copy);
-
- /* try to set the buffer size then the period size */
- snd_pcm_hw_params_copy(hw_params_copy, hw_params);
- snd_pcm_hw_params_set_buffer_size_near(m_pcm, hw_params_copy, &bufferSize);
- snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, NULL);
- snd_pcm_hw_params_set_periods_near (m_pcm, hw_params_copy, &periods , NULL);
- if (snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
+ snd_pcm_hw_params_copy(hw_params_copy, hw_params); // copy what we have and is already working
+
+ // first trying bufferSize, PeriodSize
+ // for more info see here:
+ // http://mailman.alsa-project.org/pipermail/alsa-devel/2009-September/021069.html
+ // the last three tries are done as within pulseaudio
+
+ // backup periodSize and bufferSize first. Restore them after every failed try
+ snd_pcm_uframes_t periodSizeTemp, bufferSizeTemp;
+ periodSizeTemp = periodSize;
+ bufferSizeTemp = bufferSize;
+ if (snd_pcm_hw_params_set_buffer_size_near(m_pcm, hw_params_copy, &bufferSize) != 0
+ || snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, NULL) != 0
+ || snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
{
- /* try to set the period size then the buffer size */
- snd_pcm_hw_params_copy(hw_params_copy, hw_params);
- snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, NULL);
- snd_pcm_hw_params_set_buffer_size_near(m_pcm, hw_params_copy, &bufferSize);
- snd_pcm_hw_params_set_periods_near (m_pcm, hw_params_copy, &periods , NULL);
- if (snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
+ bufferSize = bufferSizeTemp;
+ periodSize = periodSizeTemp;
+ // retry with PeriodSize, bufferSize
+ snd_pcm_hw_params_copy(hw_params_copy, hw_params); // restore working copy
+ if (snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, NULL) != 0
+ || snd_pcm_hw_params_set_buffer_size_near(m_pcm, hw_params_copy, &bufferSize) != 0
+ || snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
{
- /* try to just set the buffer size */
- snd_pcm_hw_params_copy(hw_params_copy, hw_params);
- snd_pcm_hw_params_set_buffer_size_near(m_pcm, hw_params_copy, &bufferSize);
- snd_pcm_hw_params_set_periods_near (m_pcm, hw_params_copy, &periods , NULL);
- if (snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
+ // try only periodSize
+ periodSize = periodSizeTemp;
+ snd_pcm_hw_params_copy(hw_params_copy, hw_params); // restore working copy
+ if(snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, NULL) != 0
+ || snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
{
- /* try to just set the period size */
- snd_pcm_hw_params_copy(hw_params_copy, hw_params);
- snd_pcm_hw_params_set_period_size_near(m_pcm, hw_params_copy, &periodSize, NULL);
- snd_pcm_hw_params_set_periods_near (m_pcm, hw_params_copy, &periods , NULL);
- if (snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
+ // try only BufferSize
+ bufferSize = bufferSizeTemp;
+ snd_pcm_hw_params_copy(hw_params_copy, hw_params); // restory working copy
+ if (snd_pcm_hw_params_set_buffer_size_near(m_pcm, hw_params_copy, &bufferSize) != 0
+ || snd_pcm_hw_params(m_pcm, hw_params_copy) != 0)
{
- CLog::Log(LOGERROR, "CAESinkALSA::InitializeHW - Failed to set the parameters");
- return false;
+ // set default that Alsa would choose
+ CLog::Log(LOGWARNING, "CAESinkAlsa::IntializeHW - Using default alsa values - set failed");
+ if (snd_pcm_hw_params(m_pcm, hw_params) != 0)
+ {
+ CLog::Log(LOGDEBUG, "CAESinkALSA::InitializeHW - Could not init a valid sink");
+ return false;
+ }
}
}
+ // reread values when alsa default was kept
+ snd_pcm_get_params(m_pcm, &bufferSize, &periodSize);
}
}
-
- snd_pcm_hw_params_get_period_size(hw_params_copy, &periodSize, NULL);
- snd_pcm_hw_params_get_buffer_size(hw_params_copy, &bufferSize);
-
- CLog::Log(LOGDEBUG, "CAESinkALSA::InitializeHW - Got: periodSize %lu, periods %u, bufferSize %lu", periodSize, periods, bufferSize);
+ CLog::Log(LOGDEBUG, "CAESinkALSA::InitializeHW - Got: periodSize %lu, bufferSize %lu", periodSize, bufferSize);
/* set the format parameters */
format.m_sampleRate = sampleRate;
--
1.7.10

View File

@ -1,76 +0,0 @@
From e1374217a66d1324f3482f6567448f0bc7ef2946 Mon Sep 17 00:00:00 2001
From: spiff <spiff@xbmc.org>
Date: Thu, 21 Mar 2013 14:40:52 +0100
Subject: [PATCH] fixed: prevent infinite loop in add-on dependency checks
---
xbmc/addons/AddonInstaller.cpp | 21 ++++++++++++++-------
xbmc/addons/AddonInstaller.h | 10 ++++++++++
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/xbmc/addons/AddonInstaller.cpp b/xbmc/addons/AddonInstaller.cpp
index b5ba7a0..3e655bb 100644
--- a/xbmc/addons/AddonInstaller.cpp
+++ b/xbmc/addons/AddonInstaller.cpp
@@ -313,6 +313,14 @@ void CAddonInstaller::InstallFromXBMCRepo(const set<CStdString> &addonIDs)
bool CAddonInstaller::CheckDependencies(const AddonPtr &addon)
{
+ std::vector<std::string> preDeps;
+ preDeps.push_back(addon->ID());
+ return CheckDependencies(addon, preDeps);
+}
+
+bool CAddonInstaller::CheckDependencies(const AddonPtr &addon,
+ std::vector<std::string>& preDeps)
+{
if (!addon.get())
return true; // a NULL addon has no dependencies
ADDONDEPS deps = addon->GetDeps();
@@ -333,16 +341,15 @@ bool CAddonInstaller::CheckDependencies(const AddonPtr &addon)
return false;
}
}
- // prevent infinite loops
- if (dep && dep->ID() == addon->ID())
- {
- CLog::Log(LOGERROR, "Addon %s depends on itself, ignoring", addon->ID().c_str());
- return false;
- }
// at this point we have our dep, or the dep is optional (and we don't have it) so check that it's OK as well
// TODO: should we assume that installed deps are OK?
- if (dep && !CheckDependencies(dep))
+ if (dep &&
+ std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end() &&
+ !CheckDependencies(dep, preDeps))
+ {
return false;
+ }
+ preDeps.push_back(dep->ID());
}
return true;
}
diff --git a/xbmc/addons/AddonInstaller.h b/xbmc/addons/AddonInstaller.h
index b0ff2bd..5df69fb 100644
--- a/xbmc/addons/AddonInstaller.h
+++ b/xbmc/addons/AddonInstaller.h
@@ -122,6 +122,16 @@ class CAddonInstaller : public IJobCallback
*/
bool DoInstall(const ADDON::AddonPtr &addon, const CStdString &hash = "", bool update = false, const CStdString &referer = "", bool background = true);
+ /*! \brief Check whether dependencies of an addon exist or are installable.
+ Iterates through the addon's dependencies, checking they're installed or installable.
+ Each dependency must also satisfies CheckDependencies in turn.
+ \param addon the addon to check
+ \param preDeps previous dependencies encountered during recursion. aids in avoiding infinite recursion
+ \return true if dependencies are available, false otherwise.
+ */
+ bool CheckDependencies(const ADDON::AddonPtr &addon,
+ std::vector<std::string>& preDeps);
+
void PrunePackageCache();
int64_t EnumeratePackageFolder(std::map<CStdString,CFileItemList*>& result);
--
1.8.1.5

View File

@ -1,37 +0,0 @@
From b5458130ba00c15ef468d6180a21994bff3daf42 Mon Sep 17 00:00:00 2001
From: Voyager1 <voyager@xbmc.org>
Date: Sat, 23 Mar 2013 07:32:09 +0100
Subject: [PATCH] fixed: addoninstaller unguarded null pointer after
b0825b1a212849e52fca27409ea87e81591f7cf4
---
xbmc/addons/AddonInstaller.cpp | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/xbmc/addons/AddonInstaller.cpp b/xbmc/addons/AddonInstaller.cpp
index 3e655bb..276467a 100644
--- a/xbmc/addons/AddonInstaller.cpp
+++ b/xbmc/addons/AddonInstaller.cpp
@@ -343,13 +343,14 @@ bool CAddonInstaller::CheckDependencies(const AddonPtr &addon,
}
// at this point we have our dep, or the dep is optional (and we don't have it) so check that it's OK as well
// TODO: should we assume that installed deps are OK?
- if (dep &&
- std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end() &&
- !CheckDependencies(dep, preDeps))
+ if (dep)
{
- return false;
+ if (std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end() &&
+ !CheckDependencies(dep, preDeps))
+ return false;
+ else
+ preDeps.push_back(dep->ID());
}
- preDeps.push_back(dep->ID());
}
return true;
}
--
1.8.1.5

View File

@ -1,33 +0,0 @@
From cc39b66b38657787e99bf6369a77c993cd601c23 Mon Sep 17 00:00:00 2001
From: ulion <ulion2002@gmail.com>
Date: Sun, 24 Mar 2013 08:05:04 +0800
Subject: [PATCH] Only add to preDeps when it's not in there.
---
xbmc/addons/AddonInstaller.cpp | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/xbmc/addons/AddonInstaller.cpp b/xbmc/addons/AddonInstaller.cpp
index 276467a..631a01c 100644
--- a/xbmc/addons/AddonInstaller.cpp
+++ b/xbmc/addons/AddonInstaller.cpp
@@ -343,13 +343,11 @@ bool CAddonInstaller::CheckDependencies(const AddonPtr &addon,
}
// at this point we have our dep, or the dep is optional (and we don't have it) so check that it's OK as well
// TODO: should we assume that installed deps are OK?
- if (dep)
+ if (dep && std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end())
{
- if (std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end() &&
- !CheckDependencies(dep, preDeps))
+ if (!CheckDependencies(dep, preDeps))
return false;
- else
- preDeps.push_back(dep->ID());
+ preDeps.push_back(dep->ID());
}
}
return true;
--
1.8.1.5

View File

@ -1,46 +0,0 @@
From eb4ae32119a83716d7fb930381d2848c02383cea Mon Sep 17 00:00:00 2001
From: fritsch <peter.fruehberger@gmail.com>
Date: Wed, 6 Mar 2013 07:52:59 +0100
Subject: [PATCH] AE: Fix menu sounds by decreasing buffer(max 200 ms) and
periodSize(50 ms)
---
xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
index 821bd2e..21891a5 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
@@ -332,18 +332,19 @@ bool CAESinkALSA::InitializeHW(AEAudioFormat &format)
snd_pcm_hw_params_get_period_size_max(hw_params, &periodSize, NULL);
/*
- We want to make sure, that we have approx 500 to 800 ms Buffer with
- a periodSize of approx 100 ms.
- It is calced:
- periodSize = sampleRate / 10
- buffersize = periodSize * 1 frame * 8.
+ We want to make sure, that we have max 200 ms Buffer with
+ a periodSize of approx 50 ms. Choosing a higher bufferSize
+ will cause problems with menu sounds. Buffer will be increased
+ after those are fixed.
+ periodSize = sampleRate / 20
+ bufferSize = periodSize * 1 frame * 4.
*/
- periodSize = std::min(periodSize, (snd_pcm_uframes_t) sampleRate / 10);
- bufferSize = std::min(bufferSize, (snd_pcm_uframes_t) periodSize * 8);
+ periodSize = std::min(periodSize, (snd_pcm_uframes_t) sampleRate / 20);
+ bufferSize = std::min(bufferSize, (snd_pcm_uframes_t) periodSize * 4);
/*
- According to upstream we should set buffer size first - so make sure it is always at least
- double of period size to not get underruns
+ According to upstream we should set buffer size first - so make sure it is always at least
+ double of period size to not get underruns
*/
periodSize = std::min(periodSize, bufferSize / 2);
--
1.7.10

View File

@ -1,59 +0,0 @@
From 95ea48d4353516c59e70c962c4970da0bd511aac Mon Sep 17 00:00:00 2001
From: Anssi Hannula <anssi@xbmc.org>
Date: Mon, 11 Mar 2013 00:05:13 +0200
Subject: [PATCH 1/2] AE: ALSA: Try to get 200ms buffer even if we did not get
50ms periodsize
---
xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
index 332f305..b905ada 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
@@ -340,11 +340,9 @@ bool CAESinkALSA::InitializeHW(AEAudioFormat &format)
a periodSize of approx 50 ms. Choosing a higher bufferSize
will cause problems with menu sounds. Buffer will be increased
after those are fixed.
- periodSize = sampleRate / 20
- bufferSize = periodSize * 1 frame * 4.
*/
periodSize = std::min(periodSize, (snd_pcm_uframes_t) sampleRate / 20);
- bufferSize = std::min(bufferSize, (snd_pcm_uframes_t) periodSize * 4);
+ bufferSize = std::min(bufferSize, (snd_pcm_uframes_t) sampleRate / 5);
/*
According to upstream we should set buffer size first - so make sure it is always at least
--
1.7.10
From 39f2487881b6fa2d52c58f7b2452420efc711cd5 Mon Sep 17 00:00:00 2001
From: Anssi Hannula <anssi@xbmc.org>
Date: Mon, 11 Mar 2013 00:12:54 +0200
Subject: [PATCH 2/2] AE: ALSA: Try to get a minimum of 4 periods per buffer
---
xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
index b905ada..94f6b80 100644
--- a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
+++ b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
@@ -346,9 +346,9 @@ bool CAESinkALSA::InitializeHW(AEAudioFormat &format)
/*
According to upstream we should set buffer size first - so make sure it is always at least
- double of period size to not get underruns
+ 4x period size to not get underruns (some systems seem to have issues with only 2 periods)
*/
- periodSize = std::min(periodSize, bufferSize / 2);
+ periodSize = std::min(periodSize, bufferSize / 4);
CLog::Log(LOGDEBUG, "CAESinkALSA::InitializeHW - Request: periodSize %lu, bufferSize %lu", periodSize, bufferSize);
--
1.7.10

View File

@ -1,53 +0,0 @@
From 907f5086e76b0b6d0211c9bbd9da6c6fb54e891b Mon Sep 17 00:00:00 2001
From: Juan Font <juanfontalonso@gmail.com>
Date: Wed, 6 Mar 2013 09:50:15 +0100
Subject: [PATCH 1/2] Avoid fps detection when probing the format if we will
trust codec fps during playback.
---
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
index 7d4e35b..4b62d75 100644
--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
@@ -425,6 +425,9 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput)
// set the interrupt callback, appeared in libavformat 53.15.0
m_pFormatContext->interrupt_callback = int_cb;
+
+ // Avoid detecting framerate if advancedsettings.xml says so
+ m_pFormatContext->fps_probe_size = (!g_advancedSettings.m_videoFpsDetect) ? 0 : -1;
// analyse very short to speed up mjpeg playback start
if (iformat && (strcmp(iformat->name, "mjpeg") == 0) && m_ioContext->seekable == 0)
--
1.7.10
From e2966a346140fcd7a9742f17bfd7710bffbe1066 Mon Sep 17 00:00:00 2001
From: Juan Font <juanfontalonso@gmail.com>
Date: Wed, 6 Mar 2013 10:33:32 +0100
Subject: [PATCH 2/2] Improved code legibility.
---
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
index 4b62d75..e84290d 100644
--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
@@ -427,7 +427,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput)
m_pFormatContext->interrupt_callback = int_cb;
// Avoid detecting framerate if advancedsettings.xml says so
- m_pFormatContext->fps_probe_size = (!g_advancedSettings.m_videoFpsDetect) ? 0 : -1;
+ m_pFormatContext->fps_probe_size = (g_advancedSettings.m_videoFpsDetect == 0) ? 0 : -1;
// analyse very short to speed up mjpeg playback start
if (iformat && (strcmp(iformat->name, "mjpeg") == 0) && m_ioContext->seekable == 0)
--
1.7.10

View File

@ -1,27 +0,0 @@
From c0e50094715d41da30d0a08140e7fd1c149c453b Mon Sep 17 00:00:00 2001
From: fritsch <peter.fruehberger@gmail.com>
Date: Tue, 26 Mar 2013 23:17:51 +0100
Subject: [PATCH] AE: possible segfault after suspend / resume (m_sink might be
gone)
---
xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp b/xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp
index 6ec78c5..7aaecf5 100644
--- a/xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp
+++ b/xbmc/cores/AudioEngine/Engines/SoftAE/SoftAE.cpp
@@ -1536,7 +1536,8 @@ inline void CSoftAE::ProcessSuspend()
*/
if (!m_isSuspended && (!m_playingStreams.empty() || !m_playing_sounds.empty()))
{
- m_reOpen = !m_sink->SoftResume() || m_reOpen; // sink returns false if it requires reinit (worthless with current implementation)
+ // the sink might still be not initialized after Resume of real suspend
+ m_reOpen = m_sink && (!m_sink->SoftResume() || m_reOpen); // sink returns false if it requires reinit (worthless with current implementation)
m_sinkIsSuspended = false; //sink processing data
m_softSuspend = false; //break suspend loop (under some conditions)
CLog::Log(LOGDEBUG, "Resumed the Sink");
--
1.8.1.5

View File

@ -1,52 +0,0 @@
From f6a002b0971138a785d03a934ad623b690a8becc Mon Sep 17 00:00:00 2001
From: Memphiz <memphis@machzwo.de>
Date: Mon, 18 Mar 2013 22:30:19 +0100
Subject: [PATCH] [CA/AE] - make the devicelist change callback more robust -
should fix crashes during shutdown on some system constellations (where
removing the callback seems to also triggers the callback at the same time)
---
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAE.cpp | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAE.cpp b/xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAE.cpp
index 2c1d4bb..a9302ac 100644
--- a/xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAE.cpp
+++ b/xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAE.cpp
@@ -51,8 +51,11 @@ OSStatus deviceChangedCB( AudioObjectID inObjectID,
void* inClientData)
{
CCoreAudioAE *pEngine = (CCoreAudioAE *)inClientData;
- pEngine->AudioDevicesChanged();
- CLog::Log(LOGDEBUG, "CCoreAudioAE - audiodevicelist changed!");
+ if (pEngine->GetHAL())
+ {
+ pEngine->AudioDevicesChanged();
+ CLog::Log(LOGDEBUG, "CCoreAudioAE - audiodevicelist changed!");
+ }
return noErr;
}
@@ -102,8 +105,8 @@ void RegisterDeviceChangedCB(bool bRegister, void *ref){}
CCoreAudioAE::~CCoreAudioAE()
{
- RegisterDeviceChangedCB(false, this);
Shutdown();
+ RegisterDeviceChangedCB(false, this);
}
void CCoreAudioAE::Shutdown()
@@ -138,6 +141,9 @@ void CCoreAudioAE::Shutdown()
void CCoreAudioAE::AudioDevicesChanged()
{
+ if (!m_Initialized)
+ return;
+
// give CA a bit time to realise that maybe the
// default device might have changed now - else
// OpenCoreAudio might open the old default device
--
1.8.1.5

View File

@ -1,26 +0,0 @@
From 820b08c2520bbea89fb862c61f4dc5a6a63865df Mon Sep 17 00:00:00 2001
From: Memphiz <memphis@machzwo.de>
Date: Wed, 20 Mar 2013 22:23:48 +0100
Subject: [PATCH] [airplay] - fix the playtime - itunes is very picky about the
formatting here
---
xbmc/network/AirPlayServer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/network/AirPlayServer.cpp b/xbmc/network/AirPlayServer.cpp
index 5b64126..c4c4984 100644
--- a/xbmc/network/AirPlayServer.cpp
+++ b/xbmc/network/AirPlayServer.cpp
@@ -840,7 +840,7 @@ int CAirPlayServer::CTCPClient::ProcessRequest( CStdString& responseHeader,
if (g_application.m_pPlayer && g_application.m_pPlayer->GetTotalTime())
{
float position = ((float) g_application.m_pPlayer->GetTime()) / 1000;
- responseBody.Format("duration: %d\r\nposition: %f", g_application.m_pPlayer->GetTotalTime() / 1000, position);
+ responseBody.Format("duration: %.6f\r\nposition: %.6f\r\n", (float)g_application.m_pPlayer->GetTotalTime() / 1000, position);
}
else
{
--
1.8.1.5

View File

@ -1,25 +0,0 @@
From 0fb38d80aabd1112b377760c509855bf529fb95f Mon Sep 17 00:00:00 2001
From: Garrett Brown <garbearucla@gmail.com>
Date: Sun, 24 Mar 2013 23:57:49 -0700
Subject: [PATCH] Fixed: CAddon::HasSettings() was broken after a call to
CAddon::SaveSettings() on creation of user settings
---
xbmc/addons/Addon.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp
index 23f89b8..7315ab0 100644
--- a/xbmc/addons/Addon.cpp
+++ b/xbmc/addons/Addon.cpp
@@ -512,6 +512,7 @@ void CAddon::SaveSettings(void)
CXBMCTinyXML doc;
SettingsToXML(doc);
doc.SaveFile(m_userSettingsPath);
+ m_userSettingsLoaded = true;
CAddonMgr::Get().ReloadSettings(ID());//push the settings changes to the running addon instance
g_pythonParser.OnSettingsChanged(ID());
--
1.8.1.5

View File

@ -1,43 +0,0 @@
From 9db853e551f0380aac884fcb6c9564a725fcb966 Mon Sep 17 00:00:00 2001
From: arnova <arnova@void.org>
Date: Fri, 8 Mar 2013 06:34:02 +0100
Subject: [PATCH] fixed: We can only obtain the aspect & duration this way when
the Process() thread is running
---
xbmc/cores/dvdplayer/DVDPlayer.cpp | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 0cd2510..8128197 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -4024,11 +4024,22 @@ bool CDVDPlayer::GetStreamDetails(CStreamDetails &details)
{
if (m_pDemuxer)
{
- bool result=CDVDFileInfo::DemuxerToStreamDetails(m_pInputStream, m_pDemuxer, details);
+ bool result = CDVDFileInfo::DemuxerToStreamDetails(m_pInputStream, m_pDemuxer, details);
if (result && details.GetStreamCount(CStreamDetail::VIDEO) > 0) // this is more correct (dvds in particular)
{
- GetVideoAspectRatio(((CStreamDetailVideo*)details.GetNthStream(CStreamDetail::VIDEO,0))->m_fAspect);
- ((CStreamDetailVideo*)details.GetNthStream(CStreamDetail::VIDEO,0))->m_iDuration = GetTotalTime() / 1000;
+ /*
+ * We can only obtain the aspect & duration from dvdplayer when the Process() thread is running
+ * and UpdatePlayState() has been called at least once. In this case dvdplayer duration/AR will
+ * return 0 and we'll have to fallback to the (less accurate) info from the demuxer.
+ */
+ float aspect;
+ GetVideoAspectRatio(aspect);
+ if (aspect > 0.0f)
+ ((CStreamDetailVideo*)details.GetNthStream(CStreamDetail::VIDEO,0))->m_fAspect = aspect;
+
+ int64_t duration = GetTotalTime() / 1000;
+ if (duration > 0)
+ ((CStreamDetailVideo*)details.GetNthStream(CStreamDetail::VIDEO,0))->m_iDuration = duration;
}
return result;
}
--
1.8.1.5

View File

@ -1,39 +0,0 @@
From 63a6dadd40815eb07ba940a60d012a23ce9a5eb4 Mon Sep 17 00:00:00 2001
From: arnova <arnova@void.org>
Date: Fri, 29 Mar 2013 21:01:44 +0100
Subject: [PATCH] fixed: Some (live) streams no longer played since the Curl
seek fix (fixes #14224)
---
xbmc/filesystem/CurlFile.cpp | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/xbmc/filesystem/CurlFile.cpp b/xbmc/filesystem/CurlFile.cpp
index 2c5da25..456f5f0 100644
--- a/xbmc/filesystem/CurlFile.cpp
+++ b/xbmc/filesystem/CurlFile.cpp
@@ -291,14 +291,14 @@ bool CCurlFile::CReadState::Seek(int64_t pos)
void CCurlFile::CReadState::SetResume(void)
{
/*
- * Use RANGE method for resuming. We used to use RESUME_FROM_LARGE for this but some http servers
- * require us to always send the range request header. If we don't the server may provide different
- * content causing seeking to fail. Note that internally Curl will automatically handle this for FTP
- * so we don't need to worry about that here.
+ * Explicitly set RANGE header when filepos=0 as some http servers require us to always send the range
+ * request header. If we don't the server may provide different content causing seeking to fail.
+ * This only affects HTTP-like items, for FTP it's a null operation.
*/
- char str[21];
- sprintf(str, "%"PRId64"-", m_filePos);
- g_curlInterface.easy_setopt(m_easyHandle, CURLOPT_RANGE, str);
+ if (m_filePos == 0)
+ g_curlInterface.easy_setopt(m_easyHandle, CURLOPT_RANGE, "0-");
+
+ g_curlInterface.easy_setopt(m_easyHandle, CURLOPT_RESUME_FROM_LARGE, m_filePos);
}
long CCurlFile::CReadState::Connect(unsigned int size)
--
1.8.1.5

View File

@ -1,25 +0,0 @@
From 68cab251cbca58adaf7df698d8db11145ff0e27a Mon Sep 17 00:00:00 2001
From: ace20022 <ace20022@ymail.com>
Date: Sat, 16 Mar 2013 14:53:33 +0100
Subject: [PATCH] [ASF Tag] Fix parsing of the year tag, it's stored as string.
---
xbmc/music/tags/TagLoaderTagLib.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/music/tags/TagLoaderTagLib.cpp b/xbmc/music/tags/TagLoaderTagLib.cpp
index c6ac758..2f16d43 100644
--- a/xbmc/music/tags/TagLoaderTagLib.cpp
+++ b/xbmc/music/tags/TagLoaderTagLib.cpp
@@ -262,7 +262,7 @@ bool CTagLoaderTagLib::ParseASF(ASF::Tag *asf, EmbeddedArt *art, CMusicInfoTag&
else if (it->first == "WM/AlbumArtistSortOrder") {} // Known unsupported, supress warnings
else if (it->first == "WM/ArtistSortOrder") {} // Known unsupported, supress warnings
else if (it->first == "WM/Script") {} // Known unsupported, supress warnings
- else if (it->first == "WM/Year") tag.SetYear(it->second.front().toUInt());
+ else if (it->first == "WM/Year") tag.SetYear(atoi(it->second.front().toString().toCString(true)));
else if (it->first == "MusicBrainz/Artist Id") tag.SetMusicBrainzArtistID(it->second.front().toString().to8Bit(true));
else if (it->first == "MusicBrainz/Album Id") tag.SetMusicBrainzAlbumID(it->second.front().toString().to8Bit(true));
else if (it->first == "MusicBrainz/Album Artist Id") tag.SetMusicBrainzAlbumArtistID(it->second.front().toString().to8Bit(true));
--
1.8.1.5

View File

@ -1,27 +0,0 @@
From b06e994c4acbf39ba0013ed48cbd9fbde2b05bde Mon Sep 17 00:00:00 2001
From: ace20022 <ace20022@ymail.com>
Date: Sat, 16 Mar 2013 15:27:38 +0100
Subject: [PATCH] [ASF Tag] Fix parsing of the artist tag. More precisely: fall
back to the built in artist method if there's no "author" field in the tag.
---
xbmc/music/tags/TagLoaderTagLib.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/xbmc/music/tags/TagLoaderTagLib.cpp b/xbmc/music/tags/TagLoaderTagLib.cpp
index 2f16d43..6b88302 100644
--- a/xbmc/music/tags/TagLoaderTagLib.cpp
+++ b/xbmc/music/tags/TagLoaderTagLib.cpp
@@ -284,6 +284,9 @@ bool CTagLoaderTagLib::ParseASF(ASF::Tag *asf, EmbeddedArt *art, CMusicInfoTag&
else if (g_advancedSettings.m_logLevel == LOG_LEVEL_MAX)
CLog::Log(LOGDEBUG, "unrecognized ASF tag name: %s", it->first.toCString(true));
}
+ // artist may be specified in the ContentDescription block rather than using the 'Author' attribute.
+ if (tag.GetArtist().empty())
+ tag.SetArtist(asf->artist().toCString(true));
tag.SetLoaded(true);
return true;
}
--
1.8.1.5

View File

@ -1,26 +0,0 @@
From ccdba4e2a281970c4b5a2b81a85831f5bd8cf61d Mon Sep 17 00:00:00 2001
From: Alasdair Campbell <alcoheca@gmail.com>
Date: Tue, 2 Apr 2013 19:39:22 +0100
Subject: [PATCH] upnp: missing info for music videos, fixes #14239 thanks to
Pulfer
---
xbmc/network/upnp/UPnPServer.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/xbmc/network/upnp/UPnPServer.cpp b/xbmc/network/upnp/UPnPServer.cpp
index 0518d14..1b92f99 100644
--- a/xbmc/network/upnp/UPnPServer.cpp
+++ b/xbmc/network/upnp/UPnPServer.cpp
@@ -308,6 +308,8 @@ NPT_String CUPnPServer::BuildSafeResourceUri(const NPT_HttpUrl &rooturi,
if (params.GetMovieId() >= 0 )
db.GetMovieInfo((const char*)path, *item->GetVideoInfoTag(), params.GetMovieId());
+ if (params.GetMVideoId() >= 0 )
+ db.GetMusicVideoInfo((const char*)path, *item->GetVideoInfoTag(), params.GetMVideoId());
else if (params.GetEpisodeId() >= 0 )
db.GetEpisodeInfo((const char*)path, *item->GetVideoInfoTag(), params.GetEpisodeId());
else if (params.GetTvShowId() >= 0 )
--
1.8.1.5

View File

@ -1,40 +0,0 @@
From ec9129fe58614016d98af521471ff097171ae444 Mon Sep 17 00:00:00 2001
From: Alasdair Campbell <alcoheca@gmail.com>
Date: Tue, 2 Apr 2013 04:41:48 +0100
Subject: [PATCH] upnp: hide unplayable items in fiels view fixes #13526
---
xbmc/network/upnp/UPnPServer.cpp | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/xbmc/network/upnp/UPnPServer.cpp b/xbmc/network/upnp/UPnPServer.cpp
index 86f13eb..0518d14 100644
--- a/xbmc/network/upnp/UPnPServer.cpp
+++ b/xbmc/network/upnp/UPnPServer.cpp
@@ -13,6 +13,7 @@
#include "filesystem/VideoDatabaseDirectory.h"
#include "guilib/WindowIDs.h"
#include "music/tags/MusicInfoTag.h"
+#include "settings/Settings.h"
#include "settings/GUISettings.h"
#include "utils/log.h"
#include "utils/md5.h"
@@ -600,7 +601,14 @@ static NPT_String TranslateWMPObjectId(NPT_String id)
items.Sort(SORT_METHOD_LABEL, SortOrderAscending);
} else {
- CDirectory::GetDirectory((const char*)parent_id, items);
+ // this is the only way to hide unplayable items in the 'files'
+ // view as we cannot tell what context (eg music vs video) the
+ // request came from
+ string supported = g_settings.m_pictureExtensions + "|"
+ + g_settings.m_videoExtensions + "|"
+ + g_settings.m_musicExtensions + "|"
+ + g_settings.m_discStubExtensions;
+ CDirectory::GetDirectory((const char*)parent_id, items, supported);
DefaultSortItems(items);
}
--
1.8.1.5

View File

@ -1,31 +0,0 @@
From 87f4c493cab4f648ebd7ce4ee10dc6fc593f179f Mon Sep 17 00:00:00 2001
From: Alasdair Campbell <alcoheca@gmail.com>
Date: Tue, 2 Apr 2013 03:30:19 +0100
Subject: [PATCH] upnp: use a better way to retain original directory ordering,
fixes #14235
---
xbmc/filesystem/UPnPDirectory.cpp | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/xbmc/filesystem/UPnPDirectory.cpp b/xbmc/filesystem/UPnPDirectory.cpp
index 2a3c893..49c8449 100644
--- a/xbmc/filesystem/UPnPDirectory.cpp
+++ b/xbmc/filesystem/UPnPDirectory.cpp
@@ -349,7 +349,12 @@ bool CUPnPDirectory::GetResource(const CURL& path, CFileItem &item)
std::string content = GetContentMapping(max_string);
items.SetContent(content);
if (content == "unknown")
- items.AddSortMethod(SORT_METHOD_NONE, 551, LABEL_MASKS("%L", "%I", "%L", ""));
+ {
+ items.AddSortMethod(SORT_METHOD_UNSORTED, 571, LABEL_MASKS("%L", "%I", "%L", ""));
+ items.AddSortMethod(SORT_METHOD_LABEL_IGNORE_FOLDERS, 551, LABEL_MASKS("%L", "%I", "%L", ""));
+ items.AddSortMethod(SORT_METHOD_SIZE, 553, LABEL_MASKS("%L", "%I", "%L", "%I"));
+ items.AddSortMethod(SORT_METHOD_DATE, 552, LABEL_MASKS("%L", "%J", "%L", "%J"));
+ }
}
cleanup:
--
1.8.1.5

View File

@ -1,25 +0,0 @@
From 4e8a5a0dbc3f8bb7815d699475e2afa25cb1ca2e Mon Sep 17 00:00:00 2001
From: Alasdair Campbell <alcoheca@gmail.com>
Date: Wed, 3 Apr 2013 12:51:13 +0100
Subject: [PATCH] fix typo in ccdba4e
---
xbmc/network/upnp/UPnPServer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/network/upnp/UPnPServer.cpp b/xbmc/network/upnp/UPnPServer.cpp
index 1b92f99..bd618d8 100644
--- a/xbmc/network/upnp/UPnPServer.cpp
+++ b/xbmc/network/upnp/UPnPServer.cpp
@@ -308,7 +308,7 @@ NPT_String CUPnPServer::BuildSafeResourceUri(const NPT_HttpUrl &rooturi,
if (params.GetMovieId() >= 0 )
db.GetMovieInfo((const char*)path, *item->GetVideoInfoTag(), params.GetMovieId());
- if (params.GetMVideoId() >= 0 )
+ else if (params.GetMVideoId() >= 0 )
db.GetMusicVideoInfo((const char*)path, *item->GetVideoInfoTag(), params.GetMVideoId());
else if (params.GetEpisodeId() >= 0 )
db.GetEpisodeInfo((const char*)path, *item->GetVideoInfoTag(), params.GetEpisodeId());
--
1.8.1.5

View File

@ -1,30 +0,0 @@
From dda59f043e77a6cfbbd3a7378406134dad540e60 Mon Sep 17 00:00:00 2001
From: Joakim Plate <elupus@ecce.se>
Date: Mon, 11 Feb 2013 00:40:00 +0100
Subject: [PATCH] dvdplayer: don't use OpenDefaultStreams() if something else
dictate
This works for both dvd and bluray navigation
---
xbmc/cores/dvdplayer/DVDPlayer.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 7b8f50b..09b5db8 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -684,8 +684,9 @@ bool CDVDPlayer::OpenDemuxStream()
void CDVDPlayer::OpenDefaultStreams(bool reset)
{
- // bypass for DVDs. The DVD Navigator has already dictated which streams to open.
- if (m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
+ // if input stream dictate, we will open later
+ if(m_dvd.iSelectedAudioStream >= 0
+ || m_dvd.iSelectedSPUStream >= 0)
return;
SelectionStreams streams;
--
1.8.1.5

View File

@ -1,66 +0,0 @@
From bd49c32ec38b7ecd7bb43eb995c9ff632d18d3a1 Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Tue, 12 Mar 2013 21:10:37 +0100
Subject: [PATCH] dvdplayer: make HasVideo return true if a video stream was
opened since playback has started - fixes missing video info on channel
change
---
xbmc/cores/dvdplayer/DVDPlayer.cpp | 8 +++++---
xbmc/cores/dvdplayer/DVDPlayer.h | 2 ++
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 1758a98..be89406 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -412,6 +412,7 @@ void CSelectionStreams::Update(CDVDInputStream* input, CDVDDemux* demuxer)
m_offset_pts = 0.0;
m_playSpeed = DVD_PLAYSPEED_NORMAL;
m_caching = CACHESTATE_DONE;
+ m_HasVideo = false;
memset(&m_SpeedState, 0, sizeof(m_SpeedState));
@@ -511,6 +512,8 @@ bool CDVDPlayer::CloseFile()
m_Edl.Clear();
m_EdlAutoSkipMarkers.Clear();
+ m_HasVideo = false;
+
CLog::Log(LOGNOTICE, "DVDPlayer: finished waiting");
#if defined(HAS_VIDEO_PLAYBACK)
g_renderManager.UnInit();
@@ -2410,9 +2413,7 @@ bool CDVDPlayer::IsPaused() const
bool CDVDPlayer::HasVideo() const
{
- if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)) return true;
-
- return m_SelectionStreams.Count(STREAM_VIDEO) > 0 ? true : false;
+ return m_HasVideo;
}
bool CDVDPlayer::HasAudio() const
@@ -2924,6 +2925,7 @@ bool CDVDPlayer::OpenVideoStream(int iStream, int source, bool reset)
m_CurrentVideo.hint = hint;
m_CurrentVideo.stream = (void*)pStream;
m_CurrentVideo.started = false;
+ m_HasVideo = true;
/* we are potentially going to be waiting on this */
m_dvdPlayerVideo.SendMessage(new CDVDMsg(CDVDMsg::PLAYER_STARTED), 1);
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.h b/xbmc/cores/dvdplayer/DVDPlayer.h
index 715f748..e7e49f1 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.h
+++ b/xbmc/cores/dvdplayer/DVDPlayer.h
@@ -489,4 +489,6 @@ class CDVDPlayer : public IPlayer, public CThread, public IDVDPlayer
} m_EdlAutoSkipMarkers;
CPlayerOptions m_PlayerOptions;
+
+ bool m_HasVideo;
};
--
1.8.1.5

View File

@ -1,60 +0,0 @@
From cfb14c3c7400e2d9dbe2d452274339fa57557d9b Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Sat, 16 Mar 2013 10:03:51 +0100
Subject: [PATCH] dvdplayer: align HasAudio with HasVideo
---
xbmc/cores/dvdplayer/DVDPlayer.cpp | 5 ++++-
xbmc/cores/dvdplayer/DVDPlayer.h | 1 +
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index be89406..958cf3c 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -413,6 +413,7 @@ void CSelectionStreams::Update(CDVDInputStream* input, CDVDDemux* demuxer)
m_playSpeed = DVD_PLAYSPEED_NORMAL;
m_caching = CACHESTATE_DONE;
m_HasVideo = false;
+ m_HasAudio = false;
memset(&m_SpeedState, 0, sizeof(m_SpeedState));
@@ -513,6 +514,7 @@ bool CDVDPlayer::CloseFile()
m_EdlAutoSkipMarkers.Clear();
m_HasVideo = false;
+ m_HasAudio = false;
CLog::Log(LOGNOTICE, "DVDPlayer: finished waiting");
#if defined(HAS_VIDEO_PLAYBACK)
@@ -2418,7 +2420,7 @@ bool CDVDPlayer::HasVideo() const
bool CDVDPlayer::HasAudio() const
{
- return m_SelectionStreams.Count(STREAM_AUDIO) > 0 ? true : false;
+ return m_HasAudio;
}
bool CDVDPlayer::IsPassthrough() const
@@ -2853,6 +2855,7 @@ bool CDVDPlayer::OpenAudioStream(int iStream, int source, bool reset)
m_CurrentAudio.hint = hint;
m_CurrentAudio.stream = (void*)pStream;
m_CurrentAudio.started = false;
+ m_HasAudio = true;
/* we are potentially going to be waiting on this */
m_dvdPlayerAudio.SendMessage(new CDVDMsg(CDVDMsg::PLAYER_STARTED), 1);
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.h b/xbmc/cores/dvdplayer/DVDPlayer.h
index e7e49f1..fa6c99f 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.h
+++ b/xbmc/cores/dvdplayer/DVDPlayer.h
@@ -491,4 +491,5 @@ class CDVDPlayer : public IPlayer, public CThread, public IDVDPlayer
CPlayerOptions m_PlayerOptions;
bool m_HasVideo;
+ bool m_HasAudio;
};
--
1.8.1.5

View File

@ -1,37 +0,0 @@
From b2fc0508212023cdcd11d05d72ed9a4d4935a0d8 Mon Sep 17 00:00:00 2001
From: Joakim Plate <elupus@xbmc.org>
Date: Sun, 3 Feb 2013 16:32:27 +0100
Subject: [PATCH] dvdplayer: a disabled stream could be re-selected for bluray
and dvd
---
xbmc/cores/dvdplayer/DVDPlayer.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 44a50e9..84b126d 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -867,6 +867,9 @@ bool CDVDPlayer::IsBetterStream(CCurrentStream& current, CDemuxStream* stream)
if(m_PlayerOptions.video_only && current.type != STREAM_VIDEO)
return false;
+ if(stream->disabled)
+ return false;
+
if (m_pInputStream && ( m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)
|| m_pInputStream->IsStreamType(DVDSTREAM_TYPE_BLURAY) ) )
{
@@ -896,9 +899,6 @@ bool CDVDPlayer::IsBetterStream(CCurrentStream& current, CDemuxStream* stream)
&& stream->iId == current.id)
return false;
- if(stream->disabled)
- return false;
-
if(stream->type != current.type)
return false;
--
1.8.1.5

View File

@ -1,35 +0,0 @@
From a489fb5c8607153c0b136fc1e2afcd543f1b9e19 Mon Sep 17 00:00:00 2001
From: Joakim Plate <elupus@ecce.se>
Date: Sun, 27 Jan 2013 18:46:48 +0100
Subject: [PATCH] dvdplayer: allow 200ms of automatic time update instead of
1ms
It was originally meant to allow 1 second. But has at some point
been broken since the unit has been changed from ms to dvd time
---
xbmc/cores/dvdplayer/DVDPlayer.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 8c46c40..61bcece 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -2776,12 +2776,13 @@ int64_t CDVDPlayer::GetTime()
{
CSingleLock lock(m_StateSection);
double offset = 0;
+ const double limit = DVD_MSEC_TO_TIME(200);
if(m_State.timestamp > 0)
{
offset = CDVDClock::GetAbsoluteClock() - m_State.timestamp;
offset *= m_playSpeed / DVD_PLAYSPEED_NORMAL;
- if(offset > 1000) offset = 1000;
- if(offset < -1000) offset = -1000;
+ if(offset > limit) offset = limit;
+ if(offset < -limit) offset = -limit;
}
return llrint(m_State.time + DVD_TIME_TO_MSEC(offset));
}
--
1.8.1.5

View File

@ -1,35 +0,0 @@
From 406ef63c542bc087f50d68f0046430e04b20f3b6 Mon Sep 17 00:00:00 2001
From: Joakim Plate <elupus@ecce.se>
Date: Sun, 27 Jan 2013 18:41:35 +0100
Subject: [PATCH] dvdplayer: fixed time_offset is difference between adjusted
pts and time
---
xbmc/cores/dvdplayer/DVDPlayer.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 9e0c716..8c46c40 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -2027,7 +2027,7 @@ void CDVDPlayer::HandleMessages()
// if input streams doesn't support seektime we must convert back to clock
if(dynamic_cast<CDVDInputStream::ISeekTime*>(m_pInputStream) == NULL)
- time -= DVD_TIME_TO_MSEC(m_State.time_offset);
+ time -= DVD_TIME_TO_MSEC(m_State.time_offset - m_offset_pts);
CLog::Log(LOGDEBUG, "demuxer seek to: %d", time);
if (m_pDemuxer && m_pDemuxer->SeekTime(time, msg.GetBackward(), &start))
@@ -3906,7 +3906,7 @@ void CDVDPlayer::UpdatePlayState(double timeout)
}
if (state.time_src == ETIMESOURCE_CLOCK)
- state.time_offset = 0;
+ state.time_offset = m_offset_pts;
else
state.time_offset = DVD_MSEC_TO_TIME(state.time) - state.dts;
--
1.8.1.5

View File

@ -1,689 +0,0 @@
From 48eb874344af0f1eda73a847ab291e04255368c9 Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sat, 6 Apr 2013 10:49:43 +0200
Subject: [PATCH 01/12] [OMXPlayer] [PATCH] fixed: Compile warning (unused
label) Based on
https://github.com/xbmc/xbmc/commit/132730ec5e976642109ec048545262c59453d5b6
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index 60aa9ab..77f818d 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -562,7 +562,7 @@ bool COMXPlayer::OpenInputStream()
{
m_filename = g_mediaManager.TranslateDevicePath("");
}
-retry:
+
// before creating the input stream, if this is an HLS playlist then get the
// most appropriate bitrate based on our network settings
if (filename.Left(7) == "http://" && filename.Right(5) == ".m3u8")
--
1.8.1.5
From f672abd807e654c2d11160827938a2f9e27628b0 Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sat, 6 Apr 2013 11:31:07 +0200
Subject: [PATCH 02/12] [OMXPlayer] [PATCH] dvdplayer: don't use
OpenDefaultStreams() if something else dictate Based on
https://github.com/xbmc/xbmc/commit/dda59f043e77a6cfbbd3a7378406134dad540e60
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index 77f818d..b8e465c 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -695,8 +695,9 @@ bool COMXPlayer::OpenDemuxStream()
void COMXPlayer::OpenDefaultStreams(bool reset)
{
- // bypass for DVDs. The DVD Navigator has already dictated which streams to open.
- if (m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
+ // if input stream dictate, we will open later
+ if(m_dvd.iSelectedAudioStream >= 0
+ || m_dvd.iSelectedSPUStream >= 0)
return;
OMXSelectionStreams streams;
--
1.8.1.5
From 85bf2ae43d7a977eedf174e6c8d30b5f76fa58fd Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sat, 6 Apr 2013 15:57:09 +0200
Subject: [PATCH 03/12] [OMXPlayer] [PATCH] dvdplayer: make HasVideo return
true if a video stream was opened since playback has started - fixes missing
video info on channel change Based on
https://github.com/xbmc/xbmc/commit/bd49c32ec38b7ecd7bb43eb995c9ff632d18d3a1
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 8 +++++---
xbmc/cores/omxplayer/OMXPlayer.h | 2 ++
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index b8e465c..1704077 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -415,6 +415,7 @@ void COMXSelectionStreams::Update(CDVDInputStream* input, CDVDDemux* demuxer)
m_UpdateApplication = 0;
m_caching = CACHESTATE_DONE;
m_playSpeed = DVD_PLAYSPEED_NORMAL;
+ m_HasVideo = false;
m_State.Clear();
m_dvd.Clear();
@@ -529,6 +530,8 @@ bool COMXPlayer::CloseFile()
m_Edl.Clear();
m_EdlAutoSkipMarkers.Clear();
+ m_HasVideo = false;
+
g_renderManager.UnInit();
return true;
}
@@ -2438,9 +2441,7 @@ bool COMXPlayer::IsPaused() const
bool COMXPlayer::HasVideo() const
{
- if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)) return true;
-
- return m_SelectionStreams.Count(STREAM_VIDEO) > 0 ? true : false;
+ return m_HasVideo;
}
bool COMXPlayer::HasAudio() const
@@ -2971,6 +2972,7 @@ bool COMXPlayer::OpenVideoStream(int iStream, int source, bool reset)
m_CurrentVideo.hint = hint;
m_CurrentVideo.stream = (void*)pStream;
m_CurrentVideo.started = false;
+ m_HasVideo = true;
/* we are potentially going to be waiting on this */
m_player_video.SendMessage(new CDVDMsg(CDVDMsg::PLAYER_STARTED), 1);
diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h
index d606e84..db3534f 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.h
+++ b/xbmc/cores/omxplayer/OMXPlayer.h
@@ -490,4 +490,6 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer
bool m_change_volume;
CDVDOverlayContainer m_overlayContainer;
ECacheState m_caching;
+
+ bool m_HasVideo;
};
--
1.8.1.5
From 2602bd38d6f36abfb562a9da70b95af79ba235dd Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sat, 6 Apr 2013 16:22:16 +0200
Subject: [PATCH 04/12] [OMXPlayer] [PATCH] dvdplayer: align HasAudio with
HasVideo Based on
https://github.com/xbmc/xbmc/commit/cfb14c3c7400e2d9dbe2d452274339fa57557d9b
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 5 ++++-
xbmc/cores/omxplayer/OMXPlayer.h | 1 +
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index 1704077..7c85e6d 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -416,6 +416,7 @@ void COMXSelectionStreams::Update(CDVDInputStream* input, CDVDDemux* demuxer)
m_caching = CACHESTATE_DONE;
m_playSpeed = DVD_PLAYSPEED_NORMAL;
m_HasVideo = false;
+ m_HasAudio = false;
m_State.Clear();
m_dvd.Clear();
@@ -531,6 +532,7 @@ bool COMXPlayer::CloseFile()
m_EdlAutoSkipMarkers.Clear();
m_HasVideo = false;
+ m_HasAudio = false;
g_renderManager.UnInit();
return true;
@@ -2446,7 +2448,7 @@ bool COMXPlayer::HasVideo() const
bool COMXPlayer::HasAudio() const
{
- return m_SelectionStreams.Count(STREAM_AUDIO) > 0 ? true : false;
+ return m_HasAudio;
}
bool COMXPlayer::IsPassthrough() const
@@ -2891,6 +2893,7 @@ bool COMXPlayer::OpenAudioStream(int iStream, int source, bool reset)
m_CurrentAudio.hint = hint;
m_CurrentAudio.stream = (void*)pStream;
m_CurrentAudio.started = false;
+ m_HasAudio = true;
/* we are potentially going to be waiting on this */
m_player_audio.SendMessage(new CDVDMsg(CDVDMsg::PLAYER_STARTED), 1);
diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h
index db3534f..c09773e 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.h
+++ b/xbmc/cores/omxplayer/OMXPlayer.h
@@ -492,4 +492,5 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer
ECacheState m_caching;
bool m_HasVideo;
+ bool m_HasAudio;
};
--
1.8.1.5
From 17d0e68692a4f05c3a074d602b3ec1c68bb71662 Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sat, 6 Apr 2013 16:38:04 +0200
Subject: [PATCH 05/12] [OMXPlayer] [PATCH] dvdplayer: a disabled stream could
be re-selected for bluray and dvd Based on
https://github.com/xbmc/xbmc/commit/b2fc0508212023cdcd11d05d72ed9a4d4935a0d8
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index 7c85e6d..8df04a6 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -888,6 +888,9 @@ bool COMXPlayer::IsBetterStream(COMXCurrentStream& current, CDemuxStream* stream
if(m_PlayerOptions.video_only && current.type != STREAM_VIDEO)
return false;
+ if(stream->disabled)
+ return false;
+
if (m_pInputStream && ( m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)
|| m_pInputStream->IsStreamType(DVDSTREAM_TYPE_BLURAY) ) )
{
@@ -917,9 +920,6 @@ bool COMXPlayer::IsBetterStream(COMXCurrentStream& current, CDemuxStream* stream
&& stream->iId == current.id)
return false;
- if(stream->disabled)
- return false;
-
if(stream->type != current.type)
return false;
--
1.8.1.5
From 5d639b5dd577f8e5e5f38e6e9dd32262ced4a427 Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sat, 6 Apr 2013 18:43:07 +0200
Subject: [PATCH 06/12] [OMXPlayer] [PATCH] dvdplayer: ff/rw/seek was broken
for inputs implementing IDisplayTime Based on
https://github.com/xbmc/xbmc/commit/4c90033e6987d512c1925ab6a5e31ef88bcdb28c
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 14 ++++++++++++--
xbmc/cores/omxplayer/OMXPlayer.h | 9 +++++++++
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index 8df04a6..e64fc71 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -2082,6 +2082,11 @@ void COMXPlayer::HandleMessages()
double start = DVD_NOPTS_VALUE;
int time = msg.GetRestore() ? (int)m_Edl.RestoreCutTime(msg.GetTime()) : msg.GetTime();
+
+ // if input streams doesn't support seektime we must convert back to clock
+ if(dynamic_cast<CDVDInputStream::ISeekTime*>(m_pInputStream) == NULL)
+ time -= m_State.time_offset;
+
CLog::Log(LOGDEBUG, "demuxer seek to: %d", time);
if (m_pDemuxer && m_pDemuxer->SeekTime(time, msg.GetBackward(), &start))
{
@@ -3885,6 +3890,7 @@ void COMXPlayer::UpdatePlayState(double timeout)
else
state.time = DVD_TIME_TO_MSEC(m_av_clock.GetClock() + m_offset_pts);
state.time_total = m_pDemuxer->GetStreamLength();
+ state.time_src = ETIMESOURCE_CLOCK;
}
@@ -3903,6 +3909,7 @@ void COMXPlayer::UpdatePlayState(double timeout)
{
state.time = pDisplayTime->GetTime();
state.time_total = pDisplayTime->GetTotalTime();
+ state.time_src = ETIMESOURCE_INPUT;
}
if (dynamic_cast<CDVDInputStream::IMenus*>(m_pInputStream))
@@ -3911,6 +3918,7 @@ void COMXPlayer::UpdatePlayState(double timeout)
{
state.time = XbmcThreads::SystemClockMillis() - m_dvd.iDVDStillStartTime;
state.time_total = m_dvd.iDVDStillTime;
+ state.time_src = ETIMESOURCE_MENU;
}
}
@@ -3936,12 +3944,14 @@ void COMXPlayer::UpdatePlayState(double timeout)
state.player_state = "";
if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
{
- state.time_offset = DVD_MSEC_TO_TIME(state.time) - state.dts;
if(!((CDVDInputStreamNavigator*)m_pInputStream)->GetNavigatorState(state.player_state))
state.player_state = "";
}
- else
+
+ if (state.time_src == ETIMESOURCE_CLOCK)
state.time_offset = 0;
+ else
+ state.time_offset = DVD_MSEC_TO_TIME(state.time) - state.dts;
if (m_CurrentAudio.id >= 0 && m_pDemuxer)
{
diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h
index c09773e..d6c9d66 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.h
+++ b/xbmc/cores/omxplayer/OMXPlayer.h
@@ -375,6 +375,13 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer
int iSelectedAudioStream; // mpeg stream id, or -1 if disabled
} m_dvd;
+ enum ETimeSource
+ {
+ ETIMESOURCE_CLOCK,
+ ETIMESOURCE_INPUT,
+ ETIMESOURCE_MENU,
+ };
+
struct SPlayerState
{
SPlayerState() { Clear(); }
@@ -384,6 +391,7 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer
time = 0;
time_total = 0;
time_offset = 0;
+ time_src = ETIMESOURCE_CLOCK;
dts = DVD_NOPTS_VALUE;
player_state = "";
chapter = 0;
@@ -406,6 +414,7 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer
double time; // current playback time
double time_total; // total playback time
+ ETimeSource time_src; // current time source
double dts; // last known dts
std::string player_state; // full player state
--
1.8.1.5
From dd6af825a45b4bbcce0d9f2ded7dcbdaedf7e8e4 Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sat, 6 Apr 2013 18:52:21 +0200
Subject: [PATCH 07/12] [OMXPlayer] [PATCH] dvdplayer: allow 200ms of automatic
time update instead of 1ms Based on
https://github.com/xbmc/xbmc/commit/a489fb5c8607153c0b136fc1e2afcd543f1b9e19
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index e64fc71..d928cba 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -2812,12 +2812,13 @@ int64_t COMXPlayer::GetTime()
{
CSingleLock lock(m_StateSection);
double offset = 0;
+ const double limit = DVD_MSEC_TO_TIME(200);
if(m_State.timestamp > 0)
{
offset = m_av_clock.GetAbsoluteClock() - m_State.timestamp;
offset *= m_playSpeed / DVD_PLAYSPEED_NORMAL;
- if(offset > 1000) offset = 1000;
- if(offset < -1000) offset = -1000;
+ if(offset > limit) offset = limit;
+ if(offset < -limit) offset = -limit;
}
return llrint(m_State.time + DVD_TIME_TO_MSEC(offset));
}
--
1.8.1.5
From ac9012a190f7d37030d567c5450b6e96eabc964e Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sat, 6 Apr 2013 18:54:23 +0200
Subject: [PATCH 08/12] [OMXPlayer] [PATCH] [dvdplayer] fix deadlock when
trying to go to disc menu Based on
https://github.com/xbmc/xbmc/commit/befdcfad8d2b14c9d935c3662a56853d617f884d
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index d928cba..d1cc941 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -3524,7 +3524,7 @@ bool COMXPlayer::OnAction(const CAction &action)
pMenus->OnMenu();
// send a message to everyone that we've gone to the menu
CGUIMessage msg(GUI_MSG_VIDEO_MENU_STARTED, 0, 0);
- g_windowManager.SendMessage(msg);
+ g_windowManager.SendThreadMessage(msg);
return true;
}
break;
--
1.8.1.5
From a1490e5ba5f3a216aa113f36d152d845f42e196a Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sat, 6 Apr 2013 19:52:08 +0200
Subject: [PATCH 09/12] [OMXPlayer] [PATCH] dvdplayer: another fix for
seeking/fw/rw in PVR Based on
https://github.com/xbmc/xbmc/commit/676b9e7347be62a518851c30d7e203b71849fc47
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index d1cc941..463f7db 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -2085,7 +2085,7 @@ void COMXPlayer::HandleMessages()
// if input streams doesn't support seektime we must convert back to clock
if(dynamic_cast<CDVDInputStream::ISeekTime*>(m_pInputStream) == NULL)
- time -= m_State.time_offset;
+ time -= DVD_TIME_TO_MSEC(m_State.time_offset);
CLog::Log(LOGDEBUG, "demuxer seek to: %d", time);
if (m_pDemuxer && m_pDemuxer->SeekTime(time, msg.GetBackward(), &start))
--
1.8.1.5
From 272fbfff7924b78e52700196ff5c5f20100ed5dc Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sat, 6 Apr 2013 20:02:42 +0200
Subject: [PATCH 10/12] [OMXPlayer] [PATCH] dvdplayer: fixed time_offset is
difference between adjusted Based on
https://github.com/xbmc/xbmc/commit/406ef63c542bc087f50d68f0046430e04b20f3b6
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index 463f7db..b44c1ea 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -2085,7 +2085,7 @@ void COMXPlayer::HandleMessages()
// if input streams doesn't support seektime we must convert back to clock
if(dynamic_cast<CDVDInputStream::ISeekTime*>(m_pInputStream) == NULL)
- time -= DVD_TIME_TO_MSEC(m_State.time_offset);
+ time -= DVD_TIME_TO_MSEC(m_State.time_offset - m_offset_pts);
CLog::Log(LOGDEBUG, "demuxer seek to: %d", time);
if (m_pDemuxer && m_pDemuxer->SeekTime(time, msg.GetBackward(), &start))
@@ -3950,7 +3950,7 @@ void COMXPlayer::UpdatePlayState(double timeout)
}
if (state.time_src == ETIMESOURCE_CLOCK)
- state.time_offset = 0;
+ state.time_offset = m_offset_pts;
else
state.time_offset = DVD_MSEC_TO_TIME(state.time) - state.dts;
--
1.8.1.5
From 8bf3334a0317b320d1af66eefa8885d5033dde8b Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sun, 7 Apr 2013 10:46:02 +0200
Subject: [PATCH 11/12] [OMXPlayer] [PATCH] fixed: We can only obtain the
aspect & duration this way when the Process() thread is running Based on
https://github.com/xbmc/xbmc/commit/9db853e551f0380aac884fcb6c9564a725fcb966
in master and added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index b44c1ea..c80c056 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -4097,11 +4097,22 @@ bool COMXPlayer::GetStreamDetails(CStreamDetails &details)
{
if (m_pDemuxer)
{
- bool result=CDVDFileInfo::DemuxerToStreamDetails(m_pInputStream, m_pDemuxer, details);
+ bool result = CDVDFileInfo::DemuxerToStreamDetails(m_pInputStream, m_pDemuxer, details);
if (result && details.GetStreamCount(CStreamDetail::VIDEO) > 0) // this is more correct (dvds in particular)
{
- GetVideoAspectRatio(((CStreamDetailVideo*)details.GetNthStream(CStreamDetail::VIDEO,0))->m_fAspect);
- ((CStreamDetailVideo*)details.GetNthStream(CStreamDetail::VIDEO,0))->m_iDuration = GetTotalTime() / 1000;
+ /*
+ * We can only obtain the aspect & duration from dvdplayer when the Process() thread is running
+ * and UpdatePlayState() has been called at least once. In this case dvdplayer duration/AR will
+ * return 0 and we'll have to fallback to the (less accurate) info from the demuxer.
+ */
+ float aspect;
+ GetVideoAspectRatio(aspect);
+ if (aspect > 0.0f)
+ ((CStreamDetailVideo*)details.GetNthStream(CStreamDetail::VIDEO,0))->m_fAspect = aspect;
+
+ int64_t duration = GetTotalTime() / 1000;
+ if (duration > 0)
+ ((CStreamDetailVideo*)details.GetNthStream(CStreamDetail::VIDEO,0))->m_iDuration = duration;
}
return result;
}
--
1.8.1.5
From f8669f89fc0a23706f6cf9b84d145c2dfafeab1b Mon Sep 17 00:00:00 2001
From: Stephan Raue <stephan@openelec.tv>
Date: Sun, 7 Apr 2013 11:37:35 +0200
Subject: [PATCH 12/12] [OMXPlayer] cosmetic changes: sync with dvdplayer
(changes) this was added in
https://github.com/xbmc/xbmc/commit/28de0da9afeb6bcbc2c8a3cad31c79225b07ec7d
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 20 ++++++++++----------
xbmc/cores/omxplayer/OMXPlayerVideo.h | 2 ++
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index c80c056..a62d0c0 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -418,8 +418,8 @@ void COMXSelectionStreams::Update(CDVDInputStream* input, CDVDDemux* demuxer)
m_HasVideo = false;
m_HasAudio = false;
- m_State.Clear();
m_dvd.Clear();
+ m_State.Clear();
m_EdlAutoSkipMarkers.Clear();
memset(&m_SpeedState, 0, sizeof(m_SpeedState));
@@ -476,7 +476,6 @@ bool COMXPlayer::OpenFile(const CFileItem &file, const CPlayerOptions &options)
g_renderManager.PreInit();
Create();
-
if(!m_ready.WaitMSec(100))
{
CGUIDialogBusy* dialog = (CGUIDialogBusy*)g_windowManager.GetWindow(WINDOW_DIALOG_BUSY);
@@ -599,7 +598,6 @@ bool COMXPlayer::OpenInputStream()
|| m_pInputStream->IsStreamType(DVDSTREAM_TYPE_BLURAY) ) )
{
CLog::Log(LOGINFO, "COMXPlayer::OpenInputStream - DVD/BD not supported - Will try...");
- // return false;
}
// find any available external subtitles for non dvd files
@@ -633,7 +631,7 @@ bool COMXPlayer::OpenInputStream()
AddSubtitleFile(filenames[i]);
}
}
- } // end loop over all subtitle files
+ } // end loop over all subtitle files
g_settings.m_currentVideoSettings.m_SubtitleCached = true;
}
@@ -641,7 +639,6 @@ bool COMXPlayer::OpenInputStream()
SetAVDelay(g_settings.m_currentVideoSettings.m_AudioDelay);
SetSubTitleDelay(g_settings.m_currentVideoSettings.m_SubtitleDelay);
m_av_clock.Reset();
- //m_av_clock.OMXReset();
m_dvd.Clear();
m_iChannelEntryTimeOut = 0;
@@ -937,7 +934,7 @@ void COMXPlayer::Process()
bool bOmxWaitVideo = false;
bool bOmxWaitAudio = false;
- if(!OpenInputStream())
+ if (!OpenInputStream())
{
m_bAbortRequest = true;
return;
@@ -945,7 +942,7 @@ void COMXPlayer::Process()
if(m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
{
- CLog::Log(LOGNOTICE, "OMXPlayer: playing a dvd with menu's");
+ CLog::Log(LOGNOTICE, "OMXPlayer: playing a file with menu's");
m_PlayerOptions.starttime = 0;
if(m_PlayerOptions.state.size() > 0)
@@ -1331,7 +1328,7 @@ void COMXPlayer::ProcessPacket(CDemuxStream* pStream, DemuxPacket* pPacket)
void COMXPlayer::ProcessAudioData(CDemuxStream* pStream, DemuxPacket* pPacket)
{
- if (m_CurrentAudio.stream != (void*)pStream
+ if (m_CurrentAudio.stream != (void*)pStream
|| m_CurrentAudio.changes != pStream->changes)
{
/* check so that dmuxer hints or extra data hasn't changed */
@@ -1597,6 +1594,7 @@ void COMXPlayer::HandlePlaySpeed()
if(m_caching != caching)
SetCaching(caching);
+
if(GetPlaySpeed() != DVD_PLAYSPEED_NORMAL && GetPlaySpeed() != DVD_PLAYSPEED_PAUSE)
{
if (IsInMenu())
@@ -2153,7 +2151,6 @@ void COMXPlayer::HandleMessages()
{
m_dvd.iSelectedAudioStream = -1;
CloseAudioStream(false);
- // TODO : check //CloseVideoStream(false);
m_messenger.Put(new CDVDMsgPlayerSeek(GetTime(), true, true, true, true, true));
}
}
@@ -2356,6 +2353,7 @@ void COMXPlayer::HandleMessages()
pMsg->Release();
}
+
}
void COMXPlayer::SetCaching(ECacheState state)
@@ -2695,6 +2693,7 @@ float COMXPlayer::GetSubTitleDelay()
return -m_player_video.GetSubtitleDelay() / DVD_TIME_BASE;
}
+// priority: 1: libdvdnav, 2: external subtitles, 3: muxed subtitles
int COMXPlayer::GetSubtitleCount()
{
OMXStreamLock lock(this);
@@ -2954,7 +2953,7 @@ bool COMXPlayer::OpenVideoStream(int iStream, int source, bool reset)
if(m_CurrentVideo.id < 0
|| m_CurrentVideo.hint != hint)
{
- if(!m_player_video.OpenStream(hint))
+ if (!m_player_video.OpenStream(hint))
{
/* mark stream as disabled, to disallaw further attempts */
CLog::Log(LOGWARNING, "%s - Unsupported stream %d. Stream disabled.", __FUNCTION__, iStream);
@@ -3529,6 +3528,7 @@ bool COMXPlayer::OnAction(const CAction &action)
}
break;
}
+
if (pMenus->IsInMenu())
{
switch (action.GetID())
diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.h b/xbmc/cores/omxplayer/OMXPlayerVideo.h
index 58ded06..a02928b 100644
--- a/xbmc/cores/omxplayer/OMXPlayerVideo.h
+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.h
@@ -38,6 +38,7 @@
#include "DVDMessageQueue.h"
#include "utils/BitstreamStats.h"
#include "linux/DllBCM.h"
+#include "cores/VideoRenderers/RenderManager.h"
using namespace std;
@@ -125,6 +126,7 @@ class OMXPlayerVideo : public CThread
void EnableSubtitle(bool bEnable) { m_bRenderSubs = bEnable; }
bool IsSubtitleEnabled() { return m_bRenderSubs; }
void EnableFullscreen(bool bEnable) { m_bAllowFullscreen = bEnable; }
+ float GetAspectRatio() { return g_renderManager.GetAspectRatio(); }
void SetFlags(unsigned flags) { m_flags = flags; };
int GetFreeSpace();
void SetVideoRect(const CRect &SrcRect, const CRect &DestRect);
--
1.8.1.5

View File

@ -1,104 +0,0 @@
From c106cfd4e35dd53310d7325ce658618807d59ac2 Mon Sep 17 00:00:00 2001
From: popcornmix <popcornmix@gmail.com>
Date: Sun, 17 Mar 2013 12:48:09 +0000
Subject: [PATCH] [rbp] Set mediatime on GPU after a seek.
Currently after a seek, the mediatime doesn't update until an audio and video packet have been fetched from demuxer, and been decoded. For HD content this can take a second or two.
This has a couple of undesirable effects:
The seek time that pops up after a seek initially shows the before seek time, and the file progress bar is laggy.
If you seek a second time, before the time has updated, it will use the before seek time, and the second seek has no effect.
This limits a sequence of seeks to a maximum of about 1 every second or two.
The fix udpates the GPU mediatime immediately after the seek, so the mediatime is correct immediately which fixes the undesirable behaviour.
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 3 +++
xbmc/linux/OMXClock.cpp | 46 ++++++++++++++++++++++++++++++++++++++
xbmc/linux/OMXClock.h | 1 +
3 files changed, 50 insertions(+)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index 78b51f2..c09569b 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -3296,6 +3296,9 @@ void COMXPlayer::FlushBuffers(bool queued, double pts, bool accurate)
CSingleLock lock(m_StateSection);
m_State = m_StateInput;
}
+ // let clock know the new time so progress bar updates immediately
+ if(startpts != DVD_NOPTS_VALUE)
+ m_av_clock.OMXMediaTime(startpts);
}
// since we call ffmpeg functions to decode, this is being called in the same thread as ::Process() is
diff --git a/xbmc/linux/OMXClock.cpp b/xbmc/linux/OMXClock.cpp
index 535a533..54ccf31 100644
--- a/xbmc/linux/OMXClock.cpp
+++ b/xbmc/linux/OMXClock.cpp
@@ -745,6 +745,52 @@ double OMXClock::OMXMediaTime(bool fixPreroll /* true */ , bool lock /* = true *
return pts;
}
+// Set the media time, so calls to get media time use the updated value,
+// useful after a seek so mediatime is updated immediately (rather than waiting for first decoded packet)
+bool OMXClock::OMXMediaTime(double pts, bool fixPreroll /* = true*/, bool lock /* = true*/)
+{
+ if(m_omx_clock.GetComponent() == NULL)
+ return false;
+
+ if(lock)
+ Lock();
+
+ OMX_ERRORTYPE omx_err = OMX_ErrorNone;
+ OMX_INDEXTYPE index;
+ OMX_TIME_CONFIG_TIMESTAMPTYPE timeStamp;
+ OMX_INIT_STRUCTURE(timeStamp);
+ timeStamp.nPortIndex = m_omx_clock.GetInputPort();
+
+ if(g_guiSettings.GetBool("videoplayer.usedisplayasclock") && m_has_video)
+ index = OMX_IndexConfigTimeCurrentVideoReference;
+ else if(m_has_audio)
+ index = OMX_IndexConfigTimeCurrentAudioReference;
+ else
+ index = OMX_IndexConfigTimeCurrentVideoReference;
+
+ if(fixPreroll)
+ pts -= (OMX_PRE_ROLL * 1000);
+ timeStamp.nTimestamp = ToOMXTime(pts);
+
+ omx_err = m_omx_clock.SetConfig(index, &timeStamp);
+ if(omx_err != OMX_ErrorNone)
+ {
+ CLog::Log(LOGERROR, "OMXClock::OMXMediaTime error setting %s", index == OMX_IndexConfigTimeCurrentAudioReference ?
+ "OMX_IndexConfigTimeCurrentAudioReference":"OMX_IndexConfigTimeCurrentVideoReference");
+ if(lock)
+ UnLock();
+ return false;
+ }
+
+ CLog::Log(LOGDEBUG, "OMXClock::OMXMediaTime set config %s = %.2f", index == OMX_IndexConfigTimeCurrentAudioReference ?
+ "OMX_IndexConfigTimeCurrentAudioReference":"OMX_IndexConfigTimeCurrentVideoReference", pts);
+
+ if(lock)
+ UnLock();
+
+ return true;
+}
+
bool OMXClock::OMXPause(bool lock /* = true */)
{
if(m_omx_clock.GetComponent() == NULL)
diff --git a/xbmc/linux/OMXClock.h b/xbmc/linux/OMXClock.h
index f41a7fd..3001d86 100644
--- a/xbmc/linux/OMXClock.h
+++ b/xbmc/linux/OMXClock.h
@@ -116,6 +116,7 @@ class OMXClock
bool OMXReset(bool lock = true);
double OMXWallTime(bool lock = true);
double OMXMediaTime(bool fixPreroll = true, bool lock = true);
+ bool OMXMediaTime(double pts, bool fixPreroll = true, bool lock = true);
bool OMXPause(bool lock = true);
bool OMXResume(bool lock = true);
bool OMXUpdateClock(double pts, bool lock = true);
--
1.8.1.5

View File

@ -1,58 +0,0 @@
From f9498832d2dd260a47051a88ae9d3e1e1b2f957e Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Mon, 18 Mar 2013 08:20:02 +0100
Subject: [PATCH 1/2] dvdplayer: reevaluate HasVideo/Audio after a stream
change
---
xbmc/cores/dvdplayer/DVDPlayer.cpp | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 3d2ca03..bac062d 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -788,6 +788,13 @@ bool CDVDPlayer::ReadPacket(DemuxPacket*& packet, CDemuxStream*& stream)
m_SelectionStreams.Clear(STREAM_NONE, STREAM_SOURCE_DEMUX);
m_SelectionStreams.Update(m_pInputStream, m_pDemuxer);
OpenDefaultStreams(false);
+
+ // reevaluate HasVideo/Audio, we may have switched from/to a radio channel
+ if(m_CurrentVideo.id < 0)
+ m_HasVideo = false;
+ if(m_CurrentAudio.id < 0)
+ m_HasAudio = false;
+
return true;
}
--
1.8.1.5
From 5ee4bcbd90707d8cedf3c560203b64e458c9ca0b Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Mon, 18 Mar 2013 12:04:04 +0100
Subject: [PATCH 2/2] pvr: remove check for different types of channels on
SwitchChannel
---
xbmc/pvr/addons/PVRClients.cpp | 2 --
1 file changed, 2 deletions(-)
diff --git a/xbmc/pvr/addons/PVRClients.cpp b/xbmc/pvr/addons/PVRClients.cpp
index dc6324e..74c6873 100644
--- a/xbmc/pvr/addons/PVRClients.cpp
+++ b/xbmc/pvr/addons/PVRClients.cpp
@@ -308,8 +308,6 @@ bool CPVRClients::SwitchChannel(const CPVRChannel &channel)
!GetPlayingChannel(currentChannel) ||
// different backend
currentChannel->ClientID() != channel.ClientID() ||
- // different type
- currentChannel->IsRadio() != channel.IsRadio() ||
// stream URL should always be opened as a new file
!channel.StreamURL().IsEmpty() || !currentChannel->StreamURL().IsEmpty())
{
--
1.8.1.5

View File

@ -1,151 +0,0 @@
From 1410f361434bf1af9bc436cd01d977f1a372f71b Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Sat, 23 Mar 2013 18:29:13 +0100
Subject: [PATCH 1/2] pvr: fix too early finish of recordings
---
.../dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp | 11 ++++++++---
xbmc/cores/dvdplayer/DVDPlayer.cpp | 9 ---------
xbmc/filesystem/PVRFile.h | 2 +-
3 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp
index fe19a3d..a0475d1 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp
@@ -315,9 +315,14 @@ bool CDVDInputStreamPVRManager::UpdateItem(CFileItem& item)
if(m_bReopened)
{
- m_bReopened = false;
- m_eof = false;
- return NEXTSTREAM_RETRY;
+ if (IsEOF())
+ return NEXTSTREAM_NONE;
+ else
+ {
+ m_bReopened = false;
+ m_eof = false;
+ return NEXTSTREAM_RETRY;
+ }
}
if (m_pOtherStream)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index a1f56ce..cdf5876 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -1174,15 +1174,6 @@ void CDVDPlayer::Process()
Sleep(100);
continue;
}
- else if (m_pInputStream->IsStreamType(DVDSTREAM_TYPE_PVRMANAGER))
- {
- CDVDInputStreamPVRManager* pStream = static_cast<CDVDInputStreamPVRManager*>(m_pInputStream);
- if (pStream->IsEOF())
- break;
-
- Sleep(100);
- continue;
- }
// make sure we tell all players to finish it's data
if(m_CurrentAudio.inited)
diff --git a/xbmc/filesystem/PVRFile.h b/xbmc/filesystem/PVRFile.h
index edf0e10..4d51da8 100644
--- a/xbmc/filesystem/PVRFile.h
+++ b/xbmc/filesystem/PVRFile.h
@@ -44,7 +44,7 @@ class CPVRFile
virtual void Close();
virtual unsigned int Read(void* buffer, int64_t size);
virtual CStdString GetContent() { return ""; }
- virtual bool SkipNext() { return true; }
+ virtual bool SkipNext() { return !m_isPlayRecording; }
virtual bool Delete(const CURL& url);
virtual bool Rename(const CURL& url, const CURL& urlnew);
--
1.8.1.5
From cbad7f0e8feca4cb96a21bb6c84d98272edb000f Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Thu, 28 Mar 2013 16:25:50 +0100
Subject: [PATCH 2/2] pvr: align NexStream and SkipNext with logic in dvdplayer
---
.../DVDInputStreams/DVDInputStreamPVRManager.cpp | 24 +++++++---------------
.../DVDInputStreams/DVDInputStreamPVRManager.h | 1 -
2 files changed, 7 insertions(+), 18 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp
index a0475d1..431c280 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp
@@ -45,7 +45,6 @@
m_pLiveTV = NULL;
m_pOtherStream = NULL;
m_eof = true;
- m_bReopened = false;
m_iScanTimeout = 0;
}
@@ -311,28 +310,20 @@ bool CDVDInputStreamPVRManager::UpdateItem(CFileItem& item)
CDVDInputStream::ENextStream CDVDInputStreamPVRManager::NextStream()
{
- if(!m_pFile) return NEXTSTREAM_NONE;
+ if(!m_pFile)
+ return NEXTSTREAM_NONE;
- if(m_bReopened)
- {
- if (IsEOF())
- return NEXTSTREAM_NONE;
- else
- {
- m_bReopened = false;
- m_eof = false;
- return NEXTSTREAM_RETRY;
- }
- }
+ m_eof = IsEOF();
if (m_pOtherStream)
return m_pOtherStream->NextStream();
else if(m_pFile->SkipNext())
{
- m_eof = false;
- return NEXTSTREAM_OPEN;
+ if (m_eof)
+ return NEXTSTREAM_OPEN;
+ else
+ return NEXTSTREAM_RETRY;
}
-
return NEXTSTREAM_NONE;
}
@@ -385,7 +376,6 @@ bool CDVDInputStreamPVRManager::CloseAndOpen(const char* strFile)
if (Open(strFile, m_content))
{
- m_bReopened = true;
return true;
}
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.h b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.h
index 9a9580f..78c7340 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.h
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.h
@@ -98,7 +98,6 @@ class CDVDInputStreamPVRManager
XFILE::IRecordable* m_pRecordable;
bool m_eof;
std::string m_strContent;
- bool m_bReopened;
unsigned int m_iScanTimeout;
};
--
1.8.1.5

View File

@ -20,7 +20,7 @@
################################################################################
PKG_NAME="xbmc"
PKG_VERSION="12.1"
PKG_VERSION="12.1.2"
GIT_REPO="-b Frodo git://github.com/xbmc/xbmc.git"
DEST_DIR="$PKG_NAME-frodo"