[pulseaudio-discuss] [PATCH RFCv3 43/51] core: Add volume-util.h

Peter Meerwald pmeerw at pmeerw.net
Thu Nov 6 07:37:36 PST 2014


> > 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 <pmeerw at 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)


More information about the pulseaudio-discuss mailing list