x264enc: Strip trailing whitespace from x264's log messages
authorJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
Tue, 21 Sep 2021 13:05:58 +0000 (15:05 +0200)
committerJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
Tue, 21 Sep 2021 15:50:26 +0000 (17:50 +0200)
x264 has linebreaks at the end of its log messages that we should
ignore.

Add G_GNUC_PRINTF to the callback to make sure GCC lets us forward the
format string to another function marked as printf (g_strdup_vprintf)
without triggering -Wformat-nonliteral.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>

ext/x264/gstx264enc.c

index d0e2479..2604506 100644 (file)
@@ -1228,6 +1228,10 @@ gst_x264_enc_class_init (GstX264EncClass * klass)
   gst_type_mark_as_plugin_api (GST_X264_ENC_TUNE_TYPE, 0);
 }
 
+/* *INDENT-OFF* */
+G_GNUC_PRINTF (3, 0)
+/* *INDENT-ON* */
+
 static void
 gst_x264_enc_log_callback (gpointer private, gint level, const char *format,
     va_list args)
@@ -1235,6 +1239,7 @@ gst_x264_enc_log_callback (gpointer private, gint level, const char *format,
 #ifndef GST_DISABLE_GST_DEBUG
   GstDebugLevel gst_level;
   GObject *object = (GObject *) private;
+  gchar *formatted;
 
   switch (level) {
     case X264_LOG_NONE:
@@ -1258,8 +1263,15 @@ gst_x264_enc_log_callback (gpointer private, gint level, const char *format,
   if (G_LIKELY (gst_level > _gst_debug_min))
     return;
 
-  gst_debug_log_valist (GST_CAT_DEFAULT, gst_level, __FILE__, GST_FUNCTION,
-      __LINE__, object, format, args);
+  if (G_LIKELY (gst_level > gst_debug_category_get_threshold (GST_CAT_DEFAULT)))
+    return;
+
+  formatted = g_strdup_vprintf (format, args);
+  g_strchomp (formatted);
+
+  GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, gst_level, object, "%s", formatted);
+
+  g_free (formatted);
 #endif /* GST_DISABLE_GST_DEBUG */
 }