diff options
| author | Lennart Poettering <lennart@poettering.net> | 2009-08-19 00:56:16 +0200 | 
|---|---|---|
| committer | Lennart Poettering <lennart@poettering.net> | 2009-08-19 00:56:16 +0200 | 
| commit | d634555a3e3e2e35d95da6bca9464c02627d02fd (patch) | |
| tree | 2ce31192ddf448590bae22691f065b716728d092 | |
| parent | 8f928b2e572cd7bf26517afddd62ceecb78edfdc (diff) | |
volume: introduce pa_cvolume_min() and pa_cvolume_min_mask()
| -rw-r--r-- | src/map-file | 2 | ||||
| -rw-r--r-- | src/pulse/volume.c | 41 | ||||
| -rw-r--r-- | src/pulse/volume.h | 10 | 
3 files changed, 51 insertions, 2 deletions
| diff --git a/src/map-file b/src/map-file index 4f20c48f..d6122a4a 100644 --- a/src/map-file +++ b/src/map-file @@ -131,6 +131,8 @@ pa_cvolume_init;  pa_cvolume_max;  pa_cvolume_max_mask;  pa_cvolume_merge; +pa_cvolume_min; +pa_cvolume_min_mask;  pa_cvolume_remap;  pa_cvolume_scale;  pa_cvolume_scale_mask; diff --git a/src/pulse/volume.c b/src/pulse/volume.c index d7fb2477..e3535726 100644 --- a/src/pulse/volume.c +++ b/src/pulse/volume.c @@ -126,7 +126,7 @@ pa_volume_t pa_cvolume_avg_mask(const pa_cvolume *a, const pa_channel_map *cm, p  }  pa_volume_t pa_cvolume_max(const pa_cvolume *a) { -    pa_volume_t m = 0; +    pa_volume_t m = PA_VOLUME_MUTED;      unsigned c;      pa_assert(a); @@ -139,8 +139,22 @@ pa_volume_t pa_cvolume_max(const pa_cvolume *a) {      return m;  } +pa_volume_t pa_cvolume_min(const pa_cvolume *a) { +    pa_volume_t m = (pa_volume_t) -1; +    unsigned c; + +    pa_assert(a); +    pa_return_val_if_fail(pa_cvolume_valid(a), PA_VOLUME_MUTED); + +    for (c = 0; c < a->channels; c++) +        if (m == (pa_volume_t) -1 || a->values[c] < m) +            m = a->values[c]; + +    return m; +} +  pa_volume_t pa_cvolume_max_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) { -    pa_volume_t m = 0; +    pa_volume_t m = PA_VOLUME_MUTED;      unsigned c, n;      pa_assert(a); @@ -162,6 +176,29 @@ pa_volume_t pa_cvolume_max_mask(const pa_cvolume *a, const pa_channel_map *cm, p      return m;  } +pa_volume_t pa_cvolume_min_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) { +    pa_volume_t m = (pa_volume_t) -1; +    unsigned c, n; + +    pa_assert(a); + +    if (!cm) +        return pa_cvolume_min(a); + +    pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(a, cm), PA_VOLUME_MUTED); + +    for (c = n = 0; c < a->channels; c++) { + +        if (!(PA_CHANNEL_POSITION_MASK(cm->map[c]) & mask)) +            continue; + +        if (m == (pa_volume_t) -1 || a->values[c] < m) +            m = a->values[c]; +    } + +    return m; +} +  pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) {      return pa_sw_volume_from_linear(pa_sw_volume_to_linear(a) * pa_sw_volume_to_linear(b));  } diff --git a/src/pulse/volume.h b/src/pulse/volume.h index 3881da2f..349ca49f 100644 --- a/src/pulse/volume.h +++ b/src/pulse/volume.h @@ -195,6 +195,16 @@ pa_volume_t pa_cvolume_max(const pa_cvolume *a) PA_GCC_PURE;   * \since 0.9.16 */  pa_volume_t pa_cvolume_max_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) PA_GCC_PURE; +/** Return the minimum volume of all channels. \since 0.9.16 */ +pa_volume_t pa_cvolume_min(const pa_cvolume *a) PA_GCC_PURE; + +/** Return the minimum volume of all channels that are included in the + * specified channel map with the specified channel position mask. If + * cm is NULL this call is identical to pa_cvolume_min(). If no + * channel is selected the returned value will be PA_VOLUME_MUTED. + * \since 0.9.16 */ +pa_volume_t pa_cvolume_min_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) PA_GCC_PURE; +  /** Return TRUE when the passed cvolume structure is valid, FALSE otherwise */  int pa_cvolume_valid(const pa_cvolume *v) PA_GCC_PURE; | 
