mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-05 13:30:00 -05:00
pcm: add mmap_begin callback to snd_pcm_fast_ops_t api
main motivation for adding the callback is to use it to enable operation on mmaped buffer before user access for pcm_file plugin support for MMAP read access with masking by data from input file is not implemented for pcm_file plugin, by adding this callback implementing such feature can be done by rewriting next continuous portion of buffer on each mmap_begin call plugins like softvol use pcm_plugin interface and overwrite the buffer by looping around it in avail_update callback, this patch hopes to simplify the task by adding new api callback, removing the need for rewriting pcm_file (to use pcm_plugin callbacks) and careful checking when looping around whole mmaped buffer Signed-off-by: Adam Miartus <amiartus@de.adit-jv.com> Reviewed-by: Timo Wischer <twischer@de.adit-jv.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
108a2f4379
commit
e520f45480
2 changed files with 7 additions and 0 deletions
|
|
@ -7129,7 +7129,13 @@ int __snd_pcm_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas,
|
|||
snd_pcm_uframes_t f;
|
||||
snd_pcm_uframes_t avail;
|
||||
const snd_pcm_channel_area_t *xareas;
|
||||
|
||||
assert(pcm && areas && offset && frames);
|
||||
|
||||
if (pcm->fast_ops->mmap_begin)
|
||||
return pcm->fast_ops->mmap_begin(pcm->fast_op_arg, areas, offset, frames);
|
||||
|
||||
/* fallback for plugins that do not specify new callback */
|
||||
xareas = snd_pcm_mmap_areas(pcm);
|
||||
if (xareas == NULL)
|
||||
return -EBADFD;
|
||||
|
|
|
|||
|
|
@ -184,6 +184,7 @@ typedef struct {
|
|||
int (*poll_descriptors)(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space); /* locked */
|
||||
int (*poll_revents)(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents); /* locked */
|
||||
int (*may_wait_for_avail_min)(snd_pcm_t *pcm, snd_pcm_uframes_t avail);
|
||||
int (*mmap_begin)(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas, snd_pcm_uframes_t *offset, snd_pcm_uframes_t *frames); /* locked */
|
||||
} snd_pcm_fast_ops_t;
|
||||
|
||||
struct _snd_pcm {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue