]> code.delx.au - pulseaudio/commitdiff
volume: implement functions for multiplicating a cvolume with a scalar
authorLennart Poettering <lennart@poettering.net>
Wed, 17 Jun 2009 01:04:21 +0000 (03:04 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 17 Jun 2009 01:04:21 +0000 (03:04 +0200)
src/map-file
src/pulse/volume.c
src/pulse/volume.h

index c46c679299712d416ee1e6a6ee58ab3fa699d192..08fb827d27f2cf803a6c2f3e316e58ccbdac6cbb 100644 (file)
@@ -264,7 +264,9 @@ pa_stream_writable_size;
 pa_stream_write;
 pa_strerror;
 pa_sw_cvolume_divide;
+pa_sw_cvolume_divide_scalar;
 pa_sw_cvolume_multiply;
+pa_sw_cvolume_multiply_scalar;
 pa_sw_cvolume_snprint_dB;
 pa_sw_volume_divide;
 pa_sw_volume_from_dB;
index 64688e0bab2940f22cebeff18ea92bdb3277518b..76ef7aa5a15a811232ba195ac3972689f58b19a3 100644 (file)
@@ -344,7 +344,7 @@ pa_cvolume *pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const
     pa_return_val_if_fail(pa_cvolume_valid(a), NULL);
     pa_return_val_if_fail(pa_cvolume_valid(b), NULL);
 
-    for (i = 0; i < a->channels && i < b->channels && i < PA_CHANNELS_MAX; i++)
+    for (i = 0; i < a->channels && i < b->channels; i++)
         dest->values[i] = pa_sw_volume_multiply(a->values[i], b->values[i]);
 
     dest->channels = (uint8_t) i;
@@ -352,6 +352,22 @@ pa_cvolume *pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const
     return dest;
 }
 
+pa_cvolume *pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b) {
+    unsigned i;
+
+    pa_assert(dest);
+    pa_assert(a);
+
+    pa_return_val_if_fail(pa_cvolume_valid(a), NULL);
+
+    for (i = 0; i < a->channels; i++)
+        dest->values[i] = pa_sw_volume_multiply(a->values[i], b);
+
+    dest->channels = (uint8_t) i;
+
+    return dest;
+}
+
 pa_cvolume *pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b) {
     unsigned i;
 
@@ -362,7 +378,7 @@ pa_cvolume *pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa
     pa_return_val_if_fail(pa_cvolume_valid(a), NULL);
     pa_return_val_if_fail(pa_cvolume_valid(b), NULL);
 
-    for (i = 0; i < a->channels && i < b->channels && i < PA_CHANNELS_MAX; i++)
+    for (i = 0; i < a->channels && i < b->channels; i++)
         dest->values[i] = pa_sw_volume_divide(a->values[i], b->values[i]);
 
     dest->channels = (uint8_t) i;
@@ -370,6 +386,22 @@ pa_cvolume *pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa
     return dest;
 }
 
+pa_cvolume *pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b) {
+    unsigned i;
+
+    pa_assert(dest);
+    pa_assert(a);
+
+    pa_return_val_if_fail(pa_cvolume_valid(a), NULL);
+
+    for (i = 0; i < a->channels; i++)
+        dest->values[i] = pa_sw_volume_divide(a->values[i], b);
+
+    dest->channels = (uint8_t) i;
+
+    return dest;
+}
+
 int pa_cvolume_valid(const pa_cvolume *v) {
     unsigned c;
 
index c07fd99af184ab56670fbf10399d65c6eb4e62e1..05b7ebb404678a05fdaa18d2f8681e4b1e5e84ce 100644 (file)
@@ -216,16 +216,26 @@ pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) PA_GCC_CONST;
  * *dest. This is only valid for software volumes! */
 pa_cvolume *pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
 
+/** Multiply a per-channel volume with a scalar volume and return the
+ * result in *dest. This is only valid for software volumes! \since
+ * 0.9.16 */
+pa_cvolume *pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b);
+
 /** Divide two volume specifications, return the result. This uses
  * PA_VOLUME_NORM as neutral element of division. This is only valid
  * for software volumes! If a division by zero is tried the result
  * will be 0. \since 0.9.13 */
 pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) PA_GCC_CONST;
 
-/** Multiply to per-channel volumes and return the result in
+/** Divide two per-channel volumes and return the result in
  * *dest. This is only valid for software volumes! \since 0.9.13 */
 pa_cvolume *pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
 
+/** Divide a per-channel volume by a scalar volume and return the
+ * result in *dest. This is only valid for software volumes! \since
+ * 0.9.16 */
+pa_cvolume *pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b);
+
 /** Convert a decibel value to a volume (amplitude, not power). This is only valid for software volumes! */
 pa_volume_t pa_sw_volume_from_dB(double f) PA_GCC_CONST;