diff options
| -rw-r--r-- | src/map-file | 1 | ||||
| -rw-r--r-- | src/pulse/volume.c | 18 | ||||
| -rw-r--r-- | src/pulse/volume.h | 5 | 
3 files changed, 24 insertions, 0 deletions
| 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 | 
