Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
e26d49ef
Commit
e26d49ef
authored
Mar 10, 2017
by
Max Kellermann
Browse files
Options
Browse Files
Download
Plain Diff
Merge tag 'v0.20.6'
release v0.20.6
parents
e9e853b1
a40510c2
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
86 additions
and
12 deletions
+86
-12
NEWS
NEWS
+10
-0
build.py
android/build.py
+8
-3
Partition.cxx
src/Partition.cxx
+3
-3
CommandError.cxx
src/command/CommandError.cxx
+25
-2
Mount.cxx
src/db/plugins/simple/Mount.cxx
+7
-0
DecoderThread.cxx
src/decoder/DecoderThread.cxx
+1
-1
MpcdecDecoderPlugin.cxx
src/decoder/plugins/MpcdecDecoderPlugin.cxx
+9
-0
SidplayDecoderPlugin.cxx
src/decoder/plugins/SidplayDecoderPlugin.cxx
+8
-0
WavpackDecoderPlugin.cxx
src/decoder/plugins/WavpackDecoderPlugin.cxx
+2
-0
Request.cxx
src/lib/curl/Request.cxx
+11
-1
HugeAllocator.cxx
src/util/HugeAllocator.cxx
+1
-1
ReusableArray.hxx
src/util/ReusableArray.hxx
+1
-1
No files found.
NEWS
View file @
e26d49ef
...
@@ -5,6 +5,16 @@ ver 0.21 (not yet released)
...
@@ -5,6 +5,16 @@ ver 0.21 (not yet released)
* output
* output
- alsa: non-blocking mode
- alsa: non-blocking mode
ver 0.20.6 (2017/03/10)
* input
- curl: fix headers after HTTP redirect to Shoutcast server
* decoder
- ffmpeg: re-enable as fallback
- mpcdec: fix crash (division by zero) after seeking
- sidplay: make compatible with libsidplayfp < 1.8
* fix stream tags after automatic song change
* workaround for GCC 4.9.4 / libstdc++ bug (build failure)
ver 0.20.5 (2017/02/20)
ver 0.20.5 (2017/02/20)
* tags
* tags
- id3: fix memory leak on corrupt ID3 tags
- id3: fix memory leak on corrupt ID3 tags
...
...
android/build.py
View file @
e26d49ef
...
@@ -87,9 +87,14 @@ class AndroidNdkToolchain:
...
@@ -87,9 +87,14 @@ class AndroidNdkToolchain:
self
.
is_armv7
=
self
.
is_arm
and
'armv7'
in
self
.
cflags
self
.
is_armv7
=
self
.
is_arm
and
'armv7'
in
self
.
cflags
self
.
is_windows
=
False
self
.
is_windows
=
False
libstdcxx_path
=
os
.
path
.
join
(
ndk_path
,
'sources/cxx-stl/gnu-libstdc++'
,
gcc_version
)
libcxx_path
=
os
.
path
.
join
(
ndk_path
,
'sources/cxx-stl/llvm-libc++'
)
libstdcxx_cppflags
=
'-isystem '
+
os
.
path
.
join
(
libstdcxx_path
,
'include'
)
+
' -isystem '
+
os
.
path
.
join
(
libstdcxx_path
,
'libs'
,
android_abi
,
'include'
)
libcxx_libs_path
=
os
.
path
.
join
(
libcxx_path
,
'libs'
,
android_abi
)
libstdcxx_ldadd
=
os
.
path
.
join
(
libstdcxx_path
,
'libs'
,
android_abi
,
'libgnustl_static.a'
)
libstdcxx_cppflags
=
'-nostdinc++ -isystem '
+
os
.
path
.
join
(
libcxx_path
,
'include'
)
+
' -isystem '
+
os
.
path
.
join
(
ndk_path
,
'sources/android/support/include'
)
libstdcxx_ldadd
=
os
.
path
.
join
(
libcxx_libs_path
,
'libc++_static.a'
)
+
' '
+
os
.
path
.
join
(
libcxx_libs_path
,
'libc++abi.a'
)
if
self
.
is_armv7
:
libstdcxx_ldadd
+=
' '
+
os
.
path
.
join
(
libcxx_libs_path
,
'libunwind.a'
)
if
use_cxx
:
if
use_cxx
:
self
.
libs
+=
' '
+
libstdcxx_ldadd
self
.
libs
+=
' '
+
libstdcxx_ldadd
...
...
src/Partition.cxx
View file @
e26d49ef
...
@@ -143,9 +143,9 @@ Partition::OnMixerVolumeChanged(gcc_unused Mixer &mixer, gcc_unused int volume)
...
@@ -143,9 +143,9 @@ Partition::OnMixerVolumeChanged(gcc_unused Mixer &mixer, gcc_unused int volume)
void
void
Partition
::
OnGlobalEvent
(
unsigned
mask
)
Partition
::
OnGlobalEvent
(
unsigned
mask
)
{
{
if
((
mask
&
TAG_MODIFIED
)
!=
0
)
TagModified
();
if
((
mask
&
SYNC_WITH_PLAYER
)
!=
0
)
if
((
mask
&
SYNC_WITH_PLAYER
)
!=
0
)
SyncWithPlayer
();
SyncWithPlayer
();
if
((
mask
&
TAG_MODIFIED
)
!=
0
)
TagModified
();
}
}
src/command/CommandError.cxx
View file @
e26d49ef
...
@@ -29,6 +29,29 @@
...
@@ -29,6 +29,29 @@
#include <assert.h>
#include <assert.h>
#define GLIBCXX_490 20140422
#define GLIBCXX_491 20140716
#define GLIBCXX_492 20141030
#define GLIBCXX_492_Debian_9 20141220
#define GLIBCXX_493 20150626
#define GLIBCXX_494 20160803
#define GLIBCXX_49X_NDK_r13b 20150123
/* the big mess attempts to detect whether we're compiling with
libstdc++ 4.9.x; __GLIBCXX__ is a date tag and cannot be used to
check the major version; and just checking the compiler version
isn't enough, because somebody could use an old libstdc++ with
clang - SIGH! */
#if GCC_OLDER_THAN(5,0) || (defined(__GLIBCXX__) && \
(__GLIBCXX__ == GLIBCXX_490 || __GLIBCXX__ == GLIBCXX_491 || \
__GLIBCXX__ == GLIBCXX_492 || \
__GLIBCXX__ == GLIBCXX_492_Debian_9 || \
__GLIBCXX__ == GLIBCXX_493 || \
__GLIBCXX__ == GLIBCXX_494 || \
__GLIBCXX__ == GLIBCXX_49X_NDK_r13b))
#define GLIBCXX_49X
#endif
gcc_const
gcc_const
static
enum
ack
static
enum
ack
ToAck
(
PlaylistResult
result
)
ToAck
(
PlaylistResult
result
)
...
@@ -100,13 +123,13 @@ ToAck(std::exception_ptr ep)
...
@@ -100,13 +123,13 @@ ToAck(std::exception_ptr ep)
return
ACK_ERROR_SYSTEM
;
return
ACK_ERROR_SYSTEM
;
}
catch
(
const
std
::
invalid_argument
&
e
)
{
}
catch
(
const
std
::
invalid_argument
&
e
)
{
return
ACK_ERROR_ARG
;
return
ACK_ERROR_ARG
;
#if
defined(__GLIBCXX__) && __GLIBCXX__ < 20151204
#if
def GLIBCXX_49X
}
catch
(
const
std
::
exception
&
e
)
{
}
catch
(
const
std
::
exception
&
e
)
{
#else
#else
}
catch
(...)
{
}
catch
(...)
{
#endif
#endif
try
{
try
{
#if
defined(__GLIBCXX__) && __GLIBCXX__ < 20151204
#if
def GLIBCXX_49X
/* workaround for g++ 4.x: no overload for
/* workaround for g++ 4.x: no overload for
rethrow_exception(exception_ptr) */
rethrow_exception(exception_ptr) */
std
::
rethrow_if_nested
(
e
);
std
::
rethrow_if_nested
(
e
);
...
...
src/db/plugins/simple/Mount.cxx
View file @
e26d49ef
...
@@ -25,6 +25,13 @@
...
@@ -25,6 +25,13 @@
#include "db/Interface.hxx"
#include "db/Interface.hxx"
#include "fs/Traits.hxx"
#include "fs/Traits.hxx"
#ifdef _LIBCPP_VERSION
/* workaround for "error: incomplete type 'PlaylistInfo' used in type
trait expression" with libc++ version 3900 (from Android NDK
r13b) */
#include "db/PlaylistInfo.hxx"
#endif
#include <string>
#include <string>
struct
PrefixedLightDirectory
:
LightDirectory
{
struct
PrefixedLightDirectory
:
LightDirectory
{
...
...
src/decoder/DecoderThread.cxx
View file @
e26d49ef
...
@@ -235,7 +235,7 @@ decoder_run_stream_fallback(DecoderBridge &bridge, InputStream &is)
...
@@ -235,7 +235,7 @@ decoder_run_stream_fallback(DecoderBridge &bridge, InputStream &is)
{
{
const
struct
DecoderPlugin
*
plugin
;
const
struct
DecoderPlugin
*
plugin
;
#ifdef
HAV
E_FFMPEG
#ifdef
ENABL
E_FFMPEG
plugin
=
decoder_plugin_from_name
(
"ffmpeg"
);
plugin
=
decoder_plugin_from_name
(
"ffmpeg"
);
#else
#else
plugin
=
decoder_plugin_from_name
(
"mad"
);
plugin
=
decoder_plugin_from_name
(
"mad"
);
...
...
src/decoder/plugins/MpcdecDecoderPlugin.cxx
View file @
e26d49ef
...
@@ -207,6 +207,15 @@ mpcdec_decode(DecoderClient &client, InputStream &is)
...
@@ -207,6 +207,15 @@ mpcdec_decode(DecoderClient &client, InputStream &is)
if
(
frame
.
bits
==
-
1
)
if
(
frame
.
bits
==
-
1
)
break
;
break
;
if
(
frame
.
samples
<=
0
)
{
/* empty frame - this has been observed to
happen spuriously after seeking; skip this
obscure frame, and hope libmpcdec
recovers */
cmd
=
client
.
GetCommand
();
continue
;
}
mpc_uint32_t
ret
=
frame
.
samples
;
mpc_uint32_t
ret
=
frame
.
samples
;
ret
*=
info
.
channels
;
ret
*=
info
.
channels
;
...
...
src/decoder/plugins/SidplayDecoderPlugin.cxx
View file @
e26d49ef
...
@@ -50,6 +50,10 @@
...
@@ -50,6 +50,10 @@
#include <string.h>
#include <string.h>
#include <stdio.h>
#include <stdio.h>
#ifdef HAVE_SIDPLAYFP
#define LIBSIDPLAYFP_VERSION GCC_MAKE_VERSION(LIBSIDPLAYFP_VERSION_MAJ, LIBSIDPLAYFP_VERSION_MIN, LIBSIDPLAYFP_VERSION_LEV)
#endif
#define SUBTUNE_PREFIX "tune_"
#define SUBTUNE_PREFIX "tune_"
static
constexpr
Domain
sidplay_domain
(
"sidplay"
);
static
constexpr
Domain
sidplay_domain
(
"sidplay"
);
...
@@ -285,8 +289,12 @@ sidplay_file_decode(DecoderClient &client, Path path_fs)
...
@@ -285,8 +289,12 @@ sidplay_file_decode(DecoderClient &client, Path path_fs)
#endif
#endif
#ifdef HAVE_SIDPLAYFP
#ifdef HAVE_SIDPLAYFP
#if LIBSIDPLAYFP_VERSION >= GCC_MAKE_VERSION(1,8,0)
const
bool
stereo
=
tune
.
getInfo
()
->
sidChips
()
>=
2
;
const
bool
stereo
=
tune
.
getInfo
()
->
sidChips
()
>=
2
;
#else
#else
const
bool
stereo
=
tune
.
getInfo
()
->
isStereo
();
#endif
#else
const
bool
stereo
=
tune
.
isStereo
();
const
bool
stereo
=
tune
.
isStereo
();
#endif
#endif
...
...
src/decoder/plugins/WavpackDecoderPlugin.cxx
View file @
e26d49ef
...
@@ -34,6 +34,8 @@
...
@@ -34,6 +34,8 @@
#include <stdexcept>
#include <stdexcept>
#include <memory>
#include <memory>
#include <cstdlib>
#include <assert.h>
#include <assert.h>
#define ERRORLEN 80
#define ERRORLEN 80
...
...
src/lib/curl/Request.cxx
View file @
e26d49ef
...
@@ -168,13 +168,23 @@ CurlRequest::Done(CURLcode result)
...
@@ -168,13 +168,23 @@ CurlRequest::Done(CURLcode result)
}
}
}
}
gcc_pure
static
bool
IsResponseBoundaryHeader
(
StringView
s
)
{
return
s
.
size
>
5
&&
(
memcmp
(
s
.
data
,
"HTTP/"
,
5
)
==
0
||
/* the proprietary "ICY 200 OK" is
emitted by Shoutcast */
memcmp
(
s
.
data
,
"ICY 2"
,
5
)
==
0
);
}
inline
void
inline
void
CurlRequest
::
HeaderFunction
(
StringView
s
)
CurlRequest
::
HeaderFunction
(
StringView
s
)
{
{
if
(
state
>
State
::
HEADERS
)
if
(
state
>
State
::
HEADERS
)
return
;
return
;
if
(
s
.
size
>
5
&&
memcmp
(
s
.
data
,
"HTTP/"
,
5
)
==
0
)
{
if
(
IsResponseBoundaryHeader
(
s
)
)
{
/* this is the boundary to a new response, for example
/* this is the boundary to a new response, for example
after a redirect */
after a redirect */
headers
.
clear
();
headers
.
clear
();
...
...
src/util/HugeAllocator.cxx
View file @
e26d49ef
...
@@ -48,7 +48,7 @@ static size_t
...
@@ -48,7 +48,7 @@ static size_t
AlignToPageSize
(
size_t
size
)
AlignToPageSize
(
size_t
size
)
{
{
static
const
long
page_size
=
sysconf
(
_SC_PAGESIZE
);
static
const
long
page_size
=
sysconf
(
_SC_PAGESIZE
);
if
(
page_size
=
=
0
)
if
(
page_size
<
=
0
)
return
size
;
return
size
;
size_t
ps
(
page_size
);
size_t
ps
(
page_size
);
...
...
src/util/ReusableArray.hxx
View file @
e26d49ef
...
@@ -56,7 +56,7 @@ public:
...
@@ -56,7 +56,7 @@ public:
:
buffer
(
std
::
exchange
(
src
.
buffer
,
nullptr
)),
:
buffer
(
std
::
exchange
(
src
.
buffer
,
nullptr
)),
capacity
(
std
::
exchange
(
src
.
capacity
,
0
))
{}
capacity
(
std
::
exchange
(
src
.
capacity
,
0
))
{}
ReusableArray
&
operator
=
(
const
ReusableArray
&&
src
)
{
ReusableArray
&
operator
=
(
ReusableArray
&&
src
)
{
std
::
swap
(
buffer
,
src
.
buffer
);
std
::
swap
(
buffer
,
src
.
buffer
);
std
::
swap
(
capacity
,
src
.
capacity
);
std
::
swap
(
capacity
,
src
.
capacity
);
return
*
this
;
return
*
this
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment