Intel HDA Driver Issue With PCM RW Interleaved
Ryan McClue
re.mcclue at protonmail.com
Mon Jul 26 08:37:52 CEST 2021
Hi,
I'm trying to play a simple PCM buffer single threaded without buffer underrun.
Program source:https://gist.github.com/takaswie/d8a9553c230971d974a3dfc759b2ff67
(struct snd_pcm_sw_params).start_thresholdis altered so as to allow specifying the start of audio frame transmission and prevent underrun issues.
In my application, onioctl(fd, SNDRV_PCM_IOCTL_STATUS, &status), I receive:File descriptor in bad state
Output of$(dmesg)is:[ 69.013084] snd_hda_intel 0000:00:1f.3: Too big adjustment 128
From a previous response on thealsa-develmailing list:
> The driver has some small number of periods to be
> put at the beginning of the buffer for correcting the reported
> position. Judging from the message, you seem to have set a quite high
> rate and a very shot number, and that's possibly too tight to operate
> properly.
However, I'm not sure what to change in this code to address this issue and get it to work. I tried alteringMY_PLAYBACK_DURATIONandparams.start_thresholdbut get the same error.
The program dumps the current hardware parameters:
Current hardware parameters:
Changed parameters:
access
format
subformat
sample-bits
frame-bits
channels
rate
period-time
period-size
period-bytes
periods
buffer-time
buffer-size
buffer-bytes
tick-time
Runtime parameters:
access:
readwrite-interleaved
format:
s16-le
subformat:
std
sample-bits:
[16, 16], integer,
frame-bits:
[32, 32], integer,
channels:
[2, 2], integer,
rate:
[48000, 48000], integer,
period-time:
(666, 667),
period-size:
[32, 32], integer,
periods:
[32, 32], integer,
buffer-time:
(21333, 21334),
buffer-size:
[1024, 1024], integer,
buffer-bytes:
[4096, 4096], integer,
tick-time:
[0, 0], integer,
info:
mmap
mmap-valid
interleaved
block-transfer
pause
sync-start
no-period-wakeup
has-wall-clock
has-link-atime
has-link-synchronized-atime
most-significant-bits: 16
rate_num: 48000
rate_den: 1
Thanks
More information about the Alsa-devel
mailing list