aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Malaterre <mathieu.malaterre@gmail.com>2018-03-13 22:53:11 +0100
committerMathieu Malaterre <mathieu.malaterre@gmail.com>2018-03-14 12:08:44 +0100
commit4feacb457cd4801dc8ad120a5e7efcdcb40aafff (patch)
tree700fbb6d38929cf30d6567a460e04fba6ec34cbb
parent78aafccf8fcf45e1b38f0af8b6003bc511f20f9a (diff)
Add support for scanning AVI files
Signed-off-by: Mathieu Malaterre <mathieu.malaterre@gmail.com>
-rw-r--r--xbmc/video/tags/VideoInfoTagLoaderFactory.cpp2
-rw-r--r--xbmc/video/tags/VideoTagLoaderFFmpeg.cpp20
-rw-r--r--xbmc/video/tags/VideoTagLoaderFFmpeg.h3
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);
};