Commit 9b6a2589 authored by Max Kellermann's avatar Max Kellermann

Merge branch 'v0.20.x'

parents 92523f8c cc5fab28
...@@ -49,6 +49,12 @@ ver 0.21 (not yet released) ...@@ -49,6 +49,12 @@ ver 0.21 (not yet released)
* build with Meson instead of autotools * build with Meson instead of autotools
* use GTest instead of cppunit * 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) ver 0.20.22 (2018/10/23)
* protocol * protocol
- add tag fallbacks for AlbumArtistSort, ArtistSort - add tag fallbacks for AlbumArtistSort, ArtistSort
......
...@@ -30,15 +30,7 @@ ...@@ -30,15 +30,7 @@
* exist? This function attempts to recognize exceptions thrown by * exist? This function attempts to recognize exceptions thrown by
* various input plugins. * 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 gcc_pure
#endif
bool bool
IsFileNotFound(std::exception_ptr e) noexcept; IsFileNotFound(std::exception_ptr e) noexcept;
......
...@@ -34,7 +34,8 @@ struct FloatToIntegerSampleConvert { ...@@ -34,7 +34,8 @@ struct FloatToIntegerSampleConvert {
typedef typename SrcTraits::long_type SL; typedef typename SrcTraits::long_type SL;
typedef typename DstTraits::value_type DV; 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 gcc_const
static DV Convert(SV src) noexcept { static DV Convert(SV src) noexcept {
...@@ -53,7 +54,8 @@ struct IntegerToFloatSampleConvert { ...@@ -53,7 +54,8 @@ struct IntegerToFloatSampleConvert {
typedef typename SrcTraits::value_type SV; typedef typename SrcTraits::value_type SV;
typedef typename DstTraits::value_type DV; 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 gcc_const
static DV Convert(SV src) noexcept { static DV Convert(SV src) noexcept {
......
...@@ -291,12 +291,8 @@ PlayerControl::LockSeek(std::unique_ptr<DetachedSong> song, SongTime t) ...@@ -291,12 +291,8 @@ PlayerControl::LockSeek(std::unique_ptr<DetachedSong> song, SongTime t)
assert(song != nullptr); assert(song != nullptr);
{ const std::lock_guard<Mutex> protect(mutex);
const std::lock_guard<Mutex> protect(mutex); SeekLocked(std::move(song), t);
SeekLocked(std::move(song), t);
}
idle_add(IDLE_PLAYER);
} }
void void
......
...@@ -606,6 +606,8 @@ Player::SeekDecoder() noexcept ...@@ -606,6 +606,8 @@ Player::SeekDecoder() noexcept
pc.outputs.Cancel(); pc.outputs.Cancel();
} }
idle_add(IDLE_PLAYER);
if (!dc.IsSeekableCurrentSong(*pc.next_song)) { if (!dc.IsSeekableCurrentSong(*pc.next_song)) {
/* the decoder is already decoding the "next" song - /* the decoder is already decoding the "next" song -
stop it and start the previous song again */ stop it and start the previous song again */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment