From e6fad97edc22d6bed23da9c823513f9a30a26065 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 19 Apr 2016 13:05:42 +0200 Subject: [PATCH 01/13] decoder/opus: support bigger OpusTags packets Required for OpusTags packets which contain artwork. See https://bugs.musicpd.org/view.php?id=4520 --- NEWS | 1 + src/decoder/plugins/OpusDecoderPlugin.cxx | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index bd9c46968..ecb5e7c89 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,7 @@ ver 0.19.15 (not yet released) * decoder - ffmpeg: support FFmpeg 3.0 - 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 ver 0.19.14 (2016/03/18) diff --git a/src/decoder/plugins/OpusDecoderPlugin.cxx b/src/decoder/plugins/OpusDecoderPlugin.cxx index e14827e38..f5dbb8fd3 100644 --- a/src/decoder/plugins/OpusDecoderPlugin.cxx +++ b/src/decoder/plugins/OpusDecoderPlugin.cxx @@ -441,8 +441,8 @@ mpd_opus_scan_stream(InputStream &is, if (!oy.ExpectFirstPage(os)) return false; - /* read at most two more pages */ - unsigned remaining_pages = 2; + /* read at most 64 more pages */ + unsigned remaining_pages = 64; bool result = false; From c731a82b712b4cb3d68bcc6578aa224aaaa15570 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 19 Apr 2016 13:07:28 +0200 Subject: [PATCH 02/13] decoder/opus: limit the number of packets in _scan_stream() --- src/decoder/plugins/OpusDecoderPlugin.cxx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/decoder/plugins/OpusDecoderPlugin.cxx b/src/decoder/plugins/OpusDecoderPlugin.cxx index f5dbb8fd3..3a7418a4e 100644 --- a/src/decoder/plugins/OpusDecoderPlugin.cxx +++ b/src/decoder/plugins/OpusDecoderPlugin.cxx @@ -444,10 +444,12 @@ mpd_opus_scan_stream(InputStream &is, /* read at most 64 more pages */ unsigned remaining_pages = 64; + unsigned remaining_packets = 4; + bool result = false; ogg_packet packet; - while (true) { + while (remaining_packets > 0) { int r = ogg_stream_packetout(&os, &packet); if (r < 0) { result = false; @@ -466,6 +468,8 @@ mpd_opus_scan_stream(InputStream &is, continue; } + --remaining_packets; + if (packet.b_o_s) { if (!IsOpusHead(packet)) break; From 9aec5fe90717a0ea3d861244c6f0d023edc9f06d Mon Sep 17 00:00:00 2001 From: Florian Schlichting Date: Tue, 11 Aug 2015 18:57:50 +0200 Subject: [PATCH 03/13] doc/user: fix typo --- doc/user.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user.xml b/doc/user.xml index 5a60dc6d8..3d9ed623c 100644 --- a/doc/user.xml +++ b/doc/user.xml @@ -16,7 +16,7 @@ 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. + various sub-protocols) and organize playlists. From b2a6e327bf8ed0aa851a3e0327685019cb4530ce Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 22 Apr 2016 10:04:29 +0200 Subject: [PATCH 04/13] doc: migrate to DocBook 4.5 --- doc/developer.xml | 5 +++-- doc/protocol.xml | 5 +++-- doc/user.xml | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/doc/developer.xml b/doc/developer.xml index aa3cc62c0..074c7f36d 100644 --- a/doc/developer.xml +++ b/doc/developer.xml @@ -1,6 +1,7 @@ - + + The Music Player Daemon - Developer's Manual diff --git a/doc/protocol.xml b/doc/protocol.xml index 839aa2d03..3a64f1a1b 100644 --- a/doc/protocol.xml +++ b/doc/protocol.xml @@ -1,6 +1,7 @@ - + + The Music Player Daemon protocol diff --git a/doc/user.xml b/doc/user.xml index 3d9ed623c..40f625a9c 100644 --- a/doc/user.xml +++ b/doc/user.xml @@ -1,6 +1,7 @@ - + + The Music Player Daemon - User's Manual From 3db5f4d0aa84e59dd806a5f730cbd35c03e2c0cc Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 22 Apr 2016 10:38:12 +0200 Subject: [PATCH 05/13] doc/mpd.conf.5: remove obsolete metadata_to_use sentence --- doc/mpd.conf.5 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5 index 0cd6c313d..72210009c 100644 --- a/doc/mpd.conf.5 +++ b/doc/mpd.conf.5 @@ -176,15 +176,14 @@ when saving playlists. The default is "no". .TP .B metadata_to_use 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, +clients. 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". +types except for comments. .TP .B auto_update This specifies the whether to support automatic update of music database when From 1b26621860564fb4029b24078a5c9047592d9711 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 22 Apr 2016 10:01:02 +0200 Subject: [PATCH 06/13] doc/{user,protocol}: add a list of supported tags A complete list which replaces the incomplete list in the mpd.conf manpage. --- Makefile.am | 4 +- doc/include/tags.xml | 154 +++++++++++++++++++++++++++++++++++++++++++ doc/mpd.conf.5 | 6 +- doc/mpdconf.example | 2 +- doc/protocol.xml | 19 ++++++ doc/user.xml | 13 ++++ 6 files changed, 192 insertions(+), 6 deletions(-) create mode 100644 doc/include/tags.xml diff --git a/Makefile.am b/Makefile.am index 307fcba11..00b425d0d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2109,7 +2109,9 @@ developer_DATA = $(wildcard doc/developer/*.html) 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 $< doc/api/html/index.html: doc/doxygen.conf diff --git a/doc/include/tags.xml b/doc/include/tags.xml new file mode 100644 index 000000000..554b43a82 --- /dev/null +++ b/doc/include/tags.xml @@ -0,0 +1,154 @@ + + + + + + + artist: the artist name. Its meaning is not + well-defined; see composer and + performer for more specific tags. + + + + + + artistsort: same as + artist, but for sorting. This usually omits + prefixes such as "The". + + + + + + album: the album name. + + + + + + albumsort: same as album, + but for sorting. + + + + + + albumartist: 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. + + + + + + albumartistsort: same as + albumartist, but for sorting. + + + + + + title: the song title. + + + + + + track: the track number within the album. + + + + + + name: 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. + + + + + + genre: the music genre. + + + + + + date: the song's release date. This is + usually a 4-digit year. + + + + + + composer: the artist who composed the song. + + + + + + performer: the artist who performed the song. + + + + + + comment: a human-readable comment about this + song. The exact meaning of this tag is not well-defined. + + + + + + disc: the disc number in a multi-disc album. + + + + + + musicbrainz_artistid: the artist id in the + MusicBrainz + database. + + + + + + musicbrainz_albumid: the album id in the + MusicBrainz + database. + + + + + + musicbrainz_albumartistid: the album artist + id in the MusicBrainz + database. + + + + + + musicbrainz_trackid: the track id in the + MusicBrainz + database. + + + + + + musicbrainz_releasetrackid: the release track + id in the MusicBrainz + database. + + + diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5 index 72210009c..84c5545c3 100644 --- a/doc/mpd.conf.5 +++ b/doc/mpd.conf.5 @@ -176,10 +176,8 @@ when saving playlists. The default is "no". .TP .B metadata_to_use This specifies the tag types that will be scanned for and made available to -clients. 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 +clients. Possible values are listed in the MPD user manual. +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 diff --git a/doc/mpdconf.example b/doc/mpdconf.example index 4b55f8801..6ba0351e8 100644 --- a/doc/mpdconf.example +++ b/doc/mpdconf.example @@ -115,7 +115,7 @@ # # 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 -# 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" # # This setting enables automatic update of MPD's database when files in diff --git a/doc/protocol.xml b/doc/protocol.xml index 3a64f1a1b..ac78ab8ae 100644 --- a/doc/protocol.xml +++ b/doc/protocol.xml @@ -202,6 +202,25 @@ omitted, then the maximum possible value is assumed. + +
+ Tags + + + The following tags are supported by + MPD: + + + + + + There can be multiple values for some of these tags. For + example, MPD may return multiple + lines with a performer tag. A tag value is + a UTF-8 string. + +
diff --git a/doc/user.xml b/doc/user.xml index 40f625a9c..c96cbf61c 100644 --- a/doc/user.xml +++ b/doc/user.xml @@ -1298,6 +1298,19 @@ database { +
+ Metadata + + + When scanning or playing a song, + MPD parses its metadata. The + following tags are supported: + + + +
+
The queue From 7a77767e6699c04b36512cec4d6f56f4797a1ffc Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 22 Apr 2016 10:47:45 +0200 Subject: [PATCH 07/13] doc/mpd.conf.5: move metadata_to_use to the user manual --- doc/mpd.conf.5 | 9 --------- doc/user.xml | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5 index 84c5545c3..805f9e436 100644 --- a/doc/mpd.conf.5 +++ b/doc/mpd.conf.5 @@ -174,15 +174,6 @@ MP3 playback. This specifies whether relative or absolute paths for song filenames are used when saving playlists. The default is "no". .TP -.B metadata_to_use -This specifies the tag types that will be scanned for and made available to -clients. Possible values are listed in the MPD user manual. -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. -.TP .B auto_update This specifies the whether to support automatic update of music database when files are changed in music_directory. The default is to disable autoupdate diff --git a/doc/user.xml b/doc/user.xml index c96cbf61c..f4317f33d 100644 --- a/doc/user.xml +++ b/doc/user.xml @@ -945,6 +945,33 @@ systemctl start mpd.socket
Other Settings + + + + + Setting + Description + + + + + + metadata_to_use + TAG1,TAG2,... + + + Use only the specified tags, and ignore the others. + This setting can reduce the database size and + MPD's memory usage by + omitting unused tags. By default, all tags but + comment are enabled. The special + value "none" disables all tags. + + + + + +
The State File From 27d4b159253dc9912f5186e4825780f82af89c32 Mon Sep 17 00:00:00 2001 From: Florian Schlichting Date: Sun, 24 Apr 2016 22:00:56 +0200 Subject: [PATCH 08/13] DecoderBuffer: add missing include > In file included from src/decoder/DecoderBuffer.cxx:21:0: > src/decoder/DecoderBuffer.hxx:41:20: error: 'uint8_t' was not declared in this scope > DynamicFifoBuffer buffer; > ^ > src/decoder/DecoderBuffer.hxx:41:27: error: template argument 1 is invalid > DynamicFifoBuffer buffer; > ^ > src/decoder/DecoderBuffer.hxx: In member function 'void DecoderBuffer::Clear()': > src/decoder/DecoderBuffer.hxx:61:10: error: request for member 'Clear' in '((DecoderBuffer*)this)->DecoderBuffer::buffer', which is of non-class type 'int' > buffer.Clear(); > ^ > src/decoder/DecoderBuffer.hxx: In member function 'size_t DecoderBuffer::GetAvailable() const': > src/decoder/DecoderBuffer.hxx:78:17: error: request for member 'GetAvailable' in '((const DecoderBuffer*)this)->DecoderBuffer::buffer', which is of non-class type 'const int' > return buffer.GetAvailable(); > ^ > src/decoder/DecoderBuffer.hxx: In member function 'ConstBuffer DecoderBuffer::Read() const': > src/decoder/DecoderBuffer.hxx:87:19: error: request for member 'Read' in '((const DecoderBuffer*)this)->DecoderBuffer::buffer', which is of non-class type 'const int' > auto r = buffer.Read(); > ^ > src/decoder/DecoderBuffer.hxx:88:27: error: could not convert '{, }' from '' to 'ConstBuffer' > return { r.data, r.size }; > ^ > src/decoder/DecoderBuffer.hxx: In member function 'void DecoderBuffer::Consume(size_t)': > src/decoder/DecoderBuffer.hxx:105:10: error: request for member 'Consume' in '((DecoderBuffer*)this)->DecoderBuffer::buffer', which is of non-class type 'int' > buffer.Consume(nbytes); > ^ This seems to be caused by a lacking include, fixed by the below patch. I'm unsure what made this appear now, though, compiler and toolchain libraries seem to be the same upstream versions that built 0.19.14-1 just fine in late March. --- NEWS | 1 + src/decoder/DecoderBuffer.hxx | 1 + 2 files changed, 2 insertions(+) diff --git a/NEWS b/NEWS index ecb5e7c89..601c45d27 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ ver 0.19.15 (not yet released) - 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 build failure due to missing include ver 0.19.14 (2016/03/18) * decoder diff --git a/src/decoder/DecoderBuffer.hxx b/src/decoder/DecoderBuffer.hxx index 9cf47d915..db5b30e65 100644 --- a/src/decoder/DecoderBuffer.hxx +++ b/src/decoder/DecoderBuffer.hxx @@ -25,6 +25,7 @@ #include "util/ConstBuffer.hxx" #include +#include struct Decoder; class InputStream; From 72637d00e88a310ad7b7bca92dbeef6b55872f9b Mon Sep 17 00:00:00 2001 From: Michael Cree Date: Thu, 28 Apr 2016 22:22:50 +1200 Subject: [PATCH 09/13] Bug#822848: mpd FTBFS on Alpha; misaligned arrays in the test suite Source: mpd Version: 0.19.14-2 Severity: important Justification: fails to build form source (but built in the past) Tags: patch User: debian-alpha@lists.debian.org Usertags: alpha mpd FTBFS on Alpha with a failure in the test suite [1]: FAIL: test/test_byte_reverse ============================ .F... !!!FAILURES!!! Test Results: Run: 4 Failures: 1 Errors: 0 1) test: ByteReverseTest::TestByteReverse2 (F) line: 58 test/test_byte_reverse.cxx assertion failed - Expression: strcmp(result, (const char *)dest) == 0 This occurs because the test suite (in test/test_byte_reversal.cxx) allocates static char arrays and passes the char arrays to functions whose respective arguments were declared to be uint16_t *, etc., in the main code. This is in the realm of undefined behaviour on architectures with strict memory alignment requirements. Although the test only fails on Alpha (because Alpha has a particular CPU load instruction that gcc likes to use to add bugs ..., ahem, optimise the code on the assumption of alignment) it is potentially a latent bug for other architectures with strict alignment requirements. Since the code is compiled with the c++11 standard I attach a patch that modifies the test suite to align the non-compliant strings with the alignas() attribute. The test suite now passes on Alpha with that patch. Cheers Michael [1] https://buildd.debian.org/status/fetch.php?pkg=mpd&arch=alpha&ver=0.19.14-2&stamp=1461542099 --- NEWS | 1 + test/test_byte_reverse.cxx | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 601c45d27..0b756d032 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ ver 0.19.15 (not yet released) - opus: support bigger OpusTags packets * 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) * decoder diff --git a/test/test_byte_reverse.cxx b/test/test_byte_reverse.cxx index 0ab97e4d1..321cc2e6c 100644 --- a/test/test_byte_reverse.cxx +++ b/test/test_byte_reverse.cxx @@ -49,9 +49,9 @@ CPPUNIT_TEST_SUITE_REGISTRATION(ByteReverseTest); void ByteReverseTest::TestByteReverse2() { - static const char src[] = "123456"; + static const char src[] alignas(uint16_t) = "123456"; static const char result[] = "214365"; - static uint8_t dest[ARRAY_SIZE(src)]; + static uint8_t dest[ARRAY_SIZE(src)] alignas(uint16_t); reverse_bytes(dest, (const uint8_t *)src, (const uint8_t *)(src + ARRAY_SIZE(src) - 1), 2); @@ -73,9 +73,9 @@ ByteReverseTest::TestByteReverse3() void ByteReverseTest::TestByteReverse4() { - static const char src[] = "12345678"; + static const char src[] alignas(uint32_t) = "12345678"; static const char result[] = "43218765"; - static uint8_t dest[ARRAY_SIZE(src)]; + static uint8_t dest[ARRAY_SIZE(src)] alignas(uint32_t); reverse_bytes(dest, (const uint8_t *)src, (const uint8_t *)(src + ARRAY_SIZE(src) - 1), 4); From a6bf4746c600bc5b0f24cb94b251644fe9b74ea4 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 30 Apr 2016 13:41:24 +0200 Subject: [PATCH 10/13] test/test_byte_reverse: use gcc_alignas() for gcc<4.8 compatibility --- test/test_byte_reverse.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_byte_reverse.cxx b/test/test_byte_reverse.cxx index 321cc2e6c..d06a1595e 100644 --- a/test/test_byte_reverse.cxx +++ b/test/test_byte_reverse.cxx @@ -49,9 +49,9 @@ CPPUNIT_TEST_SUITE_REGISTRATION(ByteReverseTest); void ByteReverseTest::TestByteReverse2() { - static const char src[] alignas(uint16_t) = "123456"; + static const char src[] gcc_alignas(uint16_t, 2) = "123456"; static const char result[] = "214365"; - static uint8_t dest[ARRAY_SIZE(src)] alignas(uint16_t); + static uint8_t dest[ARRAY_SIZE(src)] gcc_alignas(uint16_t, 2); reverse_bytes(dest, (const uint8_t *)src, (const uint8_t *)(src + ARRAY_SIZE(src) - 1), 2); @@ -73,9 +73,9 @@ ByteReverseTest::TestByteReverse3() void ByteReverseTest::TestByteReverse4() { - static const char src[] alignas(uint32_t) = "12345678"; + static const char src[] gcc_alignas(uint32_t, 4) = "12345678"; static const char result[] = "43218765"; - static uint8_t dest[ARRAY_SIZE(src)] alignas(uint32_t); + static uint8_t dest[ARRAY_SIZE(src)] gcc_alignas(uint32_t, 4); reverse_bytes(dest, (const uint8_t *)src, (const uint8_t *)(src + ARRAY_SIZE(src) - 1), 4); From 62221adf55c8ade22961dd9d76a591a1f3167396 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 30 Apr 2016 13:45:52 +0200 Subject: [PATCH 11/13] encoder/wave: fix indent --- src/encoder/plugins/WaveEncoderPlugin.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/encoder/plugins/WaveEncoderPlugin.cxx b/src/encoder/plugins/WaveEncoderPlugin.cxx index 97a26e821..ff3deaa04 100644 --- a/src/encoder/plugins/WaveEncoderPlugin.cxx +++ b/src/encoder/plugins/WaveEncoderPlugin.cxx @@ -64,7 +64,7 @@ fill_wave_header(struct wave_header *header, int channels, int bits, header->id_fmt = ToLE32(0x20746d66); header->id_data = ToLE32(0x61746164); - /* wave format */ + /* wave format */ header->format = ToLE16(1); // PCM_FORMAT header->channels = ToLE16(channels); header->bits = ToLE16(bits); @@ -72,7 +72,7 @@ fill_wave_header(struct wave_header *header, int channels, int bits, header->blocksize = ToLE16(block_size); header->byterate = ToLE32(freq * block_size); - /* chunk sizes (fake data length) */ + /* chunk sizes (fake data length) */ header->fmt_size = ToLE32(16); header->data_size = ToLE32(data_size); header->riff_size = ToLE32(4 + (8 + 16) + (8 + data_size)); From c9553411bbcff6471d0877abb2e0acc4ca3f3abb Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 30 Apr 2016 13:57:09 +0200 Subject: [PATCH 12/13] encoder/wave: add constant WAVE_FORMAT_PCM --- src/encoder/plugins/WaveEncoderPlugin.cxx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/encoder/plugins/WaveEncoderPlugin.cxx b/src/encoder/plugins/WaveEncoderPlugin.cxx index ff3deaa04..c20069d9f 100644 --- a/src/encoder/plugins/WaveEncoderPlugin.cxx +++ b/src/encoder/plugins/WaveEncoderPlugin.cxx @@ -27,6 +27,8 @@ #include #include +static constexpr uint16_t WAVE_FORMAT_PCM = 1; + struct WaveEncoder { Encoder encoder; unsigned bits; @@ -65,7 +67,7 @@ fill_wave_header(struct wave_header *header, int channels, int bits, header->id_data = ToLE32(0x61746164); /* wave format */ - header->format = ToLE16(1); // PCM_FORMAT + header->format = ToLE16(WAVE_FORMAT_PCM); header->channels = ToLE16(channels); header->bits = ToLE16(bits); header->freq = ToLE32(freq); From 04ed50fb0f94877d8538822d20eaccf65ab40c14 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 30 Apr 2016 14:21:52 +0200 Subject: [PATCH 13/13] release v0.19.15 --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 0b756d032..051f808a9 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -ver 0.19.15 (not yet released) +ver 0.19.15 (2016/04/30) * decoder - ffmpeg: support FFmpeg 3.0 - ffmpeg: use as fallback instead of "mad" if no plugin matches