xbmc: add upstream patches

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2013-06-05 06:05:02 +02:00
parent ae8820bb59
commit cd889c4767
12 changed files with 714 additions and 0 deletions

View File

@ -0,0 +1,322 @@
From 85891c135b848d8f11a5410d867f67e0515d3d0b Mon Sep 17 00:00:00 2001
From: Joakim Plate <elupus@ecce.se>
Date: Sun, 17 Mar 2013 19:04:52 +0100
Subject: [PATCH 1/3] dvdplayer: move CanSeek/CanPause to seekable interface
---
.../dvdplayer/DVDInputStreams/DVDInputStream.h | 8 ++++++++
.../DVDInputStreams/DVDInputStreamPVRManager.h | 1 +
xbmc/cores/dvdplayer/DVDPlayer.cpp | 22 +++++++++++-----------
3 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStream.h b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStream.h
index b3b7ae3..a5ee3ae 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStream.h
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStream.h
@@ -122,6 +122,14 @@ class CDVDInputStream
virtual double GetTimeStampCorrection() = 0;
};
+ class ISeekable
+ {
+ public:
+ virtual ~ISeekable() {};
+ virtual bool CanSeek() = 0;
+ virtual bool CanPause() = 0;
+ };
+
enum ENextStream
{
NEXTSTREAM_NONE,
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.h b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.h
index 79389a4..89f05a7 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.h
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.h
@@ -39,6 +39,7 @@ class CDVDInputStreamPVRManager
: public CDVDInputStream
, public CDVDInputStream::IChannel
, public CDVDInputStream::IDisplayTime
+ , public CDVDInputStream::ISeekable
{
public:
CDVDInputStreamPVRManager(IDVDPlayer* pPlayer);
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index e5a1e71..5baf57a 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -3833,6 +3833,9 @@ void CDVDPlayer::UpdatePlayState(double timeout)
state.time_src = ETIMESOURCE_CLOCK;
}
+ state.canpause = true;
+ state.canseek = true;
+
if(m_pInputStream)
{
// override from input stream if needed
@@ -3861,16 +3864,10 @@ void CDVDPlayer::UpdatePlayState(double timeout)
}
}
- if (m_pInputStream->IsStreamType(DVDSTREAM_TYPE_PVRMANAGER))
- {
- CDVDInputStreamPVRManager* pvrinputstream = static_cast<CDVDInputStreamPVRManager*>(m_pInputStream);
- state.canpause = pvrinputstream->CanPause();
- state.canseek = pvrinputstream->CanSeek();
- }
- else
+ if (CDVDInputStream::ISeekable* ptr = dynamic_cast<CDVDInputStream::ISeekable*>(m_pInputStream))
{
- state.canseek = state.time_total > 0 ? true : false;
- state.canpause = true;
+ state.canpause = ptr->CanPause();
+ state.canseek = ptr->CanSeek();
}
}
@@ -3880,10 +3877,13 @@ void CDVDPlayer::UpdatePlayState(double timeout)
state.time_total = m_Edl.RemoveCutTime(llrint(state.time_total));
}
+ if(state.time_total <= 0)
+ state.canseek = false;
+
state.player_state = "";
- if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
+ if(CDVDInputStreamNavigator* ptr = dynamic_cast<CDVDInputStreamNavigator*>(m_pInputStream))
{
- if(!((CDVDInputStreamNavigator*)m_pInputStream)->GetNavigatorState(state.player_state))
+ if(!ptr->GetNavigatorState(state.player_state))
state.player_state = "";
}
--
1.8.1.6
From c817ed00d875174b6789621aba4dc15123c4f3bd Mon Sep 17 00:00:00 2001
From: Joakim Plate <elupus@ecce.se>
Date: Sun, 17 Mar 2013 19:15:13 +0100
Subject: [PATCH 2/3] dvdplayer: disable seeking and pause for udp/rtp and seek
for tcp
---
.../dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.cpp | 17 +++++++++++++++++
.../dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.h | 9 ++++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.cpp
index 72ea5f8..fb5001a 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.cpp
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.cpp
@@ -47,7 +47,24 @@ bool CDVDInputStreamFFmpeg::Open(const char* strFile, const std::string& content
if (!CDVDInputStream::Open(strFile, content))
return false;
+ m_can_pause = true;
+ m_can_seek = true;
+
+ if(strnicmp(strFile, "udp://", 6) == 0
+ || strnicmp(strFile, "rtp://", 6) == 0)
+ {
+ m_can_pause = false;
+ m_can_seek = false;
+ }
+
+ if(strnicmp(strFile, "tcp://", 6) == 0)
+ {
+ m_can_pause = true;
+ m_can_seek = false;
+ }
+
m_aborted = false;
+
return true;
}
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.h b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.h
index 6149233..cf80e8f 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.h
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.h
@@ -22,7 +22,9 @@
#include "DVDInputStream.h"
-class CDVDInputStreamFFmpeg : public CDVDInputStream
+class CDVDInputStreamFFmpeg
+ : public CDVDInputStream
+ , public CDVDInputStream::ISeekable
{
public:
CDVDInputStreamFFmpeg();
@@ -38,6 +40,11 @@ class CDVDInputStreamFFmpeg : public CDVDInputStream
virtual void Abort() { m_aborted = true; }
bool Aborted() { return m_aborted; }
+ bool CanSeek() { return m_can_seek; }
+ bool CanPause() { return m_can_pause; }
+
protected:
bool m_aborted;
+ bool m_can_pause;
+ bool m_can_seek;
};
--
1.8.1.6
From 20562d6450d481967833de7895cd27352a4fdea1 Mon Sep 17 00:00:00 2001
From: Wolfgang Haupt <w.haupt@at-visions.com>
Date: Tue, 7 May 2013 09:43:03 +0200
Subject: [PATCH 3/3] dvdplayer: move navigator state into IMenus
---
.../dvdplayer/DVDInputStreams/DVDInputStream.h | 2 ++
.../DVDInputStreams/DVDInputStreamBluray.h | 2 ++
.../DVDInputStreams/DVDInputStreamNavigator.cpp | 4 +--
.../DVDInputStreams/DVDInputStreamNavigator.h | 4 +--
xbmc/cores/dvdplayer/DVDPlayer.cpp | 38 ++++++++++------------
5 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStream.h b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStream.h
index a5ee3ae..76414b2 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStream.h
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStream.h
@@ -120,6 +120,8 @@ class CDVDInputStream
virtual bool OnMouseClick(const CPoint &point) = 0;
virtual bool IsInMenu() = 0;
virtual double GetTimeStampCorrection() = 0;
+ virtual bool GetState(std::string &xmlstate) { return false; }
+ virtual bool SetState(const std::string &xmlstate) { return false; }
};
class ISeekable
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.h b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.h
index 6897d0f..a7d8f6b 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.h
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamBluray.h
@@ -81,6 +81,8 @@ class CDVDInputStreamBluray
virtual bool OnMouseMove(const CPoint &point) { return false; }
virtual bool OnMouseClick(const CPoint &point) { return false; }
virtual double GetTimeStampCorrection() { return 0.0; }
+ virtual bool GetState(std::string &xmlstate) { return false; }
+ virtual bool SetState(const std::string &xmlstate) { return false; }
void UserInput(bd_vk_key_e vk);
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
index 9cd8cf9..102b862 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp
@@ -1144,7 +1144,7 @@ bool CDVDInputStreamNavigator::IsSubtitleStreamEnabled()
return false;
}
-bool CDVDInputStreamNavigator::GetNavigatorState(std::string &xmlstate)
+bool CDVDInputStreamNavigator::GetState(std::string &xmlstate)
{
if( !m_dvdnav )
return false;
@@ -1165,7 +1165,7 @@ bool CDVDInputStreamNavigator::GetNavigatorState(std::string &xmlstate)
return true;
}
-bool CDVDInputStreamNavigator::SetNavigatorState(std::string &xmlstate)
+bool CDVDInputStreamNavigator::SetState(const std::string &xmlstate)
{
if( !m_dvdnav )
return false;
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.h b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.h
index 0c16642..45b2632 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.h
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.h
@@ -108,8 +108,8 @@ class CDVDInputStreamNavigator
int GetAudioStreamCount();
bool SetActiveAudioStream(int iId);
- bool GetNavigatorState(std::string &xmlstate);
- bool SetNavigatorState(std::string &xmlstate);
+ bool GetState(std::string &xmlstate);
+ bool SetState(const std::string &xmlstate);
int GetChapter() { return m_iPart; } // the current part in the current title
int GetChapterCount() { return m_iPartCount; } // the number of parts in the current title
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 5baf57a..cb8a62b 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -936,16 +936,15 @@ void CDVDPlayer::Process()
return;
}
- if(m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
+ if (CDVDInputStream::IMenus* ptr = dynamic_cast<CDVDInputStream::IMenus*>(m_pInputStream))
{
- CLog::Log(LOGNOTICE, "DVDPlayer: playing a dvd with menu's");
+ CLog::Log(LOGNOTICE, "DVDPlayer: playing a file with menu's");
m_PlayerOptions.starttime = 0;
-
if(m_PlayerOptions.state.size() > 0)
- ((CDVDInputStreamNavigator*)m_pInputStream)->SetNavigatorState(m_PlayerOptions.state);
- else
- ((CDVDInputStreamNavigator*)m_pInputStream)->EnableSubtitleStream(g_settings.m_currentVideoSettings.m_SubtitleOn);
+ ptr->SetState(m_PlayerOptions.state);
+ else if(CDVDInputStreamNavigator* nav = dynamic_cast<CDVDInputStreamNavigator*>(m_pInputStream))
+ nav->EnableSubtitleStream(g_settings.m_currentVideoSettings.m_SubtitleOn);
g_settings.m_currentVideoSettings.m_SubtitleCached = true;
}
@@ -2147,13 +2146,14 @@ void CDVDPlayer::HandleMessages()
CDVDMsgPlayerSetState* pMsgPlayerSetState = (CDVDMsgPlayerSetState*)pMsg;
- if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
+ if (CDVDInputStream::IMenus* ptr = dynamic_cast<CDVDInputStream::IMenus*>(m_pInputStream))
{
- std::string s = pMsgPlayerSetState->GetState();
- ((CDVDInputStreamNavigator*)m_pInputStream)->SetNavigatorState(s);
- m_dvd.state = DVDSTATE_NORMAL;
- m_dvd.iDVDStillStartTime = 0;
- m_dvd.iDVDStillTime = 0;
+ if(ptr->SetState(pMsgPlayerSetState->GetState()))
+ {
+ m_dvd.state = DVDSTATE_NORMAL;
+ m_dvd.iDVDStillStartTime = 0;
+ m_dvd.iDVDStillTime = 0;
+ }
}
g_infoManager.SetDisplayAfterSeek();
@@ -3853,9 +3853,12 @@ void CDVDPlayer::UpdatePlayState(double timeout)
state.time_total = pDisplayTime->GetTotalTime();
state.time_src = ETIMESOURCE_INPUT;
}
-
- if (dynamic_cast<CDVDInputStream::IMenus*>(m_pInputStream))
+
+ if (CDVDInputStream::IMenus* ptr = dynamic_cast<CDVDInputStream::IMenus*>(m_pInputStream))
{
+ if(!ptr->GetState(state.player_state))
+ state.player_state = "";
+
if(m_dvd.state == DVDSTATE_STILL)
{
state.time = XbmcThreads::SystemClockMillis() - m_dvd.iDVDStillStartTime;
@@ -3880,13 +3883,6 @@ void CDVDPlayer::UpdatePlayState(double timeout)
if(state.time_total <= 0)
state.canseek = false;
- state.player_state = "";
- if(CDVDInputStreamNavigator* ptr = dynamic_cast<CDVDInputStreamNavigator*>(m_pInputStream))
- {
- if(!ptr->GetNavigatorState(state.player_state))
- state.player_state = "";
- }
-
if (state.time_src == ETIMESOURCE_CLOCK)
state.time_offset = m_offset_pts;
else
--
1.8.1.6

View File

@ -0,0 +1,25 @@
From 822abd913ab38a742f710173f551bac22477eebd Mon Sep 17 00:00:00 2001
From: Lee Pollock <scudlee@gmail.com>
Date: Wed, 8 May 2013 18:04:41 +0100
Subject: [PATCH] [Fix] Re-get details from nfo file after advancing to first
episodedetails
---
xbmc/NfoFile.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/xbmc/NfoFile.cpp b/xbmc/NfoFile.cpp
index 973e4d0..791c92e 100644
--- a/xbmc/NfoFile.cpp
+++ b/xbmc/NfoFile.cpp
@@ -71,6 +71,7 @@
{
int infos=0;
m_headofdoc = strstr(m_headofdoc,"<episodedetails");
+ bNfo = GetDetails(details);
while (m_headofdoc && details.m_iEpisode != episode)
{
m_headofdoc = strstr(m_headofdoc+1,"<episodedetails");
--
1.8.1.6

View File

@ -0,0 +1,43 @@
From 67fbfc5c5ed4f8186451a9f970c82a10b545d71c Mon Sep 17 00:00:00 2001
From: ulion <ulion2002@gmail.com>
Date: Sat, 11 May 2013 06:03:55 +0800
Subject: [PATCH] Fix color index overflow by reuse existed color in the
vector. Fix #14293
---
xbmc/guilib/GUITextLayout.cpp | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/xbmc/guilib/GUITextLayout.cpp b/xbmc/guilib/GUITextLayout.cpp
index 33c8c48..8dc8b45 100644
--- a/xbmc/guilib/GUITextLayout.cpp
+++ b/xbmc/guilib/GUITextLayout.cpp
@@ -401,9 +401,22 @@ void CGUITextLayout::ParseText(const CStdStringW &text, uint32_t defaultStyle, v
{ // color
size_t finish = text.Find(L']', pos + 5);
if (on && finish != CStdString::npos && (size_t)text.Find(L"[/COLOR]",finish) != CStdString::npos)
- { // create new color
- newColor = colors.size();
- colors.push_back(g_colorManager.GetColor(text.Mid(pos + 5, finish - pos - 5)));
+ {
+ color_t color = g_colorManager.GetColor(text.Mid(pos + 5, finish - pos - 5));
+ vecColors::const_iterator it = std::find(colors.begin(), colors.end(), color);
+ if (it == colors.end())
+ { // create new color
+ if (colors.size() <= 0xFF)
+ {
+ newColor = colors.size();
+ colors.push_back(color);
+ }
+ else // we have only 8 bits for color index, fallback to first color if reach max.
+ newColor = 0;
+ }
+ else
+ // reuse existing color
+ newColor = it - colors.begin();
colorStack.push(newColor);
}
else if (!on && finish == pos + 5 && colorStack.size() > 1)
--
1.8.1.6

View File

@ -0,0 +1,41 @@
From ef82d9b6177a0576548e8e9cdc0eb17cf10524af Mon Sep 17 00:00:00 2001
From: ulion <ulion2002@gmail.com>
Date: Thu, 9 May 2013 13:11:59 +0800
Subject: [PATCH] [OSX] Fix always on top after restore from fullscreen.
---
xbmc/windowing/osx/WinSystemOSX.mm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/xbmc/windowing/osx/WinSystemOSX.mm b/xbmc/windowing/osx/WinSystemOSX.mm
index e45693c..cb86e0a 100644
--- a/xbmc/windowing/osx/WinSystemOSX.mm
+++ b/xbmc/windowing/osx/WinSystemOSX.mm
@@ -710,6 +710,7 @@ static void DisplayReconfigured(CGDirectDisplayID display,
static NSView* last_view = NULL;
static NSSize last_view_size;
static NSPoint last_view_origin;
+ static NSInteger last_window_level = NSNormalWindowLevel;
bool was_fullscreen = m_bFullScreen;
static int lastDisplayNr = res.iScreen;
NSOpenGLContext* cur_context;
@@ -779,6 +780,7 @@ static void DisplayReconfigured(CGDirectDisplayID display,
last_view_origin = [last_view frame].origin;
last_window_screen = [[last_view window] screen];
last_window_origin = [[last_view window] frame].origin;
+ last_window_level = [[last_view window] level];
if (CSettings::Get().GetBool("videoscreen.fakefullscreen"))
{
@@ -891,7 +893,7 @@ static void DisplayReconfigured(CGDirectDisplayID display,
if (CSettings::Get().GetBool("videoscreen.fakefullscreen"))
{
// restore the windowed window level
- [[last_view window] setLevel:NSNormalWindowLevel];
+ [[last_view window] setLevel:last_window_level];
// Get rid of the new window we created.
if (windowedFullScreenwindow != NULL)
--
1.8.1.6

View File

@ -0,0 +1,44 @@
From 07c1ed5752225f44a55ed9099c5cbfd34bff0906 Mon Sep 17 00:00:00 2001
From: Ulion <ulion2002@gmail.com>
Date: Mon, 29 Apr 2013 06:09:14 +0800
Subject: [PATCH] Fix undefined reference caused by wrong detection of gcc
builtin atomic functions.
---
configure.in | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/configure.in b/configure.in
index f0e4905..95f12da 100644
--- a/configure.in
+++ b/configure.in
@@ -850,7 +850,7 @@ AC_CHECK_SIZEOF([size_t])
# Check for intrinsics
AC_MSG_CHECKING([for __sync_add_and_fetch(temp, 1)])
-AC_TRY_COMPILE([],[long* temp=0; __sync_add_and_fetch(temp, 1);],
+AC_TRY_LINK([],[long* temp=0; long ret=__sync_add_and_fetch(temp, 1);],
[have_builtin_sync_add_and_fetch=yes],
[have_builtin_sync_add_and_fetch=no])
AC_MSG_RESULT($have_builtin_sync_add_and_fetch)
@@ -860,7 +860,7 @@ if test "x$have_builtin_sync_add_and_fetch" = "xyes"; then
fi
AC_MSG_CHECKING([for __sync_sub_and_fetch(temp, 1)])
-AC_TRY_COMPILE([],[long* temp=0; __sync_sub_and_fetch(temp, 1);],
+AC_TRY_LINK([],[long* temp=0; long ret=__sync_sub_and_fetch(temp, 1);],
[have_builtin_sync_sub_and_fetch=yes],
[have_builtin_sync_sub_and_fetch=no])
AC_MSG_RESULT($have_builtin_sync_sub_and_fetch)
@@ -870,7 +870,7 @@ if test "x$have_builtin_sync_sub_and_fetch" = "xyes"; then
fi
AC_MSG_CHECKING([for __sync_val_compare_and_swap(temp, 1, 1)])
-AC_TRY_COMPILE([],[long *temp = 0; __sync_val_compare_and_swap(temp, 1, 1);],
+AC_TRY_LINK([],[long *temp = 0; long ret=__sync_val_compare_and_swap(temp, 1, 1);],
[have_builtin_sync_val_compare_and_swap=yes],
[have_builtin_sync_val_compare_and_swap=no])
AC_MSG_RESULT($have_builtin_sync_val_compare_and_swap)
--
1.8.1.6

View File

@ -0,0 +1,26 @@
From 01480bb7ab2022616c938d2fd222cfdafa243b67 Mon Sep 17 00:00:00 2001
From: ulion <ulion2002@gmail.com>
Date: Wed, 10 Apr 2013 19:54:54 +0800
Subject: [PATCH] avoid detect folder.jpg under 'add' item.
---
xbmc/pictures/PictureThumbLoader.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/xbmc/pictures/PictureThumbLoader.cpp b/xbmc/pictures/PictureThumbLoader.cpp
index ddff86c..61c624d 100644
--- a/xbmc/pictures/PictureThumbLoader.cpp
+++ b/xbmc/pictures/PictureThumbLoader.cpp
@@ -132,7 +132,8 @@ void CPictureThumbLoader::ProcessFoldersAndArchives(CFileItem *pItem)
return;
}
}
- if ((pItem->m_bIsFolder || pItem->IsCBR() || pItem->IsCBZ()) && !pItem->m_bIsShareOrDrive && !pItem->IsParentFolder())
+ if ((pItem->m_bIsFolder || pItem->IsCBR() || pItem->IsCBZ()) && !pItem->m_bIsShareOrDrive
+ && !pItem->IsParentFolder() && !pItem->GetPath().Equals("add"))
{
// first check for a folder.jpg
CStdString thumb = "folder.jpg";
--
1.8.1.6

View File

@ -0,0 +1,45 @@
From 937e565410c19c0c3c3651c467c919a69cf027a2 Mon Sep 17 00:00:00 2001
From: ulion <ulion2002@gmail.com>
Date: Mon, 13 May 2013 08:41:14 +0800
Subject: [PATCH] Fix color tag didn't hide bug introduced by PR2725.
---
xbmc/guilib/GUITextLayout.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/xbmc/guilib/GUITextLayout.cpp b/xbmc/guilib/GUITextLayout.cpp
index 8dc8b45..49c0459 100644
--- a/xbmc/guilib/GUITextLayout.cpp
+++ b/xbmc/guilib/GUITextLayout.cpp
@@ -354,6 +354,7 @@ void CGUITextLayout::ParseText(const CStdStringW &text, uint32_t defaultStyle, v
{
uint32_t newStyle = 0;
color_t newColor = currentColor;
+ bool colorTagChange = false;
bool newLine = false;
// have a [ - check if it's an ON or OFF switch
bool on(true);
@@ -418,17 +419,19 @@ void CGUITextLayout::ParseText(const CStdStringW &text, uint32_t defaultStyle, v
// reuse existing color
newColor = it - colors.begin();
colorStack.push(newColor);
+ colorTagChange = true;
}
else if (!on && finish == pos + 5 && colorStack.size() > 1)
{ // revert to previous color
colorStack.pop();
newColor = colorStack.top();
+ colorTagChange = true;
}
if (finish != CStdString::npos)
pos = finish + 1;
}
- if (newStyle || newColor != currentColor || newLine)
+ if (newStyle || colorTagChange || newLine)
{ // we have a new style or a new color, so format up the previous segment
CStdStringW subText = text.Mid(startPos, endPos - startPos);
if (currentStyle & FONT_STYLE_UPPERCASE)
--
1.8.1.6

View File

@ -0,0 +1,28 @@
From 2441ddbbd638fb8b81c0eed46a78ba1a1b228413 Mon Sep 17 00:00:00 2001
From: Rainer Hochecker <fernetmenta@online.de>
Date: Fri, 17 May 2013 09:19:16 +0200
Subject: [PATCH] backport some constructor initializations from
92e8bc4a4361d730abac9ad3080cd6923e9d551a
---
xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
index f70a4f9..5af76d0 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
@@ -147,6 +147,10 @@
dl_vdp_device_create_x11 = NULL;
dl_vdp_get_proc_address = NULL;
dl_vdp_preemption_callback_register = NULL;
+ past[0] = NULL;
+ past[1] = NULL;
+ current = NULL;
+ future = NULL;
}
bool CVDPAU::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int surfaces)
--
1.8.1.6

View File

@ -0,0 +1,85 @@
From 6cba369a0f54231b145ce6b07a42cd1cd32261ec Mon Sep 17 00:00:00 2001
From: ulion <ulion2002@gmail.com>
Date: Sun, 21 Apr 2013 04:43:30 +0800
Subject: [PATCH] Fixed: do not send Range request header when encounter error.
---
xbmc/filesystem/CurlFile.cpp | 20 +++++++++++++++++++-
xbmc/filesystem/CurlFile.h | 1 +
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/xbmc/filesystem/CurlFile.cpp b/xbmc/filesystem/CurlFile.cpp
index ff8250c..8667fc6 100644
--- a/xbmc/filesystem/CurlFile.cpp
+++ b/xbmc/filesystem/CurlFile.cpp
@@ -197,6 +197,7 @@ size_t CCurlFile::CReadState::WriteCallback(char *buffer, size_t size, size_t ni
m_bufferSize = 0;
m_cancelled = false;
m_bFirstLoop = true;
+ m_sendRange = true;
m_headerdone = false;
}
@@ -255,8 +256,13 @@ void CCurlFile::CReadState::SetResume(void)
* 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.
*/
- if (m_filePos == 0)
+ if (m_sendRange && m_filePos == 0)
g_curlInterface.easy_setopt(m_easyHandle, CURLOPT_RANGE, "0-");
+ else
+ {
+ g_curlInterface.easy_setopt(m_easyHandle, CURLOPT_RANGE, NULL);
+ m_sendRange = false;
+ }
g_curlInterface.easy_setopt(m_easyHandle, CURLOPT_RESUME_FROM_LARGE, m_filePos);
}
@@ -866,6 +872,7 @@ bool CCurlFile::Open(const CURL& url)
// setup common curl options
SetCommonOptions(m_state);
SetRequestHeaders(m_state);
+ m_state->m_sendRange = m_seekable;
m_httpresponse = m_state->Connect(m_bufferSize);
if( m_httpresponse < 0 || m_httpresponse >= 400)
@@ -1046,6 +1053,7 @@ int64_t CCurlFile::Seek(int64_t iFilePosition, int iWhence)
SetRequestHeaders(m_state);
m_state->m_filePos = nextPos;
+ m_state->m_sendRange = true;
if (oldstate)
m_state->m_fileSize = oldstate->m_fileSize;
@@ -1287,6 +1295,16 @@ bool CCurlFile::CReadState::FillBuffer(unsigned int want)
msg->data.result == CURLE_RECV_ERROR) &&
!m_bFirstLoop)
CURLresult = msg->data.result;
+ else if ( (msg->data.result == CURLE_HTTP_RANGE_ERROR ||
+ msg->data.result == CURLE_HTTP_RETURNED_ERROR) &&
+ m_bFirstLoop &&
+ m_filePos == 0 &&
+ m_sendRange)
+ {
+ // If server returns a range or http error, retry with range disabled
+ CURLresult = msg->data.result;
+ m_sendRange = false;
+ }
else
return false;
}
diff --git a/xbmc/filesystem/CurlFile.h b/xbmc/filesystem/CurlFile.h
index d25fb58..a48207a 100644
--- a/xbmc/filesystem/CurlFile.h
+++ b/xbmc/filesystem/CurlFile.h
@@ -101,6 +101,7 @@
int64_t m_fileSize;
int64_t m_filePos;
bool m_bFirstLoop;
+ bool m_sendRange;
/* returned http header */
CHttpHeader m_httpheader;
--
1.8.1.6

View File

@ -0,0 +1,27 @@
From 812a89032539d7d40d8d27b10337c1dd2ccca29b Mon Sep 17 00:00:00 2001
From: montellese <montellese@xbmc.org>
Date: Sun, 19 May 2013 15:46:05 +0200
Subject: [PATCH] CGUISliderControl: only switch between selectors on <Enter>
if there are more than one
---
xbmc/guilib/GUISliderControl.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/xbmc/guilib/GUISliderControl.cpp b/xbmc/guilib/GUISliderControl.cpp
index 9de3413..5cce7a8 100644
--- a/xbmc/guilib/GUISliderControl.cpp
+++ b/xbmc/guilib/GUISliderControl.cpp
@@ -174,7 +174,8 @@ bool CGUISliderControl::OnAction(const CAction &action)
case ACTION_SELECT_ITEM:
// switch between the two sliders
- SwitchRangeSelector();
+ if (m_rangeSelection)
+ SwitchRangeSelector();
return true;
default:
--
1.8.1.6

View File

@ -0,0 +1,28 @@
From 2e18d8108e29d58199616d7d6457026ef736cf47 Mon Sep 17 00:00:00 2001
From: Rainer Hochecker <fernetmenta@online.de>
Date: Fri, 17 May 2013 09:07:27 +0200
Subject: [PATCH] pvr: fix channel switch for addons using other stream
---
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp
index aa3298b..397ea5d 100644
--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp
+++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamPVRManager.cpp
@@ -315,8 +315,9 @@ bool CDVDInputStreamPVRManager::UpdateItem(CFileItem& item)
m_eof = IsEOF();
- if (m_pOtherStream)
- return m_pOtherStream->NextStream();
+ CDVDInputStream::ENextStream next;
+ if (m_pOtherStream && ((next = m_pOtherStream->NextStream()) != NEXTSTREAM_NONE))
+ return next;
else if(m_pFile->SkipNext())
{
if (m_eof)
--
1.8.1.6