mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-02 09:01:46 -05:00
volume: add a couple of validity checks for pa_volume_t arguments
This commit is contained in:
parent
3bbc5e6a4d
commit
cc6c4fe91f
1 changed files with 16 additions and 0 deletions
|
|
@ -201,6 +201,9 @@ pa_volume_t pa_cvolume_min_mask(const pa_cvolume *a, const pa_channel_map *cm, p
|
||||||
|
|
||||||
pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) {
|
pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) {
|
||||||
|
|
||||||
|
pa_return_val_if_fail(a != PA_VOLUME_INVALID, PA_VOLUME_INVALID);
|
||||||
|
pa_return_val_if_fail(b != PA_VOLUME_INVALID, PA_VOLUME_INVALID);
|
||||||
|
|
||||||
/* cbrt((a/PA_VOLUME_NORM)^3*(b/PA_VOLUME_NORM)^3)*PA_VOLUME_NORM = a*b/PA_VOLUME_NORM */
|
/* cbrt((a/PA_VOLUME_NORM)^3*(b/PA_VOLUME_NORM)^3)*PA_VOLUME_NORM = a*b/PA_VOLUME_NORM */
|
||||||
|
|
||||||
return (pa_volume_t) (((uint64_t) a * (uint64_t) b + (uint64_t) PA_VOLUME_NORM / 2ULL) / (uint64_t) PA_VOLUME_NORM);
|
return (pa_volume_t) (((uint64_t) a * (uint64_t) b + (uint64_t) PA_VOLUME_NORM / 2ULL) / (uint64_t) PA_VOLUME_NORM);
|
||||||
|
|
@ -208,6 +211,9 @@ pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) {
|
||||||
|
|
||||||
pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) {
|
pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) {
|
||||||
|
|
||||||
|
pa_return_val_if_fail(a != PA_VOLUME_INVALID, PA_VOLUME_INVALID);
|
||||||
|
pa_return_val_if_fail(b != PA_VOLUME_INVALID, PA_VOLUME_INVALID);
|
||||||
|
|
||||||
if (b <= PA_VOLUME_MUTED)
|
if (b <= PA_VOLUME_MUTED)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
@ -232,6 +238,8 @@ pa_volume_t pa_sw_volume_from_dB(double dB) {
|
||||||
|
|
||||||
double pa_sw_volume_to_dB(pa_volume_t v) {
|
double pa_sw_volume_to_dB(pa_volume_t v) {
|
||||||
|
|
||||||
|
pa_return_val_if_fail(v != PA_VOLUME_INVALID, PA_DECIBEL_MININFTY);
|
||||||
|
|
||||||
if (v <= PA_VOLUME_MUTED)
|
if (v <= PA_VOLUME_MUTED)
|
||||||
return PA_DECIBEL_MININFTY;
|
return PA_DECIBEL_MININFTY;
|
||||||
|
|
||||||
|
|
@ -259,6 +267,8 @@ pa_volume_t pa_sw_volume_from_linear(double v) {
|
||||||
double pa_sw_volume_to_linear(pa_volume_t v) {
|
double pa_sw_volume_to_linear(pa_volume_t v) {
|
||||||
double f;
|
double f;
|
||||||
|
|
||||||
|
pa_return_val_if_fail(v != PA_VOLUME_INVALID, 0.0);
|
||||||
|
|
||||||
if (v <= PA_VOLUME_MUTED)
|
if (v <= PA_VOLUME_MUTED)
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
|
|
@ -374,6 +384,7 @@ int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v) {
|
||||||
pa_assert(a);
|
pa_assert(a);
|
||||||
|
|
||||||
pa_return_val_if_fail(pa_cvolume_valid(a), 0);
|
pa_return_val_if_fail(pa_cvolume_valid(a), 0);
|
||||||
|
pa_return_val_if_fail(v != PA_VOLUME_INVALID, 0);
|
||||||
|
|
||||||
for (c = 0; c < a->channels; c++)
|
for (c = 0; c < a->channels; c++)
|
||||||
if (a->values[c] != v)
|
if (a->values[c] != v)
|
||||||
|
|
@ -407,6 +418,7 @@ pa_cvolume *pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a,
|
||||||
pa_assert(a);
|
pa_assert(a);
|
||||||
|
|
||||||
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(b != PA_VOLUME_INVALID, NULL);
|
||||||
|
|
||||||
for (i = 0; i < a->channels; i++)
|
for (i = 0; i < a->channels; i++)
|
||||||
dest->values[i] = pa_sw_volume_multiply(a->values[i], b);
|
dest->values[i] = pa_sw_volume_multiply(a->values[i], b);
|
||||||
|
|
@ -441,6 +453,7 @@ pa_cvolume *pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, p
|
||||||
pa_assert(a);
|
pa_assert(a);
|
||||||
|
|
||||||
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(b != PA_VOLUME_INVALID, NULL);
|
||||||
|
|
||||||
for (i = 0; i < a->channels; i++)
|
for (i = 0; i < a->channels; i++)
|
||||||
dest->values[i] = pa_sw_volume_divide(a->values[i], b);
|
dest->values[i] = pa_sw_volume_divide(a->values[i], b);
|
||||||
|
|
@ -827,6 +840,7 @@ pa_cvolume* pa_cvolume_set_position(
|
||||||
|
|
||||||
pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(cv, map), NULL);
|
pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(cv, map), NULL);
|
||||||
pa_return_val_if_fail(t < PA_CHANNEL_POSITION_MAX, NULL);
|
pa_return_val_if_fail(t < PA_CHANNEL_POSITION_MAX, NULL);
|
||||||
|
pa_return_val_if_fail(v != PA_VOLUME_INVALID, NULL);
|
||||||
|
|
||||||
for (c = 0; c < map->channels; c++)
|
for (c = 0; c < map->channels; c++)
|
||||||
if (map->map[c] == t) {
|
if (map->map[c] == t) {
|
||||||
|
|
@ -883,6 +897,7 @@ pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc) {
|
||||||
pa_assert(v);
|
pa_assert(v);
|
||||||
|
|
||||||
pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
|
pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
|
||||||
|
pa_return_val_if_fail(inc != PA_VOLUME_INVALID, NULL);
|
||||||
|
|
||||||
m = pa_cvolume_max(v);
|
m = pa_cvolume_max(v);
|
||||||
|
|
||||||
|
|
@ -900,6 +915,7 @@ pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec) {
|
||||||
pa_assert(v);
|
pa_assert(v);
|
||||||
|
|
||||||
pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
|
pa_return_val_if_fail(pa_cvolume_valid(v), NULL);
|
||||||
|
pa_return_val_if_fail(dec != PA_VOLUME_INVALID, NULL);
|
||||||
|
|
||||||
m = pa_cvolume_max(v);
|
m = pa_cvolume_max(v);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue