Quoting Hans Petter Selasky <hsela...@freebsd.org> (from Tue, 31 Mar 2020 14:44:12 +0200):
On 2020-03-31 14:35, Alexander Leidinger via freebsd-usb wrote:Quoting Hans Petter Selasky <hsela...@freebsd.org> (from Mon, 30 Mar 2020 16:50:33 +0000 (UTC)):Author: hselasky Date: Mon Mar 30 16:50:32 2020 New Revision: 359446 URL: https://svnweb.freebsd.org/changeset/base/359446 Log:Add support for multiple playback and recording devices per physical USB audio device. This requires some structural refactoring inside the driver, mostlyabout converting existing audio channel structures into arrays. The main audio mixer is provided by the first PCM instance.The non-first audio instances may only have a software mixer for PCM playback.Have you thought about providing different pcm devices per physical USB audio device for the functionality of dev.pcm.X.Y.vchanformat / vchanrate? Incompatible configs between those devices could be prevented at runtime via setting all the incompatible devices per physical device to return EBUSY or such while one of the group is open / in use. /dev/sndstat could also contain some kind of status to this effect and to which group of pcm devices pcmX belongs.Hi,There will be two pcm devices, belonging to the same uaudioX device having each their independent sysctl tree. So you get:/dev/dsp0 /dev/mixer0 /dev/dsp1 /dev/mixer1mixer1 only controls dsp1, and mixer0 only controls dsp0, while it may be the same physical USB audio device.Was this your question?
I have this:uaudio0: <vendor 0x0d8c USB Sound Device, class 0/0, rev 1.10/0.10, addr 3> on usbus8
uaudio0: Play: 48000 Hz, 4 ch, 16-bit S-LE PCM format, 2x8ms buffer. uaudio0: Play: 44100 Hz, 4 ch, 16-bit S-LE PCM format, 2x8ms buffer. uaudio0: Record: 48000 Hz, 2 ch, 16-bit S-LE PCM format, 2x8ms buffer. uaudio0: Record: 44100 Hz, 2 ch, 16-bit S-LE PCM format, 2x8ms buffer. uaudio0: No MIDI sequencer.It has dev.pcm.0.play.vchanformat=48000 per default. If I want to switch this, I need to issue a sysctl (= root permission).
My question was to change the code to not need this sysctl anymore, but to generate a /dev/dspX for each of the possibilities the hardware supports. And if one dsp device is open, the other could by set into busy state so that it can not be opened until the first dsp device is closed. This way I only need user permissions to the dsp device to be able to select what I want (what I want may need a lookup of me to /dev/sndstat to find out which device would be the one for bit-perfect playing (even if vchans are enabled) instead of resampling inside the kernel).
Similar for e.g. vchanformat=s16le:5.1 or other formats which the hardware supports. Instead of requiring root access to do the sysctl, simply chosing the right pcm device would only need user permissions on the dev entry. BTW: how to find out what the hardware supports in this regard. The above dmesg snippd suggests the hardware is able to do s16le:2.0 or s16le:4.0, but not s16le:5.1 (but the device has connectors for a 7.1 setup - I haven't tried it, I have it connected via SPDIF).
Bye, Alexander. -- http://www.Leidinger.net alexan...@leidinger.net: PGP 0x8F31830F9F2772BF http://www.FreeBSD.org netch...@freebsd.org : PGP 0x8F31830F9F2772BF
pgpbgf8KdrndR.pgp
Description: Digitale PGP-Signatur