snd_mixer_callbacks_t

Список 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().


Note: Все неиспользуемые поля следует занулить. Если обработка событий микшера не требуется, можно занулить всю структуру snd_mixer_callbacks_t (см. wave.c).

Поля структуры включают:

private_data
Указатель на произвольные данные, передаваемые в качестве аргумента в callback-функции.
rebuild()
Указатель на callback-функцию, вызываемую при пересборке микшера.
element()
Указатель на callback-функцию, вызываемую при возникновении события в элементе микшера. Аргументы функции:
private_data
Указатель на произвольные данные, передаваемые в качестве аргумента в callback-функции.
cmd
Тип события:
SND_MIXER_READ_ELEMENT_VALUE
Изменено значение элемента.
SND_MIXER_READ_ELEMENT_CHANGE
Изменен элемент (изменилось что-то отличное от значения).
SND_MIXER_READ_ELEMENT_ADD
Добавлен/создан элемент.
SND_MIXER_READ_ELEMENT_REMOVE
Удален/освобожден элемент.
SND_MIXER_READ_ELEMENT_ROUTE
Изменена информация о маршрутизации элементов.
eid
Указатель на структуру snd_mixer_eid_t, содержащую идентификатор элемента, с которым ассоциировано событие.
group()
Указатель на callback-функцию, вызываемую при событии в группе элементов. Аргументы функции:
private_data
Указатель на произвольные данные, передаваемые в качестве аргумента в callback-функции.
cmd
Тип события:
SND_MIXER_READ_GROUP_VALUE
Изменено значение группы.
SND_MIXER_READ_GROUP_CHANGE
Изменена группа (изменилось что-то отличное от значения).
SND_MIXER_READ_GROUP_ADD
Добавлена/создана группа.
SND_MIXER_READ_GROUP_REMOVE
Удалена/освобождена группа.
gid
Указатель на структуру snd_mixer_gid_t, содержащую идентификатор группы, с которой ассоциировано событие.

Примеры:

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 );
else
above_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