static int set_chmap(snd_pcm_t *pcm, int format, int channels, int rate, int nargs, char **arg) { int i; snd_pcm_chmap_t *map; if (channels && channels != nargs) { printf("Inconsistent channels %d vs %d\n", channels, nargs); return 1; } if (!channels) { if (!nargs) { printf("No channels are given\n"); return 1; } channels = nargs; } if (setup_pcm(pcm, format, channels, rate)) return 1; map = malloc(sizeof(int) * (channels + 1)); if (!map) { printf("cannot malloc\n"); return 1; } map->channels = channels; for (i = 0; i < channels; i++) { int val = snd_pcm_chmap_from_string(arg[i]); if (val < 0) val = SND_CHMAP_UNKNOWN; map->pos[i] = val; } if (snd_pcm_set_chmap(pcm, map) < 0) { printf("Cannot set chmap\n"); return 1; } free(map); map = snd_pcm_get_chmap(pcm); if (!map) { printf("Cannot get chmap\n"); return 1; } printf("Get channels = %d\n", map->channels); print_channels(map); free(map); return 0; }
int snd_pcm_generic_set_chmap(snd_pcm_t *pcm, const snd_pcm_chmap_t *map) { snd_pcm_generic_t *generic = pcm->private_data; return snd_pcm_set_chmap(generic->slave, map); }