diff options
| -rw-r--r-- | src/modules/alsa-util.c | 24 | ||||
| -rw-r--r-- | src/modules/alsa-util.h | 3 | 
2 files changed, 27 insertions, 0 deletions
| diff --git a/src/modules/alsa-util.c b/src/modules/alsa-util.c index 2dcf6d9c..be3cdf44 100644 --- a/src/modules/alsa-util.c +++ b/src/modules/alsa-util.c @@ -1117,3 +1117,27 @@ pa_rtpoll_item* pa_alsa_build_pollfd(snd_pcm_t *pcm, pa_rtpoll *rtpoll) {      return item;  } + +pa_cvolume *pa_alsa_volume_divide(pa_cvolume *r, const pa_cvolume *t) { +    unsigned i; + +    pa_assert(r); +    pa_assert(t); +    pa_assert(r->channels == t->channels); + +    for (i = 0; i < r->channels; i++) { +        double a, b, c; + +        a = pa_sw_volume_to_linear(r->values[i]); /* the hw volume */ +        b = pa_sw_volume_to_linear(t->values[i]); /* the intended volume */ + +        if (a <= 0) +            c = 0; +        else +            c = b / a; + +        r->values[i] = pa_sw_volume_from_linear(c); +    } + +    return r; +} diff --git a/src/modules/alsa-util.h b/src/modules/alsa-util.h index 4de8bcd2..1b73200b 100644 --- a/src/modules/alsa-util.h +++ b/src/modules/alsa-util.h @@ -26,6 +26,7 @@  #include <asoundlib.h>  #include <pulse/sample.h> +#include <pulse/volume.h>  #include <pulse/mainloop-api.h>  #include <pulse/channelmap.h>  #include <pulse/proplist.h> @@ -94,4 +95,6 @@ int pa_alsa_recover_from_poll(snd_pcm_t *pcm, int revents);  pa_rtpoll_item* pa_alsa_build_pollfd(snd_pcm_t *pcm, pa_rtpoll *rtpoll); +pa_cvolume *pa_alsa_volume_divide(pa_cvolume *r, const pa_cvolume *t); +  #endif | 
