@@ -133,6 +133,83 @@ pa_channel_map_compatible(const pa_channel_map *map, const pa_sample_spec *ss)
133
133
return 1 ;
134
134
}
135
135
136
+ APULSE_EXPORT
137
+ pa_channel_map *
138
+ pa_channel_map_parse (pa_channel_map * map , const char * s )
139
+ {
140
+ trace_info ("F %s map=%p, s=%s\n" , __func__ , map , s );
141
+
142
+ pa_channel_map m = {};
143
+
144
+ if (strcmp (s , "stereo" ) == 0 ) {
145
+ m .channels = 2 ;
146
+ m .map [0 ] = PA_CHANNEL_POSITION_LEFT ;
147
+ m .map [1 ] = PA_CHANNEL_POSITION_RIGHT ;
148
+ } else if (strcmp (s , "surround-21" ) == 0 ) {
149
+ m .channels = 3 ;
150
+ m .map [0 ] = PA_CHANNEL_POSITION_FRONT_LEFT ;
151
+ m .map [1 ] = PA_CHANNEL_POSITION_FRONT_RIGHT ;
152
+ m .map [2 ] = PA_CHANNEL_POSITION_LFE ;
153
+ } else if (strcmp (s , "surround-40" ) == 0 ) {
154
+ m .channels = 4 ;
155
+ m .map [0 ] = PA_CHANNEL_POSITION_FRONT_LEFT ;
156
+ m .map [1 ] = PA_CHANNEL_POSITION_FRONT_RIGHT ;
157
+ m .map [2 ] = PA_CHANNEL_POSITION_REAR_LEFT ;
158
+ m .map [3 ] = PA_CHANNEL_POSITION_REAR_RIGHT ;
159
+ } else if (strcmp (s , "surround-41" ) == 0 ) {
160
+ m .channels = 5 ;
161
+ m .map [0 ] = PA_CHANNEL_POSITION_FRONT_LEFT ;
162
+ m .map [1 ] = PA_CHANNEL_POSITION_FRONT_RIGHT ;
163
+ m .map [2 ] = PA_CHANNEL_POSITION_REAR_LEFT ;
164
+ m .map [3 ] = PA_CHANNEL_POSITION_REAR_RIGHT ;
165
+ m .map [4 ] = PA_CHANNEL_POSITION_LFE ;
166
+ } else if (strcmp (s , "surround-50" ) == 0 ) {
167
+ m .channels = 5 ;
168
+ m .map [0 ] = PA_CHANNEL_POSITION_FRONT_LEFT ;
169
+ m .map [1 ] = PA_CHANNEL_POSITION_FRONT_RIGHT ;
170
+ m .map [2 ] = PA_CHANNEL_POSITION_REAR_LEFT ;
171
+ m .map [3 ] = PA_CHANNEL_POSITION_REAR_RIGHT ;
172
+ m .map [4 ] = PA_CHANNEL_POSITION_FRONT_CENTER ;
173
+ } else if (strcmp (s , "surround-51" ) == 0 ) {
174
+ m .channels = 6 ;
175
+ m .map [0 ] = PA_CHANNEL_POSITION_FRONT_LEFT ;
176
+ m .map [1 ] = PA_CHANNEL_POSITION_FRONT_RIGHT ;
177
+ m .map [2 ] = PA_CHANNEL_POSITION_REAR_LEFT ;
178
+ m .map [3 ] = PA_CHANNEL_POSITION_REAR_RIGHT ;
179
+ m .map [4 ] = PA_CHANNEL_POSITION_FRONT_CENTER ;
180
+ m .map [5 ] = PA_CHANNEL_POSITION_LFE ;
181
+ } else if (strcmp (s , "surround-51" ) == 0 ) {
182
+ m .channels = 8 ;
183
+ m .map [0 ] = PA_CHANNEL_POSITION_FRONT_LEFT ;
184
+ m .map [1 ] = PA_CHANNEL_POSITION_FRONT_RIGHT ;
185
+ m .map [2 ] = PA_CHANNEL_POSITION_REAR_LEFT ;
186
+ m .map [3 ] = PA_CHANNEL_POSITION_REAR_RIGHT ;
187
+ m .map [4 ] = PA_CHANNEL_POSITION_FRONT_CENTER ;
188
+ m .map [5 ] = PA_CHANNEL_POSITION_LFE ;
189
+ m .map [6 ] = PA_CHANNEL_POSITION_SIDE_LEFT ;
190
+ m .map [7 ] = PA_CHANNEL_POSITION_SIDE_RIGHT ;
191
+ }
192
+
193
+ if (m .channels > 0 ) {
194
+ // it was one of the predefined setups above
195
+ * map = m ;
196
+ return map ;
197
+ }
198
+
199
+ char * * p = g_strsplit (s , "," , PA_CHANNELS_MAX );
200
+
201
+ int k = 0 ;
202
+ while (k < PA_CHANNELS_MAX && p [k ]) {
203
+ m .channels = k + 1 ;
204
+ m .map [k ] = pa_channel_position_from_string (p [k ]);
205
+ k ++ ;
206
+ }
207
+
208
+ g_strfreev (p );
209
+ * map = m ;
210
+ return map ;
211
+ }
212
+
136
213
APULSE_EXPORT
137
214
char *
138
215
pa_channel_map_snprint (char * s , size_t l , const pa_channel_map * map )
0 commit comments