• 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 
00097 PA_C_DECL_BEGIN
00098 
00104 typedef uint32_t pa_volume_t;
00105 
00107 #define PA_VOLUME_NORM ((pa_volume_t) 0x10000U)
00108 
00110 #define PA_VOLUME_MUTED ((pa_volume_t) 0U)
00111 
00113 #define PA_VOLUME_MAX ((pa_volume_t) UINT32_MAX-1)
00114 
00116 #define PA_VOLUME_INVALID ((pa_volume_t) UINT32_MAX)
00117 
00119 typedef struct pa_cvolume {
00120     uint8_t channels;                     
00121     pa_volume_t values[PA_CHANNELS_MAX];  
00122 } pa_cvolume;
00123 
00125 int pa_cvolume_equal(const pa_cvolume *a, const pa_cvolume *b) PA_GCC_PURE;
00126 
00130 pa_cvolume* pa_cvolume_init(pa_cvolume *a);
00131 
00133 #define pa_cvolume_reset(a, n) pa_cvolume_set((a), (n), PA_VOLUME_NORM)
00134 
00136 #define pa_cvolume_mute(a, n) pa_cvolume_set((a), (n), PA_VOLUME_MUTED)
00137 
00139 pa_cvolume* pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v);
00140 
00146 #define PA_CVOLUME_SNPRINT_MAX 320
00147 
00149 char *pa_cvolume_snprint(char *s, size_t l, const pa_cvolume *c);
00150 
00156 #define PA_SW_CVOLUME_SNPRINT_DB_MAX 448
00157 
00159 char *pa_sw_cvolume_snprint_dB(char *s, size_t l, const pa_cvolume *c);
00160 
00166 #define PA_VOLUME_SNPRINT_MAX 10
00167 
00169 char *pa_volume_snprint(char *s, size_t l, pa_volume_t v);
00170 
00176 #define PA_SW_VOLUME_SNPRINT_DB_MAX 10
00177 
00179 char *pa_sw_volume_snprint_dB(char *s, size_t l, pa_volume_t v);
00180 
00182 pa_volume_t pa_cvolume_avg(const pa_cvolume *a) PA_GCC_PURE;
00183 
00189 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;
00190 
00192 pa_volume_t pa_cvolume_max(const pa_cvolume *a) PA_GCC_PURE;
00193 
00199 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;
00200 
00202 pa_volume_t pa_cvolume_min(const pa_cvolume *a) PA_GCC_PURE;
00203 
00209 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;
00210 
00212 int pa_cvolume_valid(const pa_cvolume *v) PA_GCC_PURE;
00213 
00215 int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v) PA_GCC_PURE;
00216 
00218 #define pa_cvolume_is_muted(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_MUTED)
00219 
00221 #define pa_cvolume_is_norm(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_NORM)
00222 
00226 pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) PA_GCC_CONST;
00227 
00231 pa_cvolume *pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
00232 
00237 pa_cvolume *pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b);
00238 
00243 pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) PA_GCC_CONST;
00244 
00248 pa_cvolume *pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
00249 
00254 pa_cvolume *pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b);
00255 
00257 pa_volume_t pa_sw_volume_from_dB(double f) PA_GCC_CONST;
00258 
00260 double pa_sw_volume_to_dB(pa_volume_t v) PA_GCC_CONST;
00261 
00263 pa_volume_t pa_sw_volume_from_linear(double v) PA_GCC_CONST;
00264 
00266 double pa_sw_volume_to_linear(pa_volume_t v) PA_GCC_CONST;
00267 
00268 #ifdef INFINITY
00269 #define PA_DECIBEL_MININFTY ((double) -INFINITY)
00270 #else
00271 
00272 #define PA_DECIBEL_MININFTY ((double) -200.0)
00273 #endif
00274 
00276 pa_cvolume *pa_cvolume_remap(pa_cvolume *v, const pa_channel_map *from, const pa_channel_map *to);
00277 
00280 int pa_cvolume_compatible(const pa_cvolume *v, const pa_sample_spec *ss) PA_GCC_PURE;
00281 
00284 int pa_cvolume_compatible_with_channel_map(const pa_cvolume *v, const pa_channel_map *cm) PA_GCC_PURE;
00285 
00291 float pa_cvolume_get_balance(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE;
00292 
00302 pa_cvolume* pa_cvolume_set_balance(pa_cvolume *v, const pa_channel_map *map, float new_balance);
00303 
00309 float pa_cvolume_get_fade(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE;
00310 
00320 pa_cvolume* pa_cvolume_set_fade(pa_cvolume *v, const pa_channel_map *map, float new_fade);
00321 
00325 pa_cvolume* pa_cvolume_scale(pa_cvolume *v, pa_volume_t max);
00326 
00331 pa_cvolume* pa_cvolume_scale_mask(pa_cvolume *v, pa_volume_t max, pa_channel_map *cm, pa_channel_position_mask_t mask);
00332 
00338 pa_cvolume* pa_cvolume_set_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t, pa_volume_t v);
00339 
00344 pa_volume_t pa_cvolume_get_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t) PA_GCC_PURE;
00345 
00349 pa_cvolume* pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
00350 
00353 pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc);
00354 
00357 pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec);
00358 
00359 PA_C_DECL_END
00360 
00361 #endif

Generated on Mon Aug 23 2010 00:25:21 for PulseAudio by  doxygen 1.7.1