add new function pa_alsa_volume_divide()
authorLennart Poettering <lennart@poettering.net>
Wed, 13 Aug 2008 11:54:17 +0000 (13:54 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 13 Aug 2008 11:54:17 +0000 (13:54 +0200)
src/modules/alsa-util.c
src/modules/alsa-util.h

index 2dcf6d9..be3cdf4 100644 (file)
@@ -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;
+}
index 4de8bcd..1b73200 100644 (file)
@@ -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