ALSA project - the C library reference
Loading...
Searching...
No Matches
mixer.c File Reference

Mixer Interface. More...

Functions

int snd_mixer_open (snd_mixer_t **mixerp, int mode)
 Opens an empty mixer.
 
int snd_mixer_elem_attach (snd_mixer_elem_t *melem, snd_hctl_elem_t *helem)
 Attach an HCTL element to a mixer element.
 
int snd_mixer_elem_detach (snd_mixer_elem_t *melem, snd_hctl_elem_t *helem)
 Detach an HCTL element from a mixer element.
 
int snd_mixer_elem_empty (snd_mixer_elem_t *melem)
 Return true if a mixer element does not contain any HCTL elements.
 
int snd_mixer_attach (snd_mixer_t *mixer, const char *name)
 Attach an HCTL specified with the CTL device name to an opened mixer.
 
int snd_mixer_attach_hctl (snd_mixer_t *mixer, snd_hctl_t *hctl)
 Attach an HCTL to an opened mixer.
 
int snd_mixer_detach (snd_mixer_t *mixer, const char *name)
 Detach a previously attached HCTL to an opened mixer freeing all related resources.
 
int snd_mixer_detach_hctl (snd_mixer_t *mixer, snd_hctl_t *hctl)
 Detach a previously attached HCTL to an opened mixer freeing all related resources.
 
int snd_mixer_get_hctl (snd_mixer_t *mixer, const char *name, snd_hctl_t **hctl)
 Obtain a HCTL pointer associated to given name.
 
void * snd_mixer_elem_get_private (const snd_mixer_elem_t *elem)
 Get private data associated to give mixer element.
 
int snd_mixer_elem_new (snd_mixer_elem_t **elem, snd_mixer_elem_type_t type, int compare_weight, void *private_data, void(*private_free)(snd_mixer_elem_t *elem))
 Allocate a new mixer element.
 
int snd_mixer_elem_add (snd_mixer_elem_t *elem, snd_mixer_class_t *class)
 Add an element for a registered mixer element class.
 
int snd_mixer_elem_remove (snd_mixer_elem_t *elem)
 Remove a mixer element.
 
void snd_mixer_elem_free (snd_mixer_elem_t *elem)
 Free a mixer element.
 
int snd_mixer_elem_info (snd_mixer_elem_t *elem)
 Mixer element informations are changed.
 
int snd_mixer_elem_value (snd_mixer_elem_t *elem)
 Mixer element values is changed.
 
int snd_mixer_class_register (snd_mixer_class_t *class, snd_mixer_t *mixer)
 Register mixer element class.
 
int snd_mixer_class_unregister (snd_mixer_class_t *class)
 Unregister mixer element class and remove all its elements.
 
int snd_mixer_load (snd_mixer_t *mixer)
 Load a mixer elements.
 
void snd_mixer_free (snd_mixer_t *mixer)
 Unload all mixer elements and free all related resources.
 
int snd_mixer_close (snd_mixer_t *mixer)
 Close a mixer and free all related resources.
 
int snd_mixer_set_compare (snd_mixer_t *mixer, snd_mixer_compare_t compare)
 Change mixer compare function and reorder elements.
 
int snd_mixer_poll_descriptors_count (snd_mixer_t *mixer)
 get count of poll descriptors for mixer handle
 
int snd_mixer_poll_descriptors (snd_mixer_t *mixer, struct pollfd *pfds, unsigned int space)
 get poll descriptors
 
int snd_mixer_poll_descriptors_revents (snd_mixer_t *mixer, struct pollfd *pfds, unsigned int nfds, unsigned short *revents)
 get returned events from poll descriptors
 
int snd_mixer_wait (snd_mixer_t *mixer, int timeout)
 Wait for a mixer to become ready (i.e. at least one event pending)
 
snd_mixer_elem_t * snd_mixer_first_elem (snd_mixer_t *mixer)
 get first element for a mixer
 
snd_mixer_elem_t * snd_mixer_last_elem (snd_mixer_t *mixer)
 get last element for a mixer
 
snd_mixer_elem_t * snd_mixer_elem_next (snd_mixer_elem_t *elem)
 get next mixer element
 
snd_mixer_elem_t * snd_mixer_elem_prev (snd_mixer_elem_t *elem)
 get previous mixer element
 
int snd_mixer_handle_events (snd_mixer_t *mixer)
 Handle pending mixer events invoking callbacks.
 
