Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
daba1238b5 | ||
![]() |
d125567f4a | ||
![]() |
993eca9327 | ||
![]() |
e314844a4d | ||
![]() |
017bc564af | ||
![]() |
e076ff9085 | ||
![]() |
2789493a5f | ||
![]() |
4ed0635447 | ||
![]() |
1904e504be | ||
![]() |
834715ea2f |
17
INSTALL
17
INSTALL
@@ -3,9 +3,11 @@
|
|||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
------------
|
------------
|
||||||
|
|
||||||
This document is a very small amount of documentation about what is needed to
|
This document is a very small amount of documentation about what is needed to
|
||||||
install MPD. If more information is desired see the community wiki at
|
install MPD. If more information is desired, read the user manual:
|
||||||
http://mpd.wikia.com.
|
|
||||||
|
http://www.musicpd.org/doc/user/
|
||||||
|
|
||||||
Dependencies
|
Dependencies
|
||||||
------------
|
------------
|
||||||
@@ -161,13 +163,9 @@ Get the latest release from of MPD from <http://www.musicpd.org/>.
|
|||||||
Compile
|
Compile
|
||||||
-------
|
-------
|
||||||
|
|
||||||
1) unzip and untar the archive
|
1) unpack the archive
|
||||||
|
|
||||||
$ tar zxvf mpd-x.x.x.tar.gz
|
$ tar xf mpd-x.x.x.tar.xz
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
$ tar jxvf mpd-x.x.x.tar.bz2
|
|
||||||
|
|
||||||
2) change to directory created
|
2) change to directory created
|
||||||
|
|
||||||
@@ -208,6 +206,5 @@ Using MPD
|
|||||||
---------
|
---------
|
||||||
|
|
||||||
You can download many different interfaces for MPD at
|
You can download many different interfaces for MPD at
|
||||||
<http://mpd.wikia.com/wiki/Clients>
|
|
||||||
|
|
||||||
MPD can be interfaced directly using telnet (see COMMANDS, if you are brave).
|
http://www.musicpd.org/clients/
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
ACLOCAL_AMFLAGS = -I m4
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
AUTOMAKE_OPTIONS = foreign 1.11 dist-bzip2 dist-xz subdir-objects
|
AUTOMAKE_OPTIONS = foreign 1.11 dist-xz subdir-objects
|
||||||
|
|
||||||
AM_CPPFLAGS += -I$(srcdir)/src $(GLIB_CFLAGS)
|
AM_CPPFLAGS += -I$(srcdir)/src $(GLIB_CFLAGS)
|
||||||
|
|
||||||
|
3
NEWS
3
NEWS
@@ -1,3 +1,6 @@
|
|||||||
|
ver 0.18.3 (2013/11/08)
|
||||||
|
* fix stuck MPD after song change (0.18.2 regression)
|
||||||
|
|
||||||
ver 0.18.2 (2013/11/07)
|
ver 0.18.2 (2013/11/07)
|
||||||
* protocol:
|
* protocol:
|
||||||
- "close" flushes the output buffer
|
- "close" flushes the output buffer
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
AC_PREREQ(2.60)
|
AC_PREREQ(2.60)
|
||||||
|
|
||||||
AC_INIT(mpd, 0.18.2, musicpd-dev-team@lists.sourceforge.net)
|
AC_INIT(mpd, 0.18.3, musicpd-dev-team@lists.sourceforge.net)
|
||||||
|
|
||||||
VERSION_MAJOR=0
|
VERSION_MAJOR=0
|
||||||
VERSION_MINOR=18
|
VERSION_MINOR=18
|
||||||
@@ -8,7 +8,7 @@ VERSION_REVISION=0
|
|||||||
VERSION_EXTRA=0
|
VERSION_EXTRA=0
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([src/Main.cxx])
|
AC_CONFIG_SRCDIR([src/Main.cxx])
|
||||||
AM_INIT_AUTOMAKE([foreign 1.11 dist-bzip2 dist-xz subdir-objects])
|
AM_INIT_AUTOMAKE([foreign 1.11 dist-xz subdir-objects])
|
||||||
AM_SILENT_RULES
|
AM_SILENT_RULES
|
||||||
AC_CONFIG_HEADERS(config.h)
|
AC_CONFIG_HEADERS(config.h)
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
@@ -68,12 +68,28 @@ foo(const char *abc, int xyz)
|
|||||||
<chapter>
|
<chapter>
|
||||||
<title>Hacking The Source</title>
|
<title>Hacking The Source</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
MPD sources are managed in a git repository on <ulink
|
||||||
|
url="http://git.musicpd.org/">git.musicpd.org</ulink>.
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Always write your code against the latest git:
|
Always write your code against the latest git:
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>git clone git://git.musicpd.org/master/mpd.git</programlisting>
|
<programlisting>git clone git://git.musicpd.org/master/mpd.git</programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If you already have a clone, update it:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting>git pull --rebase git://git.musicpd.org/master/mpd.git master</programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You can do without "--rebase", but we recommend that you rebase
|
||||||
|
your repository on the "master" repository all the time.
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Configure with the options <option>--enable-debug
|
Configure with the options <option>--enable-debug
|
||||||
--enable-werror</option>. Enable as many plugins as possible,
|
--enable-werror</option>. Enable as many plugins as possible,
|
||||||
@@ -83,8 +99,55 @@ foo(const char *abc, int xyz)
|
|||||||
<para>
|
<para>
|
||||||
Don't mix several changes in one single patch. Create a
|
Don't mix several changes in one single patch. Create a
|
||||||
separate patch for every change. Tools like
|
separate patch for every change. Tools like
|
||||||
<application>stgit</application> help you with that.
|
<application>stgit</application> help you with that. This way,
|
||||||
|
we can review your patches more easily, and we can pick the
|
||||||
|
patches we like most first.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title> Basic stgit usage</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
stgit allows you to create a set of patches and refine all of
|
||||||
|
them: you can go back to any patch at any time, and re-edit it
|
||||||
|
(both the code and the commit message). You can reorder
|
||||||
|
patches and insert new patches at any position. It encourages
|
||||||
|
creating separate patches for tiny changes.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
stgit needs to be initialized on a git repository: stg init
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Before you edit the code, create a patch: stg new
|
||||||
|
my-patch-name (stgit now asks you for the commit message).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Now edit the code. Once you're finished, you have to "refresh"
|
||||||
|
the patch, i.e. your edits are incorporated into the patch you
|
||||||
|
have created: stg refresh
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may now continue editing the same patch, and refresh it as
|
||||||
|
often as you like. Create more patches, edit and refresh them.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
To view the list of patches, type stg series. To go back to a
|
||||||
|
specific patch, type stg goto my-patch-name; now you can
|
||||||
|
re-edit it (don't forget stg refresh when you're finished with
|
||||||
|
that patch).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
When the whole patch series is finished, convert stgit patches
|
||||||
|
to git commits: stg commit
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter>
|
<chapter>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# An example configuration file for MPD
|
# An example configuration file for MPD.
|
||||||
# See the mpd.conf man page for a more detailed description of each parameter.
|
# Read the user manual for documentation: http://www.musicpd.org/doc/user/
|
||||||
|
|
||||||
|
|
||||||
# Files and directories #######################################################
|
# Files and directories #######################################################
|
||||||
@@ -204,9 +204,6 @@ input {
|
|||||||
# blocks. Setting this block is optional, though the server will only attempt
|
# blocks. Setting this block is optional, though the server will only attempt
|
||||||
# autodetection for one sound card.
|
# autodetection for one sound card.
|
||||||
#
|
#
|
||||||
# See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs> for examples of
|
|
||||||
# other audio outputs.
|
|
||||||
#
|
|
||||||
# An example of an ALSA output:
|
# An example of an ALSA output:
|
||||||
#
|
#
|
||||||
#audio_output {
|
#audio_output {
|
||||||
|
@@ -67,11 +67,11 @@
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
Download the source tarball from <ulink
|
Download the source tarball from <ulink
|
||||||
url="http://mpd.wikia.com/wiki/Server">the MPD home
|
url="http://www.musicpd.org/download.html">the MPD home
|
||||||
page</ulink> and unpack it:
|
page</ulink> and unpack it:
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>tar xjf mpd-version.tar.bz
|
<programlisting>tar xf mpd-version.tar.xz
|
||||||
cd mpd-version</programlisting>
|
cd mpd-version</programlisting>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@@ -630,7 +630,7 @@ systemctl start mpd.socket</programlisting>
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The <ulink url="http://mpd.wikia.com/wiki/Clients">MPD
|
The <ulink url="http://www.musicpd.org/clients/">MPD
|
||||||
Wiki</ulink> contains an extensive list of clients to choose
|
Wiki</ulink> contains an extensive list of clients to choose
|
||||||
from.
|
from.
|
||||||
</para>
|
</para>
|
||||||
|
@@ -283,11 +283,11 @@ decoder_read(Decoder *decoder,
|
|||||||
assert(nbytes == 0 || !error.IsDefined());
|
assert(nbytes == 0 || !error.IsDefined());
|
||||||
assert(nbytes > 0 || error.IsDefined() || is.IsEOF());
|
assert(nbytes > 0 || error.IsDefined() || is.IsEOF());
|
||||||
|
|
||||||
|
is.Unlock();
|
||||||
|
|
||||||
if (gcc_unlikely(nbytes == 0 && error.IsDefined()))
|
if (gcc_unlikely(nbytes == 0 && error.IsDefined()))
|
||||||
LogError(error);
|
LogError(error);
|
||||||
|
|
||||||
is.Unlock();
|
|
||||||
|
|
||||||
return nbytes;
|
return nbytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -42,20 +42,12 @@ Decoder::~Decoder()
|
|||||||
* one.
|
* one.
|
||||||
*/
|
*/
|
||||||
static DecoderCommand
|
static DecoderCommand
|
||||||
need_chunks(DecoderControl &dc, bool do_wait)
|
need_chunks(DecoderControl &dc)
|
||||||
{
|
{
|
||||||
if (dc.command == DecoderCommand::STOP ||
|
if (dc.command == DecoderCommand::NONE)
|
||||||
dc.command == DecoderCommand::SEEK)
|
|
||||||
return dc.command;
|
|
||||||
|
|
||||||
if (do_wait) {
|
|
||||||
dc.Wait();
|
dc.Wait();
|
||||||
dc.client_cond.signal();
|
|
||||||
|
|
||||||
return dc.command;
|
return dc.command;
|
||||||
}
|
|
||||||
|
|
||||||
return DecoderCommand::NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct music_chunk *
|
struct music_chunk *
|
||||||
@@ -80,7 +72,7 @@ decoder_get_chunk(Decoder &decoder)
|
|||||||
}
|
}
|
||||||
|
|
||||||
dc.Lock();
|
dc.Lock();
|
||||||
cmd = need_chunks(dc, true);
|
cmd = need_chunks(dc);
|
||||||
dc.Unlock();
|
dc.Unlock();
|
||||||
} while (cmd == DecoderCommand::NONE);
|
} while (cmd == DecoderCommand::NONE);
|
||||||
|
|
||||||
|
@@ -36,8 +36,6 @@
|
|||||||
#include "util/Domain.hxx"
|
#include "util/Domain.hxx"
|
||||||
#include "Log.hxx"
|
#include "Log.hxx"
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
static constexpr Domain player_domain("player");
|
static constexpr Domain player_domain("player");
|
||||||
@@ -1043,8 +1041,14 @@ Player::Run()
|
|||||||
output thread is still busy, so it's
|
output thread is still busy, so it's
|
||||||
okay */
|
okay */
|
||||||
|
|
||||||
/* XXX synchronize in a better way */
|
pc.Lock();
|
||||||
g_usleep(10000);
|
|
||||||
|
/* wake up the decoder (just in case it's
|
||||||
|
waiting for space in the MusicBuffer) and
|
||||||
|
wait for it */
|
||||||
|
dc.Signal();
|
||||||
|
dc.WaitForDecoder();
|
||||||
|
continue;
|
||||||
} else if (IsDecoderAtNextSong()) {
|
} else if (IsDecoderAtNextSong()) {
|
||||||
/* at the beginning of a new song */
|
/* at the beginning of a new song */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user