2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-12 15:44:01 +08:00
linux-next/sound
Takashi Iwai e8a8f09cb0 ALSA: usb-audio: Refactoring delay account code
The PCM delay accounting in USB-audio driver is a bit complex to
follow, and this is an attempt to improve the readability and provide
some potential fix.

Basically, the PCM position delay is calculated from two factors: the
in-flight data on URBs and the USB frame counter.  For the playback
stream, we advance the hwptr already at submitting URBs.  Those
"in-flight" data amount is now tracked, and this is used as the base
value for the PCM delay correction.  The in-flight data is decreased
again at URB completion in return.  For the capture stream, OTOH,
there is no in-flight data, hence the delay base is zero.

The USB frame counter is used in addition for correcting the current
position.  The reference frame counter is updated at each submission
and receiving time, and the difference from the current counter value
is taken into account.

In this patch, each in-flight data bytes is recorded in the new
snd_usb_ctx.queued field, and the total in-flight amount is tracked in
snd_usb_substream.inflight_bytes field, as the replacement of
last_delay field.

Note that updating the hwptr after URB completion doesn't work for
PulseAudio who tries to scratch the buffer on the fly; USB-audio is
basically a double-buffer implementation, hence the scratching the
buffer can't work for the already submitted data.  So we always update
hwptr beforehand.  It's not ideal, but the delay account should give
enough correctness.

Link: https://lore.kernel.org/r/20210601162457.4877-4-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-06-02 09:01:44 +02:00
..
ac97 ALSA: ac97: fix PM reference leak in ac97_bus_remove() 2021-05-25 08:59:08 +02:00
aoa ALSA: Convert strlcpy to strscpy when return value is unused 2021-01-08 09:30:05 +01:00
arm ARM updates for 5.12-rc1: 2021-02-22 14:27:07 -08:00
atmel
core ALSA: core: use DEVICE_ATTR_*() macro 2021-05-28 16:32:11 +02:00
drivers ALSA: drivers: opl3: fix useless self-comparison 2021-05-27 08:25:01 +02:00
firewire ALSA: firewire-motu: sequence replay for source packet header 2021-06-02 08:59:46 +02:00
hda ALSA: control - add generic LED API 2021-03-30 17:42:40 +02:00
i2c ALSA: Convert strlcpy to strscpy when return value is unused 2021-01-08 09:30:05 +01:00
isa ALSA: gus: Replace unsafe strcpy() with strscpy() 2021-05-14 09:48:33 +02:00
mips module: remove never implemented MODULE_SUPPORTED_DEVICE 2021-03-17 13:16:18 -07:00
oss sound/oss/dmasound: Remove superfluous "break" 2021-05-27 08:24:23 +02:00
parisc
pci ALSA: hda/ca0132: Make a const array static, makes object smaller 2021-05-27 08:25:54 +02:00
pcmcia module: remove never implemented MODULE_SUPPORTED_DEVICE 2021-03-17 13:16:18 -07:00
ppc ALSA: control - add generic LED API 2021-03-30 17:42:40 +02:00
sh module: remove never implemented MODULE_SUPPORTED_DEVICE 2021-03-17 13:16:18 -07:00
soc ALSA: Drop superfluous argument from snd_power_wait() 2021-05-25 08:49:39 +02:00
sparc module: remove never implemented MODULE_SUPPORTED_DEVICE 2021-03-17 13:16:18 -07:00
spi
synth
usb ALSA: usb-audio: Refactoring delay account code 2021-06-02 09:01:44 +02:00
virtio ALSA: virtio: fix kernel-doc 2021-04-27 08:39:39 +02:00
x86 module: remove never implemented MODULE_SUPPORTED_DEVICE 2021-03-17 13:16:18 -07:00
xen module: remove never implemented MODULE_SUPPORTED_DEVICE 2021-03-17 13:16:18 -07:00
ac97_bus.c
Kconfig ALSA: virtio: add virtio sound driver 2021-03-07 09:07:16 +01:00
last.c
Makefile ALSA: virtio: add virtio sound driver 2021-03-07 09:07:16 +01:00
sound_core.c