From 64a103138c04c1155adb5868a0ae176be3550723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Wed, 10 Apr 2013 23:15:06 +0200 Subject: [PATCH] lavfi/tile: switch to an AVOptions-based system. --- doc/filters.texi | 26 +++++++++++++------------- libavfilter/avfilter.c | 1 + libavfilter/vf_tile.c | 8 ++------ 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 63ca00f435..a0616bf2db 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -5414,8 +5414,7 @@ ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png Tile several successive frames together. -It accepts a list of options in the form of @var{key}=@var{value} pairs -separated by ":". A description of the accepted options follows. +The filter accepts the following options: @table @option @@ -5423,6 +5422,11 @@ separated by ":". A description of the accepted options follows. Set the grid size (i.e. the number of lines and columns) in the form "@var{w}x@var{h}". +@item nb_frames +Set the maximum number of frames to render in the given area. It must be less +than or equal to @var{w}x@var{h}. The default value is @code{0}, meaning all +the area will be used. + @item margin Set the outer border margin in pixels. @@ -5431,19 +5435,13 @@ Set the inner border thickness (i.e. the number of pixels between frames). For more advanced padding options (such as having different values for the edges), refer to the pad video filter. -@item nb_frames -Set the maximum number of frames to render in the given area. It must be less -than or equal to @var{w}x@var{h}. The default value is @code{0}, meaning all -the area will be used. - @end table -Alternatively, the options can be specified as a flat string: +@subsection Examples -@var{layout}[:@var{nb_frames}[:@var{margin}[:@var{padding}]]] - -For example, produce 8x8 PNG tiles of all keyframes (@option{-skip_frame -nokey}) in a movie: +@itemize +@item +Produce 8x8 PNG tiles of all keyframes (@option{-skip_frame nokey}) in a movie: @example ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png @end example @@ -5451,12 +5449,14 @@ The @option{-vsync 0} is necessary to prevent @command{ffmpeg} from duplicating each output frame to accomodate the originally detected frame rate. -Another example to display @code{5} pictures in an area of @code{3x2} frames, +@item +Display @code{5} pictures in an area of @code{3x2} frames, with @code{7} pixels between them, and @code{2} pixels of initial margin, using mixed flat and named options: @example tile=3x2:nb_frames=5:padding=7:margin=2 @end example +@end itemize @section tinterlace diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 659aeddcf9..de47b80e14 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -757,6 +757,7 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque !strcmp(filter->filter->name, "subtitles") || !strcmp(filter->filter->name, "testsrc" ) || !strcmp(filter->filter->name, "thumbnail") || + !strcmp(filter->filter->name, "tile") || !strcmp(filter->filter->name, "transpose") || !strcmp(filter->filter->name, "treble" ) || !strcmp(filter->filter->name, "unsharp" ) || diff --git a/libavfilter/vf_tile.c b/libavfilter/vf_tile.c index 64bf97076c..f92844b807 100644 --- a/libavfilter/vf_tile.c +++ b/libavfilter/vf_tile.c @@ -51,12 +51,12 @@ typedef struct { static const AVOption tile_options[] = { { "layout", "set grid size", OFFSET(w), AV_OPT_TYPE_IMAGE_SIZE, {.str = "6x5"}, 0, 0, FLAGS }, + { "nb_frames", "set maximum number of frame to render", OFFSET(nb_frames), + AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS }, { "margin", "set outer border margin in pixels", OFFSET(margin), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1024, FLAGS }, { "padding", "set inner border thickness in pixels", OFFSET(padding), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1024, FLAGS }, - { "nb_frames", "set maximum number of frame to render", OFFSET(nb_frames), - AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS }, {NULL}, }; @@ -230,9 +230,6 @@ static const AVFilterPad tile_outputs[] = { { NULL } }; -static const char *const shorthand[] = - { "layout", "nb_frames", "margin", "padding", NULL }; - AVFilter avfilter_vf_tile = { .name = "tile", .description = NULL_IF_CONFIG_SMALL("Tile several successive frames together."), @@ -242,5 +239,4 @@ AVFilter avfilter_vf_tile = { .inputs = tile_inputs, .outputs = tile_outputs, .priv_class = &tile_class, - .shorthand = shorthand, };