diff options
| -rw-r--r-- | src/map-file | 2 | ||||
| -rw-r--r-- | src/pulse/volume.c | 34 | ||||
| -rw-r--r-- | src/pulse/volume.h | 8 | 
3 files changed, 44 insertions, 0 deletions
| diff --git a/src/map-file b/src/map-file index d6122a4a..95b2803a 100644 --- a/src/map-file +++ b/src/map-file @@ -123,10 +123,12 @@ pa_cvolume_avg_mask;  pa_cvolume_channels_equal_to;  pa_cvolume_compatible;  pa_cvolume_compatible_with_channel_map; +pa_cvolume_dec;  pa_cvolume_equal;  pa_cvolume_get_balance;  pa_cvolume_get_fade;  pa_cvolume_get_position; +pa_cvolume_inc;  pa_cvolume_init;  pa_cvolume_max;  pa_cvolume_max_mask; diff --git a/src/pulse/volume.c b/src/pulse/volume.c index 3dcf3157..234c3f72 100644 --- a/src/pulse/volume.c +++ b/src/pulse/volume.c @@ -876,3 +876,37 @@ pa_cvolume* pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvo      return dest;  } + +pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc) { +    pa_volume_t m; + +    pa_assert(v); + +    pa_return_val_if_fail(pa_cvolume_valid(v), NULL); + +    m = pa_cvolume_max(v); + +    if (m >= PA_VOLUME_MAX - inc) +        m = PA_VOLUME_MAX; +    else +        m += inc; + +    return pa_cvolume_scale(v, m); +} + +pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec) { +    pa_volume_t m; + +    pa_assert(v); + +    pa_return_val_if_fail(pa_cvolume_valid(v), NULL); + +    m = pa_cvolume_max(v); + +    if (m <= PA_VOLUME_MUTED + dec) +        m = PA_VOLUME_MUTED; +    else +        m -= dec; + +    return pa_cvolume_scale(v, m); +} diff --git a/src/pulse/volume.h b/src/pulse/volume.h index 349ca49f..543b0af1 100644 --- a/src/pulse/volume.h +++ b/src/pulse/volume.h @@ -345,6 +345,14 @@ pa_volume_t pa_cvolume_get_position(pa_cvolume *cv, const pa_channel_map *map, p   * 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); +/** Increase the volume passed in by 'inc'. The proportions between + * the channels are kept. \since 0.9.16 */ +pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc); + +/** Increase the volume passed in by 'inc'. The proportions between + * the channels are kept. \since 0.9.16 */ +pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec); +  PA_C_DECL_END  #endif | 
