From cd889c4767f6ffbf4e5b9e84fcaba961e1cea889 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 5 Jun 2013 06:05:02 +0200 Subject: [PATCH] xbmc: add upstream patches Signed-off-by: Stephan Raue --- .../patches/12.2.0/xbmc-990.14-PR2700.patch | 322 ++++++++++++++++++ .../12.2.0/xbmc-990.16-XB822abd9.patch | 25 ++ .../12.2.0/xbmc-990.17.01-XB67fbfc5.patch | 43 +++ .../12.2.0/xbmc-990.17.02-XBef82d9b.patch | 41 +++ .../12.2.0/xbmc-990.17.03-XB07c1ed5.patch | 44 +++ .../12.2.0/xbmc-990.17.04-XB01480bb.patch | 26 ++ ...3.patch => xbmc-990.17.05-XBff283b0.patch} | 0 .../12.2.0/xbmc-990.17.06-XB937e565.patch | 45 +++ .../patches/12.2.0/xbmc-990.18-2758.patch.bk | 28 ++ .../patches/12.2.0/xbmc-990.19-PR2761.patch | 85 +++++ .../12.2.0/xbmc-990.20-XB812a890.patch | 27 ++ .../12.2.0/xbmc-990.21-XB2e18d81.patch | 28 ++ 12 files changed, 714 insertions(+) create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.14-PR2700.patch create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.16-XB822abd9.patch create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.01-XB67fbfc5.patch create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.02-XBef82d9b.patch create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.03-XB07c1ed5.patch create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.04-XB01480bb.patch rename packages/mediacenter/xbmc/patches/12.2.0/{xbmc-990.13-PR2493.patch => xbmc-990.17.05-XBff283b0.patch} (100%) create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.06-XB937e565.patch create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.18-2758.patch.bk create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.19-PR2761.patch create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.20-XB812a890.patch create mode 100644 packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.21-XB2e18d81.patch diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.14-PR2700.patch b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.14-PR2700.patch new file mode 100644 index 0000000000..0ac0d2cc14 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.14-PR2700.patch @@ -0,0 +1,322 @@ +From 85891c135b848d8f11a5410d867f67e0515d3d0b Mon Sep 17 00:00:00 2001 +From: Joakim Plate +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(m_pInputStream); +- state.canpause = pvrinputstream->CanPause(); +- state.canseek = pvrinputstream->CanSeek(); +- } +- else ++ if (CDVDInputStream::ISeekable* ptr = dynamic_cast(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(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 +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 +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(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(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(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(m_pInputStream)) ++ ++ if (CDVDInputStream::IMenus* ptr = dynamic_cast(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(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 + diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.16-XB822abd9.patch b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.16-XB822abd9.patch new file mode 100644 index 0000000000..0fd16ed008 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.16-XB822abd9.patch @@ -0,0 +1,25 @@ +From 822abd913ab38a742f710173f551bac22477eebd Mon Sep 17 00:00:00 2001 +From: Lee Pollock +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," +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 + diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.02-XBef82d9b.patch b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.02-XBef82d9b.patch new file mode 100644 index 0000000000..8551ec48c0 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.02-XBef82d9b.patch @@ -0,0 +1,41 @@ +From ef82d9b6177a0576548e8e9cdc0eb17cf10524af Mon Sep 17 00:00:00 2001 +From: ulion +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 + diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.03-XB07c1ed5.patch b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.03-XB07c1ed5.patch new file mode 100644 index 0000000000..99406bd7b8 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.03-XB07c1ed5.patch @@ -0,0 +1,44 @@ +From 07c1ed5752225f44a55ed9099c5cbfd34bff0906 Mon Sep 17 00:00:00 2001 +From: Ulion +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 + diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.04-XB01480bb.patch b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.04-XB01480bb.patch new file mode 100644 index 0000000000..0bf2742f28 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.04-XB01480bb.patch @@ -0,0 +1,26 @@ +From 01480bb7ab2022616c938d2fd222cfdafa243b67 Mon Sep 17 00:00:00 2001 +From: ulion +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 + diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.13-PR2493.patch b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.05-XBff283b0.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.13-PR2493.patch rename to packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.05-XBff283b0.patch diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.06-XB937e565.patch b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.06-XB937e565.patch new file mode 100644 index 0000000000..296012c069 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.17.06-XB937e565.patch @@ -0,0 +1,45 @@ +From 937e565410c19c0c3c3651c467c919a69cf027a2 Mon Sep 17 00:00:00 2001 +From: ulion +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 + diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.18-2758.patch.bk b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.18-2758.patch.bk new file mode 100644 index 0000000000..fa0cd1d77b --- /dev/null +++ b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.18-2758.patch.bk @@ -0,0 +1,28 @@ +From 2441ddbbd638fb8b81c0eed46a78ba1a1b228413 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +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 + diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.19-PR2761.patch b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.19-PR2761.patch new file mode 100644 index 0000000000..3309abec04 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.19-PR2761.patch @@ -0,0 +1,85 @@ +From 6cba369a0f54231b145ce6b07a42cd1cd32261ec Mon Sep 17 00:00:00 2001 +From: ulion +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 + diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.20-XB812a890.patch b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.20-XB812a890.patch new file mode 100644 index 0000000000..7990929a24 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.20-XB812a890.patch @@ -0,0 +1,27 @@ +From 812a89032539d7d40d8d27b10337c1dd2ccca29b Mon Sep 17 00:00:00 2001 +From: montellese +Date: Sun, 19 May 2013 15:46:05 +0200 +Subject: [PATCH] CGUISliderControl: only switch between selectors on + 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 + diff --git a/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.21-XB2e18d81.patch b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.21-XB2e18d81.patch new file mode 100644 index 0000000000..e2f0da65a5 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.21-XB2e18d81.patch @@ -0,0 +1,28 @@ +From 2e18d8108e29d58199616d7d6457026ef736cf47 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +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 +