linux/sound/usb
Alexander Tsoy f0bd62b640 ALSA: usb-audio: Improve frames size computation
For computation of the the next frame size current value of fs/fps and
accumulated fractional parts of fs/fps are used, where values are stored
in Q16.16 format. This is quite natural for computing frame size for
asynchronous endpoints driven by explicit feedback, since in this case
fs/fps is a value provided by the feedback endpoint and it's already in
the Q format. If an error is accumulated over time, the device can
adjust fs/fps value to prevent buffer overruns/underruns.

But for synchronous endpoints the accuracy provided by these computations
is not enough. Due to accumulated error the driver periodically produces
frames with incorrect size (+/- 1 audio sample).

This patch fixes this issue by implementing a different algorithm for
frame size computation. It is based on accumulating of the remainders
from division fs/fps and it doesn't accumulate errors over time. This
new method is enabled for synchronous and adaptive playback endpoints.

Signed-off-by: Alexander Tsoy <alexander@tsoy.me>
Link: https://lore.kernel.org/r/20200424022449.14972-1-alexander@tsoy.me
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2020-04-24 08:25:24 +02:00
..
6fire ALSA: usb: Constify snd_kcontrol_new items 2020-01-03 09:24:34 +01:00
bcd2000 ALSA: bcd2000: More constifications 2020-01-05 16:14:49 +01:00
caiaq ALSA: caiaq: More constifications 2020-01-05 16:14:37 +01:00
hiface ALSA: usb: Drop superfluous ioctl PCM ops 2019-12-11 07:25:34 +01:00
line6 ALSA: line6: Fix endless MIDI read loop 2020-03-09 11:00:45 +01:00
misc ALSA: usb: Drop superfluous ioctl PCM ops 2019-12-11 07:25:34 +01:00
usx2y ALSA: usx2y: Fix potential NULL dereference 2020-04-21 08:00:41 +02:00
card.c ALSA: usb-audio: Inform devices that need delayed registration 2020-03-26 10:49:08 +01:00
card.h ALSA: usb-audio: Improve frames size computation 2020-04-24 08:25:24 +02:00
clock.c ALSA: usb-audio: Add support for MOTU MicroBook IIc 2020-03-06 09:03:17 +01:00
clock.h ALSA: usb-audio: Add clock validity quirk for Denon MC7000/MCX8000 2020-02-13 07:18:58 +01:00
debug.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
endpoint.c ALSA: usb-audio: Improve frames size computation 2020-04-24 08:25:24 +02:00
endpoint.h ALSA: usb-audio: Improve frames size computation 2020-04-24 08:25:24 +02:00
format.c ALSA: usb-audio: Filter out unsupported sample rates on Focusrite devices 2020-04-18 21:08:39 +02:00
format.h ALSA: usb: initial USB Audio Device Class 3.0 support 2018-03-21 11:46:33 +01:00
helper.c ALSA: usb-audio: Fix gpf in snd_usb_pipe_sanity_check 2019-07-30 12:32:21 +02:00
helper.h ALSA: usb-audio: More validations of descriptor units 2019-08-22 10:35:59 +02:00
Kconfig sound: Fix Kconfig indentation 2019-10-07 03:53:03 +02:00
Makefile ALSA: usb-audio: Add support for Presonus Studio 1810c 2020-02-15 09:46:16 +01:00
media.c media: sound/usb: Use Media Controller API to share media resources 2019-04-22 11:21:06 -04:00
media.h media: sound/usb: Use Media Controller API to share media resources 2019-04-22 11:21:06 -04:00
midi.c ALSA: usb-audio: Fix case when USB MIDI interface has more than one extra endpoint descriptor 2020-03-31 14:34:28 +02:00
midi.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
mixer_maps.c ALSA: usb-audio: Add connector notifier delegation 2020-04-22 13:33:46 +02:00
mixer_quirks.c Merge branch 'for-linus' into for-next 2020-04-24 08:24:44 +02:00
mixer_quirks.h ALSA: usb-audio: Initialize Dell Dock playback volumes 2018-05-02 16:02:32 +02:00
mixer_s1810c.c ALSA: usb-audio: Fix missing braces in some struct inits 2020-03-06 10:14:43 +01:00
mixer_s1810c.h ALSA: usb-audio: Add support for Presonus Studio 1810c 2020-02-15 09:46:16 +01:00
mixer_scarlett_gen2.c ALSA: usb-audio: Annotate endianess in Scarlett gen2 quirk 2020-02-01 09:06:24 +01:00
mixer_scarlett_gen2.h ALSA: usb-audio: Scarlett Gen 2 mixer interface 2019-07-28 17:47:48 +02:00
mixer_scarlett.c ALSA: usb-audio: More constifications 2020-01-05 16:14:34 +01:00
mixer_scarlett.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
mixer_us16x08.c ALSA: usb: Constify snd_kcontrol_new items 2020-01-03 09:24:34 +01:00
mixer_us16x08.h ALSA: usb: Constify snd_kcontrol_new items 2020-01-03 09:24:34 +01:00
mixer.c ALSA: usb-audio: Add connector notifier delegation 2020-04-22 13:33:46 +02:00
mixer.h ALSA: usb-audio: Add connector notifier delegation 2020-04-22 13:33:46 +02:00
pcm.c ALSA: usb-audio: Improve frames size computation 2020-04-24 08:25:24 +02:00
pcm.h ALSA: usb-audio: Add UAC3 Power Domains to suspend/resume 2018-07-31 15:01:36 +02:00
power.c ALSA: usb-audio: More validations of descriptor units 2019-08-22 10:35:59 +02:00
power.h ALSA: usb-audio: Initial Power Domain support 2018-07-31 15:01:22 +02:00
proc.c ALSA: usb-audio: Fix a limit check in proc_dump_substream_formats() 2020-04-22 11:29:15 +02:00
proc.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
quirks-table.h ALSA: usb-audio: Add quirk for Focusrite Scarlett 2i2 2020-04-21 07:58:54 +02:00
quirks.c ALSA: usb-audio: Apply async workaround for Scarlett 2i4 2nd gen 2020-04-21 21:30:28 +02:00
quirks.h ALSA: usb-audio: Rewrite registration quirk handling 2020-03-26 10:47:00 +01:00
stream.c ALSA: usb-audio: Inform devices that need delayed registration 2020-03-26 10:49:08 +01:00
stream.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
usbaudio.h ALSA: usb-audio: Inform devices that need delayed registration 2020-03-26 10:49:08 +01:00
validate.c ALSA: usb-audio: Fix endianess in descriptor validation 2020-02-01 09:06:11 +01:00