The lastfm input plugin enables MPD to play lastfm:// URLs. This
plugin is not complete yet: it plays only the first song in the
last.fm playlist, and the playlist parser isn't even implemented
properly.
Recursive Makefiles are inefficient and error prone (no proper way to
declare dependencies). Since there's no disadvantage in having one
single Makefile, let's do it.
The configure.ac script does not care about the host architecture, it
only cares about the OS. Use ${host_os} instead of ${host} to
simplify the matching expressions.
Use faacDecInit2() instead of AudioSpecificConfig() to detect the AAC
track in the MP4 file. This has a great advantage: it initializes the
libfaad decoder, which the caller would normally do anyway - but now
we can go without the AudioSpecificConfig() call. When decoder==NULL
(called from mp4_tag_dup()), fall back to a mp4ff_get_track_type()==1
check, like other audio players do.
Currently, only the sidplay decoder plugin requires C++, and in all
other cases, MPD could build well without a C++ compiler.
Unfortunately, autoconf/automake are confused when we have a
conditional AC_PROG_CXX check. We could add lots of workarounds for
individual problems, but let's just always require a C++ compiler, and
forget about this autotools limitation.
There are a few problems left in this plugin:
- fluidsynth decodes in real time, while MPD prefers to buffer as
quickly as possible; as a workaround, this plugin uses a timer
object to synchronize with real-time playback
- I don't know yet how fluidsynth tells me when the song has ended
- the "soundfont" configuration setting is not yet documented, and it
will likely change soon (in favor of a per-decoder configuration
block)
When the sidplay plugin is disabled, "./configure" does not look for
the C++ compiler. This creates an odd situation: automake requires
the am__fastdepCXX conditional, although configure did not generate
it. Work around this autotools limitation by manually disabling
am__fastdepCXX.
Don't define HAVE_FFMPEG if the ffmpeg libraries were found via
pkg-config, but ffmpeg support was disabled because
avcodec_decode_audio2() is not available.
This patch implements the MMS protocol, by using libmms. It is quite
experimental: it does not support seeking yet, and it is currently
using synchronous I/O, which causes MPD to hang while waiting for the
server.
MPD will (optionall) use sqlite databases in the future. Add a
configure option to enable that. There is no code yet to really use
sqlite, so the practical use of this patch is limited.
libid3tag comes without a pkg-config file, and it is usually added by
distribution packages. For those without .pc file, attempt to
auto-detect the library with AC_CHECK_LIB.
This is a rather huge patch, which unfortunately cannot be splitted.
Instead of using our custom ioops.h library, convert everything to use
the GLib main loop.
Don't split configure options and their implementation. Check for the
backend library before the AM_CONDITIONAL, otherwise Makefile.am will
compile the plugin although the library may not be available.
When updating from a version before libcurl was used for streaming
support, this is confusing - streaming will work with the old version
(e.g. 0.13.2) but will give "no such file" errors with the new due to
the missing dependency. However, the missing dependency will not be
obvious when running the configure script.
neaacdec.h declares all arguments as "unsigned long", but internally
expects uint32_t pointers. This triggers gcc warnings on 64 bit
architectures. To avoid that, make configure.ac detect whether we're
using Debian's corrected headers or the original libfaad headers. In
any case, pass a pointer to an uint32_t, conditionally casted to
"unsigned long*".
MPD used to have a copy of the mp4ff library. Since that has been
removed, AAC suport was disabled when there was no libmp4ff. Separate
the libmp4ff test, and enable AAC support no matter if libmp4ff is
available.
MPD's HTTP client code has always been broken, no matter how effort
was put into fixing it. Replace it with libcurl, which is known to be
quite stable. This adds a fat library dependency, but only for people
who need streaming.
Several clients refuse to accept the protocol version "0.14~git",
because they think it is malformed. This is clearly a client bug, but
we cannot wait for all clients to fix this bug right now. For now,
change the version back to "0.14.0".
For testers, it should be clear that they're not using version 0.14.0
final, but an inofficial intermediate version from the git repository.
The protocol version is set to the same string, since the protocol is
subject to change during MPD development.
MPD shouldn't integrate sources of other libraries. Since libmp4ff is
part of libfaad, we should remove the old copy from src/mp4ff and link
with the current version from libfaad instead.