| @@ -42,60 +42,30 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) | |||
| if (!args) | |||
| goto arg_fail; | |||
| fmts_str = av_get_token(&args, ":"); | |||
| if (!fmts_str || !*fmts_str) | |||
| goto arg_fail; | |||
| if (!strcmp(fmts_str, "all")) { | |||
| aformat->formats = avfilter_all_formats(AVMEDIA_TYPE_AUDIO); | |||
| } else { | |||
| for (fmt_str = fmts_str; | |||
| fmt_str = strtok_r(fmt_str, ",", &ptr); fmt_str = NULL) { | |||
| if ((ret = ff_parse_sample_format((int*)&fmt, fmt_str, ctx)) < 0) { | |||
| av_freep(&fmts_str); | |||
| return ret; | |||
| } | |||
| avfilter_add_format(&aformat->formats, fmt); | |||
| } | |||
| } | |||
| av_freep(&fmts_str); | |||
| if (*args) | |||
| #define ADD_FORMATS(all_formats, fmt_name, fmt_type, fmts_list) \ | |||
| fmts_str = av_get_token(&args, ":"); \ | |||
| if (!fmts_str || !*fmts_str) \ | |||
| goto arg_fail; \ | |||
| if (!strcmp(fmts_str, "all")) { \ | |||
| aformat->fmts_list = all_formats; \ | |||
| } else { \ | |||
| for (fmt_str = fmts_str; \ | |||
| fmt_str = strtok_r(fmt_str, ",", &ptr); fmt_str = NULL) { \ | |||
| if ((ret = ff_parse_##fmt_name((fmt_type *)&fmt, \ | |||
| fmt_str, ctx)) < 0) { \ | |||
| av_freep(&fmts_str); \ | |||
| return ret; \ | |||
| } \ | |||
| avfilter_add_format(&aformat->fmts_list, fmt); \ | |||
| } \ | |||
| } \ | |||
| av_freep(&fmts_str); \ | |||
| if (*args) \ | |||
| args++; | |||
| fmts_str = av_get_token(&args, ":"); | |||
| if (!fmts_str || !*fmts_str) | |||
| goto arg_fail; | |||
| if (!strcmp(fmts_str, "all")) { | |||
| aformat->chlayouts = avfilter_all_channel_layouts(); | |||
| } else { | |||
| for (fmt_str = fmts_str; | |||
| fmt_str = strtok_r(fmt_str, ",", &ptr); fmt_str = NULL) { | |||
| if ((ret = ff_parse_channel_layout(&fmt, fmt_str, ctx)) < 0) { | |||
| av_freep(&fmts_str); | |||
| return ret; | |||
| } | |||
| avfilter_add_format(&aformat->chlayouts, fmt); | |||
| } | |||
| } | |||
| av_freep(&fmts_str); | |||
| if (*args) | |||
| args++; | |||
| fmts_str = av_get_token(&args, ":"); | |||
| if (!fmts_str || !*fmts_str) | |||
| goto arg_fail; | |||
| if (!strcmp(fmts_str, "all")) { | |||
| aformat->packing = avfilter_all_packing_formats(); | |||
| } else { | |||
| for (fmt_str = fmts_str; | |||
| fmt_str = strtok_r(fmt_str, ",", &ptr); fmt_str = NULL) { | |||
| if ((ret = ff_parse_packing_format((int*)&fmt, fmt_str, ctx)) < 0) { | |||
| av_freep(&fmts_str); | |||
| return ret; | |||
| } | |||
| avfilter_add_format(&aformat->packing, fmt); | |||
| } | |||
| } | |||
| av_freep(&fmts_str); | |||
| ADD_FORMATS(avfilter_all_formats(AVMEDIA_TYPE_AUDIO), sample_format, int, formats); | |||
| ADD_FORMATS(avfilter_all_channel_layouts(), channel_layout, int64_t, chlayouts); | |||
| ADD_FORMATS(avfilter_all_packing_formats(), packing_format, int, packing); | |||
| return 0; | |||