[FFmpeg-devel] [PATCH] avfilter/vf_tile: add init_padding option
Nicolas George
george at nsup.org
Sun Nov 26 20:29:11 EET 2017
Paul B Mahol (2017-11-24):
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
> doc/filters.texi | 4 ++++
> libavfilter/vf_tile.c | 12 +++++++++++-
> 2 files changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 76929e4db5..11ce0482c2 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -14497,6 +14497,10 @@ is "black".
> @item overlap
> Set the number of frames to overlap when tiling several successive frames together.
> The value must be between @code{0} and @var{nb_frames - 1}.
> +
> + at item init_padding
> +Set the number of input frames to initially consume before displaying first output frame.
> +The value must be between @code{0} and @var{nb_frames - 1}.
The documentations says that, the code does the opposite.
> @end table
>
> @subsection Examples
> diff --git a/libavfilter/vf_tile.c b/libavfilter/vf_tile.c
> index 7717ce12e7..c78fa611dd 100644
> --- a/libavfilter/vf_tile.c
> +++ b/libavfilter/vf_tile.c
> @@ -38,6 +38,7 @@ typedef struct TileContext {
> unsigned margin;
> unsigned padding;
> unsigned overlap;
> + unsigned init_padding;
> unsigned current;
> unsigned nb_frames;
> FFDrawContext draw;
> @@ -62,6 +63,8 @@ static const AVOption tile_options[] = {
> { "color", "set the color of the unused area", OFFSET(rgba_color), AV_OPT_TYPE_COLOR, {.str = "black"}, .flags = FLAGS },
> { "overlap", "set how many frames to overlap for each render", OFFSET(overlap),
> AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS },
> + { "init_padding", " set how many frames to initially pad", OFFSET(init_padding),
> + AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS },
> { NULL }
> };
>
> @@ -99,6 +102,13 @@ static av_cold int init(AVFilterContext *ctx)
> tile->overlap = tile->nb_frames - 1;
> }
>
> + if (tile->init_padding >= tile->nb_frames) {
> + av_log(ctx, AV_LOG_WARNING, "init_padding must be less than %d\n", tile->nb_frames);
> + tile->current = 0;
Unnecessary and confusing.
> + } else {
> + tile->current = tile->init_padding;
> + }
> +
> return 0;
> }
>
> @@ -201,7 +211,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *picref)
> tile->out_ref->height = outlink->h;
>
> /* fill surface once for margin/padding */
> - if (tile->margin || tile->padding)
> + if (tile->margin || tile->padding || tile->init_padding != 0)
This change should only be applied to the first frame.
> ff_fill_rectangle(&tile->draw, &tile->blank,
> tile->out_ref->data,
> tile->out_ref->linesize,
Regards,
--
Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20171126/b6c3224d/attachment.sig>
More information about the ffmpeg-devel
mailing list