diff options
author | Simon Rettberg | 2021-04-06 14:23:46 +0200 |
---|---|---|
committer | Simon Rettberg | 2021-04-06 14:23:46 +0200 |
commit | 26b6e4255d4b9ff79a6dca10de5bec7bfc8691f9 (patch) | |
tree | a51e1637554bcd84e63cccb1cb220c898a2c4ee8 /hacks/recanim.c | |
parent | 5.44 (diff) | |
download | xscreensaver-26b6e4255d4b9ff79a6dca10de5bec7bfc8691f9.tar.gz xscreensaver-26b6e4255d4b9ff79a6dca10de5bec7bfc8691f9.tar.xz xscreensaver-26b6e4255d4b9ff79a6dca10de5bec7bfc8691f9.zip |
xscreensaver 6.00
Diffstat (limited to 'hacks/recanim.c')
-rw-r--r-- | hacks/recanim.c | 51 |
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', |