mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-31 22:25:33 -04:00
volume: implement functions for multiplicating a cvolume with a scalar
This commit is contained in:
parent
c6830bd9dc
commit
64b0f38b67
3 changed files with 47 additions and 3 deletions
|
|
@ -264,7 +264,9 @@ pa_stream_writable_size;
|
||||||
pa_stream_write;
|
pa_stream_write;
|
||||||
pa_strerror;
|
pa_strerror;
|
||||||
pa_sw_cvolume_divide;
|
pa_sw_cvolume_divide;
|
||||||
|
pa_sw_cvolume_divide_scalar;
|
||||||
pa_sw_cvolume_multiply;
|
pa_sw_cvolume_multiply;
|
||||||
|
pa_sw_cvolume_multiply_scalar;
|
||||||
pa_sw_cvolume_snprint_dB;
|
pa_sw_cvolume_snprint_dB;
|
||||||
pa_sw_volume_divide;
|
pa_sw_volume_divide;
|
||||||
pa_sw_volume_from_dB;
|
pa_sw_volume_from_dB;
|
||||||
|
|
|
||||||
|
|
@ -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(a), NULL);
|
||||||
pa_return_val_if_fail(pa_cvolume_valid(b), 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->values[i] = pa_sw_volume_multiply(a->values[i], b->values[i]);
|
||||||
|
|
||||||
dest->channels = (uint8_t) 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;
|
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) {
|
pa_cvolume *pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b) {
|
||||||
unsigned i;
|
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(a), NULL);
|
||||||
pa_return_val_if_fail(pa_cvolume_valid(b), 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->values[i] = pa_sw_volume_divide(a->values[i], b->values[i]);
|
||||||
|
|
||||||
dest->channels = (uint8_t) 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;
|
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) {
|
int pa_cvolume_valid(const pa_cvolume *v) {
|
||||||
unsigned c;
|
unsigned c;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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! */
|
* *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);
|
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
|
/** Divide two volume specifications, return the result. This uses
|
||||||
* PA_VOLUME_NORM as neutral element of division. This is only valid
|
* PA_VOLUME_NORM as neutral element of division. This is only valid
|
||||||
* for software volumes! If a division by zero is tried the result
|
* for software volumes! If a division by zero is tried the result
|
||||||
* will be 0. \since 0.9.13 */
|
* 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;
|
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 */
|
* *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);
|
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! */
|
/** 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;
|
pa_volume_t pa_sw_volume_from_dB(double f) PA_GCC_CONST;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue