aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-04-17 00:44:02 +0200
committerMax Kellermann <max@duempel.org>2013-04-17 00:44:02 +0200
commite903d0096807565834c77e6d85c670493e34202f (patch)
tree9036b18ab60c5182fbc843e3e2cb2703b8b7362a
parentcc6c452854d996183700d974b8fdf54e7b14aef3 (diff)
downloadmpd-e903d0096807565834c77e6d85c670493e34202f.tar.gz
mpd-e903d0096807565834c77e6d85c670493e34202f.tar.xz
mpd-e903d0096807565834c77e6d85c670493e34202f.zip
output/ffado: remove broken plugin
This plugin has been in MPD for three years, and it has never worked. Enough!
-rw-r--r--INSTALL3
-rw-r--r--Makefile.am7
-rw-r--r--NEWS1
-rw-r--r--configure.ac17
-rw-r--r--doc/user.xml37
-rw-r--r--src/OutputList.cxx4
-rw-r--r--src/output/ffado_output_plugin.c359
-rw-r--r--src/output/ffado_output_plugin.h25
-rw-r--r--valgrind.suppressions11
9 files changed, 1 insertions, 463 deletions
diff --git a/INSTALL b/INSTALL
index 9db6c67f0..185798a76 100644
--- a/INSTALL
+++ b/INSTALL
@@ -56,9 +56,6 @@ You also need an encoder: either libvorbisenc (ogg), or liblame (mp3).
OpenAL - http://kcat.strangesoft.net/openal.html
Open Audio Library
-libffado - http://www.ffado.org/
-For FireWire audio devices.
-
Optional Input Dependencies
---------------------------
diff --git a/Makefile.am b/Makefile.am
index 463c0bec8..744ca4e44 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -750,7 +750,6 @@ endif
liboutput_plugins_a_CPPFLAGS = $(AM_CPPFLAGS) \
$(AO_CFLAGS) \
$(ALSA_CFLAGS) \
- $(FFADO_CFLAGS) \
$(JACK_CFLAGS) \
$(OPENAL_CFLAGS) \
$(OPENSSL_CFLAGS) \
@@ -763,7 +762,6 @@ OUTPUT_LIBS = \
$(AO_LIBS) \
$(ALSA_LIBS) \
$(ROAR_LIBS) \
- $(FFADO_LIBS) \
$(JACK_LIBS) \
$(OPENAL_LIBS) \
$(PULSE_LIBS) \
@@ -817,11 +815,6 @@ liboutput_plugins_a_SOURCES += \
libmixer_plugins_a_SOURCES += src/mixer/RoarMixerPlugin.cxx
endif
-if ENABLE_FFADO_OUTPUT
-liboutput_plugins_a_SOURCES += \
- src/output/ffado_output_plugin.c src/output/ffado_output_plugin.h
-endif
-
if HAVE_AO
liboutput_plugins_a_SOURCES += \
src/output/ao_output_plugin.c src/output/ao_output_plugin.h
diff --git a/NEWS b/NEWS
index 7460b722c..5a6d2b921 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,7 @@ ver 0.18 (2012/??/??)
* output:
- new option "tags" may be used to disable sending tags to output
- alsa: workaround for noise after manual song change
+ - ffado: remove broken plugin
- mvp: remove obsolete plugin
* improved decoder/output error reporting
* eliminate timer wakeup on idle MPD
diff --git a/configure.ac b/configure.ac
index f0cf470e0..253f25764 100644
--- a/configure.ac
+++ b/configure.ac
@@ -205,10 +205,6 @@ AC_ARG_ENABLE(documentation,
[build documentation (default: disable)]),,
[enable_documentation=no])
-AC_ARG_ENABLE(ffado,
- AS_HELP_STRING([--enable-ffado], [enable libffado (FireWire) support]),,
- [enable_ffado=no])
-
AC_ARG_ENABLE(ffmpeg,
AS_HELP_STRING([--enable-ffmpeg],
[enable FFMPEG support]),,
@@ -1287,17 +1283,6 @@ fi
AM_CONDITIONAL(HAVE_ROAR, test x$enable_roar = xyes)
-dnl ----------------------------------- FFADO ---------------------------------
-
-MPD_AUTO_PKG(ffado, FFADO, [libffado],
- [libffado output plugin], [libffado not found])
-
-if test x$enable_ffado = xyes; then
- AC_DEFINE(ENABLE_FFADO_OUTPUT, 1, [Define to enable the libffado output plugin])
-fi
-
-AM_CONDITIONAL(ENABLE_FFADO_OUTPUT, test x$enable_ffado = xyes)
-
dnl ----------------------------------- FIFO ----------------------------------
if test x$enable_fifo = xyes; then
AC_CHECK_FUNC([mkfifo],
@@ -1488,7 +1473,6 @@ if
test x$enable_alsa = xno &&
test x$enable_roar = xno &&
test x$enable_ao = xno &&
- test x$enable_ffado = xno &&
test x$enable_fifo = xno &&
test x$enable_httpd_output = xno &&
test x$enable_jack = xno &&
@@ -1642,7 +1626,6 @@ results(id3,[ID3])
printf '\nPlayback support:\n\t'
results(alsa,ALSA)
-results(ffado,FFADO)
results(fifo,FIFO)
results(recorder_output,[File Recorder])
results(httpd_output,[HTTP Daemon])
diff --git a/doc/user.xml b/doc/user.xml
index 6c722ceb1..051b9e891 100644
--- a/doc/user.xml
+++ b/doc/user.xml
@@ -1372,43 +1372,6 @@ systemctl start mpd.socket</programlisting>
</section>
<section>
- <title><varname>ffado</varname></title>
-
- <para>
- The <varname>ffado</varname> plugin connects to FireWire
- audio devices via <filename>libffado</filename>.
- </para>
-
- <para>
- Warning: this plugin was not tested successfully. I just
- couldn't keep libffado2 from crashing. Use at your own
- risk.
- </para>
-
- <informaltable>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Setting</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <varname>device</varname>
- <parameter>NAME</parameter>
- </entry>
- <entry>
- Sets the device which should be used, e.g. "hw:0".
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </section>
-
- <section>
<title><varname>jack</varname></title>
<para>
diff --git a/src/OutputList.cxx b/src/OutputList.cxx
index f79590817..4191da07c 100644
--- a/src/OutputList.cxx
+++ b/src/OutputList.cxx
@@ -22,7 +22,6 @@
#include "output_api.h"
#include "output/AlsaOutputPlugin.hxx"
#include "output/ao_output_plugin.h"
-#include "output/ffado_output_plugin.h"
#include "output/FifoOutputPlugin.hxx"
#include "output/HttpdOutputPlugin.hxx"
#include "output/JackOutputPlugin.hxx"
@@ -85,9 +84,6 @@ const struct audio_output_plugin *const audio_output_plugins[] = {
#ifdef ENABLE_WINMM_OUTPUT
&winmm_output_plugin,
#endif
-#ifdef ENABLE_FFADO_OUTPUT
- &ffado_output_plugin,
-#endif
NULL
};
diff --git a/src/output/ffado_output_plugin.c b/src/output/ffado_output_plugin.c
deleted file mode 100644
index ba239a4ad..000000000
--- a/src/output/ffado_output_plugin.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
- * http://www.musicpd.org
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/*
- * Warning: this plugin was not tested successfully. I just couldn't
- * keep libffado2 from crashing. Use at your own risk.
- *
- * For details, see my Debian bug reports:
- *
- * http://bugs.debian.org/601657
- * http://bugs.debian.org/601659
- * http://bugs.debian.org/601663
- *
- */
-
-#include "config.h"
-#include "ffado_output_plugin.h"
-#include "output_api.h"
-#include "timer.h"
-
-#include <glib.h>
-#include <assert.h>
-
-#include <libffado/ffado.h>
-
-#undef G_LOG_DOMAIN
-#define G_LOG_DOMAIN "ffado"
-
-enum {
- MAX_STREAMS = 8,
-};
-
-struct mpd_ffado_stream {
- /** libffado's stream number */
- int number;
-
- float *buffer;
-};
-
-struct mpd_ffado_device {
- struct audio_output base;
-
- char *device_name;
- int verbose;
- unsigned period_size, nb_buffers;
-
- ffado_device_t *dev;
-
- /**
- * The current sample position inside the stream buffers. New
- * samples get appended at this position on all streams at the
- * same time. When the buffers are full
- * (buffer_position==period_size),
- * ffado_streaming_transfer_playback_buffers() gets called to
- * hand them over to libffado.
- */
- unsigned buffer_position;
-
- /**
- * The number of streams which are really used by MPD.
- */
- int num_streams;
- struct mpd_ffado_stream streams[MAX_STREAMS];
-};
-
-static inline GQuark
-ffado_output_quark(void)
-{
- return g_quark_from_static_string("ffado_output");
-}
-
-static struct audio_output *
-ffado_init(const struct config_param *param,
- GError **error_r)
-{
- g_debug("using libffado version %s, API=%d",
- ffado_get_version(), ffado_get_api_version());
-
- struct mpd_ffado_device *fd = g_new(struct mpd_ffado_device, 1);
- if (!ao_base_init(&fd->base, &ffado_output_plugin, param, error_r)) {
- g_free(fd);
- return NULL;
- }
-
- fd->device_name = config_dup_block_string(param, "device", NULL);
- fd->verbose = config_get_block_unsigned(param, "verbose", 0);
-
- fd->period_size = config_get_block_unsigned(param, "period_size",
- 1024);
- if (fd->period_size == 0 || fd->period_size > 1024 * 1024) {
- ao_base_finish(&fd->base);
- g_set_error(error_r, ffado_output_quark(), 0,
- "invalid period_size setting");
- return false;
- }
-
- fd->nb_buffers = config_get_block_unsigned(param, "nb_buffers", 3);
- if (fd->nb_buffers == 0 || fd->nb_buffers > 1024) {
- ao_base_finish(&fd->base);
- g_set_error(error_r, ffado_output_quark(), 0,
- "invalid nb_buffers setting");
- return false;
- }
-
- return &fd->base;
-}
-
-static void
-ffado_finish(struct audio_output *ao)
-{
- struct mpd_ffado_device *fd = (struct mpd_ffado_device *)ao;
-
- g_free(fd->device_name);
- ao_base_finish(&fd->base);
- g_free(fd);
-}
-
-static bool
-ffado_configure_stream(ffado_device_t *dev, struct mpd_ffado_stream *stream,
- GError **error_r)
-{
- char *buffer = (char *)stream->buffer;
- if (ffado_streaming_set_playback_stream_buffer(dev, stream->number,
- buffer) != 0) {
- g_set_error(error_r, ffado_output_quark(), 0,
- "failed to configure stream buffer");
- return false;
- }
-
- if (ffado_streaming_playback_stream_onoff(dev, stream->number,
- 1) != 0) {
- g_set_error(error_r, ffado_output_quark(), 0,
- "failed to disable stream");
- return false;
- }
-
- return true;
-}
-
-static bool
-ffado_configure(struct mpd_ffado_device *fd, struct audio_format *audio_format,
- GError **error_r)
-{
- assert(fd != NULL);
- assert(fd->dev != NULL);
- assert(audio_format->channels <= MAX_STREAMS);
-
- if (ffado_streaming_set_audio_datatype(fd->dev,
- ffado_audio_datatype_float) != 0) {
- g_set_error(error_r, ffado_output_quark(), 0,
- "ffado_streaming_set_audio_datatype() failed");
- return false;
- }
-
- int num_streams = ffado_streaming_get_nb_playback_streams(fd->dev);
- if (num_streams < 0) {
- g_set_error(error_r, ffado_output_quark(), 0,
- "ffado_streaming_get_nb_playback_streams() failed");
- return false;
- }
-
- g_debug("there are %d playback streams", num_streams);
-
- fd->num_streams = 0;
- for (int i = 0; i < num_streams; ++i) {
- char name[256];
- ffado_streaming_get_playback_stream_name(fd->dev, i, name,
- sizeof(name) - 1);
-
- ffado_streaming_stream_type type =
- ffado_streaming_get_playback_stream_type(fd->dev, i);
- if (type != ffado_stream_type_audio) {
- g_debug("stream %d name='%s': not an audio stream",
- i, name);
- continue;
- }
-
- if (fd->num_streams >= audio_format->channels) {
- g_debug("stream %d name='%s': ignoring",
- i, name);
- continue;
- }
-
- g_debug("stream %d name='%s'", i, name);
-
- struct mpd_ffado_stream *stream =
- &fd->streams[fd->num_streams++];
-
- stream->number = i;
-
- /* allocated buffer is zeroed = silence */
- stream->buffer = g_new0(float, fd->period_size);
-
- if (!ffado_configure_stream(fd->dev, stream, error_r))
- return false;
- }
-
- if (!audio_valid_channel_count(fd->num_streams)) {
- g_set_error(error_r, ffado_output_quark(), 0,
- "invalid channel count from libffado: %u",
- audio_format->channels);
- return false;
- }
-
- g_debug("configured %d audio streams", fd->num_streams);
-
- if (ffado_streaming_prepare(fd->dev) != 0) {
- g_set_error(error_r, ffado_output_quark(), 0,
- "ffado_streaming_prepare() failed");
- return false;
- }
-
- if (ffado_streaming_start(fd->dev) != 0) {
- g_set_error(error_r, ffado_output_quark(), 0,
- "ffado_streaming_start() failed");
- return false;
- }
-
- audio_format->channels = fd->num_streams;
- return true;
-}
-
-static bool
-ffado_open(struct audio_output *ao, struct audio_format *audio_format,
- GError **error_r)
-{
- struct mpd_ffado_device *fd = (struct mpd_ffado_device *)ao;
-
- /* will be converted to floating point, choose best input
- format */
- audio_format->format = SAMPLE_FORMAT_S24_P32;
-
- ffado_device_info_t device_info;
- memset(&device_info, 0, sizeof(device_info));
- if (fd->device_name != NULL) {
- device_info.nb_device_spec_strings = 1;
- device_info.device_spec_strings = &fd->device_name;
- }
-
- ffado_options_t options;
- memset(&options, 0, sizeof(options));
- options.sample_rate = audio_format->sample_rate;
- options.period_size = fd->period_size;
- options.nb_buffers = fd->nb_buffers;
- options.verbose = fd->verbose;
-
- fd->dev = ffado_streaming_init(device_info, options);
- if (fd->dev == NULL) {
- g_set_error(error_r, ffado_output_quark(), 0,
- "ffado_streaming_init() failed");
- return false;
- }
-
- if (!ffado_configure(fd, audio_format, error_r)) {
- ffado_streaming_finish(fd->dev);
-
- for (int i = 0; i < fd->num_streams; ++i) {
- struct mpd_ffado_stream *stream = &fd->streams[i];
- g_free(stream->buffer);
- }
-
- return false;
- }
-
- fd->buffer_position = 0;
-
- return true;
-}
-
-static void
-ffado_close(struct audio_output *ao)
-{
- struct mpd_ffado_device *fd = (struct mpd_ffado_device *)ao;
-
- ffado_streaming_stop(fd->dev);
- ffado_streaming_finish(fd->dev);
-
- for (int i = 0; i < fd->num_streams; ++i) {
- struct mpd_ffado_stream *stream = &fd->streams[i];
- g_free(stream->buffer);
- }
-}
-
-static size_t
-ffado_play(struct audio_output *ao, const void *chunk, size_t size,
- GError **error_r)
-{
- struct mpd_ffado_device *fd = (struct mpd_ffado_device *)ao;
-
- /* wait for prefious buffer to finish (if it was full) */
-
- if (fd->buffer_position >= fd->period_size) {
- switch (ffado_streaming_wait(fd->dev)) {
- case ffado_wait_ok:
- case ffado_wait_xrun:
- break;
-
- default:
- g_set_error(error_r, ffado_output_quark(), 0,
- "ffado_streaming_wait() failed");
- return 0;
- }
-
- fd->buffer_position = 0;
- }
-
- /* copy samples to stream buffers, non-interleaved */
-
- const int32_t *p = chunk;
- unsigned num_frames = size / sizeof(*p) / fd->num_streams;
- if (num_frames > fd->period_size - fd->buffer_position)
- num_frames = fd->period_size - fd->buffer_position;
-
- for (unsigned i = num_frames; i > 0; --i) {
- for (int stream = 0; stream < fd->num_streams; ++stream)
- fd->streams[stream].buffer[fd->buffer_position] =
- *p++ / (float)(1 << 23);
- ++fd->buffer_position;
- }
-
- /* if buffer full, transfer to device */
-
- if (fd->buffer_position >= fd->period_size &&
- /* libffado documentation says this function returns -1 on
- error, but that is a lie - it returns a boolean value,
- and "false" means error */
- !ffado_streaming_transfer_playback_buffers(fd->dev)) {
- g_set_error(error_r, ffado_output_quark(), 0,
- "ffado_streaming_transfer_playback_buffers() failed");
- return 0;
- }
-
- return num_frames * sizeof(*p) * fd->num_streams;
-}
-
-const struct audio_output_plugin ffado_output_plugin = {
- .name = "ffado",
- .init = ffado_init,
- .finish = ffado_finish,
- .open = ffado_open,
- .close = ffado_close,
- .play = ffado_play,
-};
diff --git a/src/output/ffado_output_plugin.h b/src/output/ffado_output_plugin.h
deleted file mode 100644
index 4dde01859..000000000
--- a/src/output/ffado_output_plugin.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
- * http://www.musicpd.org
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef MPD_FFADO_OUTPUT_PLUGIN_H
-#define MPD_FFADO_OUTPUT_PLUGIN_H
-
-extern const struct audio_output_plugin ffado_output_plugin;
-
-#endif
diff --git a/valgrind.suppressions b/valgrind.suppressions
index 56bb8e62f..240626ff6 100644
--- a/valgrind.suppressions
+++ b/valgrind.suppressions
@@ -549,14 +549,3 @@
fun:call_init
fun:_dl_init
}
-
-{
- <insert_a_suppression_name_here>
- Memcheck:Leak
- fun:*alloc
- fun:_dl_allocate_tls
- ...
- obj:*/libffado.so*
- fun:call_init
- fun:_dl_init
-}