|
|
|
@ -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, |
|
|
|
|