void snd_mixer_set_callback (snd_mixer_t *obj, snd_mixer_callback_t val)
 Set callback function for a mixer.
 
void snd_mixer_set_callback_private (snd_mixer_t *mixer, void *val)
 Set callback private value for a mixer.
 
void * snd_mixer_get_callback_private (const snd_mixer_t *mixer)
 Get callback private value for a mixer.
 
unsigned int snd_mixer_get_count (const snd_mixer_t *mixer)
 Get elements count for a mixer.
 
void snd_mixer_elem_set_callback (snd_mixer_elem_t *mixer, snd_mixer_elem_callback_t val)
 Set callback function for a mixer element.
 
void snd_mixer_elem_set_callback_private (snd_mixer_elem_t *mixer, void *val)
 Set callback private value for a mixer element.
 
void * snd_mixer_elem_get_callback_private (const snd_mixer_elem_t *mixer)
 Get callback private value for a mixer element.
 
snd_mixer_elem_type_t snd_mixer_elem_get_type (const snd_mixer_elem_t *mixer)
 Get type for a mixer element.
 
size_t snd_mixer_class_sizeof ()
 get size of #snd_mixer_class_t
 
int snd_mixer_class_malloc (snd_mixer_class_t **ptr)
 allocate an invalid #snd_mixer_class_t using standard malloc
 
void snd_mixer_class_free (snd_mixer_class_t *obj)
 frees a previously allocated #snd_mixer_class_t
 
void snd_mixer_class_copy (snd_mixer_class_t *dst, const snd_mixer_class_t *src)
 copy one #snd_mixer_class_t to another
 
snd_mixer_t * snd_mixer_class_get_mixer (const snd_mixer_class_t *obj)
 Get a mixer associated to given mixer class.
 
snd_mixer_event_t snd_mixer_class_get_event (const snd_mixer_class_t *obj)
 Get mixer event callback associated to given mixer class.
 
void * snd_mixer_class_get_private (const snd_mixer_class_t *obj)
 Get mixer private data associated to given mixer class.
 
snd_mixer_compare_t snd_mixer_class_get_compare (const snd_mixer_class_t *obj)
 Get mixer compare callback associated to given mixer class.
 
int snd_mixer_class_set_event (snd_mixer_class_t *obj, snd_mixer_event_t event)
 Set mixer event callback to given mixer class.
 
int snd_mixer_class_set_private (snd_mixer_class_t *obj, void *private_data)
 Set mixer private data to given mixer class.
 
int snd_mixer_class_set_private_free (snd_mixer_class_t *obj, void(*private_free)(snd_mixer_class_t *))
 Set mixer private data free callback to given mixer class.
 
int snd_mixer_class_set_compare (snd_mixer_class_t *obj, snd_mixer_compare_t compare)
 Set mixer compare callback to given mixer class.
 

Detailed Description

Mixer Interface.

Author
Jaroslav Kysela perex.nosp@m.@per.nosp@m.ex.cz
Abramo Bagnara abram.nosp@m.o@al.nosp@m.sa-pr.nosp@m.ojec.nosp@m.t.org
Date
2001

Mixer interface is designed to access mixer elements. Callbacks may be used for event handling.

Function Documentation

◆ snd_mixer_attach()

int snd_mixer_attach ( snd_mixer_t * mixer,
const char * name )

Attach an HCTL specified with the CTL device name to an opened mixer.

Parameters
mixerMixer handle
nameHCTL name (see snd_hctl_open)
Returns
0 on success otherwise a negative error code

◆ snd_mixer_attach_hctl()

int snd_mixer_attach_hctl ( snd_mixer_t * mixer,
snd_hctl_t * hctl )

Attach an HCTL to an opened mixer.

Parameters
mixerMixer handle
hctlthe HCTL to be attached
Returns
0 on success otherwise a negative error code

Upon error, this function closes the given hctl handle automatically.

◆ snd_mixer_class_copy()

void snd_mixer_class_copy ( snd_mixer_class_t * dst,
const snd_mixer_class_t * src )

copy one #snd_mixer_class_t to another

Parameters
dstpointer to destination
srcpointer to source

◆ snd_mixer_class_free()

void snd_mixer_class_free ( snd_mixer_class_t * obj)

frees a previously allocated #snd_mixer_class_t

Parameters
objpointer to object to free

◆ snd_mixer_class_get_compare()

