aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-03-02 11:11:40 +0100
committerMax Kellermann <max@duempel.org>2014-03-02 11:22:04 +0100
commit47ea69233bdf6eaef55c3120247462ae2c6f5691 (patch)
tree883b5639c37736dc7874304ba892ed6fe3b212e3
parenta884e37de16fba2dddbe61e34520860f8b88c15d (diff)
downloadmpd-47ea69233bdf6eaef55c3120247462ae2c6f5691.tar.gz
mpd-47ea69233bdf6eaef55c3120247462ae2c6f5691.tar.xz
mpd-47ea69233bdf6eaef55c3120247462ae2c6f5691.zip
output/alsa: remove the obsolete Raspberry Pi workaround
Has been superseded by the previous commit.
-rw-r--r--src/output/AlsaOutputPlugin.cxx36
1 files changed, 0 insertions, 36 deletions
diff --git a/src/output/AlsaOutputPlugin.cxx b/src/output/AlsaOutputPlugin.cxx
index c5db2320d..6668c920f 100644
--- a/src/output/AlsaOutputPlugin.cxx
+++ b/src/output/AlsaOutputPlugin.cxx
@@ -106,14 +106,6 @@ struct AlsaOutput {
snd_pcm_uframes_t period_position;
/**
- * Set to non-zero when the Raspberry Pi workaround has been
- * activated in alsa_recover(); decremented by each write.
- * This will avoid activating it again, leading to an endless
- * loop. This problem was observed with a "RME Digi9636/52".
- */
- unsigned pi_workaround;
-
- /**
* Do we need to call snd_pcm_prepare() before the next write?
* It means that we put the device to SND_PCM_STATE_SETUP by
* calling snd_pcm_drop().
@@ -688,8 +680,6 @@ alsa_open(struct audio_output *ao, AudioFormat &audio_format, Error &error)
{
AlsaOutput *ad = (AlsaOutput *)ao;
- ad->pi_workaround = 0;
-
int err = snd_pcm_open(&ad->pcm, alsa_device(ad),
SND_PCM_STREAM_PLAYBACK, ad->mode);
if (err < 0) {
@@ -750,29 +740,6 @@ alsa_recover(AlsaOutput *ad, int err)
case SND_PCM_STATE_XRUN:
ad->period_position = 0;
err = snd_pcm_prepare(ad->pcm);
-
- if (err == 0 && ad->pi_workaround == 0) {
- /* this works around a driver bug observed on
- the Raspberry Pi: after snd_pcm_drop(), the
- whole ring buffer must be invalidated, but
- the snd_pcm_prepare() call above makes the
- driver play random data that just happens
- to be still in the buffer; by adding and
- cancelling some silence, this bug does not
- occur */
- alsa_write_silence(ad, ad->period_frames);
-
- /* cancel the silence data right away to avoid
- increasing latency; even though this
- function call invalidates the portion of
- silence, the driver seems to avoid the
- bug */
- snd_pcm_reset(ad->pcm);
-
- /* disable the workaround for some time */
- ad->pi_workaround = 8;
- }
-
break;
case SND_PCM_STATE_DISCONNECTED:
break;
@@ -859,9 +826,6 @@ alsa_play(struct audio_output *ao, const void *chunk, size_t size,
ad->period_position = (ad->period_position + ret)
% ad->period_frames;
- if (ad->pi_workaround > 0)
- --ad->pi_workaround;
-
size_t bytes_written = ret * ad->out_frame_size;
return ad->pcm_export->CalcSourceSize(bytes_written);
}