mirror of https://git.ffmpeg.org/ffmpeg.git
lavfi/overlay: add repeatlast option
This commit is contained in:
parent
a77454ec14
commit
ed2c827575
|
@ -4315,6 +4315,11 @@ Default value is @samp{yuv420}.
|
||||||
If set to 1, force the filter to accept inputs in the RGB
|
If set to 1, force the filter to accept inputs in the RGB
|
||||||
color space. Default value is 0. This option is deprecated, use
|
color space. Default value is 0. This option is deprecated, use
|
||||||
@option{format} instead.
|
@option{format} instead.
|
||||||
|
|
||||||
|
@item repeatlast
|
||||||
|
If set to 1, force the filter to draw the last overlay frame over the
|
||||||
|
main input until the end of the stream. A value of 0 disables this
|
||||||
|
behavior, which is enabled by default.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
The @option{x}, @option{y}, and @option{enable} expressions can
|
The @option{x}, @option{y}, and @option{enable} expressions can
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#define LIBAVFILTER_VERSION_MAJOR 3
|
#define LIBAVFILTER_VERSION_MAJOR 3
|
||||||
#define LIBAVFILTER_VERSION_MINOR 53
|
#define LIBAVFILTER_VERSION_MINOR 53
|
||||||
#define LIBAVFILTER_VERSION_MICRO 100
|
#define LIBAVFILTER_VERSION_MICRO 101
|
||||||
|
|
||||||
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||||||
LIBAVFILTER_VERSION_MINOR, \
|
LIBAVFILTER_VERSION_MINOR, \
|
||||||
|
|
|
@ -110,6 +110,7 @@ typedef struct {
|
||||||
int overlay_pix_step[4]; ///< steps per pixel for each plane of the overlay
|
int overlay_pix_step[4]; ///< steps per pixel for each plane of the overlay
|
||||||
int hsub, vsub; ///< chroma subsampling values
|
int hsub, vsub; ///< chroma subsampling values
|
||||||
int shortest; ///< terminate stream when the shortest input terminates
|
int shortest; ///< terminate stream when the shortest input terminates
|
||||||
|
int repeatlast; ///< repeat last overlay frame
|
||||||
|
|
||||||
double var_values[VAR_VARS_NB];
|
double var_values[VAR_VARS_NB];
|
||||||
char *x_expr, *y_expr;
|
char *x_expr, *y_expr;
|
||||||
|
@ -561,6 +562,10 @@ static int try_filter_frame(AVFilterContext *ctx, AVFrame *mainpic)
|
||||||
* before the main frame, we can drop the current overlay. */
|
* before the main frame, we can drop the current overlay. */
|
||||||
while (1) {
|
while (1) {
|
||||||
next_overpic = ff_bufqueue_peek(&over->queue_over, 0);
|
next_overpic = ff_bufqueue_peek(&over->queue_over, 0);
|
||||||
|
if (!next_overpic && over->overlay_eof && !over->repeatlast) {
|
||||||
|
av_frame_free(&over->overpicref);
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (!next_overpic || av_compare_ts(next_overpic->pts, ctx->inputs[OVERLAY]->time_base,
|
if (!next_overpic || av_compare_ts(next_overpic->pts, ctx->inputs[OVERLAY]->time_base,
|
||||||
mainpic->pts , ctx->inputs[MAIN]->time_base) > 0)
|
mainpic->pts , ctx->inputs[MAIN]->time_base) > 0)
|
||||||
break;
|
break;
|
||||||
|
@ -713,6 +718,7 @@ static const AVOption overlay_options[] = {
|
||||||
{ "yuv420", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_YUV420}, .flags = FLAGS, .unit = "format" },
|
{ "yuv420", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_YUV420}, .flags = FLAGS, .unit = "format" },
|
||||||
{ "yuv444", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_YUV444}, .flags = FLAGS, .unit = "format" },
|
{ "yuv444", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_YUV444}, .flags = FLAGS, .unit = "format" },
|
||||||
{ "rgb", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_RGB}, .flags = FLAGS, .unit = "format" },
|
{ "rgb", "", 0, AV_OPT_TYPE_CONST, {.i64=OVERLAY_FORMAT_RGB}, .flags = FLAGS, .unit = "format" },
|
||||||
|
{ "repeatlast", "repeat overlay of the last overlay frame", OFFSET(repeatlast), AV_OPT_TYPE_INT, {.i64=1}, 0, 1, FLAGS },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue