mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-12 02:19:35 +00:00
af_aformat: switch to an AVOptions-based system.
This commit is contained in:
parent
d28cb84989
commit
0af7fe1f95
@ -133,13 +133,13 @@ The filter accepts the following named parameters:
|
||||
@table @option
|
||||
|
||||
@item sample_fmts
|
||||
A comma-separated list of requested sample formats.
|
||||
A '|'-separated list of requested sample formats.
|
||||
|
||||
@item sample_rates
|
||||
A comma-separated list of requested sample rates.
|
||||
A '|'-separated list of requested sample rates.
|
||||
|
||||
@item channel_layouts
|
||||
A comma-separated list of requested channel layouts.
|
||||
A '|'-separated list of requested channel layouts.
|
||||
|
||||
@end table
|
||||
|
||||
@ -147,7 +147,7 @@ If a parameter is omitted, all values are allowed.
|
||||
|
||||
For example to force the output to either unsigned 8-bit or signed 16-bit stereo:
|
||||
@example
|
||||
aformat=sample_fmts\=u8\,s16:channel_layouts\=stereo
|
||||
aformat=sample_fmts=u8|s16:channel_layouts=stereo
|
||||
@end example
|
||||
|
||||
@section amix
|
||||
|
@ -63,17 +63,24 @@ static const AVClass aformat_class = {
|
||||
|
||||
#define PARSE_FORMATS(str, type, list, add_to_list, get_fmt, none, desc) \
|
||||
do { \
|
||||
char *next, *cur = str; \
|
||||
char *next, *cur = str, sep; \
|
||||
\
|
||||
if (str && strchr(str, ',')) { \
|
||||
av_log(ctx, AV_LOG_WARNING, "This syntax is deprecated, use '|' to "\
|
||||
"separate %s.\n", desc); \
|
||||
sep = ','; \
|
||||
} else \
|
||||
sep = '|'; \
|
||||
\
|
||||
while (cur) { \
|
||||
type fmt; \
|
||||
next = strchr(cur, ','); \
|
||||
next = strchr(cur, sep); \
|
||||
if (next) \
|
||||
*next++ = 0; \
|
||||
\
|
||||
if ((fmt = get_fmt(cur)) == none) { \
|
||||
av_log(ctx, AV_LOG_ERROR, "Error parsing " desc ": %s.\n", cur);\
|
||||
ret = AVERROR(EINVAL); \
|
||||
goto fail; \
|
||||
return AVERROR(EINVAL); \
|
||||
} \
|
||||
add_to_list(&list, fmt); \
|
||||
\
|
||||
@ -90,20 +97,6 @@ static int get_sample_rate(const char *samplerate)
|
||||
static av_cold int init(AVFilterContext *ctx, const char *args)
|
||||
{
|
||||
AFormatContext *s = ctx->priv;
|
||||
int ret;
|
||||
|
||||
if (!args) {
|
||||
av_log(ctx, AV_LOG_ERROR, "No parameters supplied.\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
s->class = &aformat_class;
|
||||
av_opt_set_defaults(s);
|
||||
|
||||
if ((ret = av_set_options_string(s, args, "=", ":")) < 0) {
|
||||
av_log(ctx, AV_LOG_ERROR, "Error parsing options string '%s'.\n", args);
|
||||
return ret;
|
||||
}
|
||||
|
||||
PARSE_FORMATS(s->formats_str, enum AVSampleFormat, s->formats,
|
||||
ff_add_format, av_get_sample_fmt, AV_SAMPLE_FMT_NONE, "sample format");
|
||||
@ -113,9 +106,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
|
||||
ff_add_channel_layout, av_get_channel_layout, 0,
|
||||
"channel layout");
|
||||
|
||||
fail:
|
||||
av_opt_free(s);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int query_formats(AVFilterContext *ctx)
|
||||
@ -154,6 +145,7 @@ AVFilter avfilter_af_aformat = {
|
||||
.init = init,
|
||||
.query_formats = query_formats,
|
||||
.priv_size = sizeof(AFormatContext),
|
||||
.priv_class = &aformat_class,
|
||||
|
||||
.inputs = avfilter_af_aformat_inputs,
|
||||
.outputs = avfilter_af_aformat_outputs,
|
||||
|
Loading…
Reference in New Issue
Block a user