From 1d2ef7923d28a74e08a4309b6fa3d36481d2df3b Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Sat, 9 Oct 2010 22:30:20 +0530 Subject: volume: Use a macro to check if a volume is valid This adds a PA_VOLUME_IS_VALID() macro for checking if a given pa_volume_t is valid. This makes changes to the volume ranges simpler (just change PA_VOLUME_MAX, for example, without needing to modify any other code). --- src/modules/dbus/iface-core.c | 2 +- src/modules/dbus/iface-device.c | 2 +- src/modules/dbus/iface-sample.c | 4 ++-- src/modules/dbus/iface-stream.c | 2 +- src/modules/module-stream-restore.c | 2 +- src/pulse/scache.c | 4 ++-- src/pulse/volume.c | 34 +++++++++++++++++----------------- src/pulse/volume.h | 3 +++ src/pulsecore/core-scache.c | 4 ++-- 9 files changed, 30 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c index e7c00a7b..268a87ed 100644 --- a/src/modules/dbus/iface-core.c +++ b/src/modules/dbus/iface-core.c @@ -1310,7 +1310,7 @@ static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *u } for (i = 0; i < n_volume_entries; ++i) { - if (default_volume[i] > PA_VOLUME_MAX) { + if (!PA_VOLUME_IS_VALID(default_volume[i])) { pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume: %u.", default_volume[i]); goto finish; } diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c index bb91d71f..a8652df9 100644 --- a/src/modules/dbus/iface-device.c +++ b/src/modules/dbus/iface-device.c @@ -438,7 +438,7 @@ static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessag } for (i = 0; i < n_volume_entries; ++i) { - if (volume[i] > PA_VOLUME_MAX) { + if (!PA_VOLUME_IS_VALID(volume[i])) { pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too large volume value: %u", volume[i]); return; } diff --git a/src/modules/dbus/iface-sample.c b/src/modules/dbus/iface-sample.c index c1fa193c..23810792 100644 --- a/src/modules/dbus/iface-sample.c +++ b/src/modules/dbus/iface-sample.c @@ -366,7 +366,7 @@ static void handle_play(DBusConnection *conn, DBusMessage *msg, void *userdata) if (!(property_list = pa_dbus_get_proplist_arg(conn, msg, &msg_iter))) return; - if (volume > PA_VOLUME_MAX) { + if (PA_VOLUME_IS_VALID(volume)) { pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume."); goto finish; } @@ -416,7 +416,7 @@ static void handle_play_to_sink(DBusConnection *conn, DBusMessage *msg, void *us goto finish; } - if (volume > PA_VOLUME_MAX) { + if (PA_VOLUME_IS_VALID(volume)) { pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume."); goto finish; } diff --git a/src/modules/dbus/iface-stream.c b/src/modules/dbus/iface-stream.c index 0255be4b..364572b8 100644 --- a/src/modules/dbus/iface-stream.c +++ b/src/modules/dbus/iface-stream.c @@ -378,7 +378,7 @@ static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessag } for (i = 0; i < n_volume_entries; ++i) { - if (volume[i] > PA_VOLUME_MAX) { + if (PA_VOLUME_IS_VALID(volume[i])) { pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too large volume value: %u", volume[i]); return; } diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c index 346b6ad1..5ce1c415 100644 --- a/src/modules/module-stream-restore.c +++ b/src/modules/module-stream-restore.c @@ -367,7 +367,7 @@ static int get_volume_arg(DBusConnection *conn, DBusMessage *msg, DBusMessageIte pa_assert_se(dbus_message_iter_next(&struct_iter)); dbus_message_iter_get_basic(&struct_iter, &chan_vol); - if (chan_vol > PA_VOLUME_MAX) { + if (PA_VOLUME_IS_VALID(chan_vol)) { pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume: %u", chan_vol); return -1; } diff --git a/src/pulse/scache.c b/src/pulse/scache.c index b2169b6e..cb8d7c59 100644 --- a/src/pulse/scache.c +++ b/src/pulse/scache.c @@ -191,7 +191,7 @@ pa_operation *pa_context_play_sample(pa_context *c, const char *name, const char pa_tagstruct_putu32(t, PA_INVALID_INDEX); pa_tagstruct_puts(t, dev); - if (volume == PA_VOLUME_INVALID && c->version < 15) + if (!PA_VOLUME_IS_VALID(volume) && c->version < 15) volume = PA_VOLUME_NORM; pa_tagstruct_putu32(t, volume); @@ -232,7 +232,7 @@ pa_operation *pa_context_play_sample_with_proplist(pa_context *c, const char *na pa_tagstruct_putu32(t, PA_INVALID_INDEX); pa_tagstruct_puts(t, dev); - if (volume == PA_VOLUME_INVALID && c->version < 15) + if (!PA_VOLUME_IS_VALID(volume) && c->version < 15) volume = PA_VOLUME_NORM; pa_tagstruct_putu32(t, volume); diff --git a/src/pulse/volume.c b/src/pulse/volume.c index 59e9a189..7d4951b4 100644 --- a/src/pulse/volume.c +++ b/src/pulse/volume.c @@ -201,8 +201,8 @@ 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_return_val_if_fail(a != PA_VOLUME_INVALID, PA_VOLUME_INVALID); - pa_return_val_if_fail(b != PA_VOLUME_INVALID, PA_VOLUME_INVALID); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(a), PA_VOLUME_INVALID); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(b), PA_VOLUME_INVALID); /* cbrt((a/PA_VOLUME_NORM)^3*(b/PA_VOLUME_NORM)^3)*PA_VOLUME_NORM = a*b/PA_VOLUME_NORM */ @@ -211,8 +211,8 @@ 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_return_val_if_fail(a != PA_VOLUME_INVALID, PA_VOLUME_INVALID); - pa_return_val_if_fail(b != PA_VOLUME_INVALID, PA_VOLUME_INVALID); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(a), PA_VOLUME_INVALID); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(b), PA_VOLUME_INVALID); if (b <= PA_VOLUME_MUTED) return 0; @@ -238,7 +238,7 @@ pa_volume_t pa_sw_volume_from_dB(double dB) { double pa_sw_volume_to_dB(pa_volume_t v) { - pa_return_val_if_fail(v != PA_VOLUME_INVALID, PA_DECIBEL_MININFTY); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(v), PA_DECIBEL_MININFTY); if (v <= PA_VOLUME_MUTED) return PA_DECIBEL_MININFTY; @@ -267,7 +267,7 @@ pa_volume_t pa_sw_volume_from_linear(double v) { double pa_sw_volume_to_linear(pa_volume_t v) { double f; - pa_return_val_if_fail(v != PA_VOLUME_INVALID, 0.0); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(v), 0.0); if (v <= PA_VOLUME_MUTED) return 0.0; @@ -317,7 +317,7 @@ char *pa_volume_snprint(char *s, size_t l, pa_volume_t v) { pa_init_i18n(); - if (v == PA_VOLUME_INVALID) { + if (!PA_VOLUME_IS_VALID(v)) { pa_snprintf(s, l, _("(invalid)")); return s; } @@ -367,7 +367,7 @@ char *pa_sw_volume_snprint_dB(char *s, size_t l, pa_volume_t v) { pa_init_i18n(); - if (v == PA_VOLUME_INVALID) { + if (!PA_VOLUME_IS_VALID(v)) { pa_snprintf(s, l, _("(invalid)")); return s; } @@ -384,7 +384,7 @@ int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v) { pa_assert(a); pa_return_val_if_fail(pa_cvolume_valid(a), 0); - pa_return_val_if_fail(v != PA_VOLUME_INVALID, 0); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(v), 0); for (c = 0; c < a->channels; c++) if (a->values[c] != v) @@ -418,7 +418,7 @@ pa_cvolume *pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_assert(a); pa_return_val_if_fail(pa_cvolume_valid(a), NULL); - pa_return_val_if_fail(b != PA_VOLUME_INVALID, NULL); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(b), NULL); for (i = 0; i < a->channels; i++) dest->values[i] = pa_sw_volume_multiply(a->values[i], b); @@ -453,7 +453,7 @@ pa_cvolume *pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, p pa_assert(a); pa_return_val_if_fail(pa_cvolume_valid(a), NULL); - pa_return_val_if_fail(b != PA_VOLUME_INVALID, NULL); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(b), NULL); for (i = 0; i < a->channels; i++) dest->values[i] = pa_sw_volume_divide(a->values[i], b); @@ -472,7 +472,7 @@ int pa_cvolume_valid(const pa_cvolume *v) { return 0; for (c = 0; c < v->channels; c++) - if (v->values[c] == PA_VOLUME_INVALID) + if (!PA_VOLUME_IS_VALID(v->values[c])) return 0; return 1; @@ -686,7 +686,7 @@ pa_cvolume* pa_cvolume_scale(pa_cvolume *v, pa_volume_t max) { pa_assert(v); pa_return_val_if_fail(pa_cvolume_valid(v), NULL); - pa_return_val_if_fail(max != PA_VOLUME_INVALID, NULL); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(max), NULL); t = pa_cvolume_max(v); @@ -705,7 +705,7 @@ pa_cvolume* pa_cvolume_scale_mask(pa_cvolume *v, pa_volume_t max, pa_channel_map pa_assert(v); - pa_return_val_if_fail(max != PA_VOLUME_INVALID, NULL); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(max), NULL); if (!cm) return pa_cvolume_scale(v, max); @@ -834,7 +834,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(t < PA_CHANNEL_POSITION_MAX, NULL); - pa_return_val_if_fail(v != PA_VOLUME_INVALID, NULL); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(v), NULL); for (c = 0; c < map->channels; c++) if (map->map[c] == t) { @@ -891,7 +891,7 @@ pa_cvolume* pa_cvolume_inc_clamp(pa_cvolume *v, pa_volume_t inc, pa_volume_t lim pa_assert(v); pa_return_val_if_fail(pa_cvolume_valid(v), NULL); - pa_return_val_if_fail(inc != PA_VOLUME_INVALID, NULL); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(inc), NULL); m = pa_cvolume_max(v); @@ -913,7 +913,7 @@ pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec) { pa_assert(v); pa_return_val_if_fail(pa_cvolume_valid(v), NULL); - pa_return_val_if_fail(dec != PA_VOLUME_INVALID, NULL); + pa_return_val_if_fail(PA_VOLUME_IS_VALID(dec), NULL); m = pa_cvolume_max(v); diff --git a/src/pulse/volume.h b/src/pulse/volume.h index 594cf91d..9ef26f13 100644 --- a/src/pulse/volume.h +++ b/src/pulse/volume.h @@ -118,6 +118,9 @@ typedef uint32_t pa_volume_t; /** Special 'invalid' volume. \since 0.9.16 */ #define PA_VOLUME_INVALID ((pa_volume_t) UINT32_MAX) +/** Check if volume is valid. \since 0.9.22 */ +#define PA_VOLUME_IS_VALID(v) ((v) <= PA_VOLUME_MAX) + /** A structure encapsulating a per-channel volume */ typedef struct pa_cvolume { uint8_t channels; /**< Number of channels */ diff --git a/src/pulsecore/core-scache.c b/src/pulsecore/core-scache.c index 01724191..cd388efe 100644 --- a/src/pulsecore/core-scache.c +++ b/src/pulsecore/core-scache.c @@ -336,12 +336,12 @@ int pa_scache_play_item(pa_core *c, const char *name, pa_sink *sink, pa_volume_t pass_volume = TRUE; - if (e->volume_is_set && volume != PA_VOLUME_INVALID) { + if (e->volume_is_set && !PA_VOLUME_IS_VALID(volume)) { pa_cvolume_set(&r, e->sample_spec.channels, volume); pa_sw_cvolume_multiply(&r, &r, &e->volume); } else if (e->volume_is_set) r = e->volume; - else if (volume != PA_VOLUME_INVALID) + else if (!PA_VOLUME_IS_VALID(volume)) pa_cvolume_set(&r, e->sample_spec.channels, volume); else pass_volume = FALSE; -- cgit