snd_mixer_compare_t snd_mixer_class_get_compare ( const snd_mixer_class_t * obj)

Get mixer compare callback associated to given mixer class.

Parameters
objMixer simple class identifier
Returns
event callback pointer

◆ snd_mixer_class_get_event()

snd_mixer_event_t snd_mixer_class_get_event ( const snd_mixer_class_t * obj)

Get mixer event callback associated to given mixer class.

Parameters
objMixer simple class identifier
Returns
event callback pointer

◆ snd_mixer_class_get_mixer()

snd_mixer_t * snd_mixer_class_get_mixer ( const snd_mixer_class_t * obj)

Get a mixer associated to given mixer class.

Parameters
objMixer simple class identifier
Returns
mixer pointer

◆ snd_mixer_class_get_private()

void * snd_mixer_class_get_private ( const snd_mixer_class_t * obj)

Get mixer private data associated to given mixer class.

Parameters
objMixer simple class identifier
Returns
event callback pointer

◆ snd_mixer_class_malloc()

int snd_mixer_class_malloc ( snd_mixer_class_t ** ptr)

allocate an invalid #snd_mixer_class_t using standard malloc

Parameters
ptrreturned pointer
Returns
0 on success otherwise negative error code

◆ snd_mixer_class_register()

int snd_mixer_class_register ( snd_mixer_class_t * class,
snd_mixer_t * mixer )

Register mixer element class.

Parameters
classMixer element class
mixerMixer handle
Returns
0 on success otherwise a negative error code

For use by mixer element class specific code.

◆ snd_mixer_class_set_compare()

int snd_mixer_class_set_compare ( snd_mixer_class_t * obj,
snd_mixer_compare_t compare )

Set mixer compare callback to given mixer class.

Parameters
objMixer simple class identifier
comparethe compare callback to be used
Returns
zero if success, otherwise a negative error code

◆ snd_mixer_class_set_event()

int snd_mixer_class_set_event ( snd_mixer_class_t * obj,
snd_mixer_event_t event )

Set mixer event callback to given mixer class.

Parameters
objMixer simple class identifier
eventEvent callback
Returns
zero if success, otherwise a negative error code

◆ snd_mixer_class_set_private()

int snd_mixer_class_set_private ( snd_mixer_class_t * obj,
void * private_data )

Set mixer private data to given mixer class.

Parameters
objMixer simple class identifier
private_dataclass private data
Returns
zero if success, otherwise a negative error code

◆ snd_mixer_class_set_private_free()

int snd_mixer_class_set_private_free ( snd_mixer_class_t * obj,
void(* private_free )(snd_mixer_class_t *) )

Set mixer private data free callback to given mixer class.

Parameters
objMixer simple class identifier
private_freeMixer class private data free callback
Returns
zero if success, otherwise a negative error code

◆ snd_mixer_class_sizeof()

size_t snd_mixer_class_sizeof ( )

get size of #snd_mixer_class_t

Returns
size in bytes

◆ snd_mixer_class_unregister()

int snd_mixer_class_unregister ( snd_mixer_class_t * class)

Unregister mixer element class and remove all its elements.

Parameters
classMixer element class
Returns
0 on success otherwise a negative error code

Note that the class structure is also deallocated!

◆ snd_mixer_close()

int snd_mixer_close ( snd_mixer_t * mixer)

Close a mixer and free all related resources.

Parameters
mixerMixer handle
Returns
0 on success otherwise a negative error code

◆ snd_mixer_detach()

int snd_mixer_detach ( snd_mixer_t * mixer,
const char * name )

Detach a previously attached HCTL to an opened mixer freeing all related resources.

Parameters
mixerMixer handle
nameHCTL previously attached
Returns
0 on success otherwise a negative error code

◆ snd_mixer_detach_hctl()

int snd_mixer_detach_hctl ( snd_mixer_t * mixer,
snd_hctl_t * hctl )

Detach a previously attached HCTL to an opened mixer freeing all related resources.

Parameters
mixerMixer handle
hctlHCTL previously attached
Returns
0 on success otherwise a negative error code

Note: The hctl handle is not closed!

◆ snd_mixer_elem_add()

int snd_mixer_elem_add ( snd_mixer_elem_t * elem,
snd_mixer_class_t * class )

Add an element for a registered mixer element class.

Parameters
elemMixer element
classMixer element class
Returns
0 on success otherwise a negative error code

For use by mixer element class specific code.

