[FFmpeg-cvslog] lavd/lavfi: add graph_file option

Stefano Sabatini git at videolan.org
Tue Oct 23 22:14:01 CEST 2012


ffmpeg | branch: master | Stefano Sabatini <stefasab at gmail.com> | Tue Oct 23 01:13:23 2012 +0200| [8b03cd3cd7a3141b87419ebce02b9fed7e0030da] | committer: Stefano Sabatini

lavd/lavfi: add graph_file option

Allow to specify a filename where to put the filtergraph description.

This is useful to override limitations or glitches of particular shell
environments, and allows a level of indirection for specifying
filtergraphs.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8b03cd3cd7a3141b87419ebce02b9fed7e0030da
---

 doc/indevs.texi       |    6 ++++++
 libavdevice/lavfi.c   |   29 +++++++++++++++++++++++++++++
 libavfilter/version.h |    2 +-
 3 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/doc/indevs.texi b/doc/indevs.texi
index a5a91fa..8ac102b 100644
--- a/doc/indevs.texi
+++ b/doc/indevs.texi
@@ -320,6 +320,12 @@ label, but all the others need to be specified explicitly.
 
 If not specified defaults to the filename specified for the input
 device.
+
+ at item graph_file
+Set the filename of the filtergraph to be read and sent to the other
+filters. Syntax of the filtergraph is the same as the one specified by
+the option @var{graph}.
+
 @end table
 
 @subsection Examples
diff --git a/libavdevice/lavfi.c b/libavdevice/lavfi.c
index 82c5844..070aff5 100644
--- a/libavdevice/lavfi.c
+++ b/libavdevice/lavfi.c
@@ -28,6 +28,7 @@
 #include "float.h"              /* DBL_MIN, DBL_MAX */
 
 #include "libavutil/bprint.h"
+#include "libavutil/file.h"
 #include "libavutil/log.h"
 #include "libavutil/mem.h"
 #include "libavutil/opt.h"
@@ -43,6 +44,7 @@
 typedef struct {
     AVClass *class;          ///< class for private options
     char          *graph_str;
+    char          *graph_filename;
     char          *dump_graph;
     AVFilterGraph *graph;
     AVFilterContext **sinks;
@@ -104,6 +106,32 @@ av_cold static int lavfi_read_header(AVFormatContext *avctx)
     buffersink = avfilter_get_by_name("ffbuffersink");
     abuffersink = avfilter_get_by_name("ffabuffersink");
 
+    if (lavfi->graph_filename && lavfi->graph_str) {
+        av_log(avctx, AV_LOG_ERROR,
+               "Only one of the graph or graph_file options must be specified\n");
+        return AVERROR(EINVAL);
+    }
+
+    if (lavfi->graph_filename) {
+        uint8_t *file_buf, *graph_buf;
+        size_t file_bufsize;
+        ret = av_file_map(lavfi->graph_filename,
+                          &file_buf, &file_bufsize, 0, avctx);
+        if (ret < 0)
+            return ret;
+
+        /* create a 0-terminated string based on the read file */
+        graph_buf = av_malloc(file_bufsize + 1);
+        if (!graph_buf) {
+            av_file_unmap(file_buf, file_bufsize);
+            return AVERROR(ENOMEM);
+        }
+        memcpy(graph_buf, file_buf, file_bufsize);
+        graph_buf[file_bufsize] = 0;
+        av_file_unmap(file_buf, file_bufsize);
+        lavfi->graph_str = graph_buf;
+    }
+
     if (!lavfi->graph_str)
         lavfi->graph_str = av_strdup(avctx->filename);
 
@@ -376,6 +404,7 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
 
 static const AVOption options[] = {
     { "graph",     "set libavfilter graph", OFFSET(graph_str),  AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC },
+    { "graph_file","set libavfilter graph filename", OFFSET(graph_filename), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC},
     { "dumpgraph", "dump graph to stderr",  OFFSET(dump_graph), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC },
     { NULL },
 };
diff --git a/libavfilter/version.h b/libavfilter/version.h
index 534027b..672472b 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -30,7 +30,7 @@
 
 #define LIBAVFILTER_VERSION_MAJOR  3
 #define LIBAVFILTER_VERSION_MINOR  20
-#define LIBAVFILTER_VERSION_MICRO 104
+#define LIBAVFILTER_VERSION_MICRO 105
 
 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
                                                LIBAVFILTER_VERSION_MINOR, \



More information about the ffmpeg-cvslog mailing list