mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-05 13:30:00 -05:00
New simple mixer implementation
This commit is contained in:
parent
341689606f
commit
ab819d2edd
8 changed files with 885 additions and 667 deletions
|
|
@ -292,11 +292,15 @@ int snd_mixer_elem_remove(snd_mixer_elem_t *elem)
|
|||
return err;
|
||||
}
|
||||
|
||||
int snd_mixer_elem_change(snd_mixer_elem_t *elem)
|
||||
int snd_mixer_elem_info(snd_mixer_elem_t *elem)
|
||||
{
|
||||
return snd_mixer_elem_throw_event(elem, SND_CTL_EVENT_MASK_INFO);
|
||||
}
|
||||
|
||||
int snd_mixer_elem_value(snd_mixer_elem_t *elem)
|
||||
{
|
||||
return snd_mixer_elem_throw_event(elem, SND_CTL_EVENT_MASK_VALUE);
|
||||
}
|
||||
|
||||
int snd_mixer_class_register(snd_mixer_class_t *class, snd_mixer_t *mixer)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -86,35 +86,14 @@ struct _snd_mixer_selem_id {
|
|||
unsigned int index;
|
||||
};
|
||||
|
||||
#define CAP_VOLUME (1<<0)
|
||||
#define CAP_JOIN_VOLUME (1<<1)
|
||||
#define CAP_MUTE (1<<2)
|
||||
#define CAP_JOIN_MUTE (1<<3)
|
||||
#define CAP_CAPTURE (1<<4)
|
||||
#define CAP_JOIN_CAPTURE (1<<5)
|
||||
#define CAP_EXCL_CAPTURE (1<<6)
|
||||
|
||||
struct _snd_mixer_selem_info {
|
||||
unsigned int caps; /* capabilities */
|
||||
unsigned int channels; /* bitmap of active channels */
|
||||
int capture_group; /* capture group (for exclusive capture) */
|
||||
long min; /* minimum value */
|
||||
long max; /* maximum value */
|
||||
};
|
||||
|
||||
struct _snd_mixer_selem_value {
|
||||
unsigned int mute; /* RW: bitmap of muted channels */
|
||||
unsigned int capture; /* RW: bitmap of capture channels */
|
||||
long volume[32];
|
||||
};
|
||||
|
||||
int snd_mixer_class_register(snd_mixer_class_t *class, snd_mixer_t *mixer);
|
||||
int snd_mixer_add_elem(snd_mixer_t *mixer, snd_mixer_elem_t *elem);
|
||||
int snd_mixer_remove_elem(snd_mixer_t *mixer, snd_mixer_elem_t *elem);
|
||||
int snd_mixer_elem_throw_event(snd_mixer_elem_t *elem, unsigned int mask);
|
||||
int snd_mixer_elem_add(snd_mixer_elem_t *elem, snd_mixer_class_t *class);
|
||||
int snd_mixer_elem_remove(snd_mixer_elem_t *elem);
|
||||
int snd_mixer_elem_change(snd_mixer_elem_t *elem);
|
||||
int snd_mixer_elem_info(snd_mixer_elem_t *elem);
|
||||
int snd_mixer_elem_value(snd_mixer_elem_t *elem);
|
||||
int snd_mixer_elem_attach(snd_mixer_elem_t *melem,
|
||||
snd_hctl_elem_t *helem);
|
||||
int snd_mixer_elem_detach(snd_mixer_elem_t *melem,
|
||||
|
|
|
|||
|
|
@ -118,113 +118,3 @@ snd_mixer_elem_type_t snd_mixer_elem_get_type(const snd_mixer_elem_t *obj)
|
|||
return obj->type;
|
||||
}
|
||||
|
||||
size_t snd_mixer_selem_info_sizeof()
|
||||
{
|
||||
return sizeof(snd_mixer_selem_info_t);
|
||||
}
|
||||
|
||||
int snd_mixer_selem_info_malloc(snd_mixer_selem_info_t **ptr)
|
||||
{
|
||||
assert(ptr);
|
||||
*ptr = calloc(1, sizeof(snd_mixer_selem_info_t));
|
||||
if (!*ptr)
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void snd_mixer_selem_info_free(snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
free(obj);
|
||||
}
|
||||
|
||||
void snd_mixer_selem_info_copy(snd_mixer_selem_info_t *dst, const snd_mixer_selem_info_t *src)
|
||||
{
|
||||
assert(dst && src);
|
||||
*dst = *src;
|
||||
}
|
||||
|
||||
long snd_mixer_selem_info_get_min(const snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
assert(obj);
|
||||
return obj->min;
|
||||
}
|
||||
|
||||
long snd_mixer_selem_info_get_max(const snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
assert(obj);
|
||||
return obj->max;
|
||||
}
|
||||
|
||||
int snd_mixer_selem_info_get_capture_group(const snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
assert(obj);
|
||||
return obj->capture_group;
|
||||
}
|
||||
|
||||
int snd_mixer_selem_info_has_volume(const snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
assert(obj);
|
||||
return !!(obj->caps & CAP_VOLUME);
|
||||
}
|
||||
|
||||
int snd_mixer_selem_info_has_joined_volume(const snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
assert(obj);
|
||||
return !!(obj->caps & CAP_JOIN_VOLUME);
|
||||
}
|
||||
|
||||
int snd_mixer_selem_info_has_mute(const snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
assert(obj);
|
||||
return !!(obj->caps & CAP_MUTE);
|
||||
}
|
||||
|
||||
int snd_mixer_selem_info_has_joined_mute(const snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
assert(obj);
|
||||
return !!(obj->caps & CAP_JOIN_MUTE);
|
||||
}
|
||||
|
||||
int snd_mixer_selem_info_has_capture(const snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
assert(obj);
|
||||
return !!(obj->caps & CAP_CAPTURE);
|
||||
}
|
||||
|
||||
int snd_mixer_selem_info_has_joined_capture(const snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
assert(obj);
|
||||
return !!(obj->caps & CAP_JOIN_CAPTURE);
|
||||
}
|
||||
|
||||
int snd_mixer_selem_info_has_exclusive_capture(const snd_mixer_selem_info_t *obj)
|
||||
{
|
||||
assert(obj);
|
||||
return !!(obj->caps & CAP_EXCL_CAPTURE);
|
||||
}
|
||||
|
||||
size_t snd_mixer_selem_value_sizeof()
|
||||
{
|
||||
return sizeof(snd_mixer_selem_value_t);
|
||||
}
|
||||
|
||||
int snd_mixer_selem_value_malloc(snd_mixer_selem_value_t **ptr)
|
||||
{
|
||||
assert(ptr);
|
||||
*ptr = calloc(1, sizeof(snd_mixer_selem_value_t));
|
||||
if (!*ptr)
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void snd_mixer_selem_value_free(snd_mixer_selem_value_t *obj)
|
||||
{
|
||||
free(obj);
|
||||
}
|
||||
|
||||
void snd_mixer_selem_value_copy(snd_mixer_selem_value_t *dst, const snd_mixer_selem_value_t *src)
|
||||
{
|
||||
assert(dst && src);
|
||||
*dst = *src;
|
||||
}
|
||||
|
||||
|
|
|
|||
1322
src/mixer/simple.c
1322
src/mixer/simple.c
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue