Список callback-функций микшера
#include <sys/asoundlib.h>typedef struct snd_mixer_callbacks {void *private_data; /* should be used with an application */void (*rebuild)( void *private_data );void (*element)( void *private_data,int cmd,snd_mixer_eid_t *eid );void (*group)( void *private_data,int cmd,snd_mixer_gid_t *gid );void *reserved[28]; /* reserved for future use - must be NULL!!! */} snd_mixer_callbacks_t;
Структура snd_mixer_callbacks_t
определяет список callback-ов, вызываемых при обработке событий с помощью snd_mixer_read().
Все неиспользуемые поля следует занулить. Если обработка событий микшера не требуется, можно занулить всю структуру snd_mixer_callbacks_t (см. wave.c). |
Поля структуры включают:
static void mixer_callback_group( void *private_data, int cmd, snd_mixer_gid_t *gid ){Control_t *control,*prev;PtWidget_t *above_wgt;int i;switch ( cmd ){case SND_MIXER_READ_GROUP_VALUE:for ( control = control_head; control; control = control->next ){if ( strcmp( control->group.gid.name, gid->name ) == 0 &&control->group.gid.index == gid->index ){if ( snd_mixer_group_read( mixer_handle, &control->group ) == 0 )base_update_control( control, NULL );}}break;case SND_MIXER_READ_GROUP_ADD:if ( (control = mixer_create_control( gid, control_tail )) ){if ( control->group.caps & SND_MIXER_GRPCAP_PLAY_GRP )above_wgt = PtWidgetBrotherBehind( ABW_base_capture_pane );elseabove_wgt = PtWidgetBrotherBehind( ABW_base_status );PtContainerHold( ABW_base_controls );base_create_control( ABW_base_controls, &above_wgt, control );PtContainerRelease( ABW_base_controls );}break;case SND_MIXER_READ_GROUP_REMOVE:for ( prev = NULL, control = control_head; control; prev = control, control = control->next ){if ( strcmp( control->group.gid.name, gid->name ) == 0 &&control->group.gid.index == gid->index )mixer_delete_control( control, prev );}break;}}int mixer_update( int fd, void *data, unsigned mode ){snd_mixer_callbacks_t callbacks = { 0, 0, 0, 0 };callbacks.group = mixer_callback_group;snd_mixer_read( mixer_handle, &callbacks );return (Pt_CONTINUE);}
ЗОСРВ «Нейтрино»
snd_mixer_eid_t, snd_mixer_gid_t, snd_mixer_read()
Предыдущий раздел: Библиотека libasound