diff mbox series

pcm: null: Do not allow a period size of 0

Message ID 1554473393-5757-1-git-send-email-twischer@de.adit-jv.com (mailing list archive)
State New, archived
Headers show
Series pcm: null: Do not allow a period size of 0 | expand

Commit Message

Timo Wischer April 5, 2019, 2:09 p.m. UTC
From: Timo Wischer <twischer@de.adit-jv.com>

Some applications do not expect that get_period_size_min() could
return 0. Therefore these applications cannot use the null plugin without
this patch.
Due to there is no use case for having a period size of 0 this patch
disallows a period size of 0 when using the null plugin.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
---
 src/pcm/pcm_null.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

Comments

Takashi Iwai April 5, 2019, 3:23 p.m. UTC | #1
On Fri, 05 Apr 2019 16:09:53 +0200,
<twischer@de.adit-jv.com> wrote:
> 
> From: Timo Wischer <twischer@de.adit-jv.com>
> 
> Some applications do not expect that get_period_size_min() could
> return 0. Therefore these applications cannot use the null plugin without
> this patch.
> Due to there is no use case for having a period size of 0 this patch
> disallows a period size of 0 when using the null plugin.
> 
> Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
> ---
>  src/pcm/pcm_null.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/src/pcm/pcm_null.c b/src/pcm/pcm_null.c
> index ff61624..c95fad8 100644
> --- a/src/pcm/pcm_null.c
> +++ b/src/pcm/pcm_null.c
> @@ -261,7 +261,18 @@ static snd_pcm_sframes_t snd_pcm_null_mmap_commit(snd_pcm_t *pcm,
>  
>  static int snd_pcm_null_hw_refine(snd_pcm_t *pcm ATTRIBUTE_UNUSED, snd_pcm_hw_params_t *params)
>  {
> -	int err = snd_pcm_hw_refine_soft(pcm, params);
> +	int err;
> +
> +	/* Do not return a period size of 0 because for example portaudio cannot
> +	 * handle it. In addition such small buffers would only increase the CPU
> +	 * load but there is no benefit when throwing the samples anyway away.
> +	 */
> +	err = _snd_pcm_hw_param_set_min(params, SND_PCM_HW_PARAM_PERIOD_SIZE,
> +					32, 0);

Why 32?  This is a virtual device, hence we don't need to set any
practical limit.  If the zero is harmfull, the next preferable
alternative is 1, when logically thinking.  Or does it cause a
problem?


thanks,

Takashi
diff mbox series

Patch

diff --git a/src/pcm/pcm_null.c b/src/pcm/pcm_null.c
index ff61624..c95fad8 100644
--- a/src/pcm/pcm_null.c
+++ b/src/pcm/pcm_null.c
@@ -261,7 +261,18 @@  static snd_pcm_sframes_t snd_pcm_null_mmap_commit(snd_pcm_t *pcm,
 
 static int snd_pcm_null_hw_refine(snd_pcm_t *pcm ATTRIBUTE_UNUSED, snd_pcm_hw_params_t *params)
 {
-	int err = snd_pcm_hw_refine_soft(pcm, params);
+	int err;
+
+	/* Do not return a period size of 0 because for example portaudio cannot
+	 * handle it. In addition such small buffers would only increase the CPU
+	 * load but there is no benefit when throwing the samples anyway away.
+	 */
+	err = _snd_pcm_hw_param_set_min(params, SND_PCM_HW_PARAM_PERIOD_SIZE,
+					32, 0);
+	if (err < 0)
+		return err;
+
+	err = snd_pcm_hw_refine_soft(pcm, params);
 	params->info = SND_PCM_INFO_MMAP | SND_PCM_INFO_MMAP_VALID |
 		       SND_PCM_INFO_RESUME | SND_PCM_INFO_PAUSE;
 	params->fifo_size = 0;