◆ snd_mixer_elem_attach()

int snd_mixer_elem_attach ( snd_mixer_elem_t * melem,
snd_hctl_elem_t * helem )

Attach an HCTL element to a mixer element.

Parameters
melemMixer element
helemHCTL element
Returns
0 on success otherwise a negative error code

For use by mixer element class specific code.

The implementation of mixer class typically calls it at #SND_CTL_EVENT_MASK_ADD event. Once attaching, the implementation should make sure to detach it by call of snd_mixer_elem_detach() at #SND_CTL_EVENT_MASK_REMOVE event. Unless detaching, mixer API internal hits assertion due to unsatisfied postcondition after the event.

◆ snd_mixer_elem_detach()

int snd_mixer_elem_detach ( snd_mixer_elem_t * melem,
snd_hctl_elem_t * helem )

Detach an HCTL element from a mixer element.

Parameters
melemMixer element
helemHCTL element
Returns
0 on success otherwise a negative error code

For use by mixer element class specific code.

The implementation of mixer class typically calls it at #SND_CTL_EVENT_MASK_REMOVE event for attached mixer element at #SND_CTL_EVENT_MASK_ADD. Unless detaching, mixer API internal hits assertion due to unsatisfied postcondition after the event.

◆ snd_mixer_elem_empty()

int snd_mixer_elem_empty ( snd_mixer_elem_t * melem)

Return true if a mixer element does not contain any HCTL elements.

Parameters
melemMixer element
Returns
0 if not empty, 1 if empty

For use by mixer element class specific code.

◆ snd_mixer_elem_free()

void snd_mixer_elem_free ( snd_mixer_elem_t * elem)

Free a mixer element.

Parameters
elemMixer element

For use by mixer element class specific code.

◆ snd_mixer_elem_get_callback_private()

void * snd_mixer_elem_get_callback_private ( const snd_mixer_elem_t * mixer)

Get callback private value for a mixer element.

Parameters
mixermixer element
Returns
callback private value

◆ snd_mixer_elem_get_private()

void * snd_mixer_elem_get_private ( const snd_mixer_elem_t * elem)

Get private data associated to give mixer element.

Parameters
elemMixer element
Returns
private data

For use by mixer element class specific code.

◆ snd_mixer_elem_get_type()

snd_mixer_elem_type_t snd_mixer_elem_get_type ( const snd_mixer_elem_t * mixer)

Get type for a mixer element.

Parameters
mixermixer element
Returns
mixer element type

◆ snd_mixer_elem_info()

int snd_mixer_elem_info ( snd_mixer_elem_t * elem)

Mixer element informations are changed.

Parameters
elemMixer element
Returns
0 on success otherwise a negative error code

For use by mixer element class specific code.

◆ snd_mixer_elem_new()

int snd_mixer_elem_new ( snd_mixer_elem_t ** elem,
snd_mixer_elem_type_t type,
int compare_weight,
void * private_data,
void(* private_free )(snd_mixer_elem_t *elem) )

Allocate a new mixer element.

Parameters
elemReturned mixer element
typeMixer element type
compare_weightMixer element compare weight
private_dataPrivate data
private_freePrivate data free callback
Returns
0 on success otherwise a negative error code

For use by mixer element class specific code.

◆ snd_mixer_elem_next()

snd_mixer_elem_t * snd_mixer_elem_next ( snd_mixer_elem_t * elem)

get next mixer element

Parameters
elemmixer element
Returns
pointer to next element

◆ snd_mixer_elem_prev()

snd_mixer_elem_t * snd_mixer_elem_prev ( snd_mixer_elem_t * elem)

get previous mixer element

Parameters
elemmixer element
Returns
pointer to previous element

◆ snd_mixer_elem_remove()

int snd_mixer_elem_remove ( snd_mixer_elem_t * elem)

Remove a mixer element.

Parameters
elemMixer element
Returns
0 on success otherwise a negative error code

For use by mixer element class specific code.

◆ snd_mixer_elem_set_callback()

void snd_mixer_elem_set_callback ( snd_mixer_elem_t * mixer,
snd_mixer_elem_callback_t val )

Set callback function for a mixer element.

Parameters
mixermixer element
valcallback function

◆ snd_mixer_elem_set_callback_private()

void snd_mixer_elem_set_callback_private ( snd_mixer_elem_t * mixer,
void * val )

Set callback private value for a mixer element.

Parameters
mixermixer element
valcallback private value

