[PATCH] Allow ioplugins to override snd_pcm_delay()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux