Browse code

lavd/alsa: simplify reordering functions definition.

Nicolas George authored on 2013/02/02 22:13:11
Showing 1 changed files
... ...
@@ -62,48 +62,45 @@ static av_cold snd_pcm_format_t codec_id_to_pcm_format(int codec_id)
62 62
     }
63 63
 }
64 64
 
65
-#define REORDER_OUT_50(NAME, TYPE) \
66
-static void alsa_reorder_ ## NAME ## _out_50(const void *in_v, void *out_v, int n) \
67
-{ \
68
-    const TYPE *in = in_v; \
69
-    TYPE      *out = out_v; \
70
-\
71
-    while (n-- > 0) { \
65
+#define MAKE_REORDER_FUNC(NAME, TYPE, CHANNELS, LAYOUT, MAP)                \
66
+static void alsa_reorder_ ## NAME ## _ ## LAYOUT(const void *in_v,          \
67
+                                                 void *out_v,               \
68
+                                                 int n)                     \
69
+{                                                                           \
70
+    const TYPE *in = in_v;                                                  \
71
+    TYPE      *out = out_v;                                                 \
72
+                                                                            \
73
+    while (n-- > 0) {                                                       \
74
+        MAP                                                                 \
75
+        in  += CHANNELS;                                                    \
76
+        out += CHANNELS;                                                    \
77
+    }                                                                       \
78
+}
79
+
80
+#define MAKE_REORDER_FUNCS(CHANNELS, LAYOUT, MAP) \
81
+    MAKE_REORDER_FUNC(int8,  int8_t,  CHANNELS, LAYOUT, MAP) \
82
+    MAKE_REORDER_FUNC(int16, int16_t, CHANNELS, LAYOUT, MAP) \
83
+    MAKE_REORDER_FUNC(int32, int32_t, CHANNELS, LAYOUT, MAP) \
84
+    MAKE_REORDER_FUNC(f32,   float,   CHANNELS, LAYOUT, MAP)
85
+
86
+MAKE_REORDER_FUNCS(5, out_50, \
72 87
         out[0] = in[0]; \
73 88
         out[1] = in[1]; \
74 89
         out[2] = in[3]; \
75 90
         out[3] = in[4]; \
76 91
         out[4] = in[2]; \
77
-        in  += 5; \
78
-        out += 5; \
79
-    } \
80
-}
92
+        );
81 93
 
82
-#define REORDER_OUT_51(NAME, TYPE) \
83
-static void alsa_reorder_ ## NAME ## _out_51(const void *in_v, void *out_v, int n) \
84
-{ \
85
-    const TYPE *in = in_v; \
86
-    TYPE      *out = out_v; \
87
-\
88
-    while (n-- > 0) { \
94
+MAKE_REORDER_FUNCS(6, out_51, \
89 95
         out[0] = in[0]; \
90 96
         out[1] = in[1]; \
91 97
         out[2] = in[4]; \
92 98
         out[3] = in[5]; \
93 99
         out[4] = in[2]; \
94 100
         out[5] = in[3]; \
95
-        in  += 6; \
96
-        out += 6; \
97
-    } \
98
-}
101
+        );
99 102
 
100
-#define REORDER_OUT_71(NAME, TYPE) \
101
-static void alsa_reorder_ ## NAME ## _out_71(const void *in_v, void *out_v, int n) \
102
-{ \
103
-    const TYPE *in = in_v; \
104
-    TYPE      *out = out_v; \
105
-\
106
-    while (n-- > 0) { \
103
+MAKE_REORDER_FUNCS(8, out_71, \
107 104
         out[0] = in[0]; \
108 105
         out[1] = in[1]; \
109 106
         out[2] = in[4]; \
... ...
@@ -112,23 +109,7 @@ static void alsa_reorder_ ## NAME ## _out_71(const void *in_v, void *out_v, int
112 112
         out[5] = in[3]; \
113 113
         out[6] = in[6]; \
114 114
         out[7] = in[7]; \
115
-        in  += 8; \
116
-        out += 8; \
117
-    } \
118
-}
119
-
120
-REORDER_OUT_50(int8, int8_t)
121
-REORDER_OUT_51(int8, int8_t)
122
-REORDER_OUT_71(int8, int8_t)
123
-REORDER_OUT_50(int16, int16_t)
124
-REORDER_OUT_51(int16, int16_t)
125
-REORDER_OUT_71(int16, int16_t)
126
-REORDER_OUT_50(int32, int32_t)
127
-REORDER_OUT_51(int32, int32_t)
128
-REORDER_OUT_71(int32, int32_t)
129
-REORDER_OUT_50(f32, float)
130
-REORDER_OUT_51(f32, float)
131
-REORDER_OUT_71(f32, float)
115
+        );
132 116
 
133 117
 #define FORMAT_I8  0
134 118
 #define FORMAT_I16 1