PulseAudio  3.0
volume.h
Go to the documentation of this file.
1 #ifndef foovolumehfoo
2 #define foovolumehfoo
3 
4 /***
5  This file is part of PulseAudio.
6 
7  Copyright 2004-2006 Lennart Poettering
8  Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
9 
10  PulseAudio is free software; you can redistribute it and/or modify
11  it under the terms of the GNU Lesser General Public License as published
12  by the Free Software Foundation; either version 2.1 of the License,
13  or (at your option) any later version.
14 
15  PulseAudio is distributed in the hope that it will be useful, but
16  WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  General Public License for more details.
19 
20  You should have received a copy of the GNU Lesser General Public License
21  along with PulseAudio; if not, write to the Free Software
22  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
23  USA.
24 ***/
25 
26 #include <inttypes.h>
27 #include <limits.h>
28 
29 #include <pulse/cdecl.h>
30 #include <pulse/gccmacro.h>
31 #include <pulse/sample.h>
32 #include <pulse/channelmap.h>
33 #include <pulse/version.h>
34 
100 PA_C_DECL_BEGIN
101 
107 typedef uint32_t pa_volume_t;
108 
110 #define PA_VOLUME_NORM ((pa_volume_t) 0x10000U)
111 
113 #define PA_VOLUME_MUTED ((pa_volume_t) 0U)
114 
116 #define PA_VOLUME_MAX ((pa_volume_t) UINT32_MAX/2)
117 
123 #define PA_VOLUME_UI_MAX (pa_sw_volume_from_dB(+11.0))
124 
126 #define PA_VOLUME_INVALID ((pa_volume_t) UINT32_MAX)
127 
129 #define PA_VOLUME_IS_VALID(v) ((v) <= PA_VOLUME_MAX)
130 
132 #define PA_CLAMP_VOLUME(v) (PA_CLAMP_UNLIKELY((v), PA_VOLUME_MUTED, PA_VOLUME_MAX))
133 
135 typedef struct pa_cvolume {
136  uint8_t channels;
138 } pa_cvolume;
139 
141 int pa_cvolume_equal(const pa_cvolume *a, const pa_cvolume *b) PA_GCC_PURE;
142 
147 
149 #define pa_cvolume_reset(a, n) pa_cvolume_set((a), (n), PA_VOLUME_NORM)
150 
152 #define pa_cvolume_mute(a, n) pa_cvolume_set((a), (n), PA_VOLUME_MUTED)
153 
155 pa_cvolume* pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v);
156 
162 #define PA_CVOLUME_SNPRINT_MAX 320
163 
165 char *pa_cvolume_snprint(char *s, size_t l, const pa_cvolume *c);
166 
172 #define PA_SW_CVOLUME_SNPRINT_DB_MAX 448
173 
175 char *pa_sw_cvolume_snprint_dB(char *s, size_t l, const pa_cvolume *c);
176 
182 #define PA_VOLUME_SNPRINT_MAX 10
183 
185 char *pa_volume_snprint(char *s, size_t l, pa_volume_t v);
186 
192 #define PA_SW_VOLUME_SNPRINT_DB_MAX 10
193 
195 char *pa_sw_volume_snprint_dB(char *s, size_t l, pa_volume_t v);
196 
199 
206 
209 
216 
219 
226 
229 
232 
234 #define pa_cvolume_is_muted(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_MUTED)
235 
237 #define pa_cvolume_is_norm(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_NORM)
238 
243 
248 
254 
260 
265 
271 
274 
277 
281 
284 
285 #ifdef INFINITY
286 #define PA_DECIBEL_MININFTY ((double) -INFINITY)
287 #else
288 
289 #define PA_DECIBEL_MININFTY ((double) -200.0)
290 #endif
291 
294 
298 
302 
308 float pa_cvolume_get_balance(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE;
309 
319 pa_cvolume* pa_cvolume_set_balance(pa_cvolume *v, const pa_channel_map *map, float new_balance);
320 
326 float pa_cvolume_get_fade(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE;
327 
337 pa_cvolume* pa_cvolume_set_fade(pa_cvolume *v, const pa_channel_map *map, float new_fade);
338 
343 
349 
356 
362 
366 pa_cvolume* pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
367 
371 
375 
379 
380 PA_C_DECL_END
381 
382 #endif
pa_volume_t values[PA_CHANNELS_MAX]
Per-channel volume.
Definition: volume.h:137
struct pa_cvolume pa_cvolume
A structure encapsulating a per-channel volume.
pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) PA_GCC_CONST
Divide two volume specifications, return the result.
A sample format and attribute specification.
Definition: sample.h:243
pa_cvolume * pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v)
Set the volume of the specified number of channels to the volume v.
pa_cvolume * pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc)
Increase the volume passed in by &#39;inc&#39;.
pa_cvolume * pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b)
Multiply a per-channel volume with a scalar volume and return the result in *dest.
uint64_t pa_channel_position_mask_t
A mask of channel positions.
Definition: channelmap.h:212
char * pa_sw_volume_snprint_dB(char *s, size_t l, pa_volume_t v)
Pretty print a volume but show dB values.
#define PA_CHANNELS_MAX
Maximum number of allowed channels.
Definition: sample.h:123
A structure encapsulating a per-channel volume.
Definition: volume.h:135
double pa_sw_volume_to_dB(pa_volume_t v) PA_GCC_CONST
Convert a volume to a decibel value (amplitude, not power).
char * pa_volume_snprint(char *s, size_t l, pa_volume_t v)
Pretty print a volume.
float pa_cvolume_get_balance(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE
Calculate a &#39;balance&#39; value for the specified volume with the specified channel map.
pa_volume_t pa_sw_volume_from_linear(double v) PA_GCC_CONST
Convert a linear factor to a volume.
pa_volume_t pa_cvolume_get_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t) PA_GCC_PURE
Get the maximum volume of all channels at the specified channel position.
enum pa_channel_position pa_channel_position_t
A list of channel labels.
pa_cvolume * pa_cvolume_scale(pa_cvolume *v, pa_volume_t max)
Scale the passed pa_cvolume structure so that the maximum volume of all channels equals max...
pa_cvolume * pa_cvolume_remap(pa_cvolume *v, const pa_channel_map *from, const pa_channel_map *to)
Remap a volume from one channel mapping to a different channel mapping.
#define PA_GCC_CONST
This function&#39;s return value depends only the arguments list (stricter version of PA_GCC_PURE) ...
Definition: gccmacro.h:84
char * pa_cvolume_snprint(char *s, size_t l, const pa_cvolume *c)
Pretty print a volume structure.
double pa_sw_volume_to_linear(pa_volume_t v) PA_GCC_CONST
Convert a volume to a linear factor.
#define PA_GCC_PURE
This function&#39;s return value depends only the arguments list and global state.
Definition: gccmacro.h:75
Constants and routines for channel mapping handling.
pa_cvolume * pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b)
Multiply two per-channel volumes and return the result in *dest.
pa_cvolume * pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b)
Divide a per-channel volume by a scalar volume and return the result in *dest.
pa_volume_t pa_cvolume_avg_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) PA_GCC_PURE
Return the average volume of all channels that are included in the specified channel map with the spe...
pa_cvolume * pa_cvolume_inc_clamp(pa_cvolume *v, pa_volume_t inc, pa_volume_t limit)
Increase the volume passed in by &#39;inc&#39;, but not exceeding &#39;limit&#39;.
GCC attribute macros.
pa_volume_t pa_cvolume_min(const pa_cvolume *a) PA_GCC_PURE
Return the minimum volume of all channels.
pa_cvolume * pa_cvolume_set_balance(pa_cvolume *v, const pa_channel_map *map, float new_balance)
Adjust the &#39;balance&#39; value for the specified volume with the specified channel map.
int pa_cvolume_equal(const pa_cvolume *a, const pa_cvolume *b) PA_GCC_PURE
Return non-zero when *a == *b.
Define header version.
pa_cvolume * pa_cvolume_set_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t, pa_volume_t v)
Set the passed volume to all channels at the specified channel position.
pa_volume_t pa_cvolume_min_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) PA_GCC_PURE
Return the minimum volume of all channels that are included in the specified channel map with the spe...
Constants and routines for sample type handling.
pa_volume_t pa_cvolume_avg(const pa_cvolume *a) PA_GCC_PURE
Return the average volume of all channels.
pa_cvolume * pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b)
This goes through all channels in a and b and sets the corresponding channel in dest to the greater v...
uint8_t channels
Number of channels.
Definition: volume.h:136
char * pa_sw_cvolume_snprint_dB(char *s, size_t l, const pa_cvolume *c)
Pretty print a volume structure but show dB values.
int pa_cvolume_compatible(const pa_cvolume *v, const pa_sample_spec *ss) PA_GCC_PURE
Return non-zero if the specified volume is compatible with the specified sample spec.
int pa_cvolume_valid(const pa_cvolume *v) PA_GCC_PURE
Return TRUE when the passed cvolume structure is valid, FALSE otherwise.
pa_cvolume * pa_cvolume_set_fade(pa_cvolume *v, const pa_channel_map *map, float new_fade)
Adjust the &#39;fade&#39; value (i.e.
pa_cvolume * pa_cvolume_init(pa_cvolume *a)
Initialize the specified volume and return a pointer to it.
pa_cvolume * pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b)
Divide two per-channel volumes and return the result in *dest.
uint32_t pa_volume_t
Volume specification: PA_VOLUME_MUTED: silence; &lt; PA_VOLUME_NORM: decreased volume; PA_VOLUME_NORM: n...
Definition: volume.h:107
pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) PA_GCC_CONST
Multiply two volume specifications, return the result.
pa_cvolume * pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec)
Decrease the volume passed in by &#39;dec&#39;.
A channel map which can be used to attach labels to specific channels of a stream.
Definition: channelmap.h:264
pa_volume_t pa_cvolume_max(const pa_cvolume *a) PA_GCC_PURE
Return the maximum volume of all channels.
float pa_cvolume_get_fade(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE
Calculate a &#39;fade&#39; value (i.e.
int pa_cvolume_compatible_with_channel_map(const pa_cvolume *v, const pa_channel_map *cm) PA_GCC_PURE
Return non-zero if the specified volume is compatible with the specified sample spec.
pa_volume_t pa_cvolume_max_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) PA_GCC_PURE
Return the maximum volume of all channels that are included in the specified channel map with the spe...
int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v) PA_GCC_PURE
Return non-zero if the volume of all channels is equal to the specified value.
pa_cvolume * pa_cvolume_scale_mask(pa_cvolume *v, pa_volume_t max, pa_channel_map *cm, pa_channel_position_mask_t mask)
Scale the passed pa_cvolume structure so that the maximum volume of all channels selected via cm/mask...
pa_volume_t pa_sw_volume_from_dB(double f) PA_GCC_CONST
Convert a decibel value to a volume (amplitude, not power).