Backport some bug fixes. Signed-off-by: Rosen Penev <rosenp@gmail.com>lilik-openwrt-22.03
@ -1,39 +0,0 @@ | |||
From 82d84ac5e62c23e717198fc7b2ef190ff95e70d1 Mon Sep 17 00:00:00 2001 | |||
From: kyak <bas@bmail.ru> | |||
Date: Wed, 12 Jan 2022 19:41:37 +0300 | |||
Subject: [PATCH] Fix for fmt > 8.0 | |||
--- | |||
src/util/logger.h | 15 +++++++++++++++ | |||
1 file changed, 15 insertions(+) | |||
--- a/src/util/logger.h | |||
+++ b/src/util/logger.h | |||
@@ -32,7 +32,9 @@ | |||
#ifndef __LOGGER_H__ | |||
#define __LOGGER_H__ | |||
+#include <fmt/format.h> | |||
#include <spdlog/spdlog.h> | |||
+#include <type_traits> | |||
#define log_debug SPDLOG_DEBUG | |||
#define log_info SPDLOG_INFO | |||
@@ -40,4 +42,17 @@ | |||
#define log_error SPDLOG_ERROR | |||
#define log_js SPDLOG_INFO | |||
+#if FMT_VERSION >= 80100 | |||
+template <typename T> | |||
+struct fmt::formatter<T, std::enable_if_t<std::is_enum_v<T>, char>> | |||
+ : formatter<std::underlying_type_t<T>> { | |||
+ template <typename FormatContext> | |||
+ auto format(const T& value, FormatContext& ctx) -> decltype(ctx.out()) | |||
+ { | |||
+ return fmt::formatter<std::underlying_type_t<T>>::format( | |||
+ static_cast<std::underlying_type_t<T>>(value), ctx); | |||
+ } | |||
+}; | |||
+#endif | |||
+ | |||
#endif // __LOGGER_H__ |
@ -0,0 +1,21 @@ | |||
From c479fba2f0f478e828cd08dde3c3b5e8ae7908d4 Mon Sep 17 00:00:00 2001 | |||
From: Rosen Penev <rosenp@gmail.com> | |||
Date: Mon, 29 Nov 2021 18:31:14 -0800 | |||
Subject: [PATCH] fix matroska memory leaks | |||
Signed-off-by: Rosen Penev <rosenp@gmail.com> | |||
--- | |||
src/metadata/matroska_handler.cc | 2 -- | |||
1 file changed, 2 deletions(-) | |||
--- a/src/metadata/matroska_handler.cc | |||
+++ b/src/metadata/matroska_handler.cc | |||
@@ -137,8 +137,6 @@ void MatroskaHandler::parseMKV(const std | |||
delete (elL1->SkipData(ebmlStream, elL1->Generic().Context)); | |||
delete elL1; | |||
- if (activeFlag == 0) // terminate search | |||
- break; | |||
} // while elementLevel1 | |||
delete (elL0->SkipData(ebmlStream, LIBMATROSKA_NAMESPACE::KaxSegment_Context)); |
@ -0,0 +1,22 @@ | |||
From 97c5a5fbc27452ee5970f9c7be946d3819a79d05 Mon Sep 17 00:00:00 2001 | |||
From: Karlchen <k_straussberger@netzland.net> | |||
Date: Sat, 26 Feb 2022 23:32:42 +0100 | |||
Subject: [PATCH] Fix playlist parser error | |||
closes #2463 | |||
--- | |||
src/content/scripting/playlist_parser_script.cc | 2 +- | |||
1 file changed, 1 insertion(+), 1 deletion(-) | |||
--- a/src/content/scripting/playlist_parser_script.cc | |||
+++ b/src/content/scripting/playlist_parser_script.cc | |||
@@ -218,8 +218,8 @@ void PlaylistParserScript::processPlayli | |||
auto item = std::static_pointer_cast<CdsItem>(obj); | |||
log_debug("Checking playlist {} ...", obj->getLocation().string()); | |||
+ GrbFile file(item->getLocation()); | |||
if (item->getMimeType() != MIME_TYPE_ASX_PLAYLIST) { | |||
- GrbFile file(item->getLocation()); | |||
currentHandle = file.open("r"); | |||
} else { | |||
pugi::xml_parse_result result = xmlDoc->load_file(item->getLocation().c_str()); |
@ -0,0 +1,46 @@ | |||
From 1ee40116ece90a5504cd33a23d6bc7002d00b68a Mon Sep 17 00:00:00 2001 | |||
From: Ian Whyman <ian.whyman@spin.pm> | |||
Date: Tue, 8 Mar 2022 17:36:37 +0000 | |||
Subject: [PATCH] Fix default tag matches with ffmpeg_handler | |||
Some of the keys were uppercase e.g. ARTIST when returned from the FLAC | |||
parser, so lowercase the keys first. | |||
Fixes: https://github.com/gerbera/gerbera/issues/2176 | |||
--- | |||
src/metadata/ffmpeg_handler.cc | 9 ++++++--- | |||
1 file changed, 6 insertions(+), 3 deletions(-) | |||
--- a/src/metadata/ffmpeg_handler.cc | |||
+++ b/src/metadata/ffmpeg_handler.cc | |||
@@ -93,8 +93,9 @@ void FfmpegHandler::addFfmpegMetadataFie | |||
auto sc = StringConverter::m2i(CFG_IMPORT_LIBOPTS_FFMPEG_CHARSET, item->getLocation(), config); | |||
while ((e = av_dict_get(pFormatCtx->metadata, "", e, AV_DICT_IGNORE_SUFFIX))) { | |||
- std::string key = e->key; | |||
+ std::string key = toLower(e->key); | |||
std::string value = e->value; | |||
+ log_debug("FFMpeg tag: {}: {}", key, value); | |||
auto it = specialPropertyMap.find(e->key); | |||
if (it != specialPropertyMap.end()) { | |||
// only use ffmpeg meta data if not found by other handler | |||
@@ -105,7 +106,9 @@ void FfmpegHandler::addFfmpegMetadataFie | |||
} | |||
} | |||
auto pIt = std::find_if(propertyMap.begin(), propertyMap.end(), | |||
- [&](auto&& p) { return p.second == key && item->getMetaData(p.first).empty(); }); | |||
+ [&](auto&& p) { | |||
+ return p.second == key && item->getMetaData(p.first).empty(); | |||
+ }); | |||
if (pIt != propertyMap.end()) { | |||
log_debug("Identified default metadata '{}': {}", pIt->second, value); | |||
const auto field = pIt->first; | |||
@@ -128,7 +131,7 @@ void FfmpegHandler::addFfmpegMetadataFie | |||
constexpr auto field = M_CREATION_DATE; | |||
if (item->getMetaData(field).empty()) { | |||
log_debug("Identified metadata 'creation_time': {}", e->value); | |||
- std::tm tmWork; | |||
+ std::tm tmWork {}; | |||
if (strptime(e->value, "%Y-%m-%dT%T.000000%Z", &tmWork)) { | |||
// convert creation_time to local time | |||
auto utcTime = timegm(&tmWork); |