diff --git a/src/media/libav_deps.h b/src/media/libav_deps.h index 9038510eca38a073e2df49838e4d4cd93544ef05..50c87c1bcda2cac0623e62f69a102d17dd3b02d5 100644 --- a/src/media/libav_deps.h +++ b/src/media/libav_deps.h @@ -70,6 +70,7 @@ extern "C" { #include <libavutil/mathematics.h> // for av_rescale_q (old libav support) #include <libavutil/imgutils.h> #include <libavutil/intreadwrite.h> +#include <libavutil/log.h> } #include "libav_utils.h" diff --git a/src/media/libav_utils.cpp b/src/media/libav_utils.cpp index e77cdf7a8534588f9aadfd758c9637d1bd470543..0f9b89f7efb092081b353a30961a3cf793b9b67f 100644 --- a/src/media/libav_utils.cpp +++ b/src/media/libav_utils.cpp @@ -80,8 +80,25 @@ avcodecManageMutex(void **data, enum AVLockOp op) return AVERROR(ret); } +static constexpr const char* AVLOGLEVEL = "AVLOGLEVEL"; -static void init_once() +static void +setAvLogLevel() +{ + char* envvar = getenv(AVLOGLEVEL); + signed level = AV_LOG_ERROR; + + if (envvar != nullptr) { + if (not (std::istringstream(envvar) >> level)) + level = AV_LOG_ERROR; + + level = std::max(AV_LOG_QUIET, std::min(level, AV_LOG_DEBUG)); + } + av_log_set_level(level); +} + +static void +init_once() { av_register_all(); avdevice_register_all(); @@ -92,7 +109,7 @@ static void init_once() av_lockmgr_register(avcodecManageMutex); if (getDebugMode()) - av_log_set_level(AV_LOG_VERBOSE); + setAvLogLevel(); } static std::once_flag already_called;