[FFmpeg-devel] [PATCH 06/17] lavfi: add ff_inlink_process_timeline().

Michael Niedermayer michael at niedermayer.cc
Thu Dec 29 22:17:52 EET 2016


On Thu, Dec 29, 2016 at 03:33:52PM +0100, Nicolas George wrote:
> Signed-off-by: Nicolas George <george at nsup.org>
> ---
>  libavfilter/avfilter.c | 34 +++++++++++++++++++++-------------
>  libavfilter/filters.h  |  6 ++++++
>  2 files changed, 27 insertions(+), 13 deletions(-)
> 
> 
> Changes in this commit: rename ff_link -> ff_inlink and move to filters.h.
> Already LGTM by Michael.
> 
> 
> diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
> index 2fe8b980e0..d1ba7d9bad 100644
> --- a/libavfilter/avfilter.c
> +++ b/libavfilter/avfilter.c
> @@ -1099,7 +1099,6 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
>      AVFilterContext *dstctx = link->dst;
>      AVFilterPad *dst = link->dstpad;
>      int ret;
> -    int64_t pts;
>  
>      if (!(filter_frame = dst->filter_frame))
>          filter_frame = default_filter_frame;
> @@ -1111,24 +1110,15 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
>      }
>  
>      ff_inlink_process_commands(link, frame);
> +    ff_inlink_process_timeline(link, frame);
>  
> -    pts = frame->pts;
> -    if (dstctx->enable_str) {
> -        int64_t pos = av_frame_get_pkt_pos(frame);
> -        dstctx->var_values[VAR_N] = link->frame_count_out;
> -        dstctx->var_values[VAR_T] = pts == AV_NOPTS_VALUE ? NAN : pts * av_q2d(link->time_base);
> -        dstctx->var_values[VAR_W] = link->w;
> -        dstctx->var_values[VAR_H] = link->h;
> -        dstctx->var_values[VAR_POS] = pos == -1 ? NAN : pos;
> -
> -        dstctx->is_disabled = fabs(av_expr_eval(dstctx->enable, dstctx->var_values, NULL)) < 0.5;
> +        /* TODO reindent */
>          if (dstctx->is_disabled &&
>              (dstctx->filter->flags & AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC))
>              filter_frame = default_filter_frame;
> -    }
>      ret = filter_frame(link, frame);
>      link->frame_count_out++;
> -    ff_update_link_current_pts(link, pts);
> +    ff_update_link_current_pts(link, frame->pts);
>      return ret;
>  
>  fail:
> @@ -1571,6 +1561,24 @@ void ff_inlink_process_commands(AVFilterLink *link, const AVFrame *frame)
>      }
>  }
>  
> +void ff_inlink_process_timeline(AVFilterLink *link, const AVFrame *frame)
> +{
> +    AVFilterContext *dstctx = link->dst;
> +    int64_t pts = frame->pts;
> +    int64_t pos = av_frame_get_pkt_pos(frame);
> +
> +    if (!dstctx->enable_str)
> +        return;
> +
> +    dstctx->var_values[VAR_N] = link->frame_count_out;
> +    dstctx->var_values[VAR_T] = pts == AV_NOPTS_VALUE ? NAN : pts * av_q2d(link->time_base);
> +    dstctx->var_values[VAR_W] = link->w;
> +    dstctx->var_values[VAR_H] = link->h;
> +    dstctx->var_values[VAR_POS] = pos == -1 ? NAN : pos;
> +
> +    dstctx->is_disabled = fabs(av_expr_eval(dstctx->enable, dstctx->var_values, NULL)) < 0.5;
> +}
> +
>  const AVClass *avfilter_get_class(void)
>  {
>      return &avfilter_class;
> diff --git a/libavfilter/filters.h b/libavfilter/filters.h
> index efbef2918d..69a29c640f 100644
> --- a/libavfilter/filters.h
> +++ b/libavfilter/filters.h
> @@ -39,6 +39,12 @@ void ff_filter_set_ready(AVFilterContext *filter, unsigned priority);
>  void ff_inlink_process_commands(AVFilterLink *link, const AVFrame *frame);
>  

>  /**
> + * Process the timeline expression of the link for the time of the frame.
> + * It will update link->is_disabled.
> + */
> +void ff_inlink_process_timeline(AVFilterLink *link, const AVFrame *frame);

maybe the enabledness value should be returned by the function (too)

how does this work with multiple inlinks ?
(dstctx / dstctx->enable / dstctx->is_disabled would be the same)

Also whats your oppinion about calling this
ff_inlink_evaluate_timeline_at_frame
or
ff_inlink_evaluate_timeline_at
?

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Its not that you shouldnt use gotos but rather that you should write
readable code and code with gotos often but not always is less readable
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20161229/1fe95eaf/attachment.sig>


More information about the ffmpeg-devel mailing list