]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/af_aformat.c
mandelbrot: unroll the innermost loop once.
[ffmpeg] / libavfilter / af_aformat.c
index c753ea7b609c2a0f3e26574d4da5cb16a25a790b..e8926355e2de97a29bce4e4b63cc378d1f05ed12 100644 (file)
@@ -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 = av_strtok(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_make_all_formats(AVMEDIA_TYPE_AUDIO), sample_format, int, formats);
+    ADD_FORMATS(avfilter_make_all_channel_layouts(), channel_layout, int64_t, chlayouts);
+    ADD_FORMATS(avfilter_make_all_packing_formats(), packing_format, int, packing);
 
     return 0;
 
@@ -128,11 +98,11 @@ AVFilter avfilter_af_aformat = {
     .query_formats = query_formats,
     .priv_size     = sizeof(AFormatContext),
 
-    .inputs        = (AVFilterPad[]) {{ .name            = "default",
+    .inputs        = (const AVFilterPad[]) {{ .name      = "default",
                                         .type            = AVMEDIA_TYPE_AUDIO,
                                         .filter_samples  = filter_samples},
                                       { .name = NULL}},
-    .outputs       = (AVFilterPad[]) {{ .name            = "default",
+    .outputs       = (const AVFilterPad[]) {{ .name      = "default",
                                         .type            = AVMEDIA_TYPE_AUDIO},
                                       { .name = NULL}},
 };