diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-01-27 00:47:07 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-01-27 00:47:07 +0100 |
commit | 4e31e00b63117f36df6b8ed4850e7ad6264e3da7 (patch) | |
tree | 5c92e42cbcb414bc57d3325a0152e9f520c3ea11 | |
parent | e52c5ea68a9c3bf6e7c4b30cb6c2d4706f214cd3 (diff) | |
download | pulseaudio-4e31e00b63117f36df6b8ed4850e7ad6264e3da7.tar.gz |
implement pa_cvolume_scale()
-rw-r--r-- | src/map-file | 1 | ||||
-rw-r--r-- | src/pulse/volume.c | 19 | ||||
-rw-r--r-- | src/pulse/volume.h | 7 |
3 files changed, 26 insertions, 1 deletions
diff --git a/src/map-file b/src/map-file index cb5c749dc..d6137590f 100644 --- a/src/map-file +++ b/src/map-file @@ -113,6 +113,7 @@ pa_cvolume_get_balance; pa_cvolume_init; pa_cvolume_max; pa_cvolume_remap; +pa_cvolume_scale; pa_cvolume_set; pa_cvolume_set_balance; pa_cvolume_snprint; diff --git a/src/pulse/volume.c b/src/pulse/volume.c index 10a44dafa..2c9778458 100644 --- a/src/pulse/volume.c +++ b/src/pulse/volume.c @@ -500,3 +500,22 @@ pa_cvolume* pa_cvolume_set_balance(const pa_channel_map *map, pa_cvolume *v, flo return v; } + +pa_cvolume* pa_cvolume_scale(pa_cvolume *v, pa_volume_t max) { + unsigned c; + pa_volume_t t = 0; + + pa_assert(c); + + for (c = 0; c < v->channels; c++) + if (v->values[c] > t) + t = v->values[c]; + + if (t <= 0) + return pa_cvolume_set(v, v->channels, max); + + for (c = 0; c < v->channels; c++) + v->values[c] = (pa_volume_t) (((uint64_t) v->values[c] * (uint64_t) max) / (uint64_t) t); + + return v; +} diff --git a/src/pulse/volume.h b/src/pulse/volume.h index 38da5dfca..c8b73f4a8 100644 --- a/src/pulse/volume.h +++ b/src/pulse/volume.h @@ -244,9 +244,14 @@ float pa_cvolume_get_balance(const pa_channel_map *map, const pa_cvolume *v) PA_ * operation might not be reversable! Also, after this call * pa_cvolume_get_balance() is not guaranteed to actually return the * requested balance (e.g. when the input volume was zero anyway for - * all channels)- \since 0.9.15 */ + * all channels) \since 0.9.15 */ pa_cvolume* pa_cvolume_set_balance(const pa_channel_map *map, pa_cvolume *v, float new_balance); +/** Scale the passed pa_cvolume structure so that the maximum volume + * of all channels equals max. The proportions between the channel + * volumes are kept. \since 0.9.15 */ +pa_cvolume* pa_cvolume_scale(pa_cvolume *v, pa_volume_t max); + PA_C_DECL_END #endif |