summaryrefslogtreecommitdiff
path: root/libs/backends/alsa
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-05-01 23:11:18 +0200
committerRobin Gareus <robin@gareus.org>2020-05-01 23:17:31 +0200
commit2326fb163826aeed61b24026f7c4f1f65d3ee5af (patch)
treea90419d7a960b5634cfa7e892d5c22e07f62050a /libs/backends/alsa
parentb258ad792e535a7587f2d055ec519ceb3f861f4d (diff)
ALSA: only read/clear user-requested nperiods before snd_pcm_start
This should fix excessive latency with the RayDay that has a fixed buffersize of 16384 samples.
Diffstat (limited to 'libs/backends/alsa')
-rw-r--r--libs/backends/alsa/zita-alsa-pcmi.cc8
-rw-r--r--libs/backends/alsa/zita-alsa-pcmi.h1
2 files changed, 5 insertions, 4 deletions
diff --git a/libs/backends/alsa/zita-alsa-pcmi.cc b/libs/backends/alsa/zita-alsa-pcmi.cc
index 27b63c94f5..70200b64e1 100644
--- a/libs/backends/alsa/zita-alsa-pcmi.cc
+++ b/libs/backends/alsa/zita-alsa-pcmi.cc
@@ -53,6 +53,7 @@ Alsa_pcmi::Alsa_pcmi (
: _fsamp (fsamp)
, _fsize (fsize)
, _play_nfrag (play_nfrag)
+ , _real_nfrag (play_nfrag)
, _capt_nfrag (capt_nfrag)
, _debug (debug)
, _state (-1)
@@ -367,7 +368,7 @@ void Alsa_pcmi::printinfo (void)
fprintf (stdout, "\n nchan : %d\n", _play_nchan);
fprintf (stdout, " fsamp : %d\n", _fsamp);
fprintf (stdout, " fsize : %ld\n", _fsize);
- fprintf (stdout, " nfrag : %d\n", _play_nfrag);
+ fprintf (stdout, " nfrag : %d\n", _real_nfrag);
fprintf (stdout, " format : %s\n", snd_pcm_format_name (_play_format));
}
else fprintf (stdout, " not enabled\n");
@@ -484,10 +485,9 @@ void Alsa_pcmi::initialise (const char *play_name, const char *capt_name, const
_state = -4;
return;
}
- if (snd_pcm_hw_params_get_periods (_play_hwpar, &nfrag, &dir) || (nfrag != _play_nfrag) || dir)
+ if (snd_pcm_hw_params_get_periods (_play_hwpar, &_real_nfrag, &dir) || (_real_nfrag != _play_nfrag) || dir)
{
- if (_debug & DEBUG_INIT) fprintf (stderr, "Alsa_pcmi warning: requested %u periods for playback, using %u.\n", _play_nfrag, nfrag);
- _play_nfrag = nfrag; // this is later used during pcm_start
+ if (_debug & DEBUG_INIT) fprintf (stderr, "Alsa_pcmi warning: requested %u periods for playback, using %u.\n", _play_nfrag, _real_nfrag);
}
snd_pcm_hw_params_get_format (_play_hwpar, &_play_format);
diff --git a/libs/backends/alsa/zita-alsa-pcmi.h b/libs/backends/alsa/zita-alsa-pcmi.h
index 48c2396c19..c9c8c31697 100644
--- a/libs/backends/alsa/zita-alsa-pcmi.h
+++ b/libs/backends/alsa/zita-alsa-pcmi.h
@@ -154,6 +154,7 @@ private:
unsigned int _fsamp;
snd_pcm_uframes_t _fsize;
unsigned int _play_nfrag;
+ unsigned int _real_nfrag;
unsigned int _capt_nfrag;
unsigned int _debug;
int _state;