Merged release 0.15.1 from branch 'v0.15.x'

This commit is contained in:
Max Kellermann 2009-07-16 07:37:13 +02:00
commit 4100035b19
11 changed files with 245 additions and 32 deletions

11
NEWS
View File

@ -23,6 +23,17 @@ ver 0.16 (20??/??/??)
* renamed option "--stdout" to "--stderr" * renamed option "--stdout" to "--stderr"
ver 0.15.1 (2009/07/15)
* decoders:
- flac: fix assertion failure in tag_free() call
* output:
- httpd: include sys/types.h (fixes Mac OS X)
* commands:
- don't resume playback when stopping during pause
* database: fixed NULL pointer dereference after charset change
* log: fix double free() bug during shutdown
ver 0.15 (2009/06/23) ver 0.15 (2009/06/23)
* input: * input:
- parse Icy-Metadata - parse Icy-Metadata

View File

@ -402,9 +402,9 @@ if test x$enable_audiofile = xyes; then
fi fi
AC_ARG_ENABLE(ffmpeg, AC_ARG_ENABLE(ffmpeg,
AS_HELP_STRING([--disable-ffmpeg], AS_HELP_STRING([--enable-ffmpeg],
[enable FFMPEG support (default: enable)]),, [enable FFMPEG support]),,
enable_ffmpeg=yes) enable_ffmpeg=auto)
AC_ARG_ENABLE(flac, AC_ARG_ENABLE(flac,
AS_HELP_STRING([--disable-flac], AS_HELP_STRING([--disable-flac],
@ -932,10 +932,8 @@ AM_CONDITIONAL(HAVE_FLAC_COMMON,
AM_CONDITIONAL(HAVE_OGG_COMMON, AM_CONDITIONAL(HAVE_OGG_COMMON,
test x$enable_vorbis = xyes || test x$enable_oggflac = xyes || test x$enable_flac = xyes) test x$enable_vorbis = xyes || test x$enable_oggflac = xyes || test x$enable_flac = xyes)
if test x$enable_ffmpeg = xyes; then MPD_AUTO_PKG(ffmpeg, FFMPEG, [libavformat libavcodec libavutil],
PKG_CHECK_MODULES(FFMPEG, [libavformat libavcodec libavutil],, [ffmpeg decoder library], [libavformat+libavcodec+libavutil not found])
enable_ffmpeg=no)
fi
if test x$enable_ffmpeg = xyes; then if test x$enable_ffmpeg = xyes; then
old_LIBS=$LIBS old_LIBS=$LIBS

View File

@ -35,8 +35,8 @@ You must recreate the database after changing this option.
The default is "yes". The default is "yes".
.TP .TP
.B follow_inside_symlinks <yes or no> .B follow_inside_symlinks <yes or no>
Control if MPD will follow symbolic links pointing outside the music dir, potentially Control if MPD will follow symbolic links pointing inside the music dir,
adding duplicates to the database. potentially adding duplicates to the database.
You must recreate the database after changing this option. You must recreate the database after changing this option.
The default is "yes". The default is "yes".
.TP .TP

View File

@ -134,7 +134,7 @@
<listitem> <listitem>
<para> <para>
<returnvalue>database</returnvalue>: the song database <returnvalue>database</returnvalue>: the song database
has been modified has been modified after <command>update</command>.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>

View File

@ -11,6 +11,30 @@
This document is work in progress. Most of it may be incomplete This document is work in progress. Most of it may be incomplete
yet. Please help! yet. Please help!
</para> </para>
<para>
MPD (Music Player Daemon) is, as the name suggests, a server
software allowing you to remotely play your music, handle
playlists, deliver music (HTTP STREAMS with various
sub-protocols) and organizze playlists.
</para>
<para>
It has been written with minimal resource usage and stability in
mind! Infact, it runs fine on a Pentium 75, allowing you to use
your cheap old PC to create a stereo system!
</para>
<para>
MPD supports also Gapless playback, buffered audio output, and
crossfading!
</para>
<para>
The separate client and server design allows users to choose a
user interface that best suites their tastes independently of
the underlying daemon, which actually plays music!
</para>
</chapter> </chapter>
<chapter> <chapter>
@ -26,10 +50,16 @@
<title>Installing on Debian/Ubuntu</title> <title>Installing on Debian/Ubuntu</title>
<para> <para>
Install the package <filename>mpd</filename>: Install the package <filename>mpd</filename> via APT:
</para> </para>
<programlisting>apt-get install mpd</programlisting> <programlisting>apt-get install mpd</programlisting>
<para>
When installed this way, MPD by default looks for music in
/var/lib/mpd/music/; this may not be correct. Look at your
/etc/mpd.conf file...
</para>
</section> </section>
<section> <section>
@ -41,8 +71,8 @@
page</ulink> and unpack it: page</ulink> and unpack it:
</para> </para>
<programlisting>tar xjf mpd-0.14.2.tar.bz <programlisting>tar xjf mpd-version.tar.bz
cd mpd-0.14.2</programlisting> cd mpd-version</programlisting>
<para> <para>
Make sure that all the required libraries and build tools are Make sure that all the required libraries and build tools are
@ -737,6 +767,28 @@ cd mpd-0.14.2</programlisting>
The <varname>pipe</varname> plugin starts a program and The <varname>pipe</varname> plugin starts a program and
writes raw PCM data into its standard input. writes raw PCM data into its standard input.
</para> </para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>Setting</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<varname>command</varname>
<parameter>CMD</parameter>
</entry>
<entry>
This command is invoked with the shell.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</section> </section>
<section> <section>
@ -746,6 +798,40 @@ cd mpd-0.14.2</programlisting>
The <varname>pulse</varname> plugin connects to a PulseAudio The <varname>pulse</varname> plugin connects to a PulseAudio
server. server.
</para> </para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>Setting</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<varname>server</varname>
<parameter>HOSTNAME</parameter>
</entry>
<entry>
Sets the host name of the PulseAudio server. By
default, MPD connects to the local PulseAudio
server.
</entry>
</row>
<row>
<entry>
<varname>sink</varname>
<parameter>NAME</parameter>
</entry>
<entry>
Specifies the name of the PulseAudio sink MPD should
play on.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</section> </section>
<section> <section>
@ -755,6 +841,129 @@ cd mpd-0.14.2</programlisting>
The <varname>shout</varname> plugin connects to a ShoutCast The <varname>shout</varname> plugin connects to a ShoutCast
or IceCast server. It forwards tags to this server. or IceCast server. It forwards tags to this server.
</para> </para>
<para>
You must set a <varname>format</varname>.
</para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>Setting</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<varname>host</varname>
<parameter>HOSTNAME</parameter>
</entry>
<entry>
Sets the host name of the Shoutcast/Icecast server.
</entry>
</row>
<row>
<entry>
<varname>port</varname>
<parameter>PORTNUMBER</parameter>
</entry>
<entry>
Connect to this port number on the specified host.
</entry>
</row>
<row>
<entry>
<varname>timeout</varname>
<parameter>SECONDS</parameter>
</entry>
<entry>
Set the timeout for the shout connection in seconds.
Defaults to 2 seconds.
</entry>
</row>
<row>
<entry>
<varname>mount</varname>
<parameter>URI</parameter>
</entry>
<entry>
Mounts the MPD stream in the specified URI.
</entry>
</row>
<row>
<entry>
<varname>user</varname>
<parameter>USERNAME</parameter>
</entry>
<entry>
Sets the user name for submitting the stream to the
server. Default is "source".
</entry>
</row>
<row>
<entry>
<varname>password</varname>
<parameter>PWD</parameter>
</entry>
<entry>
Sets the password for submitting the stream to the
server.
</entry>
</row>
<row>
<entry>
<varname>name</varname>
<parameter>NAME</parameter>
</entry>
<entry>
Sets the name of the stream.
</entry>
</row>
<row>
<entry>
<varname>genre</varname>
<parameter>GENRE</parameter>
</entry>
<entry>
Sets the genre of the stream (optional).
</entry>
</row>
<row>
<entry>
<varname>description</varname>
<parameter>DESCRIPTION</parameter>
</entry>
<entry>
Sets a short description of the stream (optional).
</entry>
</row>
<row>
<entry>
<varname>public</varname>
<parameter>yes|no</parameter>
</entry>
<entry>
Specifies whether the stream should be "public".
Default is "no".
</entry>
</row>
<row>
<entry>
<varname>encoder</varname>
<parameter>PLUGIN</parameter>
</entry>
<entry>
Sets the name of the encoder plugin. Default is
"vorbis". "vorbis" and "lame" are valid encoder
plugins (provided that you enabled them at compile
time).
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</section> </section>
<section> <section>

View File

@ -318,10 +318,11 @@ db_load(GError **error)
if (old_charset != NULL if (old_charset != NULL
&& strcmp(new_charset, old_charset)) { && strcmp(new_charset, old_charset)) {
fclose(fp); fclose(fp);
g_message("Existing database has charset \"%s\" " g_set_error(error, db_quark(), 0,
"instead of \"%s\"; " "Existing database has charset "
"discarding database file", "\"%s\" instead of \"%s\"; "
new_charset, old_charset); "discarding database file",
new_charset, old_charset);
return false; return false;
} }
} else { } else {

View File

@ -408,6 +408,7 @@ flac_decode_internal(struct decoder * decoder,
if (!(flac_dec = flac_new())) if (!(flac_dec = flac_new()))
return; return;
flac_data_init(&data, decoder, input_stream); flac_data_init(&data, decoder, input_stream);
data.tag = tag_new();
#if defined(FLAC_API_VERSION_CURRENT) && FLAC_API_VERSION_CURRENT > 7 #if defined(FLAC_API_VERSION_CURRENT) && FLAC_API_VERSION_CURRENT > 7
if(!FLAC__stream_decoder_set_metadata_respond(flac_dec, FLAC__METADATA_TYPE_VORBIS_COMMENT)) if(!FLAC__stream_decoder_set_metadata_respond(flac_dec, FLAC__METADATA_TYPE_VORBIS_COMMENT))
@ -436,8 +437,6 @@ flac_decode_internal(struct decoder * decoder,
} }
} }
data.tag = tag_new();
if (!flac_process_metadata(flac_dec)) { if (!flac_process_metadata(flac_dec)) {
err = "problem reading metadata"; err = "problem reading metadata";
goto fail; goto fail;

View File

@ -259,12 +259,8 @@ void log_init(bool verbose, bool use_stdout)
log_init_syslog(); log_init_syslog();
#endif #endif
} else { } else {
char *path = parsePath(param->value); const char *path = config_get_path(CONF_LOG_FILE);
g_free(param->value); assert(path != NULL);
if (path == NULL)
g_error("error parsing \"%s\" at line %i\n",
CONF_LOG_FILE, param->line);
log_init_file(path, param->line); log_init_file(path, param->line);
} }

View File

@ -28,15 +28,12 @@
#include <assert.h> #include <assert.h>
#include <sys/types.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <netdb.h> #include <netdb.h>
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#ifdef HAVE_OSX
#include <sys/types.h>
#endif
#undef G_LOG_DOMAIN #undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "httpd_output" #define G_LOG_DOMAIN "httpd_output"

View File

@ -439,8 +439,6 @@ audio_output_all_cancel(void)
{ {
unsigned int i; unsigned int i;
audio_output_all_update();
/* send the cancel() command to all audio outputs */ /* send the cancel() command to all audio outputs */
for (i = 0; i < num_audio_outputs; ++i) { for (i = 0; i < num_audio_outputs; ++i) {

View File

@ -338,7 +338,11 @@ static gpointer audio_output_task(gpointer arg)
case AO_COMMAND_PAUSE: case AO_COMMAND_PAUSE:
ao_pause(ao); ao_pause(ao);
break; /* don't "break" here: this might cause
ao_play() to be called when command==CLOSE
ends the paused state - "continue" checks
the new command first */
continue;
case AO_COMMAND_CANCEL: case AO_COMMAND_CANCEL:
ao->chunk = NULL; ao->chunk = NULL;