From 69957d093fd1cb798449271e6212cd86321d5528 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 23 Feb 2023 23:35:40 +0100 Subject: [PATCH] Setup ffmpeg log callback in dcpomatic_setup() instead of in FFmpeg. --- src/lib/ffmpeg.cc | 21 --------------------- src/lib/ffmpeg.h | 2 -- src/lib/util.cc | 26 ++++++++++++++++++++++++++ 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/lib/ffmpeg.cc b/src/lib/ffmpeg.cc index 39abfe2b8..4b8d7b8ab 100644 --- a/src/lib/ffmpeg.cc +++ b/src/lib/ffmpeg.cc @@ -96,30 +96,9 @@ avio_seek_wrapper (void* data, int64_t offset, int whence) } -void -FFmpeg::ffmpeg_log_callback (void* ptr, int level, const char* fmt, va_list vl) -{ - if (level > AV_LOG_WARNING) { - return; - } - - char line[1024]; - static int prefix = 0; - av_log_format_line (ptr, level, fmt, vl, line, sizeof (line), &prefix); - string str (line); - boost::algorithm::trim (str); - dcpomatic_log->log (String::compose ("FFmpeg: %1", str), LogEntry::TYPE_GENERAL); -} - - void FFmpeg::setup_general () { - /* This might not work too well in some cases of multiple FFmpeg decoders, - but it's probably good enough. - */ - av_log_set_callback (FFmpeg::ffmpeg_log_callback); - _file_group.set_paths (_ffmpeg_content->paths ()); _avio_buffer = static_cast (wrapped_av_malloc(_avio_buffer_size)); _avio_context = avio_alloc_context (_avio_buffer, _avio_buffer_size, 0, this, avio_read_wrapper, 0, avio_seek_wrapper); diff --git a/src/lib/ffmpeg.h b/src/lib/ffmpeg.h index 55357d24b..834c8946c 100644 --- a/src/lib/ffmpeg.h +++ b/src/lib/ffmpeg.h @@ -93,8 +93,6 @@ private: void setup_general (); void setup_decoders (); - static void ffmpeg_log_callback (void* ptr, int level, const char* fmt, va_list vl); - /** AVFrames used for decoding audio streams; accessed with audio_frame() */ std::map, AVFrame*> _audio_frame; }; diff --git a/src/lib/util.cc b/src/lib/util.cc index bab74583c..6ed66c40f 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -388,6 +388,31 @@ capture_asdcp_logs () } +static +void +ffmpeg_log_callback(void* ptr, int level, const char* fmt, va_list vl) +{ + if (level > AV_LOG_WARNING) { + return; + } + + char line[1024]; + static int prefix = 0; + av_log_format_line(ptr, level, fmt, vl, line, sizeof (line), &prefix); + string str(line); + boost::algorithm::trim(str); + dcpomatic_log->log(String::compose("FFmpeg: %1", str), LogEntry::TYPE_GENERAL); +} + + +static +void +capture_ffmpeg_logs() +{ + av_log_set_callback(ffmpeg_log_callback); +} + + /** Call the required functions to set up DCP-o-matic's static arrays, etc. * Must be called from the UI thread, if there is one. */ @@ -455,6 +480,7 @@ LIBDCP_ENABLE_WARNINGS ui_thread = boost::this_thread::get_id (); capture_asdcp_logs (); + capture_ffmpeg_logs(); } #ifdef DCPOMATIC_WINDOWS -- 2.30.2