summaryrefslogtreecommitdiff
path: root/NEWS
AgeCommit message (Collapse)Author
2018-07-18decoder/mad: make "gapless_mp3_playback" a block optionMax Kellermann
Remove another dependency on the config/Global library.
2018-07-06db/simple: add an AudioFormat to each SongMax Kellermann
2018-07-06require GCC 6Max Kellermann
Meanwhile, GCC 5 fails to compile MPD due to incomplete C++14 implementation.
2018-07-06Merge branch 'v0.20.x'Max Kellermann
2018-07-06db/update/ExcludeList: allow comments only at start of lineMax Kellermann
2018-07-06output/httpd: remove broken DLNA support codeMax Kellermann
This code was added in 21851c06733080b4c131d553d5d1f8784c12410f but looks completely broken: - the status code is "206 OK" but "206" would be "Partial Content" - the "Content-Length" header has a bogus value - the "Content-RangeX" parameter has different bogus values (why "Content-RangeX" anyway and not "Content-Range"?) Apart from that, there are strange undocumented non-standard headers which are probably there to work around bugs/expectations in one broken proprietary client product. But these days, MPD doesn't bend over to support broken clients. So let's kill this code. Closes #304
2018-06-22input/curl: use class MaybeBufferedInputStreamMax Kellermann
For remote files (not streams), this downloads as quickly as possible to a large buffer instead of throttling the stream during playback. Throttling can make the server impatient and it may then disconnect. This is what Qobuz and Tidal do, and this commit attempts to solve this by not letting the Qobuz/Tidal server wait (closes #241).
2018-06-03Merge branch 'v0.20.x'Max Kellermann
2018-05-28db/proxy: support tags "ArtistSort", "AlbumArtistSort", "AlbumSort"Max Kellermann
Closes #284
2018-05-28db/proxy: add "password" settingMax Kellermann
Closes #283
2018-05-28increment version number to 0.20.21Max Kellermann
2018-05-22Merge tag 'v0.20.20'Max Kellermann
release v0.20.20
2018-05-22release v0.20.20v0.20.20Max Kellermann
2018-05-12python/build/libs.py: add libmpdclientMax Kellermann
2018-05-12player/Thread: pause all outputs in single modeMax Kellermann
This mostly affects the Pulse output plugin which needs to "cork" the stream (closes #278).
2018-05-07decoder/opus: add support for R128_ALBUM_GAIN tagMichal Koutenský
2018-05-07decoder/dsd: allow 4 MB ID3 tagsMax Kellermann
Closes #277
2018-05-03Merge branch 'v0.20.x'Max Kellermann
2018-05-03decoder/{dsdiff,dsf}: support more MIME typesMax Kellermann
These are used by DSD-streaming servers. For example, MiniDLNA uses "audio/x-dsd".
2018-04-30SongFilter: fix "modified-since" filterMax Kellermann
Error message sent to client was "basic_string::_M_construct null not valid" due to passing nullptr to the std::string constructor. Regression caused by commit 386688b87ac
2018-04-30increment version number to 0.20.20Max Kellermann
2018-04-26Merge tag 'v0.20.19'Max Kellermann
release v0.20.19
2018-04-26release v0.20.19v0.20.19Max Kellermann
2018-04-26db/proxy: implement the group_mask parameter in VisitUniqueTags()Max Kellermann
Closes #258
2018-04-26db/proxy: call mpd_search_cancel() after search errorMax Kellermann
Fixes "search already in progress" errors.
2018-04-25lib/ffmpeg/Init: fix av_register_all() deprecation warningMax Kellermann
av_register_all() was deprecated in FFmpeg/FFmpeg@0694d8702421e7aff1340038559c438b61bb30dd
2018-04-25player/Thread: never reuse decoder when switching radio streamsMax Kellermann
When switching to another song manually, the player checks if the decoder is already decoding that song; if so, it will attempt to reuse it by seeking it to the new position. That however fails if the decoder is not seekable (e.g. a radio stream) which leaves the user unable to switch to that song with the bogus error message "Not seekable".
2018-03-15Merge branch 'v0.20.x'Max Kellermann
2018-03-15input/thread: move code to Stop()Max Kellermann
Fixes crash due to "pure virtual method called" in the "mms" input plugin. Closes #253
2018-03-14input/thread: set InputStream::ready after Open() failureMax Kellermann
Without setting the "ready" flag, the caller will wait in WaitReady() forever, locking up MPD. Closes #252
2018-03-05Merge branch 'v0.20.x'Max Kellermann
2018-03-04protocol/ArgParser: disallow negative seek timesMax Kellermann
Instead of stopping playback (due to seek time overflow), reject the seek command. Closes #240 Relative negative values (with "seekcur") are still allowed, and MPD will fix the resulting position if it turns out to be negative. But the "seek" and "seekid" commands use an unsigned time stamp which must not be negative.
2018-03-04Get rid of GCD on macOS which breaks debug buildsChristian Kröner
With Grand Central Dispatch used in Main.cxx, debug builds on macOS crash as the IsInside() assertion gets triggered in the event loop. As a simple fix, usage of GCD is removed. Plugging and unplugging headphones or changes of the default output device was tested without issues. Whatever the original commit tried to fix by GCD probably does not need fixing anymore.
2018-03-04increment version number to 0.20.19Max Kellermann
2018-02-26Initial support for DSD over PCM on macOSChristian Kröner
From: Christian Kröner <ckroener@gmx.net> This just copies the necessary bits and pieces from the ALSA plugin and applies them to OSXOutput based on dop config setting. It only changes the OSXOutput plugin as needed for DoP (further changes to support additionally e.g. integer mode or setting the physical device mode require rather a complete rewrite of the output plugin). Fortunately the Core Audio API is by default bit perfect and supports DoP with minimal changes (setting the sampling rate accordingly after ensuring that the physical mode supports at least 24 bits per channel seems to be enough). This was tested on an Amanero Combo384 device hooked up to a ES9018 DAC. USAGE (try only on DACs that support DoP): - Add dop "yes" option to mpdconf - Be sure to set at least 24bits per channel before playing some DSD file (using Audio-MIDI-Setup) - Based on the dop setting, MPD will change the sample rate as required and output DoP signal to the DAC - Hog mode is recommended to ensure that no other program will try to mix some output with the DoP stream (resulting in bad noise) - Alternatively set the default output device to another device (e.g. the built-in output) to avoid having other audio interfere with DSD playback
2018-02-25encoder/opus: add optional stream chaining supportcathugger
support for chaining ogg opus streams to enable changing stream' metadata on the fly. currently support is opt-in (enabled by additional option) because lots of clients can't handle this properly yet.
2018-02-25playlist/Queue: add one-shot to single modePatryk Hachuła
2018-02-24Merge tag 'v0.20.18'Max Kellermann
release v0.20.18
2018-02-24release v0.20.18v0.20.18Max Kellermann
2018-02-24win32/build.py: enable libnfsMax Kellermann
Now that all build failures have been fixed, we can enable the feature.
2018-02-24Fix curl storage plugin failure if the authentication method is different ↵tpoeiras
than basic.
2018-02-20python/build/libs.py: add libnfsMax Kellermann
Enable the NFS storage plugin on Android. Closes #226
2018-02-17Merge branch 'v0.20.x'Max Kellermann
2018-02-17decoder/flac: move the SubmitData() call out of the callbackMax Kellermann
This addresses two problems: 1. the libFLAC write callback had to send an error status to its caller when SubmitData() returned a command; this disrupted libFLAC and the resulting command could not be used for anything; 2. the libFLAC function FLAC__stream_decoder_seek_absolute() also calls the write callback, but its result cannot be used, because seeking is still in progress, so we lose all data from one FLAC frame. By moving the SubmitData() call until after CommandFinished(), we avoid losing this data. This fixes another part of #113
2018-02-17decoder/Bridge: truncate last chunk at the exact end_timeMax Kellermann
Instead of passing whole chunks to the MusicPipe and checking the end_time after each chunk, truncate the last chunk if it would exceed the end_time. This requires keeping track of the absolute PCM frame number. This fixes a problem with gapless CUE song transitions: a small part of the following song was always played twice. Closes #113
2018-02-17increment version number to 0.20.18Max Kellermann
2018-02-13decoder/HybridDSD: new decoder plugin for Hybrid DSDMax Kellermann
2018-02-11Merge tag 'v0.20.17'Max Kellermann
release v0.20.17
2018-02-11release v0.20.17v0.20.17Max Kellermann
2018-02-10mixer/alsa: work around rounding error at volume 0Max Kellermann
Due to rounding errors, a slightly negative value can be passed to set_normalized_volume(), which will make the log10() call fail. Actually, volume 0 is already failing because log10(0) is illegal. So let's fix this by implementing two corner cases: <=0 and >=100. Closes #212