Skip to content

Commit

Permalink
impl pa_channel_map_parse
Browse files Browse the repository at this point in the history
  • Loading branch information
i-rinat committed Dec 19, 2015
1 parent 3000db0 commit 08a3b4a
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 7 deletions.
77 changes: 77 additions & 0 deletions src/apulse-channel-map.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,83 @@ pa_channel_map_compatible(const pa_channel_map *map, const pa_sample_spec *ss)
return 1;
}

APULSE_EXPORT
pa_channel_map *
pa_channel_map_parse(pa_channel_map *map, const char *s)
{
trace_info("F %s map=%p, s=%s\n", __func__, map, s);

pa_channel_map m = {};

if (strcmp(s, "stereo") == 0) {
m.channels = 2;
m.map[0] = PA_CHANNEL_POSITION_LEFT;
m.map[1] = PA_CHANNEL_POSITION_RIGHT;
} else if (strcmp(s, "surround-21") == 0) {
m.channels = 3;
m.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT;
m.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT;
m.map[2] = PA_CHANNEL_POSITION_LFE;
} else if (strcmp(s, "surround-40") == 0) {
m.channels = 4;
m.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT;
m.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT;
m.map[2] = PA_CHANNEL_POSITION_REAR_LEFT;
m.map[3] = PA_CHANNEL_POSITION_REAR_RIGHT;
} else if (strcmp(s, "surround-41") == 0) {
m.channels = 5;
m.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT;
m.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT;
m.map[2] = PA_CHANNEL_POSITION_REAR_LEFT;
m.map[3] = PA_CHANNEL_POSITION_REAR_RIGHT;
m.map[4] = PA_CHANNEL_POSITION_LFE;
} else if (strcmp(s, "surround-50") == 0) {
m.channels = 5;
m.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT;
m.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT;
m.map[2] = PA_CHANNEL_POSITION_REAR_LEFT;
m.map[3] = PA_CHANNEL_POSITION_REAR_RIGHT;
m.map[4] = PA_CHANNEL_POSITION_FRONT_CENTER;
} else if (strcmp(s, "surround-51") == 0) {
m.channels = 6;
m.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT;
m.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT;
m.map[2] = PA_CHANNEL_POSITION_REAR_LEFT;
m.map[3] = PA_CHANNEL_POSITION_REAR_RIGHT;
m.map[4] = PA_CHANNEL_POSITION_FRONT_CENTER;
m.map[5] = PA_CHANNEL_POSITION_LFE;
} else if (strcmp(s, "surround-51") == 0) {
m.channels = 8;
m.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT;
m.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT;
m.map[2] = PA_CHANNEL_POSITION_REAR_LEFT;
m.map[3] = PA_CHANNEL_POSITION_REAR_RIGHT;
m.map[4] = PA_CHANNEL_POSITION_FRONT_CENTER;
m.map[5] = PA_CHANNEL_POSITION_LFE;
m.map[6] = PA_CHANNEL_POSITION_SIDE_LEFT;
m.map[7] = PA_CHANNEL_POSITION_SIDE_RIGHT;
}

if (m.channels > 0) {
// it was one of the predefined setups above
*map = m;
return map;
}

char **p = g_strsplit(s, ",", PA_CHANNELS_MAX);

int k = 0;
while (k < PA_CHANNELS_MAX && p[k]) {
m.channels = k + 1;
m.map[k] = pa_channel_position_from_string(p[k]);
k ++;
}

g_strfreev(p);
*map = m;
return map;
}

APULSE_EXPORT
char *
pa_channel_map_snprint(char *s, size_t l, const pa_channel_map *map)
Expand Down
7 changes: 0 additions & 7 deletions src/notimplemented.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,13 +194,6 @@ const char* pa_channel_position_to_pretty_string(pa_channel_position_t pos)
return NULL;
}

APULSE_EXPORT
pa_channel_map *pa_channel_map_parse(pa_channel_map *map, const char *s)
{
trace_info("Z %s\n", __func__);
return NULL;
}

APULSE_EXPORT
int pa_channel_map_equal(const pa_channel_map *a, const pa_channel_map *b)
{
Expand Down

0 comments on commit 08a3b4a

Please sign in to comment.