[FFmpeg-cvslog] lavfi/overlay: add repeatlast option
Stefano Sabatini
git at videolan.org
Fri Apr 12 00:20:36 CEST 2013
ffmpeg | branch: master | Stefano Sabatini <stefasab at gmail.com> | Fri Apr 5 13:49:20 2013 +0200| [ed2c827575a665ca29a0cbb0b3393d0621f28424] | committer: Stefano Sabatini
lavfi/overlay: add repeatlast option
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ed2c827575a665ca29a0cbb0b3393d0621f28424
---
doc/filters.texi | 5 +++++
libavfilter/version.h | 2 +-
libavfilter/vf_overlay.c | 6 ++++++
3 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/doc/filters.texi b/doc/filters.texi
index d3777ef..efb3adc 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -4315,6 +4315,11 @@ Default value is @samp{yuv420}.
If set to 1, force the filter to accept inputs in the RGB
color space. Default value is 0. This option is deprecated, use
@option{format} instead.
+
+ at 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
The @option{x}, @option{y}, and @option{enable} expressions can
diff --git a/libavfilter/version.h b/libavfilter/version.h
index f23d9c1..b2e0b5e 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -30,7 +30,7 @@
#define LIBAVFILTER_VERSION_MAJOR 3
#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, \
LIBAVFILTER_VERSION_MINOR, \
diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c
index 94002f5..5ac114a 100644
--- a/libavfilter/vf_overlay.c
+++ b/libavfilter/vf_overlay.c
@@ -110,6 +110,7 @@ typedef struct {
int overlay_pix_step[4]; ///< steps per pixel for each plane of the overlay
int hsub, vsub; ///< chroma subsampling values
int shortest; ///< terminate stream when the shortest input terminates
+ int repeatlast; ///< repeat last overlay frame
double var_values[VAR_VARS_NB];
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. */
while (1) {
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,
mainpic->pts , ctx->inputs[MAIN]->time_base) > 0)
break;
@@ -713,6 +718,7 @@ static const AVOption overlay_options[] = {
{ "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" },
{ "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 }
};
More information about the ffmpeg-cvslog
mailing list