From 47ea69233bdf6eaef55c3120247462ae2c6f5691 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 2 Mar 2014 11:11:40 +0100 Subject: output/alsa: remove the obsolete Raspberry Pi workaround Has been superseded by the previous commit. --- src/output/AlsaOutputPlugin.cxx | 36 ------------------------------------ 1 file changed, 36 deletions(-) (limited to 'src/output') 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 @@ -105,14 +105,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 @@ -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); } -- cgit v1.2.3