summaryrefslogtreecommitdiffstats
path: root/hacks/recanim.c
diff options
context:
space:
mode:
Diffstat (limited to 'hacks/recanim.c')
-rw-r--r--hacks/recanim.c51
1 files changed, 31 insertions, 20 deletions
diff --git a/hacks/recanim.c b/hacks/recanim.c
index bd88b4b..e5b0e01 100644
--- a/hacks/recanim.c
+++ b/hacks/recanim.c
@@ -1,4 +1,4 @@
-/* recanim, Copyright (c) 2014-2020 Jamie Zawinski <jwz@jwz.org>
+/* recanim, Copyright (c) 2014-2021 Jamie Zawinski <jwz@jwz.org>
* Record animation frames of the running screenhack.
*
* Permission to use, copy, modify, distribute, and sell this software and its
@@ -10,9 +10,25 @@
* implied warranty.
*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif /* HAVE_CONFIG_H */
+#include "screenhackI.h"
+#include "recanim.h"
+
+#if (__GNUC__ >= 4) /* Ignore useless warnings generated by gtk.h */
+# undef inline
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wstrict-prototypes"
+# pragma GCC diagnostic ignored "-Wlong-long"
+# pragma GCC diagnostic ignored "-Wvariadic-macros"
+# pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+#ifdef HAVE_GDK_PIXBUF
+# ifdef HAVE_GTK2
+# include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
+# else /* !HAVE_GTK2 */
+# include <gdk-pixbuf/gdk-pixbuf-xlib.h>
+# endif /* !HAVE_GTK2 */
+#endif /* HAVE_GDK_PIXBUF */
#ifdef USE_GL
# ifdef HAVE_JWXYZ
@@ -26,20 +42,9 @@
# endif /* HAVE_JWZGLES */
#endif /* USE_GL */
-#ifdef HAVE_GDK_PIXBUF
-# ifdef HAVE_GTK2
-# include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
-# else /* !HAVE_GTK2 */
-# include <gdk-pixbuf/gdk-pixbuf-xlib.h>
-# endif /* !HAVE_GTK2 */
-#endif /* HAVE_GDK_PIXBUF */
-
#include <sys/stat.h>
#include <sys/types.h>
-#include "screenhackI.h"
-#include "recanim.h"
-
#undef gettimeofday /* wrapped by recanim.h */
#undef time
@@ -391,6 +396,7 @@ screenhack_record_anim_free (record_anim_state *st)
const char *type = "png";
char cmd[1024];
char fn[1024];
+ size_t len_cmd;
const char *soundtrack = 0;
fprintf (stderr, "%s: wrote %d frames\n", progname, st->frame_count);
@@ -417,21 +423,25 @@ screenhack_record_anim_free (record_anim_state *st)
if (! soundtrack) soundtrack = "../../" ST;
if (stat (soundtrack, &s)) soundtrack = 0;
- sprintf (cmd,
+ len_cmd = 0;
+ len_cmd += snprintf (cmd, sizeof cmd - len_cmd,
"ffmpeg"
" -hide_banner"
- " -v 16"
+ " -loglevel error"
" -framerate %d" /* rate of input: must be before -i */
" -i '%s-%%06d.%s'"
" -r %d", /* rate of output: must be after -i */
st->fps, progname, type, st->fps);
- if (soundtrack)
- sprintf (cmd + strlen(cmd),
+ if (len_cmd >= sizeof cmd) abort();
+ if (soundtrack) {
+ len_cmd += snprintf (cmd + len_cmd, sizeof cmd - len_cmd,
" -i '%s' -map 0:v:0 -map 1:a:0 -acodec aac"
/* Truncate or pad audio to length of video */
" -filter_complex '[1:0] apad' -shortest",
soundtrack);
- sprintf (cmd + strlen(cmd),
+ if (len_cmd >= sizeof cmd) abort();
+ }
+ len_cmd += snprintf (cmd + len_cmd, sizeof cmd - len_cmd,
" -c:v libx264"
" -profile:v high"
" -crf 18"
@@ -440,6 +450,7 @@ screenhack_record_anim_free (record_anim_state *st)
" </dev/null"
/*" 2>&-"*/,
fn);
+ if (len_cmd >= sizeof cmd) abort();
fprintf (stderr, "%s: exec: %s\n", progname, cmd);
/* Use empty body to kill warning from gcc -Wall with
"warning: ignoring return value of 'system',