diff options
author | Mathieu Malaterre <mathieu.malaterre@gmail.com> | 2018-03-13 22:53:11 +0100 |
---|---|---|
committer | Mathieu Malaterre <mathieu.malaterre@gmail.com> | 2018-03-14 12:08:44 +0100 |
commit | 4feacb457cd4801dc8ad120a5e7efcdcb40aafff (patch) | |
tree | 700fbb6d38929cf30d6567a460e04fba6ec34cbb | |
parent | 78aafccf8fcf45e1b38f0af8b6003bc511f20f9a (diff) |
Add support for scanning AVI files
Signed-off-by: Mathieu Malaterre <mathieu.malaterre@gmail.com>
-rw-r--r-- | xbmc/video/tags/VideoInfoTagLoaderFactory.cpp | 2 | ||||
-rw-r--r-- | xbmc/video/tags/VideoTagLoaderFFmpeg.cpp | 20 | ||||
-rw-r--r-- | xbmc/video/tags/VideoTagLoaderFFmpeg.h | 3 |
3 files changed, 23 insertions, 2 deletions
diff --git a/xbmc/video/tags/VideoInfoTagLoaderFactory.cpp b/xbmc/video/tags/VideoInfoTagLoaderFactory.cpp index c6de0d0992..cf60ac6a2a 100644 --- a/xbmc/video/tags/VideoInfoTagLoaderFactory.cpp +++ b/xbmc/video/tags/VideoInfoTagLoaderFactory.cpp @@ -41,7 +41,7 @@ IVideoInfoTagLoader* CVideoInfoTagLoaderFactory::CreateLoader(const CFileItem& i delete nfo; if (CServiceBroker::GetSettings().GetBool(CSettings::SETTING_MYVIDEOS_USETAGS) && - (item.IsType(".mkv") || item.IsType(".mp4"))) + (item.IsType(".mkv") || item.IsType(".mp4") || item.IsType(".avi"))) { CVideoTagLoaderFFmpeg* ff = new CVideoTagLoaderFFmpeg(item, info, lookInFolder); if (ff->HasInfo()) diff --git a/xbmc/video/tags/VideoTagLoaderFFmpeg.cpp b/xbmc/video/tags/VideoTagLoaderFFmpeg.cpp index c5596cd8ce..ec3e71acb1 100644 --- a/xbmc/video/tags/VideoTagLoaderFFmpeg.cpp +++ b/xbmc/video/tags/VideoTagLoaderFFmpeg.cpp @@ -123,7 +123,7 @@ bool CVideoTagLoaderFFmpeg::HasInfo() const avtag = av_dict_get(m_fctx->metadata, "TMDBURL", nullptr, AV_DICT_IGNORE_SUFFIX); if (!avtag) avtag = av_dict_get(m_fctx->metadata, "TITLE", nullptr, AV_DICT_IGNORE_SUFFIX); - } else if (m_item.IsType(".mp4")) + } else if (m_item.IsType(".mp4") || m_item.IsType(".avi")) avtag = av_dict_get(m_fctx->metadata, "title", nullptr, AV_DICT_IGNORE_SUFFIX); return avtag != nullptr; @@ -136,6 +136,8 @@ CInfoScanner::INFO_TYPE CVideoTagLoaderFFmpeg::Load(CVideoInfoTag& tag, return LoadMKV(tag, art); else if (m_item.IsType(".mp4")) return LoadMP4(tag, art); + else if (m_item.IsType(".avi")) + return LoadAVI(tag, art); else return CInfoScanner::NO_NFO; @@ -255,3 +257,19 @@ CInfoScanner::INFO_TYPE CVideoTagLoaderFFmpeg::LoadMP4(CVideoInfoTag& tag, return hasfull ? CInfoScanner::FULL_NFO : CInfoScanner::TITLE_NFO; } + +// https://wiki.multimedia.cx/index.php/FFmpeg_Metadata#AVI +CInfoScanner::INFO_TYPE CVideoTagLoaderFFmpeg::LoadAVI(CVideoInfoTag& tag, + std::vector<EmbeddedArt>* art) +{ + AVDictionaryEntry* avtag = nullptr; + while ((avtag = av_dict_get(m_fctx->metadata, "", avtag, AV_DICT_IGNORE_SUFFIX))) + { + if (strcmp(avtag->key, "title") == 0) + tag.SetTitle(avtag->value); + else if (strcmp(avtag->key,"date") == 0) + tag.SetYear(atoi(avtag->value)); + } + + return CInfoScanner::TITLE_NFO; +} diff --git a/xbmc/video/tags/VideoTagLoaderFFmpeg.h b/xbmc/video/tags/VideoTagLoaderFFmpeg.h index 26567bf9a3..7dd9f8b2b8 100644 --- a/xbmc/video/tags/VideoTagLoaderFFmpeg.h +++ b/xbmc/video/tags/VideoTagLoaderFFmpeg.h @@ -66,5 +66,8 @@ protected: //! \brief Load tags from MP4 file. CInfoScanner::INFO_TYPE LoadMP4(CVideoInfoTag& tag, std::vector<EmbeddedArt>* art); + + //! \brief Load tags from AVI file. + CInfoScanner::INFO_TYPE LoadAVI(CVideoInfoTag& tag, std::vector<EmbeddedArt>* art); }; |