76 static double val(
void *priv,
double ch)
85 #define OFFSET(x) offsetof(EvalContext, x)
86 #define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
90 {
"nb_samples",
"set the number of samples per requested frame",
OFFSET(nb_samples),
AV_OPT_TYPE_INT, {.i64 = 1024}, 0, INT_MAX,
FLAGS },
91 {
"n",
"set the number of samples per requested frame",
OFFSET(nb_samples),
AV_OPT_TYPE_INT, {.i64 = 1024}, 0, INT_MAX,
FLAGS },
104 int expected_nb_channels)
108 char *expr, *last_expr = NULL, *
buf;
109 double (*
const *
func1)(
void *, double) = NULL;
126 #define ADD_EXPRESSION(expr_) do { \
127 if (!av_dynarray2_add((void **)&eval->expr, &eval->nb_channels, \
128 sizeof(*eval->expr), NULL)) { \
129 ret = AVERROR(ENOMEM); \
132 eval->expr[eval->nb_channels-1] = NULL; \
133 ret = av_expr_parse(&eval->expr[eval->nb_channels - 1], expr_, \
134 var_names, func1_names, func1, \
135 NULL, NULL, 0, ctx); \
143 eval->
expr[i] = NULL;
149 while (expr =
av_strtok(buf,
"|", &buf)) {
155 for (i = eval->
nb_channels; i < expected_nb_channels; i++)
158 if (expected_nb_channels > 0 && eval->
nb_channels != expected_nb_channels) {
160 "Mismatch between the specified number of channel expressions '%d' "
161 "and the number of expected output channels '%d' for the specified channel layout\n",
217 eval->
expr[i] = NULL;
237 "sample_rate:%d chlayout:%s duration:%"PRId64
"\n",
272 for (i = 0; i < eval->
nb_samples; i++, eval->
n++) {
282 samplesref->
pts = eval->
pts;
289 #if CONFIG_AEVALSRC_FILTER
309 .priv_class = &aevalsrc_class,
314 #define OFFSET(x) offsetof(EvalContext, x)
315 #define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
396 #define TS2T(ts, tb) ((ts) == AV_NOPTS_VALUE ? NAN : (double)(ts)*av_q2d(tb))
416 for (i = 0; i < nb_samples; i++, eval->
n++) {
423 for (j = 0; j < outlink->
channels; j++) {
434 #if CONFIG_AEVAL_FILTER
456 .description =
NULL_IF_CONFIG_SMALL(
"Filter audio signal according to a specified expression."),
463 .priv_class = &aeval_class,