LGTM On 6/18/20, exwm <thighs...@protonmail.com> wrote: > Currently, the zoompan filter exposes a time variable for use in > the zoom, x, and y expressions. This variable is perhaps better named > out_time as it represents the timestamp in seconds of each output frame > produced by zoompan. This patch does not rename the time variable > to out_time as this may be a breaking change. > > This patch adds instead > an in_time variable that provides access to the timestamp in seconds > of each input frame to the zoompan filter. This helps to design zoompan > filters that depend on the input video timestamps. For example, it makes > it easy to zoom in instantly for only some portion of a video. > Both the time and in_time variables have been added in the documentation > for zoompan. > > Example usage of in_time in the zoompan filter to zoom in 2x for the > first second of the input video and 1x for the rest: > zoompan=z='if(between(in_time,0,1),2,1):d=1' > > V2: Fix zoompan filter documentation stating that the time variable > would be NAN if the input timestamp is unknown. > > Signed-off-by: exwm <thighs...@protonmail.com> > --- > doc/filters.texi | 13 +++++++++++++ > libavfilter/vf_zoompan.c | 5 +++++ > 2 files changed, 18 insertions(+) > > diff --git a/doc/filters.texi b/doc/filters.texi > index 84567dec16..aa6a73514e 100644 > --- a/doc/filters.texi > +++ b/doc/filters.texi > @@ -20733,6 +20733,12 @@ Input frame count. > @item on > Output frame count. > > +@item in_time > +The input timestamp expressed in seconds. It's NAN if the input timestamp > is unknown. > + > +@item time > +The output timestamp expressed in seconds. > + > @item x > @item y > Last calculated 'x' and 'y' position from 'x' and 'y' expression > @@ -20787,6 +20793,13 @@ Same as above but without pausing: > @example > zoompan=z='min(max(zoom,pzoom)+0.0015,1.5)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)' > @end example > + > +@item > +Zoom-in 2x into center of picture only for the first second of the input > video: > +@example > +zoompan=z='if(between(in_time,0,1),2,1)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)' > +@end example > + > @end itemize > > @anchor{zscale} > diff --git a/libavfilter/vf_zoompan.c b/libavfilter/vf_zoompan.c > index 59c9b19ec8..5fe9e68b3a 100644 > --- a/libavfilter/vf_zoompan.c > +++ b/libavfilter/vf_zoompan.c > @@ -38,6 +38,7 @@ static const char *const var_names[] = { > "on", > "duration", > "pduration", > + "in_time", > "time", > "frame", > "zoom", > @@ -62,6 +63,7 @@ enum var_name { > VAR_DURATION, > VAR_PDURATION, > VAR_TIME, > + VAR_IN_TIME, > VAR_FRAME, > VAR_ZOOM, > VAR_PZOOM, > @@ -155,6 +157,7 @@ static int output_single_frame(AVFilterContext *ctx, > AVFrame *in, double *var_va > { > ZPContext *s = ctx->priv; > AVFilterLink *outlink = ctx->outputs[0]; > + AVFilterLink *inlink = ctx->inputs[0]; > int64_t pts = s->frame_count; > int k, x, y, w, h, ret = 0; > uint8_t *input[4]; > @@ -165,6 +168,8 @@ static int output_single_frame(AVFilterContext *ctx, > AVFrame *in, double *var_va > var_values[VAR_PY] = s->y; > var_values[VAR_PZOOM] = s->prev_zoom; > var_values[VAR_PDURATION] = s->prev_nb_frames; > + var_values[VAR_IN_TIME] = in->pts == AV_NOPTS_VALUE ? > + NAN : in->pts * av_q2d(inlink->time_base); > var_values[VAR_TIME] = pts * av_q2d(outlink->time_base); > var_values[VAR_FRAME] = i; > var_values[VAR_ON] = outlink->frame_count_in; > -- > 2.26.0 > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".