From ac0a10147f3ec2bbc454a2913de49cf6ecf91752 Mon Sep 17 00:00:00 2001 From: emeric Date: Sun, 4 Jan 2026 12:34:57 +0100 Subject: [PATCH] Use av_dict_iterate only if supported, fixes #801 --- src/libs/audio/impl/ffmpeg/AudioFile.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libs/audio/impl/ffmpeg/AudioFile.cpp b/src/libs/audio/impl/ffmpeg/AudioFile.cpp index 1583eb73..83de989e 100644 --- a/src/libs/audio/impl/ffmpeg/AudioFile.cpp +++ b/src/libs/audio/impl/ffmpeg/AudioFile.cpp @@ -37,13 +37,15 @@ extern "C" #include "audio/Exception.hpp" +#define LMS_FFMPEG_HAS_AV_DICT_ITERATE (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 37, 100)) + namespace lms::audio::ffmpeg { namespace { std::string averror_to_string(int error) { - std::array buf = { 0 }; + std::array buf{ 0 }; if (::av_strerror(error, buf.data(), buf.size()) == 0) return buf.data(); @@ -65,9 +67,16 @@ namespace lms::audio::ffmpeg if (!dictionnary) return; +#if LMS_FFMPEG_HAS_AV_DICT_ITERATE const AVDictionaryEntry* tag{ NULL }; while ((tag = av_dict_iterate(dictionnary, tag))) res[core::stringUtils::stringToUpper(tag->key)] = tag->value; +#else + AVDictionaryEntry* tag{}; + while ((tag = av_dict_get(dictionnary, "", tag, AV_DICT_IGNORE_SUFFIX))) + res[core::stringUtils::stringToUpper(tag->key)] = tag->value; + +#endif // LMS_FFMPEG_HAS_AV_DICT_ITERATE } std::optional avdemuxerToContainerType(std::string_view name)