MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / eval_expr

Function eval_expr

libavcodec/eval.c:128–164  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

126};
127
128static double eval_expr(Parser * p, AVExpr * e) {
129 switch (e->type) {
130 case e_value: return e->value;
131 case e_const: return e->value * p->const_value[e->a.const_index];
132 case e_func0: return e->value * e->a.func0(eval_expr(p, e->param[0]));
133 case e_func1: return e->value * e->a.func1(p->opaque, eval_expr(p, e->param[0]));
134 case e_func2: return e->value * e->a.func2(p->opaque, eval_expr(p, e->param[0]), eval_expr(p, e->param[1]));
135 case e_squish: return 1/(1+exp(4*eval_expr(p, e->param[0])));
136 case e_gauss: { double d = eval_expr(p, e->param[0]); return exp(-d*d/2)/sqrt(2*M_PI); }
137 case e_ld: return e->value * p->var[av_clip(eval_expr(p, e->param[0]), 0, VARS-1)];
138 case e_while: {
139 double d = NAN;
140 while(eval_expr(p, e->param[0]))
141 d=eval_expr(p, e->param[1]);
142 return d;
143 }
144 default: {
145 double d = eval_expr(p, e->param[0]);
146 double d2 = eval_expr(p, e->param[1]);
147 switch (e->type) {
148 case e_mod: return e->value * (d - floor(d/d2)*d2);
149 case e_max: return e->value * (d > d2 ? d : d2);
150 case e_min: return e->value * (d < d2 ? d : d2);
151 case e_eq: return e->value * (d == d2 ? 1.0 : 0.0);
152 case e_gt: return e->value * (d > d2 ? 1.0 : 0.0);
153 case e_gte: return e->value * (d >= d2 ? 1.0 : 0.0);
154 case e_pow: return e->value * pow(d, d2);
155 case e_mul: return e->value * (d * d2);
156 case e_div: return e->value * (d / d2);
157 case e_add: return e->value * (d + d2);
158 case e_last:return e->value * d2;
159 case e_st : return e->value * (p->var[av_clip(d, 0, VARS-1)]= d2);
160 }
161 }
162 }
163 return NAN;
164}
165
166static AVExpr * parse_expr(Parser *p);
167

Callers 1

ff_eval_exprFunction · 0.85

Calls 1

av_clipFunction · 0.85

Tested by

no test coverage detected