◆ snd_mixer_elem_value()

int snd_mixer_elem_value ( snd_mixer_elem_t * elem)

Mixer element values is changed.

Parameters
elemMixer element
Returns
0 on success otherwise a negative error code

For use by mixer element class specific code.

◆ snd_mixer_first_elem()

snd_mixer_elem_t * snd_mixer_first_elem ( snd_mixer_t * mixer)

get first element for a mixer

Parameters
mixerMixer handle
Returns
pointer to first element

◆ snd_mixer_free()

void snd_mixer_free ( snd_mixer_t * mixer)

Unload all mixer elements and free all related resources.

Parameters
mixerMixer handle

◆ snd_mixer_get_callback_private()

void * snd_mixer_get_callback_private ( const snd_mixer_t * mixer)

Get callback private value for a mixer.

Parameters
mixermixer handle
Returns
callback private value

◆ snd_mixer_get_count()

unsigned int snd_mixer_get_count ( const snd_mixer_t * mixer)

Get elements count for a mixer.

Parameters
mixermixer handle
Returns
elements count

◆ snd_mixer_get_hctl()

int snd_mixer_get_hctl ( snd_mixer_t * mixer,
const char * name,
snd_hctl_t ** hctl )

Obtain a HCTL pointer associated to given name.

Parameters
mixerMixer handle
nameHCTL previously attached
hctlHCTL pointer
Returns
0 on success otherwise a negative error code

◆ snd_mixer_handle_events()

int snd_mixer_handle_events ( snd_mixer_t * mixer)

Handle pending mixer events invoking callbacks.

Parameters
mixerMixer handle
Returns
Number of events that occured on success, otherwise a negative error code on failure

◆ snd_mixer_last_elem()

snd_mixer_elem_t * snd_mixer_last_elem ( snd_mixer_t * mixer)

get last element for a mixer

Parameters
mixerMixer handle
Returns
pointer to last element

◆ snd_mixer_load()

int snd_mixer_load ( snd_mixer_t * mixer)

Load a mixer elements.

Parameters
mixerMixer handle
Returns
0 on success otherwise a negative error code

◆ snd_mixer_open()

int snd_mixer_open ( snd_mixer_t ** mixerp,
int mode )

Opens an empty mixer.

Parameters
mixerpReturned mixer handle
modeOpen mode
Returns
0 on success otherwise a negative error code

◆ snd_mixer_poll_descriptors()

int snd_mixer_poll_descriptors ( snd_mixer_t * mixer,
struct pollfd * pfds,
unsigned int space )

get poll descriptors

Parameters
mixerMixer handle
pfdsarray of poll descriptors
spacespace in the poll descriptor array
Returns
count of filled descriptors

◆ snd_mixer_poll_descriptors_count()

int snd_mixer_poll_descriptors_count ( snd_mixer_t * mixer)

get count of poll descriptors for mixer handle

Parameters
mixerMixer handle
Returns
count of poll descriptors

◆ snd_mixer_poll_descriptors_revents()

int snd_mixer_poll_descriptors_revents ( snd_mixer_t * mixer,
struct pollfd * pfds,
unsigned int nfds,
unsigned short * revents )

get returned events from poll descriptors

Parameters
mixerMixer handle
pfdsarray of poll descriptors
nfdscount of poll descriptors
reventsreturned events
Returns
zero if success, otherwise a negative error code

◆ snd_mixer_set_callback()

void snd_mixer_set_callback ( snd_mixer_t * obj,
snd_mixer_callback_t val )

Set callback function for a mixer.

Parameters
objmixer handle
valcallback function

◆ snd_mixer_set_callback_private()

void snd_mixer_set_callback_private ( snd_mixer_t * mixer,
void * val )

Set callback private value for a mixer.

Parameters
mixermixer handle
valcallback private value

◆ snd_mixer_set_compare()

int snd_mixer_set_compare ( snd_mixer_t * mixer,
snd_mixer_compare_t compare )

Change mixer compare function and reorder elements.

Parameters
mixerMixer handle
compareElement compare function
Returns
0 on success otherwise a negative error code

◆ snd_mixer_wait()

int snd_mixer_wait ( snd_mixer_t * mixer,
int timeout )

Wait for a mixer to become ready (i.e. at least one event pending)

Parameters
mixerMixer handle
timeoutmaximum time in milliseconds to wait
Returns
0 otherwise a negative error code on failure