Skip to content

Commit 08a3b4a

Browse files
committed
impl pa_channel_map_parse
1 parent 3000db0 commit 08a3b4a

File tree

2 files changed

+77
-7
lines changed

2 files changed

+77
-7
lines changed

src/apulse-channel-map.c

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,83 @@ pa_channel_map_compatible(const pa_channel_map *map, const pa_sample_spec *ss)
133133
return 1;
134134
}
135135

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+
136213
APULSE_EXPORT
137214
char *
138215
pa_channel_map_snprint(char *s, size_t l, const pa_channel_map *map)

src/notimplemented.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,6 @@ const char* pa_channel_position_to_pretty_string(pa_channel_position_t pos)
194194
return NULL;
195195
}
196196

197-
APULSE_EXPORT
198-
pa_channel_map *pa_channel_map_parse(pa_channel_map *map, const char *s)
199-
{
200-
trace_info("Z %s\n", __func__);
201-
return NULL;
202-
}
203-
204197
APULSE_EXPORT
205198
int pa_channel_map_equal(const pa_channel_map *a, const pa_channel_map *b)
206199
{

0 commit comments

Comments
 (0)