FFmpeg
Loading...
Searching...
No Matches
aeval.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011 Stefano Sabatini
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21/**
22 * @file
23 * eval audio source
24 */
25
26#include "config_components.h"
27
28#include "libavutil/avstring.h"
30#include "libavutil/eval.h"
31#include "libavutil/mem.h"
32#include "libavutil/opt.h"
33#include "avfilter.h"
34#include "audio.h"
35#include "filters.h"
36#include "formats.h"
37
38static const char * const var_names[] = {
39 "ch", ///< the value of the current channel
40 "n", ///< number of frame
41 "nb_in_channels",
42 "nb_out_channels",
43 "t", ///< timestamp expressed in seconds
44 "s", ///< sample rate
45 NULL
46};
47
57
58typedef struct EvalContext {
59 const AVClass *class;
64 int nb_channels; ///< number of output channels
65 int nb_in_channels; ///< number of input channels
66 int same_chlayout; ///< set output as input channel layout
69 char *exprs;
70 int nb_samples; ///< number of samples per requested frame
72 uint64_t n;
76
77static double val(void *priv, double ch)
78{
79 EvalContext *eval = priv;
80 return eval->channel_values[FFMIN((int)ch, eval->nb_in_channels-1)];
81}
82
83static double (* const aeval_func1[])(void *, double) = { val, NULL };
84static const char * const aeval_func1_names[] = { "val", NULL };
85
86#define OFFSET(x) offsetof(EvalContext, x)
87#define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
88
89static const AVOption aevalsrc_options[]= {
90 { "exprs", "set the '|'-separated list of channels expressions", OFFSET(exprs), AV_OPT_TYPE_STRING, {.str = NULL}, .flags = FLAGS },
91 { "nb_samples", "set the number of samples per requested frame", OFFSET(nb_samples), AV_OPT_TYPE_INT, {.i64 = 1024}, 0, INT_MAX, FLAGS },
92 { "n", "set the number of samples per requested frame", OFFSET(nb_samples), AV_OPT_TYPE_INT, {.i64 = 1024}, 0, INT_MAX, FLAGS },
93 { "sample_rate", "set the sample rate", OFFSET(sample_rate_str), AV_OPT_TYPE_STRING, {.str = "44100"}, 0, 0, FLAGS },
94 { "s", "set the sample rate", OFFSET(sample_rate_str), AV_OPT_TYPE_STRING, {.str = "44100"}, 0, 0, FLAGS },
95 { "duration", "set audio duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = -1}, -1, INT64_MAX, FLAGS },
96 { "d", "set audio duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = -1}, -1, INT64_MAX, FLAGS },
97 { "channel_layout", "set channel layout", OFFSET(chlayout_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
98 { "c", "set channel layout", OFFSET(chlayout_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
99 { NULL }
100};
101
103
105 int expected_nb_channels)
106{
107 EvalContext *eval = ctx->priv;
108 char *args1 = av_strdup(eval->exprs);
109 char *expr, *last_expr = NULL, *buf;
110 double (* const *func1)(void *, double) = NULL;
111 const char * const *func1_names = NULL;
112 int i, ret = 0;
113
114 if (!args1)
115 return AVERROR(ENOMEM);
116
117 if (!eval->exprs || !*eval->exprs) {
118 av_log(ctx, AV_LOG_ERROR, "Channels expressions list is empty\n");
119 ret = AVERROR(EINVAL);
120 goto end;
121 }
122
123 if (!strcmp(ctx->filter->name, "aeval")) {
126 }
127
128#define ADD_EXPRESSION(expr_) do { \
129 ret = av_dynarray_add_nofree(&eval->expr, \
130 &eval->nb_channels, NULL); \
131 if (ret < 0) \
132 goto end; \
133 eval->expr[eval->nb_channels-1] = NULL; \
134 ret = av_expr_parse(&eval->expr[eval->nb_channels - 1], expr_, \
135 var_names, func1_names, func1, \
136 NULL, NULL, 0, ctx); \
137 if (ret < 0) \
138 goto end; \
139 } while (0)
140
141 /* reset expressions */
142 for (i = 0; i < eval->nb_channels; i++) {
143 av_expr_free(eval->expr[i]);
144 eval->expr[i] = NULL;
145 }
146 av_freep(&eval->expr);
147 eval->nb_channels = 0;
148
149 buf = args1;
150 while (expr = av_strtok(buf, "|", &buf)) {
151 ADD_EXPRESSION(expr);
152 last_expr = expr;
153 }
154
155 if (expected_nb_channels > eval->nb_channels)
156 for (i = eval->nb_channels; i < expected_nb_channels; i++)
157 ADD_EXPRESSION(last_expr);
158
159 if (expected_nb_channels > 0 && eval->nb_channels != expected_nb_channels) {
161 "Mismatch between the specified number of channel expressions '%d' "
162 "and the number of expected output channels '%d' for the specified channel layout\n",
163 eval->nb_channels, expected_nb_channels);
164 ret = AVERROR(EINVAL);
165 goto end;
166 }
167
168end:
169 av_free(args1);
170 return ret;
171}
172
174{
175 EvalContext *eval = ctx->priv;
176 int ret = 0;
177
178 if (eval->chlayout_str) {
179 if (!strcmp(eval->chlayout_str, "same") && !strcmp(ctx->filter->name, "aeval")) {
180 eval->same_chlayout = 1;
181 } else {
183 if (ret < 0)
184 return ret;
185
187 if (ret < 0)
188 return ret;
189 }
190 } else {
191 /* guess channel layout from nb expressions/channels */
192 if ((ret = parse_channel_expressions(ctx, -1)) < 0)
193 return ret;
194
196 if (eval->nb_channels <= 0) {
197 av_log(ctx, AV_LOG_ERROR, "Invalid number of channels '%d' provided\n",
198 eval->nb_channels);
199 return AVERROR(EINVAL);
200 }
201 }
202
203 if (eval->sample_rate_str)
204 if ((ret = ff_parse_sample_rate(&eval->sample_rate, eval->sample_rate_str, ctx)))
205 return ret;
206 eval->n = 0;
207
208 return ret;
209}
210
212{
213 EvalContext *eval = ctx->priv;
214 int i;
215
216 for (i = 0; i < eval->nb_channels; i++) {
217 av_expr_free(eval->expr[i]);
218 eval->expr[i] = NULL;
219 }
220 av_freep(&eval->expr);
221 av_freep(&eval->channel_values);
223}
224
225static int config_props(AVFilterLink *outlink)
226{
227 EvalContext *eval = outlink->src->priv;
228 char buf[128];
229
230 outlink->time_base = (AVRational){1, eval->sample_rate};
231 outlink->sample_rate = eval->sample_rate;
232
233 eval->var_values[VAR_S] = eval->sample_rate;
236
237 av_channel_layout_describe(&eval->chlayout, buf, sizeof(buf));
238
239 av_log(outlink->src, AV_LOG_VERBOSE,
240 "sample_rate:%d chlayout:%s duration:%"PRId64"\n",
241 eval->sample_rate, buf, eval->duration);
242
243 return 0;
244}
245
247 AVFilterFormatsConfig **cfg_in,
248 AVFilterFormatsConfig **cfg_out)
249{
250 const EvalContext *eval = ctx->priv;
252 AVChannelLayout chlayouts[] = { eval->chlayout.nb_channels ? eval->chlayout : FF_COUNT2LAYOUT(eval->nb_channels), { 0 } };
253 int sample_rates[] = { eval->sample_rate, -1 };
254 int ret;
255
256 ret = ff_set_sample_formats_from_list2(ctx, cfg_in, cfg_out, sample_fmts);
257 if (ret < 0)
258 return ret;
259
260 ret = ff_set_common_channel_layouts_from_list2(ctx, cfg_in, cfg_out, chlayouts);
261 if (ret < 0)
262 return ret;
263
264 return ff_set_common_samplerates_from_list2(ctx, cfg_in, cfg_out, sample_rates);
265}
266
268{
269 AVFilterLink *outlink = ctx->outputs[0];
270 EvalContext *eval = outlink->src->priv;
271 AVFrame *samplesref;
272 int i, j;
273 int64_t t = av_rescale(eval->n, AV_TIME_BASE, eval->sample_rate);
274 int nb_samples;
275
276 if (!ff_outlink_frame_wanted(outlink))
277 return FFERROR_NOT_READY;
278
279 if (eval->duration >= 0 && t >= eval->duration) {
280 ff_outlink_set_status(outlink, AVERROR_EOF, eval->pts);
281 return 0;
282 }
283
284 if (eval->duration >= 0) {
285 nb_samples = FFMIN(eval->nb_samples, av_rescale(eval->duration, eval->sample_rate, AV_TIME_BASE) - eval->pts);
286 if (!nb_samples) {
287 ff_outlink_set_status(outlink, AVERROR_EOF, eval->pts);
288 return 0;
289 }
290 } else {
291 nb_samples = eval->nb_samples;
292 }
293 samplesref = ff_get_audio_buffer(outlink, nb_samples);
294 if (!samplesref)
295 return AVERROR(ENOMEM);
296
297 /* evaluate expression for each single sample and for each channel */
298 for (i = 0; i < nb_samples; i++, eval->n++) {
299 eval->var_values[VAR_N] = eval->n;
300 eval->var_values[VAR_T] = eval->var_values[VAR_N] * (double)1/eval->sample_rate;
301
302 for (j = 0; j < eval->nb_channels; j++) {
303 *((double *) samplesref->extended_data[j] + i) =
304 av_expr_eval(eval->expr[j], eval->var_values, NULL);
305 }
306 }
307
308 samplesref->pts = eval->pts;
309 samplesref->sample_rate = eval->sample_rate;
310 eval->pts += nb_samples;
311
312 return ff_filter_frame(outlink, samplesref);
313}
314
315#if CONFIG_AEVALSRC_FILTER
316static const AVFilterPad aevalsrc_outputs[] = {
317 {
318 .name = "default",
319 .type = AVMEDIA_TYPE_AUDIO,
320 .config_props = config_props,
321 },
322};
323
325 .p.name = "aevalsrc",
326 .p.description = NULL_IF_CONFIG_SMALL("Generate an audio signal generated by an expression."),
327 .p.priv_class = &aevalsrc_class,
328 .init = init,
329 .uninit = uninit,
330 .activate = activate,
331 .priv_size = sizeof(EvalContext),
332 FILTER_OUTPUTS(aevalsrc_outputs),
334};
335
336#endif /* CONFIG_AEVALSRC_FILTER */
337
338#define OFFSET(x) offsetof(EvalContext, x)
339#define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
340
341static const AVOption aeval_options[]= {
342 { "exprs", "set the '|'-separated list of channels expressions", OFFSET(exprs), AV_OPT_TYPE_STRING, {.str = NULL}, .flags = FLAGS },
343 { "channel_layout", "set channel layout", OFFSET(chlayout_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
344 { "c", "set channel layout", OFFSET(chlayout_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
345 { NULL }
346};
347
349
351 AVFilterFormatsConfig **cfg_in,
352 AVFilterFormatsConfig **cfg_out)
353{
355 const EvalContext *eval = ctx->priv;
356 static const enum AVSampleFormat sample_fmts[] = {
358 };
359 int ret;
360
361 // inlink supports any channel layout
363 if ((ret = ff_channel_layouts_ref(layouts, &cfg_in[0]->channel_layouts)) < 0)
364 return ret;
365
366 if (!eval->same_chlayout) {
367 // outlink supports only requested output channel layout
368 layouts = NULL;
369 if ((ret = ff_add_channel_layout(&layouts, &FF_COUNT2LAYOUT(eval->nb_channels))) < 0)
370 return ret;
371 if ((ret = ff_channel_layouts_ref(layouts, &cfg_out[0]->channel_layouts)) < 0)
372 return ret;
373 }
374
375 if ((ret = ff_set_sample_formats_from_list2(ctx, cfg_in, cfg_out, sample_fmts)) < 0)
376 return ret;
377
378 return 0;
379}
380
382{
383 AVFilterContext *ctx = outlink->src;
384 EvalContext *eval = ctx->priv;
385 AVFilterLink *inlink = ctx->inputs[0];
386 int ret;
387
388 if (eval->same_chlayout) {
389 if ((ret = av_channel_layout_copy(&eval->chlayout, &inlink->ch_layout)) < 0)
390 return ret;
391
392 if ((ret = parse_channel_expressions(ctx, inlink->ch_layout.nb_channels)) < 0)
393 return ret;
394 }
395
396 eval->n = 0;
399 eval->var_values[VAR_S] = inlink->sample_rate;
400 eval->var_values[VAR_T] = NAN;
401
403 inlink->ch_layout.nb_channels, sizeof(*eval->channel_values));
404 if (!eval->channel_values)
405 return AVERROR(ENOMEM);
406
407 return 0;
408}
409
410static int filter_frame(AVFilterLink *inlink, AVFrame *in)
411{
412 EvalContext *eval = inlink->dst->priv;
413 AVFilterLink *outlink = inlink->dst->outputs[0];
414 int nb_samples = in->nb_samples;
415 AVFrame *out;
416 double t0;
417 int i, j;
418
419 out = ff_get_audio_buffer(outlink, nb_samples);
420 if (!out) {
421 av_frame_free(&in);
422 return AVERROR(ENOMEM);
423 }
425
426 t0 = TS2T(in->pts, inlink->time_base);
427
428 /* evaluate expression for each single sample and for each channel */
429 for (i = 0; i < nb_samples; i++, eval->n++) {
430 eval->var_values[VAR_N] = eval->n;
431 eval->var_values[VAR_T] = t0 + i * (double)1/inlink->sample_rate;
432
433 for (j = 0; j < inlink->ch_layout.nb_channels; j++)
434 eval->channel_values[j] = *((double *) in->extended_data[j] + i);
435
436 for (j = 0; j < outlink->ch_layout.nb_channels; j++) {
437 eval->var_values[VAR_CH] = j;
438 *((double *) out->extended_data[j] + i) =
439 av_expr_eval(eval->expr[j], eval->var_values, eval);
440 }
441 }
442
443 av_frame_free(&in);
444 return ff_filter_frame(outlink, out);
445}
446
447#if CONFIG_AEVAL_FILTER
448
449static const AVFilterPad aeval_inputs[] = {
450 {
451 .name = "default",
452 .type = AVMEDIA_TYPE_AUDIO,
453 .filter_frame = filter_frame,
454 },
455};
456
457static const AVFilterPad aeval_outputs[] = {
458 {
459 .name = "default",
460 .type = AVMEDIA_TYPE_AUDIO,
461 .config_props = aeval_config_output,
462 },
463};
464
465const FFFilter ff_af_aeval = {
466 .p.name = "aeval",
467 .p.description = NULL_IF_CONFIG_SMALL("Filter audio signal according to a specified expression."),
468 .p.priv_class = &aeval_class,
470 .init = init,
471 .uninit = uninit,
472 .priv_size = sizeof(EvalContext),
473 FILTER_INPUTS(aeval_inputs),
474 FILTER_OUTPUTS(aeval_outputs),
476};
477
478#endif /* CONFIG_AEVAL_FILTER */
static enum AVSampleFormat sample_fmts[]
Definition adpcmenc.c:933
#define ADD_EXPRESSION(expr_)
@ VAR_NB_IN_CHANNELS
Definition aeval.c:51
@ VAR_CH
Definition aeval.c:49
@ VAR_VARS_NB
Definition aeval.c:55
@ VAR_T
Definition aeval.c:53
@ VAR_S
Definition aeval.c:54
@ VAR_NB_OUT_CHANNELS
Definition aeval.c:52
static double val(void *priv, double ch)
Definition aeval.c:77
static int config_props(AVFilterLink *outlink)
Definition aeval.c:225
static const AVOption aeval_options[]
Definition aeval.c:341
static double(*const aeval_func1[])(void *, double)
Definition aeval.c:83
static int aeval_query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
Definition aeval.c:350
static int parse_channel_expressions(AVFilterContext *ctx, int expected_nb_channels)
Definition aeval.c:104
static int filter_frame(AVFilterLink *inlink, AVFrame *in)
Definition aeval.c:410
static int query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
Definition aeval.c:246
static int activate(AVFilterContext *ctx)
Definition aeval.c:267
static const AVOption aevalsrc_options[]
Definition aeval.c:89
static av_cold void uninit(AVFilterContext *ctx)
Definition aeval.c:211
#define OFFSET(x)
Definition aeval.c:86
static const char *const aeval_func1_names[]
Definition aeval.c:84
static int aeval_config_output(AVFilterLink *outlink)
Definition aeval.c:381
const FFFilter ff_asrc_aevalsrc
const FFFilter ff_af_aeval
int ff_parse_sample_rate(int *ret, const char *arg, void *log_ctx)
Parse a sample rate.
Definition audio.c:87
int ff_parse_channel_layout(AVChannelLayout *ret, int *nret, const char *arg, void *log_ctx)
Parse a channel layout or a corresponding integer representation.
Definition audio.c:99
AVFrame * ff_get_audio_buffer(AVFilterLink *link, int nb_samples)
Request an audio samples buffer with a specific set of permissions.
Definition audio.c:74
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
Definition avfilter.c:1068
int ff_outlink_frame_wanted(AVFilterLink *link)
Test if a frame is wanted on an output link.
Definition avfilter.c:1690
Main libavfilter public API header.
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
Public libavutil channel layout APIs header.
#define FLAGS
Definition cmdutils.c:598
#define NULL
Definition coverity.c:32
long long int64_t
Definition coverity.c:34
static const uint16_t channel_layouts[7]
Definition dca_lbr.c:112
static const int sample_rates[]
Definition dcaenc.h:34
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
Definition dolby_e.c:1067
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
void av_expr_free(AVExpr *e)
Free a parsed expression previously created with av_expr_parse().
Definition eval.c:368
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque)
Evaluate a previously parsed expression.
Definition eval.c:824
simple arithmetic expression evaluator
static int64_t duration
Definition ffplay.c:330
int ff_add_channel_layout(AVFilterChannelLayouts **l, const AVChannelLayout *channel_layout)
Definition formats.c:588
int ff_set_common_samplerates_from_list2(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out, const int *samplerates)
Definition formats.c:1050
AVFilterChannelLayouts * ff_all_channel_counts(void)
Construct an AVFilterChannelLayouts coding for any channel layout, with known or unknown disposition.
Definition formats.c:688
int ff_set_common_channel_layouts_from_list2(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out, const AVChannelLayout *fmts)
Definition formats.c:1026
int ff_channel_layouts_ref(AVFilterChannelLayouts *f, AVFilterChannelLayouts **ref)
Add *ref as a new reference to f.
Definition formats.c:751
int ff_set_sample_formats_from_list2(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out, const enum AVSampleFormat *fmts)
Definition formats.c:1154
#define FF_COUNT2LAYOUT(c)
Encode a channel count as a channel layout.
Definition formats.h:102
@ AV_OPT_TYPE_DURATION
Underlying C type is int64_t.
Definition opt.h:318
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
Definition opt.h:275
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
Definition avfilter.h:196
void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels)
Get the default channel layout for a given number of channels.
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
int av_channel_layout_describe(const AVChannelLayout *channel_layout, char *buf, size_t buf_size)
Get a human-readable string describing the channel layout properties.
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
#define AVERROR_EOF
End of file.
Definition error.h:57
#define AVERROR(e)
Definition error.h:45
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition frame.c:64
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
Definition frame.c:599
#define AV_LOG_VERBOSE
Detailed information.
Definition log.h:226
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201
AVSampleFormat
Audio sample formats.
Definition samplefmt.h:55
@ AV_SAMPLE_FMT_NONE
Definition samplefmt.h:56
@ AV_SAMPLE_FMT_DBLP
double, planar
Definition samplefmt.h:67
char * av_strtok(char *s, const char *delim, char **saveptr)
Split the string into several tokens which can be accessed by successive calls to av_strtok().
Definition avstring.c:179
#define AV_TIME_BASE
Internal time base represented as integer.
Definition avutil.h:253
static av_cold void uninit(AVBitStreamFilterContext *ctx)
static int activate(AVBitStreamFilterContext *ctx)
#define FILTER_INPUTS(array)
Definition filters.h:264
#define FILTER_OUTPUTS(array)
Definition filters.h:265
#define TS2T(ts, tb)
Definition filters.h:483
static void ff_outlink_set_status(AVFilterLink *link, int status, int64_t pts)
Set the status field of a link from the source filter.
Definition filters.h:629
#define FFERROR_NOT_READY
Filters implementation helper functions and internal structures.
Definition filters.h:34
#define AVFILTER_DEFINE_CLASS(fname)
Definition filters.h:478
#define FILTER_QUERY_FUNC2(func)
Definition filters.h:241
#define av_cold
Definition attributes.h:117
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
#define FFMIN(a, b)
Definition macros.h:49
#define NAN
Memory handling functions.
enum MovChannelLayoutTag * layouts
Definition mov_chan.c:335
var_name
Definition noise.c:46
@ VAR_N
Definition noise.c:47
@ VAR_VARS_NB
Definition noise.c:59
static const char *const var_names[]
Definition noise.c:30
#define av_strdup(s)
Definition ops_static.c:55
AVOptions.
static int config_props(AVBitStreamFilterLink *link)
Definition source.c:181
An AVChannelLayout holds information about the channel layout of audio data.
int nb_channels
Number of channels in this layout.
Describe the class of an AVClass context structure.
Definition log.h:76
Definition eval.c:171
A list of supported channel layouts.
Definition formats.h:85
An instance of a filter.
Definition avfilter.h:273
void * priv
private data for use by the filter
Definition avfilter.h:288
AVFilterLink ** outputs
array of pointers to output links
Definition avfilter.h:285
Lists of formats / etc.
Definition avfilter.h:120
A filter pad used for either input or output.
Definition filters.h:40
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
int nb_samples
number of audio samples (per channel) described by this frame
Definition frame.h:552
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Definition frame.h:574
int sample_rate
Sample rate of the audio data.
Definition frame.h:635
uint8_t ** extended_data
pointers to the data planes/channels.
Definition frame.h:533
AVOption.
Definition opt.h:428
Rational number (pair of numerator and denominator).
Definition rational.h:58
int64_t duration
Definition aeval.c:71
int nb_channels
number of output channels
Definition aeval.c:64
int same_chlayout
set output as input channel layout
Definition aeval.c:66
char * chlayout_str
Definition aeval.c:63
int nb_in_channels
number of input channels
Definition aeval.c:65
int nb_samples
number of samples per requested frame
Definition aeval.c:70
AVChannelLayout chlayout
Definition aeval.c:62
double * channel_values
Definition aeval.c:74
uint64_t n
Definition aeval.c:72
AVExpr ** expr
Definition aeval.c:68
char * exprs
Definition aeval.c:69
int sample_rate
Definition aeval.c:61
char * sample_rate_str
Definition aeval.c:60
int64_t pts
Definition aeval.c:67
double var_values[VAR_VARS_NB]
Definition aeval.c:73
#define av_free(p)
#define av_realloc_f(p, o, n)
#define av_freep(p)
#define av_log(a,...)
static FILE * out
Definition movenc.c:55
static AVFormatContext * ctx
Definition movenc.c:49
static double(*const func1[])(void *, double)
Definition vf_rotate.c:182
static const char *const func1_names[]
Definition vf_rotate.c:188