mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
xbmc: update to xbmc-12.1.2
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
0afe383b7c
commit
25bd3d6c1e
@ -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
|
||||
|
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xbmc"
|
||||
PKG_VERSION="12.1"
|
||||
PKG_VERSION="12.1.2"
|
||||
if [ "$XBMC" = "master" ]; then
|
||||
PKG_VERSION="8ad691a"
|
||||
fi
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user