Merge branch 'v0.20.x'

This commit is contained in:
Max Kellermann 2018-10-29 23:06:32 +01:00
commit 9b6a2589e5
5 changed files with 14 additions and 16 deletions

6
NEWS
View File

@ -49,6 +49,12 @@ ver 0.21 (not yet released)
* build with Meson instead of autotools
* use GTest instead of cppunit
ver 0.20.23 (not yet released)
* protocol
- emit "player" idle event when restarting the current song
* fix broken float to s32 conversion
* new clang crash bug workaround
ver 0.20.22 (2018/10/23)
* protocol
- add tag fallbacks for AlbumArtistSort, ArtistSort

View File

@ -30,15 +30,7 @@
* exist? This function attempts to recognize exceptions thrown by
* various input plugins.
*/
#ifndef __clang__
/* the "pure" attribute must be disabled because it triggers a clang
bug, wrongfully leading to std::terminate() even though the
function catches all exceptions thrown by std::rethrow_exception();
this can be reproduced with clang 7 from Android NDK r18b and on
clang 6 on FreeBSD
(https://github.com/MusicPlayerDaemon/MPD/issues/373) */
gcc_pure
#endif
bool
IsFileNotFound(std::exception_ptr e) noexcept;

View File

@ -34,7 +34,8 @@ struct FloatToIntegerSampleConvert {
typedef typename SrcTraits::long_type SL;
typedef typename DstTraits::value_type DV;
static constexpr SV factor = 1 << (DstTraits::BITS - 1);
static constexpr SV factor = uintmax_t(1) << (DstTraits::BITS - 1);
static_assert(factor > 0, "Wrong factor");
gcc_const
static DV Convert(SV src) noexcept {
@ -53,7 +54,8 @@ struct IntegerToFloatSampleConvert {
typedef typename SrcTraits::value_type SV;
typedef typename DstTraits::value_type DV;
static constexpr DV factor = 0.5 / (1 << (SrcTraits::BITS - 2));
static constexpr DV factor = 1.0 / FloatToIntegerSampleConvert<F, Traits>::factor;
static_assert(factor > 0, "Wrong factor");
gcc_const
static DV Convert(SV src) noexcept {

View File

@ -291,12 +291,8 @@ PlayerControl::LockSeek(std::unique_ptr<DetachedSong> song, SongTime t)
assert(song != nullptr);
{
const std::lock_guard<Mutex> protect(mutex);
SeekLocked(std::move(song), t);
}
idle_add(IDLE_PLAYER);
const std::lock_guard<Mutex> protect(mutex);
SeekLocked(std::move(song), t);
}
void

View File

@ -606,6 +606,8 @@ Player::SeekDecoder() noexcept
pc.outputs.Cancel();
}
idle_add(IDLE_PLAYER);
if (!dc.IsSeekableCurrentSong(*pc.next_song)) {
/* the decoder is already decoding the "next" song -
stop it and start the previous song again */