[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