diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-05-13 15:20:45 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-05-13 15:20:45 +0200 |
commit | 905c8004a0b77ad4303f64b1dc8b1b29e3795a63 (patch) | |
tree | 0efe2de08eb6cab82dbc0b5e6234a4f2bdfb913b /src/pulse/volume.c | |
parent | 28069ef0f74089ae18cefbe7e97d2b920d7ba0cc (diff) |
volume: introduce pa_cvolume_{get|set}_position()
Diffstat (limited to 'src/pulse/volume.c')
-rw-r--r-- | src/pulse/volume.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/pulse/volume.c b/src/pulse/volume.c index 6848771e..a9622e78 100644 --- a/src/pulse/volume.c +++ b/src/pulse/volume.c @@ -685,3 +685,49 @@ pa_cvolume* pa_cvolume_set_fade(pa_cvolume *v, const pa_channel_map *map, float return v; } + +pa_cvolume* pa_cvolume_set_position( + pa_cvolume *cv, + const pa_channel_map *map, + pa_channel_position_t t, + pa_volume_t v) { + + unsigned c; + pa_bool_t good = FALSE; + + pa_assert(cv); + pa_assert(map); + + pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(cv, map), NULL); + pa_return_val_if_fail(t < PA_CHANNEL_POSITION_MAX, NULL); + + for (c = 0; c < map->channels; c++) + if (map->map[c] == t) { + cv->values[c] = v; + good = TRUE; + } + + return good ? cv : NULL; +} + +pa_volume_t pa_cvolume_get_position( + pa_cvolume *cv, + const pa_channel_map *map, + pa_channel_position_t t) { + + unsigned c; + pa_volume_t v = PA_VOLUME_MUTED; + + pa_assert(cv); + pa_assert(map); + + pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(cv, map), PA_VOLUME_MUTED); + pa_return_val_if_fail(t < PA_CHANNEL_POSITION_MAX, PA_VOLUME_MUTED); + + for (c = 0; c < map->channels; c++) + if (map->map[c] == t) + if (cv->values[c] > v) + v = cv->values[c]; + + return v; +} |