Merge branch 'v0.20.x'
This commit is contained in:
commit
9b6a2589e5
6
NEWS
6
NEWS
@ -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 @@
|
|||||||
* 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 {
|
|||||||
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 {
|
|||||||
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,14 +291,10 @@ 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
|
||||||
PlayerControl::SetCrossFade(FloatDuration duration) noexcept
|
PlayerControl::SetCrossFade(FloatDuration duration) 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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user