]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: ioplug: Provide avail helper function for plugins
authorTimo Wischer <twischer@de.adit-jv.com>
Tue, 3 Jul 2018 13:59:21 +0000 (15:59 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 3 Jul 2018 14:36:34 +0000 (16:36 +0200)
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>
include/pcm_ioplug.h
src/pcm/pcm_ioplug.c

index c1310e3b968dcf1cc49ab633ca161ce128ab964a..b16fc8b80f865e847eb8c4f586c460ca03c20c21 100644 (file)
@@ -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);
index 4d44ae22e20d4ddb7a789fe72405576e027ad97a..6d52c27b2f9f305b839cb090f8864d88801d8daa 100644 (file)
@@ -1215,6 +1215,21 @@ int snd_pcm_ioplug_set_state(snd_pcm_ioplug_t *ioplug, snd_pcm_state_t state)
        return 0;
 }
 
+/**
+ * \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 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()
@@ -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 */