[FFmpeg-devel] [PATCH] avfilter/setpts: add command support

Oleg Afanasyev oafanasiev at gmail.com
Wed May 10 02:12:52 EEST 2023


On Sun, 7 May 2023 at 23:47, Stefano Sabatini <stefasab at gmail.com> wrote:
>
> On date Monday 2023-05-01 22:01:05 +0100, Oleg Afanasyev wrote:
> > I'm using setpts to generate timelapses with slowdowns in the middle.
> > Using setpts filter requires complicated expr to handle intervals. This
> > patch allows commands to change expr and also adds a constant that
> > provides time of last command applications to allow specifying gradual
> > changes using difference between time and cmd time.
> >
> > ----------------------
> > with best regards
> > Oleg Afanasyev
>
> > From a714a0957a57c1d392feca0ba675ba5ac7c875ee Mon Sep 17 00:00:00 2001
> > From: Oleg <oafanasiev at gmail.com>
> > Date: Sat, 29 Apr 2023 19:56:46 +0100
> > Subject: [PATCH] avfilter/setpts: add command support
> >
> > Add support for changing expr on the fly.
> >
> > Signed-off-by: Oleg <oafanasiev at gmail.com>
> > ---
> >  doc/filters.texi     |  7 +++++
> >  libavfilter/setpts.c | 68 +++++++++++++++++++++++++++++++++-----------
> >  2 files changed, 58 insertions(+), 17 deletions(-)
> >
> > diff --git a/doc/filters.texi b/doc/filters.texi
> > index 50e1682144..fbdb1f8ecf 100644
> > diff --git a/libavfilter/setpts.c b/libavfilter/setpts.c
> > index 5bcc0c2dcf..7b09ce7707 100644
> > --- a/libavfilter/setpts.c
> > +++ b/libavfilter/setpts.c
> [...]
> > +static int process_command(AVFilterContext *ctx, const char *cmd, const char *arg,
> > +                           char *res, int res_len, int flags)
> > +{
> > +    SetPTSContext *setpts = ctx->priv;
> > +    int ret;
> > +
> > +    ret = ff_filter_process_command(ctx, cmd, arg, res, res_len, flags);
> > +
> > +    if (ret < 0)
> > +        return ret;
> > +
>
> > +    if (!strcmp(cmd, "expr")) {
> > +        av_expr_free(setpts->expr);
> > +        ret = av_expr_parse(&setpts->expr, arg, var_names, NULL, NULL, NULL, NULL, 0, ctx);
> > +        if (ret < 0) {
> > +            av_log(ctx, AV_LOG_ERROR, "Error while parsing expression '%s'\n", arg);
> > +        }
>
> what happens in case setpts->expr is freed and this fails?
>
> probably it should keep a reference to expr and remove it only in case
> the new expression was successfully parsed

Fixed! Didn't realize that encoding continues even if command fails,
so it was crashing with the previous expression still in place.

>
> [...]
>
> Looks good to me otherwise.
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-avfilter-setpts-add-command-support.patch
Type: text/x-patch
Size: 6278 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20230510/619b5df5/attachment.bin>


More information about the ffmpeg-devel mailing list