From 82082148821d5ebe05fea12fd57d68b31740e04b Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 17 Aug 2009 03:40:36 +0200 Subject: volume: add pa_cvolume_merge() call --- src/map-file | 1 + src/pulse/volume.c | 18 ++++++++++++++++++ src/pulse/volume.h | 5 +++++ 3 files changed, 24 insertions(+) diff --git a/src/map-file b/src/map-file index c6c8acca..4f20c48f 100644 --- a/src/map-file +++ b/src/map-file @@ -130,6 +130,7 @@ pa_cvolume_get_position; pa_cvolume_init; pa_cvolume_max; pa_cvolume_max_mask; +pa_cvolume_merge; pa_cvolume_remap; pa_cvolume_scale; pa_cvolume_scale_mask; diff --git a/src/pulse/volume.c b/src/pulse/volume.c index c23f360b..e816d679 100644 --- a/src/pulse/volume.c +++ b/src/pulse/volume.c @@ -815,3 +815,21 @@ pa_volume_t pa_cvolume_get_position( return v; } + +pa_cvolume* pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b) { + unsigned i; + + pa_assert(dest); + pa_assert(a); + pa_assert(b); + + pa_return_val_if_fail(pa_cvolume_valid(a), NULL); + pa_return_val_if_fail(pa_cvolume_valid(b), NULL); + + for (i = 0; i < a->channels && i < b->channels; i++) + dest->values[i] = PA_MAX(a->values[i], b->values[i]); + + dest->channels = (uint8_t) i; + + return dest; +} diff --git a/src/pulse/volume.h b/src/pulse/volume.h index 05b7ebb4..14692b8d 100644 --- a/src/pulse/volume.h +++ b/src/pulse/volume.h @@ -326,6 +326,11 @@ pa_cvolume* pa_cvolume_set_position(pa_cvolume *cv, const pa_channel_map *map, p * position by calling pa_channel_map_has_position(). \since 0.9.16 */ pa_volume_t pa_cvolume_get_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t) PA_GCC_PURE; +/** This goes through all channels in a and b and sets the + * corresponding channel in dest to the greater volume of both. a, b + * and dest may point to the same structure. \since 0.9.16 */ +pa_cvolume* pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b); + PA_C_DECL_END #endif -- cgit