+ if (cmd->flags & COMMAND_FLAG_EXPR) {
+ double var_values[VAR_VARS_NB], res;
+ double start = TS2T(interval->start_ts, AV_TIME_BASE_Q);
+ double end = TS2T(interval->end_ts, AV_TIME_BASE_Q);
+ double current = TS2T(ref->pts, inlink->time_base);
+
+ var_values[VAR_N] = inlink->frame_count_in;
+ var_values[VAR_POS] = ref->pkt_pos == -1 ? NAN : ref->pkt_pos;
+ var_values[VAR_PTS] = TS2D(ref->pts);
+ var_values[VAR_T] = current;
+ var_values[VAR_TS] = start;
+ var_values[VAR_TE] = end;
+ var_values[VAR_TI] = (current - start) / (end - start);
+
+ if ((ret = av_expr_parse_and_eval(&res, cmd->arg, var_names, var_values,
+ NULL, NULL, NULL, NULL, NULL, 0, NULL)) < 0) {
+ av_log(ctx, AV_LOG_ERROR, "Invalid expression '%s' for command argument.\n", cmd->arg);
+ av_frame_free(&ref);
+ return AVERROR(EINVAL);
+ }
+
+ cmd_arg = av_asprintf("%g", res);
+ if (!cmd_arg) {
+ av_frame_free(&ref);
+ return AVERROR(ENOMEM);
+ }
+ }