aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Wischer <twischer@de.adit-jv.com>2018-07-03 15:59:21 +0200
committerTakashi Iwai <tiwai@suse.de>2018-07-03 16:36:34 +0200
commit2972f2f9662aaf050addf6254363164ef8bf676e (patch)
treee4c372984784731be12bfaee03b1f2142a8d13b2
parent9bb985c382bab8c3bf83c0d23f50195288d3cf9f (diff)
pcm: ioplug: Provide avail helper function for plugins
This function can be called without calling snd_pcm_avail_update(). The call to snd_pcm_avail_update() can take some time. Therefore some developers would not like to call it from a real-time context (e.g. from JACK client context). Signed-off-by: Timo Wischer <twischer@de.adit-jv.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--include/pcm_ioplug.h3
-rw-r--r--src/pcm/pcm_ioplug.c20
2 files changed, 21 insertions, 2 deletions
diff --git a/include/pcm_ioplug.h b/include/pcm_ioplug.h
index c1310e3b..b16fc8b8 100644
--- a/include/pcm_ioplug.h
+++ b/include/pcm_ioplug.h
@@ -235,6 +235,9 @@ int snd_pcm_ioplug_set_param_list(snd_pcm_ioplug_t *io, int type, unsigned int n
int snd_pcm_ioplug_set_state(snd_pcm_ioplug_t *ioplug, snd_pcm_state_t state);
/* calucalte the available frames */
+snd_pcm_uframes_t snd_pcm_ioplug_avail(const snd_pcm_ioplug_t * const ioplug,
+ const snd_pcm_uframes_t hw_ptr,
+ const snd_pcm_uframes_t appl_ptr);
snd_pcm_uframes_t snd_pcm_ioplug_hw_avail(const snd_pcm_ioplug_t * const ioplug,
const snd_pcm_uframes_t hw_ptr,
const snd_pcm_uframes_t appl_ptr);
diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c
index 4d44ae22..6d52c27b 100644
--- a/src/pcm/pcm_ioplug.c
+++ b/src/pcm/pcm_ioplug.c
@@ -1221,6 +1221,21 @@ int snd_pcm_ioplug_set_state(snd_pcm_ioplug_t *ioplug, snd_pcm_state_t state)
* \param ioplug the ioplug handle
* \param hw_ptr hardware pointer in frames
* \param appl_ptr application pointer in frames
+ * \return available frames for the application
+ */
+snd_pcm_uframes_t snd_pcm_ioplug_avail(const snd_pcm_ioplug_t * const ioplug,
+ const snd_pcm_uframes_t hw_ptr,
+ const snd_pcm_uframes_t appl_ptr)
+{
+ return __snd_pcm_avail(ioplug->pcm, hw_ptr, appl_ptr);
+}
+
+/**
+ * \brief Get the available frames. This function can be used to calculate the
+ * the available frames before calling #snd_pcm_avail_update()
+ * \param ioplug the ioplug handle
+ * \param hw_ptr hardware pointer in frames
+ * \param appl_ptr application pointer in frames
* \return available frames for the hardware
*/
snd_pcm_uframes_t snd_pcm_ioplug_hw_avail(const snd_pcm_ioplug_t * const ioplug,
@@ -1230,8 +1245,9 @@ snd_pcm_uframes_t snd_pcm_ioplug_hw_avail(const snd_pcm_ioplug_t * const ioplug,
/* available data/space which can be transferred by the user
* application
*/
- const snd_pcm_uframes_t user_avail = __snd_pcm_avail(ioplug->pcm,
- hw_ptr, appl_ptr);
+ const snd_pcm_uframes_t user_avail = snd_pcm_ioplug_avail(ioplug,
+ hw_ptr,
+ appl_ptr);
if (user_avail > ioplug->pcm->buffer_size) {
/* there was an Xrun */