PulseAudio 0.9.23
volume.h
Go to the documentation of this file.
00001 #ifndef foovolumehfoo
00002 #define foovolumehfoo
00003 
00004 /***
00005   This file is part of PulseAudio.
00006 
00007   Copyright 2004-2006 Lennart Poettering
00008   Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
00009 
00010   PulseAudio is free software; you can redistribute it and/or modify
00011   it under the terms of the GNU Lesser General Public License as published
00012   by the Free Software Foundation; either version 2.1 of the License,
00013   or (at your option) any later version.
00014 
00015   PulseAudio is distributed in the hope that it will be useful, but
00016   WITHOUT ANY WARRANTY; without even the implied warranty of
00017   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00018   General Public License for more details.
00019 
00020   You should have received a copy of the GNU Lesser General Public License
00021   along with PulseAudio; if not, write to the Free Software
00022   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00023   USA.
00024 ***/
00025 
00026 #include <inttypes.h>
00027 #include <limits.h>
00028 
00029 #include <pulse/cdecl.h>
00030 #include <pulse/gccmacro.h>
00031 #include <pulse/sample.h>
00032 #include <pulse/channelmap.h>
00033 #include <pulse/version.h>
00034 
00100 PA_C_DECL_BEGIN
00101 
00107 typedef uint32_t pa_volume_t;
00108 
00110 #define PA_VOLUME_NORM ((pa_volume_t) 0x10000U)
00111 
00113 #define PA_VOLUME_MUTED ((pa_volume_t) 0U)
00114 
00116 #define PA_VOLUME_MAX ((pa_volume_t) UINT32_MAX-1)
00117 
00123 #define PA_VOLUME_UI_MAX (pa_sw_volume_from_dB(+11.0))
00124 
00126 #define PA_VOLUME_INVALID ((pa_volume_t) UINT32_MAX)
00127 
00129 typedef struct pa_cvolume {
00130     uint8_t channels;                     
00131     pa_volume_t values[PA_CHANNELS_MAX];  
00132 } pa_cvolume;
00133 
00135 int pa_cvolume_equal(const pa_cvolume *a, const pa_cvolume *b) PA_GCC_PURE;
00136 
00140 pa_cvolume* pa_cvolume_init(pa_cvolume *a);
00141 
00143 #define pa_cvolume_reset(a, n) pa_cvolume_set((a), (n), PA_VOLUME_NORM)
00144 
00146 #define pa_cvolume_mute(a, n) pa_cvolume_set((a), (n), PA_VOLUME_MUTED)
00147 
00149 pa_cvolume* pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v);
00150 
00156 #define PA_CVOLUME_SNPRINT_MAX 320
00157 
00159 char *pa_cvolume_snprint(char *s, size_t l, const pa_cvolume *c);
00160 
00166 #define PA_SW_CVOLUME_SNPRINT_DB_MAX 448
00167 
00169 char *pa_sw_cvolume_snprint_dB(char *s, size_t l, const pa_cvolume *c);
00170 
00176 #define PA_VOLUME_SNPRINT_MAX 10
00177 
00179 char *pa_volume_snprint(char *s, size_t l, pa_volume_t v);
00180 
00186 #define PA_SW_VOLUME_SNPRINT_DB_MAX 10
00187 
00189 char *pa_sw_volume_snprint_dB(char *s, size_t l, pa_volume_t v);
00190 
00192 pa_volume_t pa_cvolume_avg(const pa_cvolume *a) PA_GCC_PURE;
00193 
00199 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;
00200 
00202 pa_volume_t pa_cvolume_max(const pa_cvolume *a) PA_GCC_PURE;
00203 
00209 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;
00210 
00212 pa_volume_t pa_cvolume_min(const pa_cvolume *a) PA_GCC_PURE;
00213 
00219 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;
00220 
00222 int pa_cvolume_valid(const pa_cvolume *v) PA_GCC_PURE;
00223 
00225 int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v) PA_GCC_PURE;
00226 
00228 #define pa_cvolume_is_muted(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_MUTED)
00229 
00231 #define pa_cvolume_is_norm(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_NORM)
00232 
00236 pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) PA_GCC_CONST;
00237 
00241 pa_cvolume *pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
00242 
00247 pa_cvolume *pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b);
00248 
00253 pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) PA_GCC_CONST;
00254 
00258 pa_cvolume *pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
00259 
00264 pa_cvolume *pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b);
00265 
00267 pa_volume_t pa_sw_volume_from_dB(double f) PA_GCC_CONST;
00268 
00270 double pa_sw_volume_to_dB(pa_volume_t v) PA_GCC_CONST;
00271 
00274 pa_volume_t pa_sw_volume_from_linear(double v) PA_GCC_CONST;
00275 
00277 double pa_sw_volume_to_linear(pa_volume_t v) PA_GCC_CONST;
00278 
00279 #ifdef INFINITY
00280 #define PA_DECIBEL_MININFTY ((double) -INFINITY)
00281 #else
00282 
00283 #define PA_DECIBEL_MININFTY ((double) -200.0)
00284 #endif
00285 
00287 pa_cvolume *pa_cvolume_remap(pa_cvolume *v, const pa_channel_map *from, const pa_channel_map *to);
00288 
00291 int pa_cvolume_compatible(const pa_cvolume *v, const pa_sample_spec *ss) PA_GCC_PURE;
00292 
00295 int pa_cvolume_compatible_with_channel_map(const pa_cvolume *v, const pa_channel_map *cm) PA_GCC_PURE;
00296 
00302 float pa_cvolume_get_balance(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE;
00303 
00313 pa_cvolume* pa_cvolume_set_balance(pa_cvolume *v, const pa_channel_map *map, float new_balance);
00314 
00320 float pa_cvolume_get_fade(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE;
00321 
00331 pa_cvolume* pa_cvolume_set_fade(pa_cvolume *v, const pa_channel_map *map, float new_fade);
00332 
00336 pa_cvolume* pa_cvolume_scale(pa_cvolume *v, pa_volume_t max);
00337 
00342 pa_cvolume* pa_cvolume_scale_mask(pa_cvolume *v, pa_volume_t max, pa_channel_map *cm, pa_channel_position_mask_t mask);
00343 
00349 pa_cvolume* pa_cvolume_set_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t, pa_volume_t v);
00350 
00355 pa_volume_t pa_cvolume_get_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t) PA_GCC_PURE;
00356 
00360 pa_cvolume* pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
00361 
00364 pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc);
00365 
00368 pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec);
00369 
00370 PA_C_DECL_END
00371 
00372 #endif