release v0.19.15
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJXJKNhAAoJECNuiljG20US7pcP/A2sFmmf+QlKvV5G88D+UxbX kIoz3d5mHRoW4kJcbhUKUVe9pIkQEWTVC4XNNi8ggO8/MUa7+FpUPR0bJDgmLnnm jM3tV/eVXUmPgXTgj1PT0jOTNCNNJx69JYhz7nMGIAbxubs7hRGTfGgJYnTQImsW yDVst0BH7C6i21kmAWjQYoFZu0h7ZoyBOZTHAyR/6wF6Bmlc5JAEV6eBRyrU3MLN Mma4+rJhMh+2206SqUBJEVwEszaTJnmu7Xi5Zmk+LGSrykJt93bQio7k2hJ5PvKJ feFCXl1IpobUMpPJ+Nv1QraTKO9lg5oEYOwlcxJf4JwfqpRk+oXr+MZ52iR9jMtw otcux72CYMmSJOC2Sl8cq9TdQCOb7XxhDjv+Phf44WG5Ns1QJQY7rvrGLT0gFSLx MVD2WKJCrWFgql6ugf9lhsrt7x8llD9anNqbJNamXmGoL0NFJs6sg9d02vbRuIDz xOcBPKnDB/Ao1TxXT4/Ck6gzYwTd+sxvsrC2XwthDXTiM+qe+pAjF+KFKd5thIUs Hh296GL8Ch68X+6HXVkCKwyW9F503LFAcXTlP6XQUnkpPHNU536VdUjaHmx557jR 3cY7d67gHSVxllDQJYp0GIMIKyaZhQ4V7w3l1IKzPc1KrhryOxvlbAaYVSHo26nI yZMKwFJ1L0l9j76kZG4a =GyO9 -----END PGP SIGNATURE----- Merge tag 'v0.19.15' release v0.19.15
This commit is contained in:
commit
3fb8f3ec95
|
@ -2261,7 +2261,9 @@ developer_DATA = $(wildcard doc/developer/*.html)
|
||||||
|
|
||||||
DOCBOOK_HTML = $(patsubst %.xml,%/index.html,$(DOCBOOK_FILES))
|
DOCBOOK_HTML = $(patsubst %.xml,%/index.html,$(DOCBOOK_FILES))
|
||||||
|
|
||||||
$(DOCBOOK_HTML): %/index.html: %.xml
|
DOCBOOK_INCLUDES = $(wildcard $(srcdir)/doc/include/*.xml)
|
||||||
|
|
||||||
|
$(DOCBOOK_HTML): %/index.html: %.xml $(DOCBOOK_INCLUDES)
|
||||||
$(XMLTO) -o $(@D) --stringparam chunker.output.encoding=utf-8 html --stringparam use.id.as.filename=1 $<
|
$(XMLTO) -o $(@D) --stringparam chunker.output.encoding=utf-8 html --stringparam use.id.as.filename=1 $<
|
||||||
|
|
||||||
doc/api/html/index.html: doc/doxygen.conf
|
doc/api/html/index.html: doc/doxygen.conf
|
||||||
|
|
5
NEWS
5
NEWS
|
@ -52,11 +52,14 @@ ver 0.20 (not yet released)
|
||||||
* update
|
* update
|
||||||
- apply .mpdignore matches to subdirectories
|
- apply .mpdignore matches to subdirectories
|
||||||
|
|
||||||
ver 0.19.15 (not yet released)
|
ver 0.19.15 (2016/04/30)
|
||||||
* decoder
|
* decoder
|
||||||
- ffmpeg: support FFmpeg 3.0
|
- ffmpeg: support FFmpeg 3.0
|
||||||
- ffmpeg: use as fallback instead of "mad" if no plugin matches
|
- ffmpeg: use as fallback instead of "mad" if no plugin matches
|
||||||
|
- opus: support bigger OpusTags packets
|
||||||
* fix more build failures on non-glibc builds due to constexpr Mutex
|
* fix more build failures on non-glibc builds due to constexpr Mutex
|
||||||
|
* fix build failure due to missing include
|
||||||
|
* fix unit test on Alpha
|
||||||
|
|
||||||
ver 0.19.14 (2016/03/18)
|
ver 0.19.14 (2016/03/18)
|
||||||
* decoder
|
* decoder
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version='1.0' encoding="utf-8"?>
|
<?xml version='1.0' encoding="utf-8"?>
|
||||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||||
"docbook/dtd/xml/4.2/docbookx.dtd">
|
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||||
|
|
||||||
<book>
|
<book>
|
||||||
<title>The Music Player Daemon - Developer's Manual</title>
|
<title>The Music Player Daemon - Developer's Manual</title>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,154 @@
|
||||||
|
<?xml version='1.0' encoding="utf-8"?>
|
||||||
|
<!DOCTYPE itemizedlist PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>artist</varname>: the artist name. Its meaning is not
|
||||||
|
well-defined; see <varname>composer</varname> and
|
||||||
|
<varname>performer</varname> for more specific tags.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>artistsort</varname>: same as
|
||||||
|
<varname>artist</varname>, but for sorting. This usually omits
|
||||||
|
prefixes such as "The".
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>album</varname>: the album name.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>albumsort</varname>: same as <varname>album</varname>,
|
||||||
|
but for sorting.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>albumartist</varname>: on multi-artist albums, this is
|
||||||
|
the artist name which shall be used for the whole album. The
|
||||||
|
exact meaning of this tag is not well-defined.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>albumartistsort</varname>: same as
|
||||||
|
<varname>albumartist</varname>, but for sorting.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>title</varname>: the song title.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>track</varname>: the track number within the album.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>name</varname>: a name for this song. This is not the
|
||||||
|
song title. The exact meaning of this tag is not well-defined.
|
||||||
|
It is often used by badly configured internet radio stations
|
||||||
|
with broken tags to squeeze both the artist name and the song
|
||||||
|
title in one tag.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>genre</varname>: the music genre.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>date</varname>: the song's release date. This is
|
||||||
|
usually a 4-digit year.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>composer</varname>: the artist who composed the song.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>performer</varname>: the artist who performed the song.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>comment</varname>: a human-readable comment about this
|
||||||
|
song. The exact meaning of this tag is not well-defined.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>disc</varname>: the disc number in a multi-disc album.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>musicbrainz_artistid</varname>: the artist id in the
|
||||||
|
<ulink
|
||||||
|
url="http://musicbrainz.org/doc/MusicBrainzTag">MusicBrainz</ulink>
|
||||||
|
database.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>musicbrainz_albumid</varname>: the album id in the
|
||||||
|
<ulink
|
||||||
|
url="http://musicbrainz.org/doc/MusicBrainzTag">MusicBrainz</ulink>
|
||||||
|
database.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>musicbrainz_albumartistid</varname>: the album artist
|
||||||
|
id in the <ulink
|
||||||
|
url="http://musicbrainz.org/doc/MusicBrainzTag">MusicBrainz</ulink>
|
||||||
|
database.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>musicbrainz_trackid</varname>: the track id in the
|
||||||
|
<ulink
|
||||||
|
url="http://musicbrainz.org/doc/MusicBrainzTag">MusicBrainz</ulink>
|
||||||
|
database.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<varname>musicbrainz_releasetrackid</varname>: the release track
|
||||||
|
id in the <ulink
|
||||||
|
url="http://musicbrainz.org/doc/MusicBrainzTag">MusicBrainz</ulink>
|
||||||
|
database.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
|
@ -168,18 +168,6 @@ MP3 playback.
|
||||||
This specifies whether relative or absolute paths for song filenames are used
|
This specifies whether relative or absolute paths for song filenames are used
|
||||||
when saving playlists. The default is "no".
|
when saving playlists. The default is "no".
|
||||||
.TP
|
.TP
|
||||||
.B metadata_to_use <tags>
|
|
||||||
This specifies the tag types that will be scanned for and made available to
|
|
||||||
clients. Note that you must recreate (not update) your database for changes to
|
|
||||||
this parameter to take effect. Possible values are artist, album, title,
|
|
||||||
track, name, genre, date, composer, performer, comment, disc,
|
|
||||||
musicbrainz_artistid, musicbrainz_albumid, musicbrainz_albumartistid,
|
|
||||||
musicbrainz_releasetrackid, musicbrainz_trackid. Multiple tags may be specified
|
|
||||||
as a comma separated list.
|
|
||||||
An example value is "artist,album,title,track". The special value "none" may
|
|
||||||
be used alone to disable all metadata. The default is to use all known tag
|
|
||||||
types except for comments and those starting with "musicbrainz".
|
|
||||||
.TP
|
|
||||||
.B auto_update <yes or no>
|
.B auto_update <yes or no>
|
||||||
This specifies the whether to support automatic update of music database when
|
This specifies the whether to support automatic update of music database when
|
||||||
files are changed in music_directory. The default is to disable autoupdate
|
files are changed in music_directory. The default is to disable autoupdate
|
||||||
|
|
|
@ -116,7 +116,7 @@
|
||||||
#
|
#
|
||||||
# This setting defines a list of tag types that will be extracted during the
|
# This setting defines a list of tag types that will be extracted during the
|
||||||
# audio file discovery process. The complete list of possible values can be
|
# audio file discovery process. The complete list of possible values can be
|
||||||
# found in the mpd.conf man page.
|
# found in the user manual.
|
||||||
#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
|
#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
|
||||||
#
|
#
|
||||||
# This setting enables automatic update of MPD's database when files in
|
# This setting enables automatic update of MPD's database when files in
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version='1.0' encoding="utf-8"?>
|
<?xml version='1.0' encoding="utf-8"?>
|
||||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||||
"docbook/dtd/xml/4.2/docbookx.dtd">
|
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||||
|
|
||||||
<book>
|
<book>
|
||||||
<title>The Music Player Daemon protocol</title>
|
<title>The Music Player Daemon protocol</title>
|
||||||
|
|
||||||
|
@ -201,6 +202,25 @@
|
||||||
omitted, then the maximum possible value is assumed.
|
omitted, then the maximum possible value is assumed.
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section id="tags">
|
||||||
|
<title>Tags</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following tags are supported by
|
||||||
|
<application>MPD</application>:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<xi:include href="include/tags.xml"
|
||||||
|
xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There can be multiple values for some of these tags. For
|
||||||
|
example, <application>MPD</application> may return multiple
|
||||||
|
lines with a <varname>performer</varname> tag. A tag value is
|
||||||
|
a UTF-8 string.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="recipes">
|
<chapter id="recipes">
|
||||||
|
|
45
doc/user.xml
45
doc/user.xml
|
@ -1,6 +1,7 @@
|
||||||
<?xml version='1.0' encoding="utf-8"?>
|
<?xml version='1.0' encoding="utf-8"?>
|
||||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||||
"docbook/dtd/xml/4.2/docbookx.dtd">
|
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||||
|
|
||||||
<book>
|
<book>
|
||||||
<title>The Music Player Daemon - User's Manual</title>
|
<title>The Music Player Daemon - User's Manual</title>
|
||||||
|
|
||||||
|
@ -779,6 +780,33 @@ systemctl start mpd.socket</programlisting>
|
||||||
<section id="config_other">
|
<section id="config_other">
|
||||||
<title>Other Settings</title>
|
<title>Other Settings</title>
|
||||||
|
|
||||||
|
<informaltable>
|
||||||
|
<tgroup cols="2">
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry>Setting</entry>
|
||||||
|
<entry>Description</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
<varname>metadata_to_use</varname>
|
||||||
|
<parameter>TAG1,TAG2,...</parameter>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
Use only the specified tags, and ignore the others.
|
||||||
|
This setting can reduce the database size and
|
||||||
|
<application>MPD</application>'s memory usage by
|
||||||
|
omitting unused tags. By default, all tags but
|
||||||
|
<varname>comment</varname> are enabled. The special
|
||||||
|
value "none" disables all tags.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</informaltable>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<title>The State File</title>
|
<title>The State File</title>
|
||||||
|
|
||||||
|
@ -1134,6 +1162,19 @@ database {
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section id="tags">
|
||||||
|
<title>Metadata</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
When scanning or playing a song,
|
||||||
|
<application>MPD</application> parses its metadata. The
|
||||||
|
following tags are supported:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<xi:include href="include/tags.xml"
|
||||||
|
xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section id="queue">
|
<section id="queue">
|
||||||
<title>The queue</title>
|
<title>The queue</title>
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "util/ConstBuffer.hxx"
|
#include "util/ConstBuffer.hxx"
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
struct Decoder;
|
struct Decoder;
|
||||||
class InputStream;
|
class InputStream;
|
||||||
|
|
|
@ -440,13 +440,15 @@ mpd_opus_scan_stream(InputStream &is,
|
||||||
if (!oy.ExpectFirstPage(os))
|
if (!oy.ExpectFirstPage(os))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* read at most two more pages */
|
/* read at most 64 more pages */
|
||||||
unsigned remaining_pages = 2;
|
unsigned remaining_pages = 64;
|
||||||
|
|
||||||
|
unsigned remaining_packets = 4;
|
||||||
|
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
ogg_packet packet;
|
ogg_packet packet;
|
||||||
while (true) {
|
while (remaining_packets > 0) {
|
||||||
int r = ogg_stream_packetout(&os, &packet);
|
int r = ogg_stream_packetout(&os, &packet);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
result = false;
|
result = false;
|
||||||
|
@ -465,6 +467,8 @@ mpd_opus_scan_stream(InputStream &is,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--remaining_packets;
|
||||||
|
|
||||||
if (packet.b_o_s) {
|
if (packet.b_o_s) {
|
||||||
if (!IsOpusHead(packet))
|
if (!IsOpusHead(packet))
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
static constexpr uint16_t WAVE_FORMAT_PCM = 1;
|
||||||
|
|
||||||
struct WaveEncoder {
|
struct WaveEncoder {
|
||||||
Encoder encoder;
|
Encoder encoder;
|
||||||
unsigned bits;
|
unsigned bits;
|
||||||
|
@ -65,7 +67,7 @@ fill_wave_header(struct wave_header *header, int channels, int bits,
|
||||||
header->id_data = ToLE32(0x61746164);
|
header->id_data = ToLE32(0x61746164);
|
||||||
|
|
||||||
/* wave format */
|
/* wave format */
|
||||||
header->format = ToLE16(1); // PCM_FORMAT
|
header->format = ToLE16(WAVE_FORMAT_PCM);
|
||||||
header->channels = ToLE16(channels);
|
header->channels = ToLE16(channels);
|
||||||
header->bits = ToLE16(bits);
|
header->bits = ToLE16(bits);
|
||||||
header->freq = ToLE32(freq);
|
header->freq = ToLE32(freq);
|
||||||
|
|
|
@ -49,9 +49,9 @@ CPPUNIT_TEST_SUITE_REGISTRATION(ByteReverseTest);
|
||||||
void
|
void
|
||||||
ByteReverseTest::TestByteReverse2()
|
ByteReverseTest::TestByteReverse2()
|
||||||
{
|
{
|
||||||
static const char src[] = "123456";
|
static const char src[] gcc_alignas(uint16_t, 2) = "123456";
|
||||||
static const char result[] = "214365";
|
static const char result[] = "214365";
|
||||||
static uint8_t dest[ARRAY_SIZE(src)];
|
static uint8_t dest[ARRAY_SIZE(src)] gcc_alignas(uint16_t, 2);
|
||||||
|
|
||||||
reverse_bytes(dest, (const uint8_t *)src,
|
reverse_bytes(dest, (const uint8_t *)src,
|
||||||
(const uint8_t *)(src + ARRAY_SIZE(src) - 1), 2);
|
(const uint8_t *)(src + ARRAY_SIZE(src) - 1), 2);
|
||||||
|
@ -73,9 +73,9 @@ ByteReverseTest::TestByteReverse3()
|
||||||
void
|
void
|
||||||
ByteReverseTest::TestByteReverse4()
|
ByteReverseTest::TestByteReverse4()
|
||||||
{
|
{
|
||||||
static const char src[] = "12345678";
|
static const char src[] gcc_alignas(uint32_t, 4) = "12345678";
|
||||||
static const char result[] = "43218765";
|
static const char result[] = "43218765";
|
||||||
static uint8_t dest[ARRAY_SIZE(src)];
|
static uint8_t dest[ARRAY_SIZE(src)] gcc_alignas(uint32_t, 4);
|
||||||
|
|
||||||
reverse_bytes(dest, (const uint8_t *)src,
|
reverse_bytes(dest, (const uint8_t *)src,
|
||||||
(const uint8_t *)(src + ARRAY_SIZE(src) - 1), 4);
|
(const uint8_t *)(src + ARRAY_SIZE(src) - 1), 4);
|
||||||
|
|
Loading…
Reference in New Issue