[FFmpeg-cvslog] lavfi/vf_libplacebo: pick log level dynamically

Niklas Haas git at videolan.org
Fri Nov 12 23:01:26 EET 2021


ffmpeg | branch: master | Niklas Haas <git at haasn.dev> | Fri Nov 12 20:24:02 2021 +0100| [a943f527a13d2d6afd38593a2dc1de69e6d0972c] | committer: Lynne

lavfi/vf_libplacebo: pick log level dynamically

In particular, allows users to go all the way up to PL_LOG_TRACE if
desired. (While also avoiding some potentially unnecessary callbacks for
filtered messages, including e.g. the CPU cost of printing out shader
sources)

Response to runtime log level changes by updating it once per
filter_frame(), which should hopefully be often enough.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a943f527a13d2d6afd38593a2dc1de69e6d0972c
---

 libavfilter/vf_libplacebo.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c
index 0590e99093..ede6888bd3 100644
--- a/libavfilter/vf_libplacebo.c
+++ b/libavfilter/vf_libplacebo.c
@@ -116,6 +116,18 @@ typedef struct LibplaceboContext {
     int num_hooks;
 } LibplaceboContext;
 
+static inline enum pl_log_level get_log_level(void)
+{
+    int av_lev = av_log_get_level();
+    return av_lev >= AV_LOG_TRACE   ? PL_LOG_TRACE :
+           av_lev >= AV_LOG_DEBUG   ? PL_LOG_DEBUG :
+           av_lev >= AV_LOG_VERBOSE ? PL_LOG_INFO :
+           av_lev >= AV_LOG_WARNING ? PL_LOG_WARN :
+           av_lev >= AV_LOG_ERROR   ? PL_LOG_ERR :
+           av_lev >= AV_LOG_FATAL   ? PL_LOG_FATAL :
+                                      PL_LOG_NONE;
+}
+
 static void pl_av_log(void *log_ctx, enum pl_log_level level, const char *msg)
 {
     int av_lev;
@@ -177,7 +189,7 @@ static int libplacebo_init(AVFilterContext *avctx)
 
     /* Create libplacebo log context */
     s->log = pl_log_create(PL_API_VER, pl_log_params(
-        .log_level = PL_LOG_DEBUG,
+        .log_level = get_log_level(),
         .log_cb = pl_av_log,
         .log_priv = s,
     ));
@@ -447,6 +459,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
         goto fail;
     }
 
+    pl_log_level_update(s->log, get_log_level());
     if (!s->initialized)
         RET(init_vulkan(ctx));
 



More information about the ffmpeg-cvslog mailing list