mbox series

[v4,0/5] ASoC: q6apm: fix under runs and fragment sizes

Message ID 20250314143220.6215-1-srinivas.kandagatla@linaro.org (mailing list archive)
Headers show
Series ASoC: q6apm: fix under runs and fragment sizes | expand

Message

Srinivas Kandagatla March 14, 2025, 2:32 p.m. UTC
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

On Qualcomm Audioreach setup, some of the audio artifacts are seen in
both recording and playback. These patches fix issues by
1. Adjusting the fragment size that dsp can service.
2. schedule available playback buffers in time for dsp to not hit under runs 
3. remove some of the manual calculations done to get hardware pointer.

With these patches, am able to see significant Audio quality improvements.
I have few more patches to optimize the dsp drivers, but for now am
keeping this series simple to address the underruns and overruns issues
noticed in pipewire setup.

Any testing would be appreciated.

Please note that on pipewire min-latency has to be set to 512 which
reflects the DSP latency requirements of 10ms. You might see audio
artifacts like glitches if you try to play audio below 256 latency.

thanks,
Srini

Changes since v3:
	- updated period size aligment patch with 10ms period size
	  contstriants.

Changes since v2:
	- dropped patch which is causing regression with pluseaudio.
	- setup period sizes only for capture path
	- fix underruns/overruns in dsp pipelines.
	- add fixes tag
	- add patch to fix buffer alignment

Changes since v1:
	- added new patches to fix the fragment size, pointer
	  calculations
	- updated to schedule only available buffers.


Srinivas Kandagatla (5):
  ASoC: q6apm-dai: schedule all available frames to avoid dsp under-runs
  ASoC: q6apm: add q6apm_get_hw_pointer helper
  ASoC: q6apm-dai: make use of q6apm_get_hw_pointer
  ASoC: qdsp6: q6apm-dai: set 10 ms period and buffer alignment.
  ASoC: qdsp6: q6apm-dai: fix capture pipeline overruns.

 sound/soc/qcom/qdsp6/q6apm-dai.c | 61 +++++++++++++++++---------------
 sound/soc/qcom/qdsp6/q6apm.c     | 18 +++++++++-
 sound/soc/qcom/qdsp6/q6apm.h     |  3 ++
 3 files changed, 52 insertions(+), 30 deletions(-)

Comments

Johan Hovold March 14, 2025, 4:43 p.m. UTC | #1
On Fri, Mar 14, 2025 at 02:32:15PM +0000, Srinivas Kandagatla wrote:
> From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> 
> On Qualcomm Audioreach setup, some of the audio artifacts are seen in
> both recording and playback. These patches fix issues by
> 1. Adjusting the fragment size that dsp can service.
> 2. schedule available playback buffers in time for dsp to not hit under runs 
> 3. remove some of the manual calculations done to get hardware pointer.
> 
> With these patches, am able to see significant Audio quality improvements.
> I have few more patches to optimize the dsp drivers, but for now am
> keeping this series simple to address the underruns and overruns issues
> noticed in pipewire setup.
> 
> Any testing would be appreciated.
> 
> Please note that on pipewire min-latency has to be set to 512 which
> reflects the DSP latency requirements of 10ms. You might see audio
> artifacts like glitches if you try to play audio below 256 latency.

> Changes since v3:
> 	- updated period size aligment patch with 10ms period size
> 	  contstriants.
> 
> Changes since v2:
> 	- dropped patch which is causing regression with pluseaudio.
> 	- setup period sizes only for capture path
> 	- fix underruns/overruns in dsp pipelines.
> 	- add fixes tag
> 	- add patch to fix buffer alignment
> 
> Changes since v1:
> 	- added new patches to fix the fragment size, pointer
> 	  calculations
> 	- updated to schedule only available buffers.
> 

I tested v4 on the X13s with PulseAudio and T14s with PipeWire.

I'm no longer noticing any regressions with PulseAudio, while this
series makes PipeWire actually usable.

I may be hearing some crackling with PipeWire when recording with the 
pavucontrol volume meters enabled which results in a quantum size of
256. But I guess that's to be expected. Playback seems to work also at
256 with v4.

Tested-by: Johan Hovold <johan+linaro@kernel.org>

Johan