Merged release 0.15.1 from branch 'v0.15.x'
This commit is contained in:
commit
4100035b19
11
NEWS
11
NEWS
@ -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
|
||||||
|
12
configure.ac
12
configure.ac
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
215
doc/user.xml
215
doc/user.xml
@ -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>
|
||||||
|
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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"
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user