> > implement inlineable functions PA_CVOLUME_VALID(), > > PA_CVOLUME_CHANNELS_EQUALS_TO(), PA_CVOLUME_IS_MUTED(), > > PA_CVOLUME_IS_NORM() that assume data is valid > > Why are these uppercase? AFAIK, we don't usually uppercase inline functions.
I've modelled after e.g. PA_ALIGN_PTR() in pulsecore/macro.h or PA_SOURCE_IS_LINKED() in source.h I think there is no clear rule; I'd prefer PA_CVOLUME_IS_NORM() to pa_cvolume_is_norm_internal() or pa_cvolume_is_norm_unchecked() thanks, p. > > src/pulsecore/volume-util.h | 92 > +++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 92 insertions(+) > > create mode 100644 src/pulsecore/volume-util.h > > > > diff --git a/src/pulsecore/volume-util.h b/src/pulsecore/volume-util.h > > new file mode 100644 > > index 0000000..d96c472 > > --- /dev/null > > +++ b/src/pulsecore/volume-util.h > > @@ -0,0 +1,92 @@ > > +#ifndef foovolumeutilhfoo > > +#define foovolumeutilhfoo > > + > > +/*** > > + This file is part of PulseAudio. > > + > > + Copyright 2014 Peter Meerwald <pme...@pmeerw.net> > > + > > + PulseAudio is free software; you can redistribute it and/or modify > > + it under the terms of the GNU Lesser General Public License as published > > + by the Free Software Foundation; either version 2.1 of the License, > > + or (at your option) any later version. > > + > > + PulseAudio is distributed in the hope that it will be useful, but > > + WITHOUT ANY WARRANTY; without even the implied warranty of > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + General Public License for more details. > > + > > + You should have received a copy of the GNU Lesser General Public License > > + along with PulseAudio; if not, write to the Free Software > > + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 > > + USA. > > +***/ > > + > > +#include <pulse/gccmacro.h> > > +#include <pulse/sample.h> > > +#include <pulse/volume.h> > > + > > +static inline int PA_CVOLUME_VALID(const pa_cvolume *a) { > > + unsigned c; > > + > > + pa_assert_fp(a); > > + pa_assert_fp(pa_channels_valid(a->channels)); > > + > > + for (c = 0; c < a->channels; c++) > > + if (!PA_VOLUME_IS_VALID(a->values[c])) > > + return 0; > > + > > + return 1; > > +} > > + > > +static inline int PA_CVOLUME_CHANNELS_EQUALS_TO(const pa_cvolume *a, > pa_volume_t v) { > > + unsigned c; > > + pa_assert_fp(a); > > + > > + pa_assert_fp(PA_CVOLUME_VALID(a)); > > + pa_assert_fp(PA_VOLUME_IS_VALID(v)); > > + > > + for (c = 0; c < a->channels; c++) > > + if (a->values[c] != v) > > + return 0; > > + > > + return 1; > > +} > > + > > +static inline int PA_CVOLUME_IS_MUTED(const pa_cvolume *a) { > > + return PA_CVOLUME_CHANNELS_EQUALS_TO(a, PA_VOLUME_MUTED); > > +} > > + > > +/** Return 1 if the specified volume has all channels on normal level */ > > +static inline int PA_CVOLUME_IS_NORM(const pa_cvolume *a) { > > + return PA_CVOLUME_CHANNELS_EQUALS_TO(a, PA_VOLUME_NORM); > > +} > > + > > +static inline pa_volume_t PA_SW_VOLUME_MULTIPLY(pa_volume_t a, pa_volume_t > b) { > > + pa_assert_fp(PA_VOLUME_IS_VALID(a)); > > + pa_assert_fp(PA_VOLUME_IS_VALID(b)); > > + > > + /* cbrt((a/PA_VOLUME_NORM)^3*(b/PA_VOLUME_NORM)^3)*PA_VOLUME_NORM = > a*b/PA_VOLUME_NORM */ > > + > > + return (pa_volume_t) PA_CLAMP_VOLUME((((uint64_t) a * (uint64_t) b + > (uint64_t) PA_VOLUME_NORM / 2ULL) / (uint64_t) PA_VOLUME_NORM)); > > +} > > + > > +static inline pa_cvolume *PA_SW_CVOLUME_MULTIPLY(pa_cvolume *dest, const > pa_cvolume *a, const pa_cvolume *b) { > > + unsigned i; > > + > > + pa_assert(dest); > > + pa_assert(a); > > + pa_assert(b); > > + > > + pa_assert_fp(pa_cvolume_valid(a)); > > + pa_assert_fp(pa_cvolume_valid(b)); > > + > > + 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; > > + > > + return dest; > > +} > > + > > +#endif > > > > -- Peter Meerwald +43-664-2444418 (mobile) _______________________________________________ pulseaudio-discuss mailing list pulseaudio-discuss@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss