Some io plug-ins might want to adjust the reported delay value and not strictly follow the current buffer usage (that's why we have two calls after all). Allow them to specify a delay() callback and use the previous behaviour if they don't. Signed-off-by: Pierre Ossman <ossman@xxxxxxxxx>
Index: src/pcm/pcm_ioplug.c =================================================================== RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_ioplug.c,v retrieving revision 1.10 diff -u -r1.10 pcm_ioplug.c --- src/pcm/pcm_ioplug.c 28 Jun 2005 10:24:45 -0000 1.10 +++ src/pcm/pcm_ioplug.c 26 May 2006 13:59:14 -0000 @@ -106,8 +106,15 @@ static int snd_pcm_ioplug_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) { - snd_pcm_ioplug_hw_ptr_update(pcm); - *delayp = snd_pcm_mmap_hw_avail(pcm); + ioplug_priv_t *io = pcm->private_data; + + if ((io->data->version >= 0x010001) && + (io->data->callback->delay)) + return io->data->callback->delay(io->data, delayp); + else { + snd_pcm_ioplug_hw_ptr_update(pcm); + *delayp = snd_pcm_mmap_hw_avail(pcm); + } return 0; } @@ -872,7 +879,9 @@ ioplug->callback->stop && ioplug->callback->pointer); - if (ioplug->version != SND_PCM_IOPLUG_VERSION) { + /* We support 1.0.0 to current */ + if ((ioplug->version < 0x010000) || + (ioplug->version > SND_PCM_IOPLUG_VERSION)) { SNDERR("ioplug: Plugin version mismatch\n"); return -ENXIO; } Index: include/pcm_ioplug.h =================================================================== RCS file: /cvsroot/alsa/alsa-lib/include/pcm_ioplug.h,v retrieving revision 1.5 diff -u -r1.5 pcm_ioplug.h --- include/pcm_ioplug.h 24 May 2005 09:42:01 -0000 1.5 +++ include/pcm_ioplug.h 26 May 2006 13:59:14 -0000 @@ -65,7 +65,7 @@ */ #define SND_PCM_IOPLUG_VERSION_MAJOR 1 /**< Protocol major version */ #define SND_PCM_IOPLUG_VERSION_MINOR 0 /**< Protocol minor version */ -#define SND_PCM_IOPLUG_VERSION_TINY 0 /**< Protocol tiny version */ +#define SND_PCM_IOPLUG_VERSION_TINY 1 /**< Protocol tiny version */ /** * IO-plugin protocol version */ @@ -184,6 +184,10 @@ * dump; optional */ void (*dump)(snd_pcm_ioplug_t *io, snd_output_t *out); + /** + * get the delay for the running PCM; optional + */ + int (*delay)(snd_pcm_ioplug_t *io, snd_pcm_sframes_t *delayp); };
Attachment:
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/alsa-devel