[pulseaudio-discuss] [alsa-devel] PulseAudio and softvol

Takashi Iwai tiwai at suse.de
Wed May 15 05:44:39 PDT 2013


At Wed, 15 May 2013 13:33:01 +0200,
David Henningsson wrote:
> 
> On 05/15/2013 01:22 PM, Jaroslav Kysela wrote:
> > Date 15.5.2013 13:03, David Henningsson wrote:
> >> On 05/15/2013 12:53 PM, Jaroslav Kysela wrote:
> >>> Date 15.5.2013 12:48, Takashi Iwai wrote:
> >>>> At Wed, 15 May 2013 12:26:51 +0200,
> >>>> Jaroslav Kysela wrote:
> >>>>>
> >>>>> Date 15.5.2013 11:55, Arun Raghavan wrote:
> >>>>>> Hello,
> >>>>>> A number of users have intermittently(?) been hitting a crash in
> >>>>>> alsa-lib 1.0.27 [1, 2] related to the softvol plugin. I'm not able to
> >>>>>> reproduce this reliably, so can't find an easy way to debug/fix.
> >>>>>
> >>>>> The problem is that the offsets are not in sync in this case [1]:
> >>>>>
> >>>>> src_offset = 38560
> >>>>> dst_offset = 38568
> >>>>> frames = 16374
> >>>>>
> >>>>> Could you reproduce this bug in any way? At least snd_pcm_dump() before
> >>>>> the failing snd_pcm_mmap_commit() call might help to determine what was
> >>>>> the status before the assert() was entered.
> >>>>
> >>>> Yep.  And this path is actually with volume 0dB, that is, a simply
> >>>> passthrough in softvol.  Thus the bug may hit essentially any
> >>>> plugins, not specifically softvol.
> >>>>
> >>>>
> >>>>>> However, this raises a tangential question - why do we need softvol to
> >>>>>> be plugged for 'front' at all? David explained to me that this is to
> >>>>>> guarantee the existence of a PCM control. Perhaps I don't fully
> >>>>>> understand this, because I'm unconvinced by the reason. Could someone
> >>>>>> explain/refute?
> >>>>>>
> >>>>>> This is especially bad for us, from PulseAudio's perspective, because we
> >>>>>> aren't getting a zero-copy path.
> >>>>>
> >>>>> If the softvol is set to 0dB (no attenuation or gain), then the ring
> >>>>> buffer pointers are moved without any sample processing, so the
> >>>>> zero-copy functionality is kept.
> >>>>
> >>>> Yeah, a sort of.  The mmap is cleared in the slave PCM, so actually
> >>>> there will be copy operations in underlying layers even though softvol
> >>>> itself does zero copy.
> >>>>
> >>>> Actually it makes no sense to keep softvol for PA, but the problem is
> >>>> always the regression.  There are certainly users without PA, which
> >>>> might still rely on the softvol for such hardware without the amp
> >>>> control.
> >>>>
> >>>> Maybe We can add some flag to indicate whether to handle softvol or
> >>>> not, e.g. defaults.pcm.skip_softvol, and let PA set this in its config
> >>>> space.  Setting a config item itself would break anything, so it'll
> >>>> still work with old alsa-lib (but with softvol).
> >>>
> >>> We have already SND_PCM_NO_SOFTVOL open mode for this purpose, so I
> >>> wonder, why PA does not use it..
> >>
> >> The problem is knowing whether PCM is a softvol or not. In some cases,
> >> we need to set PCM to control hardware volume.
> >>
> >> Maybe, if we could figure this out somehow, we could ignore the PCM
> >> mixer control (or possibly set it to zero) in case PCM is a softvol,
> >> and actually use it if PCM is not a softvol.
> >>
> >> It does not look like this is currently possible from the simple mixer
> >> interface, but I might be missing something?
> >
> > It is not possible. Perhaps, we may create a new dummy mixer control (in
> > an inactive state) which will identify the presence of the softvol
> > plugin, like:
> >
> > "Softvol PCM Playback Volume" - full name for the raw control API
> > "Softvol PCM" - simple mixer name
> 
> Or perhaps add a SND_CTL_NO_SOFTVOL flag that can be used in the call to 
> snd_mixer_open / snd_ctl_open? That would make it somewhat consistent 
> with the approach recommended for snd_pcm_open.

It'd be rather a flag to exclude the user controls, not specific to
softvol.  But, the problem is that snd_mixer_attach() takes no extra
flag argument.  So, we may need to add a new function, either defining
only the attach mode, or an equivalent function with
snd_mixer_attach() but with an extra flag argument.


Takashi


More information about the pulseaudio-discuss mailing list