On Thu, Dec 29, 2016 at 03:33:52PM +0100, Nicolas George wrote: > Signed-off-by: Nicolas George <geo...@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
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel