Re: Issues with more than four channels

From: Alexandre Ratchov <alex_at_caoua.org>
Date: Thu, 11 Jun 2020 15:29:58 +0200
On Wed, Jun 10, 2020 at 02:09:50AM +0200, Daniel Gibson wrote:
> 
> Hardware PCM card 2 'HD-Audio Generic' device 0 subdevice 0
> Its setup is:
>   stream       : PLAYBACK
>   access       : RW_INTERLEAVED
>   format       : S16_LE
>   subformat    : STD
>   channels     : 6
>   rate         : 48000
>   exact rate   : 48000 (48000/1)
>   msbits       : 16
>   buffer_size  : 5280
    ^^^^^^^^^^^^^^^^^^^
>   period_size  : 480
>   period_time  : 10000
>   tstamp_mode  : NONE
>   tstamp_type  : MONOTONIC
>   period_step  : 1
>   avail_min    : 480
>   period_event : 1
>   start_threshold  : 7200
    ^^^^^^^^^^^^^^^^^^^^^^^
>   stop_threshold   : 7680
>   silence_threshold: 0
>   silence_size : 0
>   boundary     : 5944751508129054720
>   appl_ptr     : 0
>   hw_ptr       : 0

The start threshold is larger than the buffer size, so
playback will never start.

There's a confusion between output and input periods count. The diff
below should fix this. Does it?

diff --git a/libsndio/sio_alsa.c b/libsndio/sio_alsa.c
index 4c47ea6..c544c4a 100644
--- a/libsndio/sio_alsa.c
+++ b/libsndio/sio_alsa.c
_at_@ -821,9 +821,9 @@ sio_alsa_setpar(struct sio_hdl *sh, struct sio_par *par)
 		return 0;
 	hdl->par.msb = 1;
 	hdl->par.bps = SIO_BPS(hdl->par.bits);
-	hdl->par.rate = irate;
-	hdl->par.round = iround;
-	hdl->par.bufsz = iround * iperiods;
+	hdl->par.rate = orate;
+	hdl->par.round = oround;
+	hdl->par.bufsz = oround * operiods;
 	hdl->par.appbufsz = hdl->par.bufsz;
 
 	/* software params */
Received on Thu Jun 11 2020 - 15:29:58 CEST

This archive was generated by hypermail 2.3.0 : Fri Jun 12 2020 - 01:33:18 CEST