• Main Page
  • Related Pages
  • Data Structures
  • Files
  • Examples
  • File List
  • Globals

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 
00119 #define PA_VOLUME_INVALID ((pa_volume_t) UINT32_MAX)
00120 
00122 typedef struct pa_cvolume {
00123     uint8_t channels;                     
00124     pa_volume_t values[PA_CHANNELS_MAX];  
00125 } pa_cvolume;
00126 
00128 int pa_cvolume_equal(const pa_cvolume *a, const pa_cvolume *b) PA_GCC_PURE;
00129 
00133 pa_cvolume* pa_cvolume_init(pa_cvolume *a);
00134 
00136 #define pa_cvolume_reset(a, n) pa_cvolume_set((a), (n), PA_VOLUME_NORM)
00137 
00139 #define pa_cvolume_mute(a, n) pa_cvolume_set((a), (n), PA_VOLUME_MUTED)
00140 
00142 pa_cvolume* pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v);
00143 
00149 #define PA_CVOLUME_SNPRINT_MAX 320
00150 
00152 char *pa_cvolume_snprint(char *s, size_t l, const pa_cvolume *c);
00153 
00159 #define PA_SW_CVOLUME_SNPRINT_DB_MAX 448
00160 
00162 char *pa_sw_cvolume_snprint_dB(char *s, size_t l, const pa_cvolume *c);
00163 
00169 #define PA_VOLUME_SNPRINT_MAX 10
00170 
00172 char *pa_volume_snprint(char *s, size_t l, pa_volume_t v);
00173 
00179 #define PA_SW_VOLUME_SNPRINT_DB_MAX 10
00180 
00182 char *pa_sw_volume_snprint_dB(char *s, size_t l, pa_volume_t v);
00183 
00185 pa_volume_t pa_cvolume_avg(const pa_cvolume *a) PA_GCC_PURE;
00186 
00192 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;
00193 
00195 pa_volume_t pa_cvolume_max(const pa_cvolume *a) PA_GCC_PURE;
00196 
00202 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;
00203 
00205 pa_volume_t pa_cvolume_min(const pa_cvolume *a) PA_GCC_PURE;
00206 
00212 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;
00213 
00215 int pa_cvolume_valid(const pa_cvolume *v) PA_GCC_PURE;
00216 
00218 int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v) PA_GCC_PURE;
00219 
00221 #define pa_cvolume_is_muted(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_MUTED)
00222 
00224 #define pa_cvolume_is_norm(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_NORM)
00225 
00229 pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) PA_GCC_CONST;
00230 
00234 pa_cvolume *pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
00235 
00240 pa_cvolume *pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b);
00241 
00246 pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) PA_GCC_CONST;
00247 
00251 pa_cvolume *pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
00252 
00257 pa_cvolume *pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b);
00258 
00260 pa_volume_t pa_sw_volume_from_dB(double f) PA_GCC_CONST;
00261 
00263 double pa_sw_volume_to_dB(pa_volume_t v) PA_GCC_CONST;
00264 
00267 pa_volume_t pa_sw_volume_from_linear(double v) PA_GCC_CONST;
00268 
00270 double pa_sw_volume_to_linear(pa_volume_t v) PA_GCC_CONST;
00271 
00272 #ifdef INFINITY
00273 #define PA_DECIBEL_MININFTY ((double) -INFINITY)
00274 #else
00275 
00276 #define PA_DECIBEL_MININFTY ((double) -200.0)
00277 #endif
00278 
00280 pa_cvolume *pa_cvolume_remap(pa_cvolume *v, const pa_channel_map *from, const pa_channel_map *to);
00281 
00284 int pa_cvolume_compatible(const pa_cvolume *v, const pa_sample_spec *ss) PA_GCC_PURE;
00285 
00288 int pa_cvolume_compatible_with_channel_map(const pa_cvolume *v, const pa_channel_map *cm) PA_GCC_PURE;
00289 
00295 float pa_cvolume_get_balance(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE;
00296 
00306 pa_cvolume* pa_cvolume_set_balance(pa_cvolume *v, const pa_channel_map *map, float new_balance);
00307 
00313 float pa_cvolume_get_fade(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE;
00314 
00324 pa_cvolume* pa_cvolume_set_fade(pa_cvolume *v, const pa_channel_map *map, float new_fade);
00325 
00329 pa_cvolume* pa_cvolume_scale(pa_cvolume *v, pa_volume_t max);
00330 
00335 pa_cvolume* pa_cvolume_scale_mask(pa_cvolume *v, pa_volume_t max, pa_channel_map *cm, pa_channel_position_mask_t mask);
00336 
00342 pa_cvolume* pa_cvolume_set_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t, pa_volume_t v);
00343 
00348 pa_volume_t pa_cvolume_get_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t) PA_GCC_PURE;
00349 
00353 pa_cvolume* pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
00354 
00357 pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc);
00358 
00361 pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec);
00362 
00363 PA_C_DECL_END
00364 
00365 #endif

Generated on Fri Nov 26 2010 for PulseAudio by  doxygen 1.7.2