From 6d6759e8a16f849d1152a463d82ddefc53f8d13e Mon Sep 17 00:00:00 2001 From: taxigps Date: Tue, 5 Apr 2016 00:25:15 +0800 Subject: add support for external PGS/.sup subtitles --- xbmc/Util.cpp | 23 ++++++++++++++++++++++ xbmc/Util.h | 1 + .../DVDInputStreams/DVDFactoryInputStream.cpp | 1 + xbmc/utils/Mime.cpp | 1 + 4 files changed, 26 insertions(+) diff --git a/xbmc/Util.cpp b/xbmc/Util.cpp index 845df864fa..79bf03da29 100644 --- a/xbmc/Util.cpp +++ b/xbmc/Util.cpp @@ -2145,6 +2145,29 @@ std::string CUtil::GetVobSubIdxFromSub(const std::string& vobSub) return std::string(); } +void CUtil::ScanForExternalDemuxSub(const std::string& videoPath, std::vector& vecSubtitles) +{ + CFileItem item(videoPath, false); + if (item.IsInternetStream() + || item.IsPlayList() + || item.IsLiveTV() + || item.IsPVR() + || !item.IsVideo()) + return; + + std::string strBasePath; + std::string strSubtitle; + + GetVideoBasePathAndFileName(videoPath, strBasePath, strSubtitle); + + CFileItemList items; + const std::vector common_sub_dirs = { "subs", "subtitles", "vobsubs", "sub", "vobsub", "subtitle" }; + const std::string DemuxSubExtensions = ".sup"; + GetItemsToScan(strBasePath, DemuxSubExtensions, common_sub_dirs, items); + + std::vector exts = StringUtils::Split(g_advancedSettings.GetMusicExtensions(), "|"); + ScanPathsForAssociatedItems(strSubtitle, items, exts, vecSubtitles); +} void CUtil::ScanForExternalAudio(const std::string& videoPath, std::vector& vecAudio) { diff --git a/xbmc/Util.h b/xbmc/Util.h index d6c3fb3441..fca9e13b9a 100644 --- a/xbmc/Util.h +++ b/xbmc/Util.h @@ -94,6 +94,7 @@ public: * \param[out] vecAudio A vector containing the full paths of all found external audio files. */ static void ScanForExternalAudio(const std::string& videoPath, std::vector& vecAudio); + static void ScanForExternalDemuxSub(const std::string& videoPath, std::vector& vecSubtitles); static int64_t ToInt64(uint32_t high, uint32_t low); static std::string GetNextFilename(const std::string &fn_template, int max); static std::string GetNextPathname(const std::string &path_template, int max); diff --git a/xbmc/cores/VideoPlayer/DVDInputStreams/DVDFactoryInputStream.cpp b/xbmc/cores/VideoPlayer/DVDInputStreams/DVDFactoryInputStream.cpp index 00c398152d..a94a12aba9 100644 --- a/xbmc/cores/VideoPlayer/DVDInputStreams/DVDFactoryInputStream.cpp +++ b/xbmc/cores/VideoPlayer/DVDInputStreams/DVDFactoryInputStream.cpp @@ -54,6 +54,7 @@ CDVDInputStream* CDVDFactoryInputStream::CreateInputStream(IVideoPlayer* pPlayer std::vector filenames; filenames.push_back(file); CUtil::ScanForExternalAudio(file, filenames); + CUtil::ScanForExternalDemuxSub(file, filenames); if (filenames.size() >= 2) { return CreateInputStream(pPlayer, fileitem, filenames); diff --git a/xbmc/utils/Mime.cpp b/xbmc/utils/Mime.cpp index e5dc65d30c..8845b5340e 100644 --- a/xbmc/utils/Mime.cpp +++ b/xbmc/utils/Mime.cpp @@ -391,6 +391,7 @@ std::map fillMimeTypes() mimeTypes.insert(std::pair("step", "application/step")); mimeTypes.insert(std::pair("stl", "application/sla")); mimeTypes.insert(std::pair("stp", "application/step")); + mimeTypes.insert(std::pair("sup", "application/x-pgs")); mimeTypes.insert(std::pair("sv4cpio", "application/x-sv4cpio")); mimeTypes.insert(std::pair("sv4crc", "application/x-sv4crc")); mimeTypes.insert(std::pair("svf", "image/vnd.dwg")); -- cgit v1.2.3