[alsa-devel] [alsa-lib][RFC][PATCH 9/9] pcm: code refactoring to use helper functions
Takashi Sakamoto
o-takashi at sakamocchi.jp
Thu Jun 22 16:43:34 CEST 2017
In former commits, some helper functions were added. This commit applies
refactoring to use them.
Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>
---
src/pcm/pcm_hw.c | 64 +++++++++++++++++++++++++-------------------------------
1 file changed, 28 insertions(+), 36 deletions(-)
diff --git a/src/pcm/pcm_hw.c b/src/pcm/pcm_hw.c
index 2d68fe12..4759b5bb 100644
--- a/src/pcm/pcm_hw.c
+++ b/src/pcm/pcm_hw.c
@@ -132,13 +132,11 @@ struct timespec snd_pcm_hw_fast_tstamp(snd_pcm_t *pcm)
}
#endif /* DOC_HIDDEN */
-static int sync_ptr1(snd_pcm_hw_t *hw, struct snd_pcm_sync_ptr *ptr,
- unsigned int flags)
+static int do_sync_ptr(snd_pcm_hw_t *hw, struct snd_pcm_sync_ptr *sync_ptr)
{
int err;
- ptr->flags = flags;
- if (ioctl(hw->fd, SNDRV_PCM_IOCTL_SYNC_PTR, ptr) < 0) {
+ if (ioctl(hw->fd, SNDRV_PCM_IOCTL_SYNC_PTR, sync_ptr) < 0) {
err = -errno;
SYSMSG("SNDRV_PCM_IOCTL_SYNC_PTR failed (%i)", err);
return err;
@@ -147,26 +145,23 @@ static int sync_ptr1(snd_pcm_hw_t *hw, struct snd_pcm_sync_ptr *ptr,
return 0;
}
-static inline int sync_ptr(snd_pcm_hw_t *hw, unsigned int flags)
+static int issue_applptr(snd_pcm_hw_t *hw)
{
- return hw->sync_ptr ? sync_ptr1(hw, hw->sync_ptr, flags) : 0;
-}
+ struct snd_pcm_sync_ptr *sync_ptr, buf = {0};
-/* explicit notification of appl_ptr update to kernel */
-static int sync_applptr(snd_pcm_hw_t *hw)
-{
- struct snd_pcm_sync_ptr ptr;
- ptr.c.control = *hw->mmap_control;
- return sync_ptr1(hw, &ptr, 0);
-}
+ if (!hw->mmap_control_fallbacked) {
+ if (!hw->sync_applptr)
+ return 0;
-static int issue_applptr(snd_pcm_hw_t *hw)
-{
- if (!hw->mmap_control_fallbacked)
- return 0;
- return sync_ptr1(hw, hw->sync_ptr,
- SNDRV_PCM_SYNC_PTR_AVAIL_MIN);
+ buf.c.control = *hw->mmap_control;
+ sync_ptr = &buf;
+ } else {
+ sync_ptr = hw->sync_ptr;
+ }
+
+ sync_ptr->flags = SNDRV_PCM_SYNC_PTR_AVAIL_MIN;
+ return do_sync_ptr(hw, sync_ptr);
}
static int issue_availmin(snd_pcm_hw_t *hw)
@@ -174,8 +169,8 @@ static int issue_availmin(snd_pcm_hw_t *hw)
if (!hw->mmap_control_fallbacked)
return 0;
- return sync_ptr1(hw, hw->sync_ptr,
- SNDRV_PCM_SYNC_PTR_APPL);
+ hw->sync_ptr->flags = SNDRV_PCM_SYNC_PTR_APPL;
+ return do_sync_ptr(hw, hw->sync_ptr);
}
static int query_applptr(snd_pcm_hw_t *hw)
@@ -183,9 +178,9 @@ static int query_applptr(snd_pcm_hw_t *hw)
if (!hw->mmap_control_fallbacked)
return 0;
- return sync_ptr1(hw, hw->sync_ptr,
- SNDRV_PCM_SYNC_PTR_APPL |
- SNDRV_PCM_SYNC_PTR_AVAIL_MIN);
+ hw->sync_ptr->flags = SNDRV_PCM_SYNC_PTR_APPL |
+ SNDRV_PCM_SYNC_PTR_AVAIL_MIN;
+ return do_sync_ptr(hw, hw->sync_ptr);
}
static int query_hwptr(snd_pcm_hw_t *hw)
@@ -193,10 +188,10 @@ static int query_hwptr(snd_pcm_hw_t *hw)
if (!hw->mmap_status_fallbacked)
return 0;
- return sync_ptr1(hw, hw->sync_ptr,
- SNDRV_PCM_SYNC_PTR_HWSYNC |
- SNDRV_PCM_SYNC_PTR_APPL |
- SNDRV_PCM_SYNC_PTR_AVAIL_MIN);
+ hw->sync_ptr->flags = SNDRV_PCM_SYNC_PTR_HWSYNC |
+ SNDRV_PCM_SYNC_PTR_APPL |
+ SNDRV_PCM_SYNC_PTR_AVAIL_MIN;
+ return do_sync_ptr(hw, hw->sync_ptr);
}
static int query_status(snd_pcm_hw_t *hw)
@@ -204,9 +199,9 @@ static int query_status(snd_pcm_hw_t *hw)
if (!hw->mmap_status_fallbacked)
return 0;
- return sync_ptr1(hw, hw->sync_ptr,
- SNDRV_PCM_SYNC_PTR_APPL |
- SNDRV_PCM_SYNC_PTR_AVAIL_MIN);
+ hw->sync_ptr->flags = SNDRV_PCM_SYNC_PTR_APPL |
+ SNDRV_PCM_SYNC_PTR_AVAIL_MIN;
+ return do_sync_ptr(hw, hw->sync_ptr);
}
static int snd_pcm_hw_clear_timer_queue(snd_pcm_hw_t *hw)
@@ -1113,10 +1108,7 @@ static snd_pcm_sframes_t snd_pcm_hw_mmap_commit(snd_pcm_t *pcm,
snd_pcm_hw_t *hw = pcm->private_data;
snd_pcm_mmap_appl_forward(pcm, size);
- if (hw->sync_ptr)
- sync_ptr(hw, 0);
- else if (hw->sync_applptr)
- sync_applptr(hw);
+ issue_applptr(hw);
#ifdef DEBUG_MMAP
fprintf(stderr, "appl_forward: hw_ptr = %li, appl_ptr = %li, size = %li\n", *pcm->hw.ptr, *pcm->appl.ptr, size);
#endif
--
2.11.0
More information about the Alsa-devel
mailing list