Fix for half-duplex ALSA-slave devices
authorRobin Gareus <robin@gareus.org>
Fri, 23 Aug 2019 02:39:51 +0000 (04:39 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 23 Aug 2019 02:39:51 +0000 (04:39 +0200)
libs/backends/alsa/alsa_slave.cc

index e4f17256dea892a7ad9144de45c21fae0ce7d637..c10e206230a95f7d529fe324e27a5da9529add75 100644 (file)
@@ -210,7 +210,7 @@ AlsaAudioSlave::process_thread ()
                        no_proc_errors = 0;
 
                        _pcmi.capt_init (spp);
-                       if (drain) {
+                       if (drain || _pcmi.ncapt () == 0) {
                                /* do nothing */
                        } else if (_rb_capture.write_space () >= _pcmi.ncapt () * spp) {
 #if 0 // failsafe: write interleave sample by sample
@@ -267,7 +267,10 @@ AlsaAudioSlave::process_thread ()
                        }
 
                        _pcmi.play_init (spp);
-                       if (_rb_playback.read_space () >= _pcmi.nplay () * spp) {
+                       if (_pcmi.nplay () == 0) {
+                               /* relax */
+                       }
+                       else if (_rb_playback.read_space () >= _pcmi.nplay () * spp) {
 #if 0 // failsafe: read sample by sample de-interleave
                                for (uint32_t s = 0; s < spp; ++s) {
                                        for (uint32_t c = 0; c < _pcmi.nplay (); ++c) {