Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorexwm <thighsman@protonmail.com>2020-06-19 18:58:41 +0300
committerPaul B Mahol <onemda@gmail.com>2020-06-25 11:27:07 +0300
commit32d6fe23b66075565894a5432278c95ab479584a (patch)
treee15f431e1e6ace3688380b64794a5078a293ecd4 /libavfilter/vf_zoompan.c
parentbd6ae462f85a6254d38bb8a66452eedd360ce26f (diff)
avfilter/zoompan: add in_time variable
Currently, the zoompan filter exposes a 'time' variable (missing from docs) 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 adds aliases 'out_time' and 'ot' for 'time'. This patch also adds an 'in_time' (alias 'it') 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 'out_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. V3: Add 'it' alias for 'in_time. Add 'out_time' and 'ot' aliases for 'time'. Minor corrections to zoompan docs. Signed-off-by: exwm <thighsman@protonmail.com>
Diffstat (limited to 'libavfilter/vf_zoompan.c')
-rw-r--r--libavfilter/vf_zoompan.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/libavfilter/vf_zoompan.c b/libavfilter/vf_zoompan.c
index 59c9b19ec8..d9d53decf4 100644
--- a/libavfilter/vf_zoompan.c
+++ b/libavfilter/vf_zoompan.c
@@ -38,7 +38,8 @@ static const char *const var_names[] = {
"on",
"duration",
"pduration",
- "time",
+ "in_time", "it",
+ "out_time", "time", "ot",
"frame",
"zoom",
"pzoom",
@@ -61,7 +62,8 @@ enum var_name {
VAR_ON,
VAR_DURATION,
VAR_PDURATION,
- VAR_TIME,
+ VAR_IN_TIME, VAR_IT,
+ VAR_TIME, VAR_OUT_TIME, VAR_OT,
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,7 +168,10 @@ 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_TIME] = pts * av_q2d(outlink->time_base);
+ var_values[VAR_IN_TIME] = var_values[VAR_IT] = in->pts == AV_NOPTS_VALUE ?
+ NAN : in->pts * av_q2d(inlink->time_base);
+ var_values[VAR_OUT_TIME] = pts * av_q2d(outlink->time_base);
+ var_values[VAR_TIME] = var_values[VAR_OT] = var_values[VAR_OUT_TIME];
var_values[VAR_FRAME] = i;
var_values[VAR_ON] = outlink->frame_count_in;