Functionality of pcm_notify in snd-aloop?

Takashi Iwai tiwai at suse.de
Tue Apr 28 17:44:26 CEST 2020


On Mon, 30 Mar 2020 17:09:58 +0200,
Jaroslav Kysela wrote:
> 
> Dne 30. 03. 20 v 16:43 Pavel Hofman napsal(a):
> >
> > Dne 26. 03. 20 v 18:59 Pavel Hofman napsal(a):
> >> Dne 26. 03. 20 v 18:44 Jaroslav Kysela napsal(a):
> >>> Dne 26. 03. 20 v 18:19 Pavel Hofman napsal(a):
> >>>> Hi,
> >>>>
> >>>> Please how is the module params pcm_notify supposed to be used, to do
> >>>> what the documentation says: Break capture when PCM format/rate/channels
> >>>> changes?
> >>>>
> >>>> Breaking capture side operation when the playback side changes the
> >>>> params is very useful, but I cannot find a way to use this param
> >>>> properly. When the capture side is open, the playback side cannot use a
> >>>> different parameter than the one currently used by the capture side (the
> >>>> configuration space is limited)
> >>>
> >>> Really? Then it's a bug introduced by the last changes.
> >>>
> >>> If you look to sources:
> >>>
> >>>        if (get_notify(dpcm))
> >>>                  runtime->hw = loopback_pcm_hardware;
> >>>          else
> >>>                  runtime->hw = cable->hw;
> >>>
> >>> And:
> >>>
> >>>        if (!(cable->valid & ~(1 << substream->stream)) ||
> >>>              (get_setup(dpcm)->notify &&
> >>>               substream->stream == SNDRV_PCM_STREAM_PLAYBACK))
> >>>                  params_change(substream);
> >>>
> >>> So the functionality should be there.
> >>
> >> I am using older kernels (4.15 and 3.16), but this is an old functionality.
> >>
> >> modprobe snd-aloop pcm_substreams=1 pcm_notify=1,1
> >>
> >
> > Please is there any way to solve this issue? Thanks a lot for your patience.
> 
> I can reproduce this. It appears that the driver should be fixed, but
> I don't have a solution at the moment.
> 
> It seems that 898dfe4687f460ba337a01c11549f87269a13fa2 from Takashi
> broke this functionality (tied the cable parameters more strictly, so
> the playback cannot set freely own parameters for the pcm_notify=1
> case). We need to find another way to detach capture stream in this
> case.

I believe the missing piece here is a generic way to tell user-space
that the stream got invalidated.  This would be useful not only for
aloop but can be applied in general when a stream becomes temporarily
unavailable (e.g. the HDMI monitor disconnected or the DSP route
switched).

Currently we may return -EPIPE for xrun, but this doesn't really tell
the situation correctly.  The xrun should be recoverable by simple
PREPARE call, but the case like aloop would need the complete re-setup
or reopen of the stream.


thanks,

Takashi


More information about the Alsa-devel mailing list