return dest;
}
-pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc) {
+pa_cvolume* pa_cvolume_inc_clamp(pa_cvolume *v, pa_volume_t inc, pa_volume_t limit) {
pa_volume_t m;
pa_assert(v);
m = pa_cvolume_max(v);
- if (m >= PA_VOLUME_MAX - inc)
- m = PA_VOLUME_MAX;
+ if (m >= limit - inc)
+ m = limit;
else
m += inc;
return pa_cvolume_scale(v, m);
}
+pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc){
+ return pa_cvolume_inc_clamp(v, inc, PA_VOLUME_MAX);
+}
+
pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec) {
pa_volume_t m;
* 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', but not exceeding 'limit'.
+ * The proportions between the channels are kept. \since 0.9.19 */
+pa_cvolume* pa_cvolume_inc_clamp(pa_cvolume *v, pa_volume_t inc, pa_volume_t limit);
+
/** 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);