|
|
|
@ -143,6 +143,10 @@ static int output_single_frame(AVFilterContext *ctx, AVFrame *in, double *var_va |
|
|
|
|
int px[4], py[4]; |
|
|
|
|
AVFrame *out; |
|
|
|
|
|
|
|
|
|
var_values[VAR_PX] = s->x; |
|
|
|
|
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_FRAME] = i; |
|
|
|
|
var_values[VAR_ON] = outlink->frame_count + 1; |
|
|
|
@ -265,7 +269,7 @@ static int request_frame(AVFilterLink *outlink) |
|
|
|
|
AVFilterContext *ctx = outlink->src; |
|
|
|
|
ZPContext *s = ctx->priv; |
|
|
|
|
AVFrame *in = s->in; |
|
|
|
|
double zoom=1, dx=0, dy=0; |
|
|
|
|
double zoom=-1, dx=-1, dy=-1; |
|
|
|
|
int ret = -1; |
|
|
|
|
|
|
|
|
|
if (in) { |
|
|
|
@ -276,8 +280,11 @@ static int request_frame(AVFilterLink *outlink) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (s->current_frame >= s->nb_frames) { |
|
|
|
|
if (dx != -1) |
|
|
|
|
s->x = dx; |
|
|
|
|
if (dy != -1) |
|
|
|
|
s->y = dy; |
|
|
|
|
if (zoom != -1) |
|
|
|
|
s->prev_zoom = zoom; |
|
|
|
|
s->prev_nb_frames = s->nb_frames; |
|
|
|
|
s->nb_frames = 0; |
|
|
|
|