annotate CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/alsa/mixer.h @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
rev   line source
jpayne@69 1 /**
jpayne@69 2 * \file include/mixer.h
jpayne@69 3 * \brief Application interface library for the ALSA driver
jpayne@69 4 * \author Jaroslav Kysela <perex@perex.cz>
jpayne@69 5 * \author Abramo Bagnara <abramo@alsa-project.org>
jpayne@69 6 * \author Takashi Iwai <tiwai@suse.de>
jpayne@69 7 * \date 1998-2001
jpayne@69 8 *
jpayne@69 9 * Application interface library for the ALSA driver
jpayne@69 10 */
jpayne@69 11 /*
jpayne@69 12 * This library is free software; you can redistribute it and/or modify
jpayne@69 13 * it under the terms of the GNU Lesser General Public License as
jpayne@69 14 * published by the Free Software Foundation; either version 2.1 of
jpayne@69 15 * the License, or (at your option) any later version.
jpayne@69 16 *
jpayne@69 17 * This program is distributed in the hope that it will be useful,
jpayne@69 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jpayne@69 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
jpayne@69 20 * GNU Lesser General Public License for more details.
jpayne@69 21 *
jpayne@69 22 * You should have received a copy of the GNU Lesser General Public
jpayne@69 23 * License along with this library; if not, write to the Free Software
jpayne@69 24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
jpayne@69 25 *
jpayne@69 26 */
jpayne@69 27
jpayne@69 28 #ifndef __ALSA_MIXER_H
jpayne@69 29 #define __ALSA_MIXER_H
jpayne@69 30
jpayne@69 31 #ifdef __cplusplus
jpayne@69 32 extern "C" {
jpayne@69 33 #endif
jpayne@69 34
jpayne@69 35 /**
jpayne@69 36 * \defgroup Mixer Mixer Interface
jpayne@69 37 * The mixer interface.
jpayne@69 38 * \{
jpayne@69 39 */
jpayne@69 40
jpayne@69 41 /** Mixer handle */
jpayne@69 42 typedef struct _snd_mixer snd_mixer_t;
jpayne@69 43 /** Mixer elements class handle */
jpayne@69 44 typedef struct _snd_mixer_class snd_mixer_class_t;
jpayne@69 45 /** Mixer element handle */
jpayne@69 46 typedef struct _snd_mixer_elem snd_mixer_elem_t;
jpayne@69 47
jpayne@69 48 /**
jpayne@69 49 * \brief Mixer callback function
jpayne@69 50 * \param mixer Mixer handle
jpayne@69 51 * \param mask event mask
jpayne@69 52 * \param elem related mixer element (if any)
jpayne@69 53 * \return 0 on success otherwise a negative error code
jpayne@69 54 */
jpayne@69 55 typedef int (*snd_mixer_callback_t)(snd_mixer_t *ctl,
jpayne@69 56 unsigned int mask,
jpayne@69 57 snd_mixer_elem_t *elem);
jpayne@69 58
jpayne@69 59 /**
jpayne@69 60 * \brief Mixer element callback function
jpayne@69 61 * \param elem Mixer element
jpayne@69 62 * \param mask event mask
jpayne@69 63 * \return 0 on success otherwise a negative error code
jpayne@69 64 */
jpayne@69 65 typedef int (*snd_mixer_elem_callback_t)(snd_mixer_elem_t *elem,
jpayne@69 66 unsigned int mask);
jpayne@69 67
jpayne@69 68 /**
jpayne@69 69 * \brief Compare function for sorting mixer elements
jpayne@69 70 * \param e1 First element
jpayne@69 71 * \param e2 Second element
jpayne@69 72 * \return -1 if e1 < e2, 0 if e1 == e2, 1 if e1 > e2
jpayne@69 73 */
jpayne@69 74 typedef int (*snd_mixer_compare_t)(const snd_mixer_elem_t *e1,
jpayne@69 75 const snd_mixer_elem_t *e2);
jpayne@69 76
jpayne@69 77 /**
jpayne@69 78 * \brief Event callback for the mixer class
jpayne@69 79 * \param class_ Mixer class
jpayne@69 80 * \param mask Event mask (SND_CTL_EVENT_*)
jpayne@69 81 * \param helem HCTL element which invoked the event
jpayne@69 82 * \param melem Mixer element associated to HCTL element
jpayne@69 83 * \return zero if success, otherwise a negative error value
jpayne@69 84 */
jpayne@69 85 typedef int (*snd_mixer_event_t)(snd_mixer_class_t *class_, unsigned int mask,
jpayne@69 86 snd_hctl_elem_t *helem, snd_mixer_elem_t *melem);
jpayne@69 87
jpayne@69 88
jpayne@69 89 /** Mixer element type */
jpayne@69 90 typedef enum _snd_mixer_elem_type {
jpayne@69 91 /* Simple mixer elements */
jpayne@69 92 SND_MIXER_ELEM_SIMPLE,
jpayne@69 93 SND_MIXER_ELEM_LAST = SND_MIXER_ELEM_SIMPLE
jpayne@69 94 } snd_mixer_elem_type_t;
jpayne@69 95
jpayne@69 96 int snd_mixer_open(snd_mixer_t **mixer, int mode);
jpayne@69 97 int snd_mixer_close(snd_mixer_t *mixer);
jpayne@69 98 snd_mixer_elem_t *snd_mixer_first_elem(snd_mixer_t *mixer);
jpayne@69 99 snd_mixer_elem_t *snd_mixer_last_elem(snd_mixer_t *mixer);
jpayne@69 100 int snd_mixer_handle_events(snd_mixer_t *mixer);
jpayne@69 101 int snd_mixer_attach(snd_mixer_t *mixer, const char *name);
jpayne@69 102 int snd_mixer_attach_hctl(snd_mixer_t *mixer, snd_hctl_t *hctl);
jpayne@69 103 int snd_mixer_detach(snd_mixer_t *mixer, const char *name);
jpayne@69 104 int snd_mixer_detach_hctl(snd_mixer_t *mixer, snd_hctl_t *hctl);
jpayne@69 105 int snd_mixer_get_hctl(snd_mixer_t *mixer, const char *name, snd_hctl_t **hctl);
jpayne@69 106 int snd_mixer_poll_descriptors_count(snd_mixer_t *mixer);
jpayne@69 107 int snd_mixer_poll_descriptors(snd_mixer_t *mixer, struct pollfd *pfds, unsigned int space);
jpayne@69 108 int snd_mixer_poll_descriptors_revents(snd_mixer_t *mixer, struct pollfd *pfds, unsigned int nfds, unsigned short *revents);
jpayne@69 109 int snd_mixer_load(snd_mixer_t *mixer);
jpayne@69 110 void snd_mixer_free(snd_mixer_t *mixer);
jpayne@69 111 int snd_mixer_wait(snd_mixer_t *mixer, int timeout);
jpayne@69 112 int snd_mixer_set_compare(snd_mixer_t *mixer, snd_mixer_compare_t msort);
jpayne@69 113 void snd_mixer_set_callback(snd_mixer_t *obj, snd_mixer_callback_t val);
jpayne@69 114 void * snd_mixer_get_callback_private(const snd_mixer_t *obj);
jpayne@69 115 void snd_mixer_set_callback_private(snd_mixer_t *obj, void * val);
jpayne@69 116 unsigned int snd_mixer_get_count(const snd_mixer_t *obj);
jpayne@69 117 int snd_mixer_class_unregister(snd_mixer_class_t *clss);
jpayne@69 118
jpayne@69 119 snd_mixer_elem_t *snd_mixer_elem_next(snd_mixer_elem_t *elem);
jpayne@69 120 snd_mixer_elem_t *snd_mixer_elem_prev(snd_mixer_elem_t *elem);
jpayne@69 121 void snd_mixer_elem_set_callback(snd_mixer_elem_t *obj, snd_mixer_elem_callback_t val);
jpayne@69 122 void * snd_mixer_elem_get_callback_private(const snd_mixer_elem_t *obj);
jpayne@69 123 void snd_mixer_elem_set_callback_private(snd_mixer_elem_t *obj, void * val);
jpayne@69 124 snd_mixer_elem_type_t snd_mixer_elem_get_type(const snd_mixer_elem_t *obj);
jpayne@69 125
jpayne@69 126 int snd_mixer_class_register(snd_mixer_class_t *class_, snd_mixer_t *mixer);
jpayne@69 127 int snd_mixer_elem_new(snd_mixer_elem_t **elem,
jpayne@69 128 snd_mixer_elem_type_t type,
jpayne@69 129 int compare_weight,
jpayne@69 130 void *private_data,
jpayne@69 131 void (*private_free)(snd_mixer_elem_t *elem));
jpayne@69 132 int snd_mixer_elem_add(snd_mixer_elem_t *elem, snd_mixer_class_t *class_);
jpayne@69 133 int snd_mixer_elem_remove(snd_mixer_elem_t *elem);
jpayne@69 134 void snd_mixer_elem_free(snd_mixer_elem_t *elem);
jpayne@69 135 int snd_mixer_elem_info(snd_mixer_elem_t *elem);
jpayne@69 136 int snd_mixer_elem_value(snd_mixer_elem_t *elem);
jpayne@69 137 int snd_mixer_elem_attach(snd_mixer_elem_t *melem, snd_hctl_elem_t *helem);
jpayne@69 138 int snd_mixer_elem_detach(snd_mixer_elem_t *melem, snd_hctl_elem_t *helem);
jpayne@69 139 int snd_mixer_elem_empty(snd_mixer_elem_t *melem);
jpayne@69 140 void *snd_mixer_elem_get_private(const snd_mixer_elem_t *melem);
jpayne@69 141
jpayne@69 142 size_t snd_mixer_class_sizeof(void);
jpayne@69 143 /** \hideinitializer
jpayne@69 144 * \brief allocate an invalid #snd_mixer_class_t using standard alloca
jpayne@69 145 * \param ptr returned pointer
jpayne@69 146 */
jpayne@69 147 #define snd_mixer_class_alloca(ptr) __snd_alloca(ptr, snd_mixer_class)
jpayne@69 148 int snd_mixer_class_malloc(snd_mixer_class_t **ptr);
jpayne@69 149 void snd_mixer_class_free(snd_mixer_class_t *obj);
jpayne@69 150 void snd_mixer_class_copy(snd_mixer_class_t *dst, const snd_mixer_class_t *src);
jpayne@69 151 snd_mixer_t *snd_mixer_class_get_mixer(const snd_mixer_class_t *class_);
jpayne@69 152 snd_mixer_event_t snd_mixer_class_get_event(const snd_mixer_class_t *class_);
jpayne@69 153 void *snd_mixer_class_get_private(const snd_mixer_class_t *class_);
jpayne@69 154 snd_mixer_compare_t snd_mixer_class_get_compare(const snd_mixer_class_t *class_);
jpayne@69 155 int snd_mixer_class_set_event(snd_mixer_class_t *class_, snd_mixer_event_t event);
jpayne@69 156 int snd_mixer_class_set_private(snd_mixer_class_t *class_, void *private_data);
jpayne@69 157 int snd_mixer_class_set_private_free(snd_mixer_class_t *class_, void (*private_free)(snd_mixer_class_t *));
jpayne@69 158 int snd_mixer_class_set_compare(snd_mixer_class_t *class_, snd_mixer_compare_t compare);
jpayne@69 159
jpayne@69 160 /**
jpayne@69 161 * \defgroup SimpleMixer Simple Mixer Interface
jpayne@69 162 * \ingroup Mixer
jpayne@69 163 * The simple mixer interface.
jpayne@69 164 * \{
jpayne@69 165 */
jpayne@69 166
jpayne@69 167 /* Simple mixer elements API */
jpayne@69 168
jpayne@69 169 /** Mixer simple element channel identifier */
jpayne@69 170 typedef enum _snd_mixer_selem_channel_id {
jpayne@69 171 /** Unknown */
jpayne@69 172 SND_MIXER_SCHN_UNKNOWN = -1,
jpayne@69 173 /** Front left */
jpayne@69 174 SND_MIXER_SCHN_FRONT_LEFT = 0,
jpayne@69 175 /** Front right */
jpayne@69 176 SND_MIXER_SCHN_FRONT_RIGHT,
jpayne@69 177 /** Rear left */
jpayne@69 178 SND_MIXER_SCHN_REAR_LEFT,
jpayne@69 179 /** Rear right */
jpayne@69 180 SND_MIXER_SCHN_REAR_RIGHT,
jpayne@69 181 /** Front center */
jpayne@69 182 SND_MIXER_SCHN_FRONT_CENTER,
jpayne@69 183 /** Woofer */
jpayne@69 184 SND_MIXER_SCHN_WOOFER,
jpayne@69 185 /** Side Left */
jpayne@69 186 SND_MIXER_SCHN_SIDE_LEFT,
jpayne@69 187 /** Side Right */
jpayne@69 188 SND_MIXER_SCHN_SIDE_RIGHT,
jpayne@69 189 /** Rear Center */
jpayne@69 190 SND_MIXER_SCHN_REAR_CENTER,
jpayne@69 191 SND_MIXER_SCHN_LAST = 31,
jpayne@69 192 /** Mono (Front left alias) */
jpayne@69 193 SND_MIXER_SCHN_MONO = SND_MIXER_SCHN_FRONT_LEFT
jpayne@69 194 } snd_mixer_selem_channel_id_t;
jpayne@69 195
jpayne@69 196 /** Mixer simple element - register options - abstraction level */
jpayne@69 197 enum snd_mixer_selem_regopt_abstract {
jpayne@69 198 /** no abstraction - try use all universal controls from driver */
jpayne@69 199 SND_MIXER_SABSTRACT_NONE = 0,
jpayne@69 200 /** basic abstraction - Master,PCM,CD,Aux,Record-Gain etc. */
jpayne@69 201 SND_MIXER_SABSTRACT_BASIC,
jpayne@69 202 };
jpayne@69 203
jpayne@69 204 /** Mixer simple element - register options */
jpayne@69 205 struct snd_mixer_selem_regopt {
jpayne@69 206 /** structure version */
jpayne@69 207 int ver;
jpayne@69 208 /** v1: abstract layer selection */
jpayne@69 209 enum snd_mixer_selem_regopt_abstract abstract;
jpayne@69 210 /** v1: device name (must be NULL when playback_pcm or capture_pcm != NULL) */
jpayne@69 211 const char *device;
jpayne@69 212 /** v1: playback PCM connected to mixer device (NULL == none) */
jpayne@69 213 snd_pcm_t *playback_pcm;
jpayne@69 214 /** v1: capture PCM connected to mixer device (NULL == none) */
jpayne@69 215 snd_pcm_t *capture_pcm;
jpayne@69 216 };
jpayne@69 217
jpayne@69 218 /** Mixer simple element identifier */
jpayne@69 219 typedef struct _snd_mixer_selem_id snd_mixer_selem_id_t;
jpayne@69 220
jpayne@69 221 const char *snd_mixer_selem_channel_name(snd_mixer_selem_channel_id_t channel);
jpayne@69 222
jpayne@69 223 int snd_mixer_selem_register(snd_mixer_t *mixer,
jpayne@69 224 struct snd_mixer_selem_regopt *options,
jpayne@69 225 snd_mixer_class_t **classp);
jpayne@69 226 void snd_mixer_selem_get_id(snd_mixer_elem_t *element,
jpayne@69 227 snd_mixer_selem_id_t *id);
jpayne@69 228 const char *snd_mixer_selem_get_name(snd_mixer_elem_t *elem);
jpayne@69 229 unsigned int snd_mixer_selem_get_index(snd_mixer_elem_t *elem);
jpayne@69 230 snd_mixer_elem_t *snd_mixer_find_selem(snd_mixer_t *mixer,
jpayne@69 231 const snd_mixer_selem_id_t *id);
jpayne@69 232
jpayne@69 233 int snd_mixer_selem_is_active(snd_mixer_elem_t *elem);
jpayne@69 234 int snd_mixer_selem_is_playback_mono(snd_mixer_elem_t *elem);
jpayne@69 235 int snd_mixer_selem_has_playback_channel(snd_mixer_elem_t *obj, snd_mixer_selem_channel_id_t channel);
jpayne@69 236 int snd_mixer_selem_is_capture_mono(snd_mixer_elem_t *elem);
jpayne@69 237 int snd_mixer_selem_has_capture_channel(snd_mixer_elem_t *obj, snd_mixer_selem_channel_id_t channel);
jpayne@69 238 int snd_mixer_selem_get_capture_group(snd_mixer_elem_t *elem);
jpayne@69 239 int snd_mixer_selem_has_common_volume(snd_mixer_elem_t *elem);
jpayne@69 240 int snd_mixer_selem_has_playback_volume(snd_mixer_elem_t *elem);
jpayne@69 241 int snd_mixer_selem_has_playback_volume_joined(snd_mixer_elem_t *elem);
jpayne@69 242 int snd_mixer_selem_has_capture_volume(snd_mixer_elem_t *elem);
jpayne@69 243 int snd_mixer_selem_has_capture_volume_joined(snd_mixer_elem_t *elem);
jpayne@69 244 int snd_mixer_selem_has_common_switch(snd_mixer_elem_t *elem);
jpayne@69 245 int snd_mixer_selem_has_playback_switch(snd_mixer_elem_t *elem);
jpayne@69 246 int snd_mixer_selem_has_playback_switch_joined(snd_mixer_elem_t *elem);
jpayne@69 247 int snd_mixer_selem_has_capture_switch(snd_mixer_elem_t *elem);
jpayne@69 248 int snd_mixer_selem_has_capture_switch_joined(snd_mixer_elem_t *elem);
jpayne@69 249 int snd_mixer_selem_has_capture_switch_exclusive(snd_mixer_elem_t *elem);
jpayne@69 250
jpayne@69 251 int snd_mixer_selem_ask_playback_vol_dB(snd_mixer_elem_t *elem, long value, long *dBvalue);
jpayne@69 252 int snd_mixer_selem_ask_capture_vol_dB(snd_mixer_elem_t *elem, long value, long *dBvalue);
jpayne@69 253 int snd_mixer_selem_ask_playback_dB_vol(snd_mixer_elem_t *elem, long dBvalue, int dir, long *value);
jpayne@69 254 int snd_mixer_selem_ask_capture_dB_vol(snd_mixer_elem_t *elem, long dBvalue, int dir, long *value);
jpayne@69 255 int snd_mixer_selem_get_playback_volume(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long *value);
jpayne@69 256 int snd_mixer_selem_get_capture_volume(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long *value);
jpayne@69 257 int snd_mixer_selem_get_playback_dB(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long *value);
jpayne@69 258 int snd_mixer_selem_get_capture_dB(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long *value);
jpayne@69 259 int snd_mixer_selem_get_playback_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int *value);
jpayne@69 260 int snd_mixer_selem_get_capture_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int *value);
jpayne@69 261 int snd_mixer_selem_set_playback_volume(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long value);
jpayne@69 262 int snd_mixer_selem_set_capture_volume(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long value);
jpayne@69 263 int snd_mixer_selem_set_playback_dB(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long value, int dir);
jpayne@69 264 int snd_mixer_selem_set_capture_dB(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long value, int dir);
jpayne@69 265 int snd_mixer_selem_set_playback_volume_all(snd_mixer_elem_t *elem, long value);
jpayne@69 266 int snd_mixer_selem_set_capture_volume_all(snd_mixer_elem_t *elem, long value);
jpayne@69 267 int snd_mixer_selem_set_playback_dB_all(snd_mixer_elem_t *elem, long value, int dir);
jpayne@69 268 int snd_mixer_selem_set_capture_dB_all(snd_mixer_elem_t *elem, long value, int dir);
jpayne@69 269 int snd_mixer_selem_set_playback_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int value);
jpayne@69 270 int snd_mixer_selem_set_capture_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int value);
jpayne@69 271 int snd_mixer_selem_set_playback_switch_all(snd_mixer_elem_t *elem, int value);
jpayne@69 272 int snd_mixer_selem_set_capture_switch_all(snd_mixer_elem_t *elem, int value);
jpayne@69 273 int snd_mixer_selem_get_playback_volume_range(snd_mixer_elem_t *elem,
jpayne@69 274 long *min, long *max);
jpayne@69 275 int snd_mixer_selem_get_playback_dB_range(snd_mixer_elem_t *elem,
jpayne@69 276 long *min, long *max);
jpayne@69 277 int snd_mixer_selem_set_playback_volume_range(snd_mixer_elem_t *elem,
jpayne@69 278 long min, long max);
jpayne@69 279 int snd_mixer_selem_get_capture_volume_range(snd_mixer_elem_t *elem,
jpayne@69 280 long *min, long *max);
jpayne@69 281 int snd_mixer_selem_get_capture_dB_range(snd_mixer_elem_t *elem,
jpayne@69 282 long *min, long *max);
jpayne@69 283 int snd_mixer_selem_set_capture_volume_range(snd_mixer_elem_t *elem,
jpayne@69 284 long min, long max);
jpayne@69 285
jpayne@69 286 int snd_mixer_selem_is_enumerated(snd_mixer_elem_t *elem);
jpayne@69 287 int snd_mixer_selem_is_enum_playback(snd_mixer_elem_t *elem);
jpayne@69 288 int snd_mixer_selem_is_enum_capture(snd_mixer_elem_t *elem);
jpayne@69 289 int snd_mixer_selem_get_enum_items(snd_mixer_elem_t *elem);
jpayne@69 290 int snd_mixer_selem_get_enum_item_name(snd_mixer_elem_t *elem, unsigned int idx, size_t maxlen, char *str);
jpayne@69 291 int snd_mixer_selem_get_enum_item(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, unsigned int *idxp);
jpayne@69 292 int snd_mixer_selem_set_enum_item(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, unsigned int idx);
jpayne@69 293
jpayne@69 294 size_t snd_mixer_selem_id_sizeof(void);
jpayne@69 295 /** \hideinitializer
jpayne@69 296 * \brief allocate an invalid #snd_mixer_selem_id_t using standard alloca
jpayne@69 297 * \param ptr returned pointer
jpayne@69 298 */
jpayne@69 299 #define snd_mixer_selem_id_alloca(ptr) __snd_alloca(ptr, snd_mixer_selem_id)
jpayne@69 300 int snd_mixer_selem_id_malloc(snd_mixer_selem_id_t **ptr);
jpayne@69 301 void snd_mixer_selem_id_free(snd_mixer_selem_id_t *obj);
jpayne@69 302 void snd_mixer_selem_id_copy(snd_mixer_selem_id_t *dst, const snd_mixer_selem_id_t *src);
jpayne@69 303 const char *snd_mixer_selem_id_get_name(const snd_mixer_selem_id_t *obj);
jpayne@69 304 unsigned int snd_mixer_selem_id_get_index(const snd_mixer_selem_id_t *obj);
jpayne@69 305 void snd_mixer_selem_id_set_name(snd_mixer_selem_id_t *obj, const char *val);
jpayne@69 306 void snd_mixer_selem_id_set_index(snd_mixer_selem_id_t *obj, unsigned int val);
jpayne@69 307 int snd_mixer_selem_id_parse(snd_mixer_selem_id_t *dst, const char *str);
jpayne@69 308
jpayne@69 309 /** \} */
jpayne@69 310
jpayne@69 311 /** \} */
jpayne@69 312
jpayne@69 313 #ifdef __cplusplus
jpayne@69 314 }
jpayne@69 315 #endif
jpayne@69 316
jpayne@69 317 #endif /* __ALSA_MIXER_H */
jpayne@69 318