PulseAudio
3.0
|
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/2) 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 #define PA_VOLUME_IS_VALID(v) ((v) <= PA_VOLUME_MAX) 00130 00132 #define PA_CLAMP_VOLUME(v) (PA_CLAMP_UNLIKELY((v), PA_VOLUME_MUTED, PA_VOLUME_MAX)) 00133 00135 typedef struct pa_cvolume { 00136 uint8_t channels; 00137 pa_volume_t values[PA_CHANNELS_MAX]; 00138 } pa_cvolume; 00139 00141 int pa_cvolume_equal(const pa_cvolume *a, const pa_cvolume *b) PA_GCC_PURE; 00142 00146 pa_cvolume* pa_cvolume_init(pa_cvolume *a); 00147 00149 #define pa_cvolume_reset(a, n) pa_cvolume_set((a), (n), PA_VOLUME_NORM) 00150 00152 #define pa_cvolume_mute(a, n) pa_cvolume_set((a), (n), PA_VOLUME_MUTED) 00153 00155 pa_cvolume* pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v); 00156 00162 #define PA_CVOLUME_SNPRINT_MAX 320 00163 00165 char *pa_cvolume_snprint(char *s, size_t l, const pa_cvolume *c); 00166 00172 #define PA_SW_CVOLUME_SNPRINT_DB_MAX 448 00173 00175 char *pa_sw_cvolume_snprint_dB(char *s, size_t l, const pa_cvolume *c); 00176 00182 #define PA_VOLUME_SNPRINT_MAX 10 00183 00185 char *pa_volume_snprint(char *s, size_t l, pa_volume_t v); 00186 00192 #define PA_SW_VOLUME_SNPRINT_DB_MAX 10 00193 00195 char *pa_sw_volume_snprint_dB(char *s, size_t l, pa_volume_t v); 00196 00198 pa_volume_t pa_cvolume_avg(const pa_cvolume *a) PA_GCC_PURE; 00199 00205 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; 00206 00208 pa_volume_t pa_cvolume_max(const pa_cvolume *a) PA_GCC_PURE; 00209 00215 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; 00216 00218 pa_volume_t pa_cvolume_min(const pa_cvolume *a) PA_GCC_PURE; 00219 00225 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; 00226 00228 int pa_cvolume_valid(const pa_cvolume *v) PA_GCC_PURE; 00229 00231 int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v) PA_GCC_PURE; 00232 00234 #define pa_cvolume_is_muted(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_MUTED) 00235 00237 #define pa_cvolume_is_norm(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_NORM) 00238 00242 pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) PA_GCC_CONST; 00243 00247 pa_cvolume *pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b); 00248 00253 pa_cvolume *pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b); 00254 00259 pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) PA_GCC_CONST; 00260 00264 pa_cvolume *pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b); 00265 00270 pa_cvolume *pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b); 00271 00273 pa_volume_t pa_sw_volume_from_dB(double f) PA_GCC_CONST; 00274 00276 double pa_sw_volume_to_dB(pa_volume_t v) PA_GCC_CONST; 00277 00280 pa_volume_t pa_sw_volume_from_linear(double v) PA_GCC_CONST; 00281 00283 double pa_sw_volume_to_linear(pa_volume_t v) PA_GCC_CONST; 00284 00285 #ifdef INFINITY 00286 #define PA_DECIBEL_MININFTY ((double) -INFINITY) 00287 #else 00288 00289 #define PA_DECIBEL_MININFTY ((double) -200.0) 00290 #endif 00291 00293 pa_cvolume *pa_cvolume_remap(pa_cvolume *v, const pa_channel_map *from, const pa_channel_map *to); 00294 00297 int pa_cvolume_compatible(const pa_cvolume *v, const pa_sample_spec *ss) PA_GCC_PURE; 00298 00301 int pa_cvolume_compatible_with_channel_map(const pa_cvolume *v, const pa_channel_map *cm) PA_GCC_PURE; 00302 00308 float pa_cvolume_get_balance(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE; 00309 00319 pa_cvolume* pa_cvolume_set_balance(pa_cvolume *v, const pa_channel_map *map, float new_balance); 00320 00326 float pa_cvolume_get_fade(const pa_cvolume *v, const pa_channel_map *map) PA_GCC_PURE; 00327 00337 pa_cvolume* pa_cvolume_set_fade(pa_cvolume *v, const pa_channel_map *map, float new_fade); 00338 00342 pa_cvolume* pa_cvolume_scale(pa_cvolume *v, pa_volume_t max); 00343 00348 pa_cvolume* pa_cvolume_scale_mask(pa_cvolume *v, pa_volume_t max, pa_channel_map *cm, pa_channel_position_mask_t mask); 00349 00355 pa_cvolume* pa_cvolume_set_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t, pa_volume_t v); 00356 00361 pa_volume_t pa_cvolume_get_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t) PA_GCC_PURE; 00362 00366 pa_cvolume* pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b); 00367 00370 pa_cvolume* pa_cvolume_inc_clamp(pa_cvolume *v, pa_volume_t inc, pa_volume_t limit); 00371 00374 pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc); 00375 00378 pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec); 00379 00380 PA_C_DECL_END 00381 00382 #endif