mirror of https://git.ffmpeg.org/ffmpeg.git
avfilter/vf_tile: add init_padding option
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
e01d2c00ae
commit
2cfc8b172c
|
@ -14637,6 +14637,11 @@ is "black".
|
||||||
@item overlap
|
@item overlap
|
||||||
Set the number of frames to overlap when tiling several successive frames together.
|
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}.
|
The value must be between @code{0} and @var{nb_frames - 1}.
|
||||||
|
|
||||||
|
@item init_padding
|
||||||
|
Set the number of frames to initially be empty before displaying first output frame.
|
||||||
|
This controls how soon will one get first output frame.
|
||||||
|
The value must be between @code{0} and @var{nb_frames - 1}.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@subsection Examples
|
@subsection Examples
|
||||||
|
|
|
@ -38,6 +38,7 @@ typedef struct TileContext {
|
||||||
unsigned margin;
|
unsigned margin;
|
||||||
unsigned padding;
|
unsigned padding;
|
||||||
unsigned overlap;
|
unsigned overlap;
|
||||||
|
unsigned init_padding;
|
||||||
unsigned current;
|
unsigned current;
|
||||||
unsigned nb_frames;
|
unsigned nb_frames;
|
||||||
FFDrawContext draw;
|
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 },
|
{ "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),
|
{ "overlap", "set how many frames to overlap for each render", OFFSET(overlap),
|
||||||
AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS },
|
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 }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -99,6 +102,12 @@ static av_cold int init(AVFilterContext *ctx)
|
||||||
tile->overlap = tile->nb_frames - 1;
|
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);
|
||||||
|
} else {
|
||||||
|
tile->current = tile->init_padding;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,11 +210,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *picref)
|
||||||
tile->out_ref->height = outlink->h;
|
tile->out_ref->height = outlink->h;
|
||||||
|
|
||||||
/* fill surface once for margin/padding */
|
/* fill surface once for margin/padding */
|
||||||
if (tile->margin || tile->padding)
|
if (tile->margin || tile->padding || tile->init_padding)
|
||||||
ff_fill_rectangle(&tile->draw, &tile->blank,
|
ff_fill_rectangle(&tile->draw, &tile->blank,
|
||||||
tile->out_ref->data,
|
tile->out_ref->data,
|
||||||
tile->out_ref->linesize,
|
tile->out_ref->linesize,
|
||||||
0, 0, outlink->w, outlink->h);
|
0, 0, outlink->w, outlink->h);
|
||||||
|
tile->init_padding = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tile->prev_out_ref) {
|
if (tile->prev_out_ref) {
|
||||||
|
|
Loading…
Reference in New Issue