From 7f30143204ff0bc925ed92c96c94fcee4e2b30dc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 5 Mar 2014 00:34:58 +0100 Subject: [PATCH] xbmc: add PR4296 Signed-off-by: Stephan Raue --- .../xbmc/patches/xbmc-999.80.009-PR4296.patch | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 packages/mediacenter/xbmc/patches/xbmc-999.80.009-PR4296.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-999.80.009-PR4296.patch b/packages/mediacenter/xbmc/patches/xbmc-999.80.009-PR4296.patch new file mode 100644 index 0000000000..9bacb065b0 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/xbmc-999.80.009-PR4296.patch @@ -0,0 +1,100 @@ +From ee4270426da6800d5ac21c50c1c7aaa94eec60c7 Mon Sep 17 00:00:00 2001 +From: Voyager1 +Date: Fri, 28 Feb 2014 21:10:26 +0100 +Subject: [PATCH 1/2] [DVDInputStreamNavigator] allow fallback to root menu + call if title menu call fails (like VLC) + +--- + xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp +index de4f3d3..2b7de16 100644 +--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp ++++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp +@@ -187,8 +187,14 @@ bool CDVDInputStreamNavigator::Open(const char* strFile, const std::string& cont + m_dll.dvdnav_get_next_cache_block(m_dvdnav,&buf_ptr,&event,&len); + m_dll.dvdnav_sector_search(m_dvdnav, 0, SEEK_SET); + ++ // first try title menu + if(m_dll.dvdnav_menu_call(m_dvdnav, DVD_MENU_Title) != DVDNAV_STATUS_OK) ++ { + CLog::Log(LOGERROR,"Error on dvdnav_menu_call(Title): %s\n", m_dll.dvdnav_err_to_string(m_dvdnav)); ++ // next try root menu ++ if(m_dll.dvdnav_menu_call(m_dvdnav, DVD_MENU_Root) != DVDNAV_STATUS_OK ) ++ CLog::Log(LOGERROR,"Error on dvdnav_menu_call(Root): %s\n", m_dll.dvdnav_err_to_string(m_dvdnav)); ++ } + } + + m_bEOF = false; +-- +1.8.5.5 + + +From 65d19589e577df91bdf922081bb373dc7b517074 Mon Sep 17 00:00:00 2001 +From: Voyager1 +Date: Fri, 28 Feb 2014 21:11:31 +0100 +Subject: [PATCH 2/2] [DVDInputStreamNavigator] allow to return from "endless" + loop of NOPs + +--- + .../dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp | 12 ++++++++++++ + xbmc/cores/dvdplayer/DVDPlayer.cpp | 1 + + xbmc/cores/omxplayer/OMXPlayer.cpp | 1 + + 3 files changed, 14 insertions(+) + +diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp +index 2b7de16..015a2ae 100644 +--- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp ++++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamNavigator.cpp +@@ -239,11 +239,23 @@ int CDVDInputStreamNavigator::Read(uint8_t* buf, int buf_size) + + int iBytesRead; + ++ int NOPcount = 0; + while(true) { + int navresult = ProcessBlock(buf, &iBytesRead); + if (navresult == NAVRESULT_HOLD) return 0; // return 0 bytes read; + else if (navresult == NAVRESULT_ERROR) return -1; + else if (navresult == NAVRESULT_DATA) return iBytesRead; ++ else if (navresult == NAVRESULT_NOP) ++ { ++ NOPcount++; ++ if (NOPcount == 1000) ++ { ++ m_bEOF = true; ++ CLog::Log(LOGERROR,"CDVDInputStreamNavigator: Stopping playback due to infinite loop, caused by badly authored DVD navigation structure. Try enabling 'Attempt to skip introduction before DVD menu'."); ++ m_pDVDPlayer->OnDVDNavResult(NULL, DVDNAV_STOP); ++ return -1; // fail and stop playback. ++ } ++ } + } + + return iBytesRead; +diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp +index b056c8b..51dca5b 100644 +--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp ++++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp +@@ -3560,6 +3560,7 @@ int CDVDPlayer::OnDVDNavResult(void* pData, int iMessage) + { + CLog::Log(LOGDEBUG, "DVDNAV_STOP"); + m_dvd.state = DVDSTATE_NORMAL; ++ CGUIDialogKaiToast::QueueNotification(g_localizeStrings.Get(16026), g_localizeStrings.Get(16029)); + } + break; + default: +diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp +index a3d3928..9799a10 100644 +--- a/xbmc/cores/omxplayer/OMXPlayer.cpp ++++ b/xbmc/cores/omxplayer/OMXPlayer.cpp +@@ -3831,6 +3831,7 @@ int COMXPlayer::OnDVDNavResult(void* pData, int iMessage) + { + CLog::Log(LOGDEBUG, "DVDNAV_STOP"); + m_dvd.state = DVDSTATE_NORMAL; ++ CGUIDialogKaiToast::QueueNotification(g_localizeStrings.Get(16026), g_localizeStrings.Get(16029)); + } + break; + default: +-- +1.8.5.5 +