[pulseaudio-discuss] [PATCH] alsa-util: No logging when sound card only supports non-interleaved sample format
Peter Meerwald
pmeerw at pmeerw.net
Sun Nov 16 04:30:59 PST 2014
> > as suggested by
> > https://bugs.freedesktop.org/show_bug.cgi?id=84804
> >
> > Signed-off-by: Peter Meerwald <pmeerw at pmeerw.net>
> > ---
> > src/modules/alsa/alsa-util.c | 15 +++++++++++++++
> > 1 file changed, 15 insertions(+)
> >
> > diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
> > index 4131cff..e382d4f 100644
> > --- a/src/modules/alsa/alsa-util.c
> > +++ b/src/modules/alsa/alsa-util.c
> > @@ -183,6 +183,19 @@ static int set_buffer_size(snd_pcm_t *pcm_handle,
> snd_pcm_hw_params_t *hwparams,
> > return 0;
> > }
> >
> > +static void check_access(snd_pcm_t *pcm_handle, snd_pcm_hw_params_t
> *hwparams, bool use_mmap) {
> > + if ((use_mmap && !snd_pcm_hw_params_test_access(pcm_handle,
> hwparams, SND_PCM_ACCESS_MMAP_INTERLEAVED)) ||
> > + !snd_pcm_hw_params_test_access(pcm_handle, hwparams,
> SND_PCM_ACCESS_RW_INTERLEAVED))
> > + pa_log_error("Weird, PCM claims to support interleaved access,
> but snd_pcm_hw_params_set_access() failed.");
>
> HW Params of device "hw:0,0":
> --------------------
> ACCESS: MMAP_NONINTERLEAVED RW_NONINTERLEAVED
> FORMAT: S32_LE
> SUBFORMAT: STD
> SAMPLE_BITS: 32
> FRAME_BITS: [448 832]
> CHANNELS: [14 26]
> RATE: [32000 96000]
> PERIOD_TIME: (666 256000]
> PERIOD_SIZE: [64 8192]
> PERIOD_BYTES: [3584 851968]
> PERIODS: 2
> BUFFER_TIME: (1333 512000]
> BUFFER_SIZE: [128 16384]
> BUFFER_BYTES: [7168 1703936]
> TICK_TIME: ALL
>
> if use of test_access is to prevent set_access corrupt the configuration
> space of hw_param when access is not supported,
I am not sure if I understand your comment correctly
the idea of the patch is to improve the logging in case _INTERLEAVED is
not supported (but NONINTERLEAVED is)
I don't want to change the current behaviour in the normal case, hence
check_access() is called after trying to set the access method
what do you means with corruption of config space?
regards, p.
>
> if (snd_pcm_hw_params_test_access(pcm_handle, hwparams,
> SND_PCM_ACCESS_MMAP_INTERLEAVED) == 0) {
> ret = snd_pcm_hw_params_set_access(pcm_handle, hwparams,
> SND_PCM_ACCESS_MMAP_INTERLEAVED);
> pa_log_error("snd_pcm_hw_params_set_access() failed: %s",
> pa_alsa_strerror(ret));
> goto finish;
> }
>
> else if (snd_pcm_hw_params_test_access(pcm_handle, hwparams,
> SND_PCM_ACCESS_RW_INTERLEAVED) == 0) {
> ret = snd_pcm_hw_params_set_access(pcm_handle, hwparams,
> SND_PCM_ACCESS_RW_INTERLEAVED);
> pa_log_error("snd_pcm_hw_params_set_access() failed: %s",
> pa_alsa_strerror(ret));
> goto finish;
> }
> else {
> pa_log_error("Pulseaudio does not support non interleaved access nor
> complex access. ");
> goto finish;
> }
>
> > +
> > + if ((use_mmap && !snd_pcm_hw_params_test_access(pcm_handle,
> hwparams, SND_PCM_ACCESS_MMAP_NONINTERLEAVED)) ||
> > + !snd_pcm_hw_params_test_access(pcm_handle, hwparams,
> SND_PCM_ACCESS_RW_NONINTERLEAVED))
> > + pa_log_error("PCM seems to support non-interleaved access, but
> PA doesn't.");
> > + else if (use_mmap && !snd_pcm_hw_params_test_access(pcm_handle,
> hwparams, SND_PCM_ACCESS_MMAP_COMPLEX)) {
> > + pa_log_error("PCM seems to support mmapped complex access, but
> PA doesn't.");
> > + }
> > +}
> > +
> > /* Set the hardware parameters of the given ALSA device. Returns the
> > * selected fragment settings in *buffer_size and *period_size. Determine
> > * whether mmap and tsched mode can be enabled. */
> > @@ -229,6 +242,7 @@ int pa_alsa_set_hw_params(
> >
> > if ((ret = snd_pcm_hw_params_set_access(pcm_handle,
> hwparams, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
> > pa_log_debug("snd_pcm_hw_params_set_access() failed:
> %s", pa_alsa_strerror(ret));
> > + check_access(pcm_handle, hwparams, true);
> > goto finish;
> > }
> >
> > @@ -237,6 +251,7 @@ int pa_alsa_set_hw_params(
> >
> > } else if ((ret = snd_pcm_hw_params_set_access(pcm_handle, hwparams,
> SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
> > pa_log_debug("snd_pcm_hw_params_set_access() failed: %s",
> pa_alsa_strerror(ret));
> > + check_access(pcm_handle, hwparams, false);
> > goto finish;
> > }
> >
>
--
Peter Meerwald
+43-664-2444418 (mobile)
More information about the pulseaudio-discuss
mailing list