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
Playback with no capture
aplay -v --dump-hw-params -D hw:0,0 -r 48000 -c 2 -f S32_LE /dev/zero Přehrávám syrová data '/dev/zero' : Signed 32 bit Little Endian, Frekvence 48000 Hz, Stereo HW Params of device "hw:0,0": -------------------- ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED FORMAT: S16_LE S16_BE S32_LE S32_BE FLOAT_LE FLOAT_BE SUBFORMAT: STD SAMPLE_BITS: [16 32] FRAME_BITS: [16 1024] CHANNELS: [1 32] RATE: [8000 19200000] PERIOD_TIME: (0 65536000] PERIOD_SIZE: [1 524288] PERIOD_BYTES: [64 1048576] PERIODS: [1 1024] BUFFER_TIME: (0 524288000] BUFFER_SIZE: [1 4194304] BUFFER_BYTES: [64 8388608]
Playback with capture running (arecord at 48000):
aplay -v --dump-hw-params -D hw:0,0 -r 96000 -c 2 -f S32_LE /dev/zero Playing raw data '/dev/zero' : Signed 32 bit Little Endian, Rate 96000 Hz, Stereo HW Params of device "hw:0,0": -------------------- ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED FORMAT: S32_LE SUBFORMAT: STD SAMPLE_BITS: 32 FRAME_BITS: 64 CHANNELS: 2 RATE: 48000 PERIOD_TIME: (166 2730667) PERIOD_SIZE: [8 131072] PERIOD_BYTES: [64 1048576] PERIODS: [1 1024] BUFFER_TIME: (166 21845334) BUFFER_SIZE: [8 1048576] BUFFER_BYTES: [64 8388608] TICK_TIME: ALL -------------------- Warning: rate is not accurate (requested = 96000Hz, got = 48000Hz) please, try the plug plugin
Thanks a lot.
Pavel.