58 const char *w_expr,
const char *h_expr,
60 int *ret_w,
int *ret_h)
67 double var_values[
VARS_NB], res;
73 var_values[
VAR_A] = (double) inlink->
w / inlink->
h;
86 eval_w = var_values[
VAR_OUT_W] = var_values[
VAR_OW] = (
int) res == 0 ? inlink->
w : (
int) res;
92 eval_h = var_values[
VAR_OUT_H] = var_values[
VAR_OH] = (
int) res == 0 ? inlink->
h : (
int) res;
98 eval_w = (
int) res == 0 ? inlink->
w : (
int) res;
107 "Error when evaluating the expression '%s'.\n" 108 "Maybe the expression for out_w:'%s' or for out_h:'%s' is self-referencing.\n",
109 expr, w_expr, h_expr);
114 int *ret_w,
int *ret_h,
115 int force_original_aspect_ratio,
int force_divisible_by)
118 int factor_w, factor_h;
134 if (w < 0 && h < 0) {
143 w =
av_rescale(h, inlink->
w, inlink->
h * factor_w) * factor_w;
145 h =
av_rescale(w, inlink->
h, inlink->
w * factor_h) * factor_h;
150 if (force_original_aspect_ratio) {
154 if (force_original_aspect_ratio == 1) {
157 if (force_divisible_by > 1) {
159 w = w / force_divisible_by * force_divisible_by;
160 h = h / force_divisible_by * force_divisible_by;
165 if (force_divisible_by > 1) {
167 w = (w + force_divisible_by - 1) / force_divisible_by * force_divisible_by;
168 h = (h + force_divisible_by - 1) / force_divisible_by * force_divisible_by;
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
int h
agreed upon image height
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
A link between two filters.
int av_expr_parse_and_eval(double *d, const char *s, const char *const *const_names, const double *const_values, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), void *opaque, int log_offset, void *log_ctx)
Parse and evaluate an expression.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
int ff_scale_eval_dimensions(void *log_ctx, const char *w_expr, const char *h_expr, AVFilterLink *inlink, AVFilterLink *outlink, int *ret_w, int *ret_h)
Parse and evaluate string expressions for width and height.
int w
agreed upon image width
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
static const char *const var_names[]
int format
agreed upon media format
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
AVRational sample_aspect_ratio
agreed upon sample aspect ratio
int ff_scale_adjust_dimensions(AVFilterLink *inlink, int *ret_w, int *ret_h, int force_original_aspect_ratio, int force_divisible_by)
Transform evaluated width and height obtained from ff_scale_eval_dimensions into actual target width ...
simple arithmetic expression evaluator