From d7b361946d586c4dfc7907773c29ea728d374ebf Mon Sep 17 00:00:00 2001
From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
Date: Mon, 17 Aug 2015 11:27:24 -0400
Subject: [PATCH] libav: make av_log optionnal using environment

Using AVLOGLEVEL environment variable, user can now
finely define which av_log level is requiered.

AVLOGLEVEL has to be set using values accepted by av_log_set_level.

Issue: #79075
Change-Id: I25f4c8842eca159ebac0e13c9af4e29289c07962
---
 src/media/libav_deps.h    |  1 +
 src/media/libav_utils.cpp | 21 +++++++++++++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/media/libav_deps.h b/src/media/libav_deps.h
index 9038510eca..50c87c1bcd 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 e77cdf7a85..0f9b89f7ef 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;
-- 
GitLab