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"
|
||||
|
||||
|
||||
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)
|
||||
* input:
|
||||
- parse Icy-Metadata
|
||||
|
12
configure.ac
12
configure.ac
@ -402,9 +402,9 @@ if test x$enable_audiofile = xyes; then
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(ffmpeg,
|
||||
AS_HELP_STRING([--disable-ffmpeg],
|
||||
[enable FFMPEG support (default: enable)]),,
|
||||
enable_ffmpeg=yes)
|
||||
AS_HELP_STRING([--enable-ffmpeg],
|
||||
[enable FFMPEG support]),,
|
||||
enable_ffmpeg=auto)
|
||||
|
||||
AC_ARG_ENABLE(flac,
|
||||
AS_HELP_STRING([--disable-flac],
|
||||
@ -932,10 +932,8 @@ AM_CONDITIONAL(HAVE_FLAC_COMMON,
|
||||
AM_CONDITIONAL(HAVE_OGG_COMMON,
|
||||
test x$enable_vorbis = xyes || test x$enable_oggflac = xyes || test x$enable_flac = xyes)
|
||||
|
||||
if test x$enable_ffmpeg = xyes; then
|
||||
PKG_CHECK_MODULES(FFMPEG, [libavformat libavcodec libavutil],,
|
||||
enable_ffmpeg=no)
|
||||
fi
|
||||
MPD_AUTO_PKG(ffmpeg, FFMPEG, [libavformat libavcodec libavutil],
|
||||
[ffmpeg decoder library], [libavformat+libavcodec+libavutil not found])
|
||||
|
||||
if test x$enable_ffmpeg = xyes; then
|
||||
old_LIBS=$LIBS
|
||||
|
@ -35,8 +35,8 @@ You must recreate the database after changing this option.
|
||||
The default is "yes".
|
||||
.TP
|
||||
.B follow_inside_symlinks <yes or no>
|
||||
Control if MPD will follow symbolic links pointing outside the music dir, potentially
|
||||
adding duplicates to the database.
|
||||
Control if MPD will follow symbolic links pointing inside the music dir,
|
||||
potentially adding duplicates to the database.
|
||||
You must recreate the database after changing this option.
|
||||
The default is "yes".
|
||||
.TP
|
||||
|
@ -134,7 +134,7 @@
|
||||
<listitem>
|
||||
<para>
|
||||
<returnvalue>database</returnvalue>: the song database
|
||||
has been modified
|
||||
has been modified after <command>update</command>.
|
||||
</para>
|
||||
</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
|
||||
yet. Please help!
|
||||
</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>
|
||||
@ -26,10 +50,16 @@
|
||||
<title>Installing on Debian/Ubuntu</title>
|
||||
|
||||
<para>
|
||||
Install the package <filename>mpd</filename>:
|
||||
Install the package <filename>mpd</filename> via APT:
|
||||
</para>
|
||||
|
||||
<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>
|
||||
@ -41,8 +71,8 @@
|
||||
page</ulink> and unpack it:
|
||||
</para>
|
||||
|
||||
<programlisting>tar xjf mpd-0.14.2.tar.bz
|
||||
cd mpd-0.14.2</programlisting>
|
||||
<programlisting>tar xjf mpd-version.tar.bz
|
||||
cd mpd-version</programlisting>
|
||||
|
||||
<para>
|
||||
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
|
||||
writes raw PCM data into its standard input.
|
||||
</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>
|
||||
@ -746,6 +798,40 @@ cd mpd-0.14.2</programlisting>
|
||||
The <varname>pulse</varname> plugin connects to a PulseAudio
|
||||
server.
|
||||
</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>
|
||||
@ -755,6 +841,129 @@ cd mpd-0.14.2</programlisting>
|
||||
The <varname>shout</varname> plugin connects to a ShoutCast
|
||||
or IceCast server. It forwards tags to this server.
|
||||
</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>
|
||||
|
@ -318,10 +318,11 @@ db_load(GError **error)
|
||||
if (old_charset != NULL
|
||||
&& strcmp(new_charset, old_charset)) {
|
||||
fclose(fp);
|
||||
g_message("Existing database has charset \"%s\" "
|
||||
"instead of \"%s\"; "
|
||||
"discarding database file",
|
||||
new_charset, old_charset);
|
||||
g_set_error(error, db_quark(), 0,
|
||||
"Existing database has charset "
|
||||
"\"%s\" instead of \"%s\"; "
|
||||
"discarding database file",
|
||||
new_charset, old_charset);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
|
@ -408,6 +408,7 @@ flac_decode_internal(struct decoder * decoder,
|
||||
if (!(flac_dec = flac_new()))
|
||||
return;
|
||||
flac_data_init(&data, decoder, input_stream);
|
||||
data.tag = tag_new();
|
||||
|
||||
#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))
|
||||
@ -436,8 +437,6 @@ flac_decode_internal(struct decoder * decoder,
|
||||
}
|
||||
}
|
||||
|
||||
data.tag = tag_new();
|
||||
|
||||
if (!flac_process_metadata(flac_dec)) {
|
||||
err = "problem reading metadata";
|
||||
goto fail;
|
||||
|
@ -259,12 +259,8 @@ void log_init(bool verbose, bool use_stdout)
|
||||
log_init_syslog();
|
||||
#endif
|
||||
} else {
|
||||
char *path = parsePath(param->value);
|
||||
g_free(param->value);
|
||||
|
||||
if (path == NULL)
|
||||
g_error("error parsing \"%s\" at line %i\n",
|
||||
CONF_LOG_FILE, param->line);
|
||||
const char *path = config_get_path(CONF_LOG_FILE);
|
||||
assert(path != NULL);
|
||||
|
||||
log_init_file(path, param->line);
|
||||
}
|
||||
|
@ -28,15 +28,12 @@
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef HAVE_OSX
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#undef G_LOG_DOMAIN
|
||||
#define G_LOG_DOMAIN "httpd_output"
|
||||
|
||||
|
@ -439,8 +439,6 @@ audio_output_all_cancel(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
audio_output_all_update();
|
||||
|
||||
/* send the cancel() command to all audio outputs */
|
||||
|
||||
for (i = 0; i < num_audio_outputs; ++i) {
|
||||
|
@ -338,7 +338,11 @@ static gpointer audio_output_task(gpointer arg)
|
||||
|
||||
case AO_COMMAND_PAUSE:
|
||||
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:
|
||||
ao->chunk = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user