[PATCH] Add logging of encoding options if log level is set to info
authorArjen Hiemstra <ahiemstra@heimr.nl>
Thu, 20 Mar 2025 13:27:41 +0000 (14:27 +0100)
committerAurélien COUDERC <coucouf@debian.org>
Tue, 15 Jul 2025 14:45:40 +0000 (16:45 +0200)
Allows inspecting what's actually sent to FFmpeg.

Gbp-Pq: Name upstream_c928ed5c_Add-logging-of-encoding-options-if-log-level-is-set-to-info.patch

src/encoder.cpp
src/encoder_p.h
src/h264vaapiencoder.cpp
src/libopenh264encoder.cpp
src/libvpxencoder.cpp
src/libvpxvp9encoder.cpp
src/libx264encoder.cpp

index 33617850df8ee1d9af14b262f2d76c3051b57754..f8b3d672b24d9fc5de989ade6f561b2b5538ee9e 100644 (file)
@@ -211,6 +211,16 @@ AVDictionary *Encoder::buildEncodingOptions()
     return options;
 }
 
+void Encoder::maybeLogOptions(AVDictionary *options)
+{
+    if (PIPEWIRERECORD_LOGGING().isInfoEnabled()) {
+        char *buffer = NULL;
+        av_dict_get_string(options, &buffer, '=', ',');
+        qCInfo(PIPEWIRERECORD_LOGGING) << "Using encoding options:" << buffer;
+        av_freep(&buffer);
+    }
+}
+
 SoftwareEncoder::SoftwareEncoder(PipeWireProduce *produce)
     : Encoder(produce)
 {
index 48d3a9ea95b22d729e285a93fef4a36a34b8c387..e565cc2c553c6dc48e008c352da86098d4202158 100644 (file)
@@ -103,6 +103,7 @@ public:
 protected:
     virtual int percentageToAbsoluteQuality(const std::optional<quint8> &quality) = 0;
     virtual AVDictionary *buildEncodingOptions();
+    void maybeLogOptions(AVDictionary *options);
 
     PipeWireProduce *m_produce;
 
index 26e7fba24cc3a284cfbce683ad712918c4c5798f..0cf251b4228e8d5e52939442b2edde1ce4a8be83 100644 (file)
@@ -141,6 +141,7 @@ bool H264VAAPIEncoder::initialize(const QSize &size)
     }
 
     AVDictionary *options = buildEncodingOptions();
+    maybeLogOptions(options);
 
     // Assign the right hardware context for encoding frames.
     // We rely on FFmpeg for creating the VAAPI hardware context as part of
index 7f374d2587a13ff6dd0ac1e8ce5a59ea37ed1e38..db6ed4db71a9d78f942458fdfbbe983bf342c0de 100644 (file)
@@ -75,6 +75,7 @@ bool LibOpenH264Encoder::initialize(const QSize &size)
     }
 
     AVDictionary *options = buildEncodingOptions();
+    maybeLogOptions(options);
 
     if (int result = avcodec_open2(m_avCodecContext, codec, &options); result < 0) {
         qCWarning(PIPEWIRERECORD_LOGGING) << "Could not open codec" << av_err2str(result);
index 2d696d6e7c288fd61b876a322a5115afa111323b..f81b0489d404951b755db7df1c86cedc75b7018a 100644 (file)
@@ -58,6 +58,7 @@ bool LibVpxEncoder::initialize(const QSize &size)
     }
 
     AVDictionary *options = buildEncodingOptions();
+    maybeLogOptions(options);
 
     if (int result = avcodec_open2(m_avCodecContext, codec, &options); result < 0) {
         qCWarning(PIPEWIRERECORD_LOGGING) << "Could not open codec" << av_err2str(result);
index 0b63015593b39aa69560cea384a0ba182e85165f..d8770237459effc9d87a9c43ea644946f34eaa57 100644 (file)
@@ -51,6 +51,7 @@ bool LibVpxVp9Encoder::initialize(const QSize &size)
     m_avCodecContext->time_base = AVRational{1, 1000};
 
     AVDictionary *options = buildEncodingOptions();
+    maybeLogOptions(options);
 
     const auto area = size.width() * size.height();
     // m_avCodecContext->framerate is not set, so we use m_produce->maxFramerate() instead.
index 7d4f96b2f1a7dd6e3799a6c72ec55b50dabdb9e2..d9fe44f4283abbca6e89d752c3fd1524804e3ec0 100644 (file)
@@ -79,6 +79,7 @@ bool LibX264Encoder::initialize(const QSize &size)
     }
 
     AVDictionary *options = buildEncodingOptions();
+    maybeLogOptions(options);
 
     if (int result = avcodec_open2(m_avCodecContext, codec, &options); result < 0) {
         qCWarning(PIPEWIRERECORD_LOGGING) << "Could not open codec" << av_err2str(result);