Exemple #1
0
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);
}