Re: Correct stopping capture and playback substreams?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Dne 23. 12. 21 v 9:18 Pavel Hofman napsal(a):
Hi Takashi,

I am working on stopping alsa streams of audio USB gadget when USB host stops capture/playback/USB cable unplugged.

For capture I used code from AK4114 SPDIF receiver https://elixir.bootlin.com/linux/latest/source/sound/i2c/other/ak4114.c#L590:

static void stop_substream(struct uac_rtd_params *prm)
{
     unsigned long _flags;
     struct snd_pcm_substream *substream;

     substream = prm->ss;
     if (substream) {
         snd_pcm_stream_lock_irqsave(substream, _flags);
         if (snd_pcm_running(substream))
             // TODO - correct handling for playback substream?
             snd_pcm_stop(substream, SNDRV_PCM_STATE_DRAINING);
         snd_pcm_stream_unlock_irqrestore(substream, _flags);
     }
}

For setup I found calling snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP) (https://elixir.bootlin.com/linux/latest/source/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c#L63)  Or for both capture and playback using SNDRV_PCM_STATE_DISCONNECTED (https://elixir.bootlin.com/linux/latest/source/sound/core/pcm.c#L1103).

Or perhaps using snd_pcm_dev_disconnect(dev) or snd_pcm_drop(substream)?

Please what is the recommended way?


Please can I ask for expert view on this issue? E.g. in SoX stopping the stream with SNDRV_PCM_STATE_SETUP/SNDRV_PCM_STATE_DRAINING does not stop the application, while with SNDRV_PCM_STATE_DISCONNECTED SoX exits with non-recoverable status. I am considering implementing both methods and letting users choose their suitable snd_pcm_stop operation (none (default)/SETUP-DRAINING/DISCONNECTED) for the two events (host playback/capture stop, cable disconnection) with a configfs param. Would this make sense?

Thanks a lot in advance,

Pavel.



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux