Max Kellermann
036094799b
input/qobuz: pass std::string by value to OnQobuzTrackSuccess()
2018-01-21 19:58:21 +01:00
Max Kellermann
2da6ab2a45
input/qobuz: dispose the QobuzLoginRequest earlier
2018-01-21 19:45:03 +01:00
Max Kellermann
91a512606b
input/qobuz: remove unused variable
2018-01-21 15:01:31 +01:00
Max Kellermann
b6d858f4d6
lib/expat/Parser: make the "is_final" argument optional
2018-01-21 14:37:10 +01:00
Max Kellermann
dedede3caa
lib/expat/Parser: add method CompleteParse()
2018-01-21 14:35:47 +01:00
Max Kellermann
b14fc907f9
lib/expat/Parser: forward Parse() arguments
2018-01-21 14:34:53 +01:00
Max Kellermann
542bbb0889
input/qobuz: parse and report message from error responses
2018-01-21 12:52:54 +01:00
Max Kellermann
714e69e708
input/qobuz: create JSON parser on demand
2018-01-21 12:49:10 +01:00
Max Kellermann
cb87ed29d8
input/tidal: invoke login handlers on second request
...
Fixes a freeze bug.
2018-01-21 12:41:19 +01:00
Max Kellermann
570c6765b0
input/tidal: parse and report userMessage from error responses
2018-01-21 12:30:46 +01:00
Max Kellermann
12a2285ba5
input/tidal: create JSON parser on demand
2018-01-21 12:29:52 +01:00
Max Kellermann
1c023eac70
db/update/Walk: add "noexcept"
2018-01-21 11:53:59 +01:00
Max Kellermann
1e3f0650df
SongUpdate: add "noexcept"
2018-01-21 11:53:42 +01:00
Max Kellermann
1e9da09f62
TagFile: add "noexcept"
2018-01-21 11:53:42 +01:00
Max Kellermann
5caf351c44
TagArchive: add "noexcept"
2018-01-21 11:53:42 +01:00
Max Kellermann
7d789a984a
decoder/Plugin: add "noexcept"
2018-01-21 11:47:17 +01:00
Max Kellermann
d921114832
db/Helpers: add "noexcept"
2018-01-21 11:37:13 +01:00
Max Kellermann
39a1f03d5c
db/PlaylistVector: add "noexcept"
2018-01-21 11:36:16 +01:00
Max Kellermann
c6a4a4edf1
playlist/Print: add "noexcept"
2018-01-21 11:35:31 +01:00
Max Kellermann
45748a2bb0
playlist/Song: add "noexcept"
2018-01-21 11:35:28 +01:00
Max Kellermann
9b13d862c1
playlist/Registry: add "noexcept"
2018-01-21 11:35:27 +01:00
Max Kellermann
590edc648a
playlist/Plugin: add "noexcept"
2018-01-21 11:35:25 +01:00
Max Kellermann
3326c87a88
db/Count: add "noexcept"
2018-01-21 11:33:53 +01:00
Max Kellermann
0ec1863fcb
db/Print: add "noexcept"
2018-01-21 11:32:22 +01:00
Max Kellermann
2b67a14155
SongPrint: add "noexcept"
2018-01-21 11:32:10 +01:00
Max Kellermann
eac8caa4de
TagPrint: add "noexcept"
2018-01-21 11:30:47 +01:00
Max Kellermann
61eb2aa328
storage/Interface: wrap StorageDirectoryReader in std::unique_ptr
2018-01-21 11:04:30 +01:00
Max Kellermann
a9847ebf54
playlist/Queue: use "auto"
2018-01-20 20:14:19 +01:00
Max Kellermann
4ca1089f60
input/TextInputStream: ReadLine() throws exception on error
2018-01-20 20:13:08 +01:00
Max Kellermann
926d4150c5
playlist/SongEnumerator: allow NextSong() to throw exceptions
2018-01-20 20:11:15 +01:00
Max Kellermann
6f267adc14
playlist/SongEnumerator: add "noexcept"
2018-01-20 20:10:46 +01:00
Max Kellermann
0095e2d7d8
playlist/Plugin: use std::unique_ptr<SongEnumerator>
2018-01-20 19:59:42 +01:00
Max Kellermann
147f64e1fc
playlist/Plugin: remove useless wrapper functions
2018-01-20 19:58:11 +01:00
Max Kellermann
b8e5932506
tag/{Tag,Builder}: use std::lock_guard
2018-01-20 19:53:38 +01:00
Max Kellermann
1ea04cd8cc
tag/Pool: add "noexcept"
2018-01-20 19:53:38 +01:00
Max Kellermann
b334643b68
tag/Pool: use C++11 initializers
2018-01-20 19:53:38 +01:00
Max Kellermann
6e6a0275b5
tag/Pool: use uint8_t instead of unsigned char
2018-01-20 19:53:38 +01:00
Max Kellermann
f5590806e0
tag/Handler: add "noexcept"
2018-01-20 19:53:38 +01:00
Max Kellermann
f686e838fe
tag/Builder: add "noexcept"
2018-01-20 19:53:38 +01:00
Max Kellermann
ea8642dec9
tag/Builder: use C++11 initializers
2018-01-20 19:53:38 +01:00
Max Kellermann
eef5b58211
tag/Tag: add "noexcept"
2018-01-20 19:39:46 +01:00
Max Kellermann
1de68b72b9
tag/Tag: use C++11 initializers
2018-01-20 19:39:06 +01:00
Max Kellermann
720df085e5
input/TextInputStream: add "noexcept"
2018-01-20 19:35:09 +01:00
Max Kellermann
f90f17227b
input/Domain: remove obsolete variable
2018-01-20 19:19:29 +01:00
Max Kellermann
36f7eaadef
input/LocalOpen: make assert() more strict
2018-01-20 19:15:51 +01:00
Max Kellermann
1eb9300658
input/LocalOpen: include cleanup
2018-01-20 19:14:42 +01:00
Max Kellermann
27e4656515
input/{file,archive}: remove the dummy InputPlugin instances
...
These have no use, exception for creating an artificial dependency
from input_plugins[] to all archive plugins.
2018-01-20 19:07:34 +01:00
Max Kellermann
e0a09dbd69
input/thread: add "noexcept"
2018-01-20 18:54:29 +01:00
Max Kellermann
30832ab33a
input/InputStream: add "noexcept" to constructor
2018-01-20 18:53:37 +01:00
Max Kellermann
d20b545a94
input/InputStream: remove methods Lock() and Unlock()
...
These methods are not exception-safe; std::lock_guard should better be
used.
2018-01-20 18:51:23 +01:00
Max Kellermann
20d01be1ad
input/mms: use class ScopeUnlock
2018-01-20 18:51:00 +01:00
Max Kellermann
d6b62d7512
input/tidal: delete request objects upon completion
2018-01-20 00:34:44 +01:00
Max Kellermann
ab9d9541a8
input/tidal: pass std::string by value
...
Don't keep any references to the owner, as the handler method may
delete the owner.
2018-01-20 00:33:01 +01:00
Max Kellermann
c3b8568560
lib/curl/Handler: add API documentation
2018-01-20 00:28:54 +01:00
Max Kellermann
8bd95a4eb1
db/update/Container: include cleanup
2018-01-20 00:25:57 +01:00
Max Kellermann
2dac3ef58e
client: eliminate client_printf()
2018-01-20 00:24:18 +01:00
Max Kellermann
86c7ab29f4
client/Idle: pass Response instead of Client to WriteIdleResponse()
2018-01-20 00:22:47 +01:00
Max Kellermann
db89e5ec28
client/Idle: move code to WriteIdleResponse()
2018-01-20 00:22:30 +01:00
Max Kellermann
d096f75fb8
client/Idle: apply idle_subscriptions mask once
2018-01-20 00:22:09 +01:00
Max Kellermann
854424a758
client/Idle: use std::exchange()
2018-01-20 00:21:26 +01:00
Max Kellermann
fe5d0ce827
Merge branch 'v0.20.x'
2018-01-20 00:04:35 +01:00
Max Kellermann
8376578921
db/simple/Mount: drop mount point prefix from LOCATE_TAG_BASE_TYPE
...
Fixes search within mount points, resulting in error "No such
directory".
Closes #190
2018-01-19 23:52:57 +01:00
Max Kellermann
ed2354cd9d
SongFilter: allow copying items
2018-01-19 23:52:03 +01:00
Max Kellermann
386688b87a
SongFilter: use std::string instead of AllocatedString
2018-01-19 23:51:42 +01:00
Max Kellermann
38d56dddf1
lib/icu/Compare: allow copying
2018-01-19 23:49:50 +01:00
Max Kellermann
3ca80a7336
util/RefCount, db/simple/Mount: remove obsolete libc++ workarounds
...
No longer a problem with NDK r16.
2018-01-19 23:19:46 +01:00
Max Kellermann
2fed3b5e5b
input/Tidal*Request: add Start() method
...
The caller should be able to safely store the instance pointer before
his callback is invoked.
2018-01-19 16:03:05 +01:00
Max Kellermann
1ecad094bd
input/tidal: add API documentation
2018-01-19 16:03:03 +01:00
Stefan Roellin
187cc573a7
db/upnp/Directory: fix parsing of durations with fractions of seconds
...
The duration of a song can have fractions of seconds
(quote from http://www.upnp.org/schemas/av/didl-lite-v2.xsd ):
The format of the duration string is:
H+:MM:SS[.F+], or H+:MM:SS[.F0/F1]
Where:
+H one or more digits to indicate elapsed hours,
MM exactly 2 digits to indicate minutes (00 to 59),
SS exactly 2 digits to indicate seconds (00 to 59),
F+ any number of digits (including no digits) to indicate fractions of seconds,
F0/F1 a fraction, with F0 and F1 at least one digit long,
and F0 < F1.
The string may be preceded by an optional + or - sign, and the
decimal point itself may be omitted if there are no fractional seconds digits.
Until now, a duration with fractions of seconds could not be parsed and
resulted in an unknown duration. Only durations in the format "H+:MM:SS"
were feasible. This commit enables to read durations in the first format,
i.e. "H+:MM:SS[.F+]"
2018-01-19 15:53:18 +01:00
Max Kellermann
0ead72a404
lib/upnp/ContentDirectoryService: work around GCC 5 bug
...
Closes #193
2018-01-18 21:55:58 +01:00
Max Kellermann
bbc5212436
fs/AllocatedPath: make the nullptr_t constructor public
2018-01-17 12:17:41 +01:00
Max Kellermann
c4f7740b80
fs/Path: replace method Null() with nullptr_t constructor
2018-01-17 12:16:21 +01:00
Max Kellermann
3e2e0d062b
util/OptionParser: support option values
2018-01-17 11:14:57 +01:00
Max Kellermann
c45fe3517c
util/OptionParser: add struct Result
...
Prepare for option values.
2018-01-17 11:08:05 +01:00
Max Kellermann
d588da69e5
CommandLine: convert pointer to reference
2018-01-17 11:08:03 +01:00
Max Kellermann
ec54a5c72c
CommandLine: use C++11 initializers
2018-01-17 11:08:02 +01:00
Max Kellermann
735a371249
util/OptionParser: pass array of OptionDefs to constructor
2018-01-17 10:24:06 +01:00
Max Kellermann
5ab086e337
util/OptionParser: loop in ParseNext() until a new option is found
2018-01-16 11:25:18 +01:00
Max Kellermann
68f660dbcc
util/OptionParser: collect remaining arguments
...
Allow the caller to use a simple "for" loop without checking
arguments.
2018-01-16 11:08:23 +01:00
Max Kellermann
0066f7a818
util/{Const,Writable}Buffer: add constructor with two pointers
2018-01-16 11:06:33 +01:00
Max Kellermann
65059f2add
util/{Const,Writable}Buffer: eliminate static method Null(), use nullptr cast instead
2018-01-16 11:04:51 +01:00
Max Kellermann
23dff4f209
util/OptionParser: use ConstBuffer<const char*> to store argv/argc
2018-01-16 10:22:06 +01:00
Max Kellermann
4a304bf34e
util/OptionParser: make string pointers "const"
2018-01-16 10:20:53 +01:00
Max Kellermann
36a6405e8b
util/OptionParser: add "constexpr"
2018-01-16 10:20:52 +01:00
Max Kellermann
42c1fe963b
util/OptionParser: add "noexcept"
2018-01-16 10:13:39 +01:00
Max Kellermann
465b154fc0
util/OptionParser: use C++11 initializers
2018-01-16 10:12:48 +01:00
Max Kellermann
a0c4102b5a
util/OptionDef: add "constexpr"
2018-01-16 10:11:35 +01:00
Max Kellermann
9420066895
input/qobuz: new input plugin to receive Qobuz streams
2018-01-15 21:50:20 +01:00
Max Kellermann
74eac1d449
lib/curl/Request: add constructor without "url" parameter
...
Allows constructing the request first and set the URL later. This is
needed because curl_easy_escape() is needed to construct the URL,
which however needs the CURL "easy" handle created by the Request class.
2018-01-15 10:36:48 +01:00
Max Kellermann
96676f8f3b
Merge branch 'v0.20.x'
2018-01-15 09:06:31 +01:00
Max Kellermann
93b51d56aa
input/tidal: new input plugin to receive Tidal streams
2018-01-12 14:33:22 +01:00
Max Kellermann
86c50574d2
lib/yajl/Callbacks: add wrappers for start_array and end_array
2018-01-12 14:33:22 +01:00
Max Kellermann
efb528f979
player/Thread: wake up the decoder when the pipe has run empty
...
This is another instance of the kludge we already have a few lines
above that. It works around a deadlock/race condition revealed by
commit 98a7c62d7a
2018-01-12 14:33:22 +01:00
Max Kellermann
edcd0b9913
lib/curl/Request: add methods StartIndirect(), StopIndirect()
2018-01-11 20:51:23 +01:00
Max Kellermann
55d1473918
lib/yajl/Callbacks: OO wrapper for yajl_callbacks
2018-01-11 20:25:17 +01:00
Max Kellermann
0211c7f7f3
lib/yajl/ParseInputStream: use InputStream::LockRead() to reduce lock duration
2018-01-11 20:11:04 +01:00
Max Kellermann
5913994169
lib/yajl/ParseInputStream: eliminate variable "done"
2018-01-11 20:09:52 +01:00
Max Kellermann
26b1573cbe
playlist/SoundCloud: move code to Yajl::Parse(InputStream&)
2018-01-11 20:08:02 +01:00
Max Kellermann
7fe07324d7
playlist/SoundCloud: soundcloud_parse_json() throws exception
2018-01-11 20:08:01 +01:00
Max Kellermann
8e29430f21
lib/yajl/Handle: libyajl C++ bindings
2018-01-11 19:25:46 +01:00
Max Kellermann
cb86023bd7
lib/curl/Form: new library
2018-01-11 17:27:25 +01:00
Max Kellermann
bd2cb40424
lib/curl/Easy: add curl_easy_escape() wrapper
2018-01-11 17:27:25 +01:00
Max Kellermann
e9a3ff0e70
input/failing: new class
2018-01-11 16:18:15 +01:00
Max Kellermann
5148e229e0
input/proxy: allow input==nullptr
...
Allow implementations to install the "real" input later.
2018-01-11 15:57:57 +01:00
Max Kellermann
1ad21c27c9
input/curl: add public function to construct an instance
2018-01-11 15:53:46 +01:00
Max Kellermann
f392e13077
input/curl: pass additional request headers to constructor
...
Prepare to allow callers to pass custom request headers.
2018-01-11 15:43:59 +01:00
Max Kellermann
3fe5b42b2b
input/curl: pass IcyMetaDataParser to constructor
...
Allows the caller to decide whether to enable the feature.
2018-01-11 15:32:19 +01:00
Max Kellermann
70c4b621cf
input/curl: remove impossible "icy" checks
...
The IcyMetaDataParser cannot be initialized already in OnHeaders(),
because it will be initialized late in that method; and there will not
be another OnHeaders() call, because streams with Icy metadata are not
seekable, thus there will not be another HTTP request.
2018-01-11 14:55:29 +01:00
Max Kellermann
a8df5e109b
input/curl: use StringView::StartsWith()
2018-01-11 14:52:35 +01:00
Max Kellermann
ba4f1da466
input/curl: create the request_headers list only once
2018-01-11 12:49:01 +01:00
Max Kellermann
0bfbe6771e
input/curl: un-inline constructor
2018-01-11 12:46:52 +01:00
Max Kellermann
d1df0fec19
input/curl: add "noexcept"
2018-01-11 12:36:31 +01:00
Max Kellermann
031ccce8b7
input/curl: convert struct to class
2018-01-11 12:31:29 +01:00
Max Kellermann
1f50bdb230
event/Loop: use std::atomic_bool for the "quit" variable
...
Fixes thread sanitizer warnings.
2018-01-08 10:06:23 +01:00
Max Kellermann
2eef4e6716
thread/Thread: add debug attribute "inside_handle"
...
This attribute shall be used only for IsInside() to make this safe
against a race condition described in #188 :
> There is no requirement on the implementation that the ID of the
> created thread be available before the newly created thread starts
> executing.
http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_create.html ):
This means that on some pthread implementations (e.g. Haiku), the
assert(thread.IsInside()) could fail.
Closes #188
2018-01-08 09:58:18 +01:00
Max Kellermann
d989dbfec4
thread/Thread: make IsInside() debug-only
...
This method is only used inside assert().
2018-01-08 09:56:39 +01:00
Max Kellermann
ca9fcec364
thread/Thread: fix indent
2018-01-08 09:49:08 +01:00
Max Kellermann
354104f9a9
thread/{Thread,Id}: use defaul-initialized pthread_t as "undefined" value
...
Use the "==" operator instead of pthread_equal().
This allows us to eliminate two boolean flags which are there to avoid
race conditions, and made the thing so fragile that I got tons of
(correct) thread sanitizer warnings.
2018-01-07 17:20:26 +01:00
Max Kellermann
8649ea3d6f
thread/Thread: use BoundMethod
2018-01-07 17:20:26 +01:00
Max Kellermann
752ff12c37
thread/Thread: move code to Run()
2018-01-07 17:20:26 +01:00
Max Kellermann
4bb89b1755
MusicPipe: lock the mutex in Peek() and GetSize()
2018-01-07 17:20:22 +01:00
Max Kellermann
be068f360d
Merge remote-tracking branches 'mmuman/configure-sockaddr-sin-len' and 'mmuman/haiku-build-fix'
2018-01-06 13:19:58 +01:00
François Revol
5b18b66282
Haiku: fix build
...
Convert the fill_buffer to a class method, to allow accessing the private method.
Also remove the leftover Wrapper stuff.
2018-01-05 23:10:58 +01:00
François Revol
7b2283c28b
configure.ac: autodetect sin_len member in struct sockaddr_in.
...
This fixes a build issue on Haiku as it does have sin_len.
Tested on Linux as well.
For some reason AC_CHECK_MEMBER doesn't generate the proper define
in config.h.in, so I used AC_CHECK_MEMBERS.
2018-01-05 22:20:47 +01:00
Max Kellermann
c74e018359
Merge branch 'v0.20.x'
2018-01-05 18:11:04 +01:00
Max Kellermann
cab77e35e0
queue/PlaylistControl: fix crash after seek failure
...
This completes the bug fix commit
2065e3290452377b2931f3129b230c8cc536cbc8; if we clear "queued" then we
must clear "queued_song" as well, or another variant of the assertion
fails.
2018-01-05 13:00:24 +01:00
Max Kellermann
4a120f8090
Merge branch 'v0.20.x'
2018-01-05 10:10:17 +01:00
Max Kellermann
c2cbb7b8ce
output/haiku: remove unimplemented Cancel() method
2018-01-05 10:05:14 +01:00
Max Kellermann
79b0f97a3f
output/Interface: clarify Play() API documentation
2018-01-05 08:35:40 +01:00
Max Kellermann
329f9cd9fe
thread/Util: no ioprio_set() on Android due to seccomp/SIGSYS
2018-01-04 19:33:14 +01:00
Max Kellermann
e3ef3e8d71
output/Control: unlock mutex during expensive operations
2018-01-04 10:36:18 +01:00
Max Kellermann
7574dfd339
output/Control: move code from FinishDestroy() to destructor
2018-01-04 10:34:27 +01:00
Max Kellermann
a5b93008f5
output/Filtered: remove redundant nullptr assignments from Setup()
2018-01-04 10:32:10 +01:00
Max Kellermann
0227af5bb7
output/Filtered: remove BeginDestroy()
...
All it does is "sometimes" close the mixer, but that is also done in
the destructor.
2018-01-04 10:29:27 +01:00
Max Kellermann
ef71df60f6
output/Multiple: use std::unique_ptr<FilteredAudioOutput>
2018-01-04 10:14:26 +01:00
Max Kellermann
f52b3b4e04
output/Multiple: dispose the AudioOutputControl instances
...
Fixes shutdown memory leak.
2018-01-04 10:11:23 +01:00
Max Kellermann
7e4e32cfe0
output/Filtered: eliminate FinishDestroy()
...
This is implicitly done by the destructor.
2018-01-04 10:05:31 +01:00
Max Kellermann
9f8649884b
output/Control: dispose the FilteredAudioOutput
...
Fixes shutdown memory leak.
2018-01-04 10:01:34 +01:00
Max Kellermann
f1ee4caddd
output/Init: fix configuration option name in error message
2018-01-04 09:57:28 +01:00
Max Kellermann
051b8fbb31
output/Thread: add "noexcept"
2018-01-04 09:54:35 +01:00
Max Kellermann
b0ea32f660
output/Control: remove unused method StopThread()
2018-01-04 09:20:22 +01:00
Max Kellermann
8322ae5a4c
output/Control: use class ScopeUnlock()
2018-01-04 08:41:19 +01:00
Max Kellermann
98a7c62d7a
player/Thread: don't send silence if decoder is slow
...
The output plugin shall decide whether to insert silence or do nothing
at all. The ALSA output plugin has already implemented this.
Inserting silence is not necessary or helpful for some plugins, and
may even hurt them (e.g. "recorder").
2018-01-03 17:36:41 +01:00
Max Kellermann
859e59262e
player/Thread: remove unnecessary "continue" keywords
2018-01-03 17:17:22 +01:00
Max Kellermann
ec113420f1
player/Thread: hold mutex while calling SongBorder()
...
Eliminates unnecessary mutex locks.
2018-01-03 17:12:21 +01:00
Max Kellermann
1954e94de2
Merge branch 'work_tag' of git://github.com/loujine/MPD
...
Closes #181
2018-01-03 11:47:02 +01:00
Max Kellermann
f6ec43b9ec
pcm/Resampler: add virtual method Flush()
...
Wired to Filter::Flush().
Closes #153
2018-01-02 23:17:25 +01:00
Max Kellermann
6d0d8cf9cf
filter/Filter: add virtual method Flush()
...
This will be used by filters which have internal buffers which need to
be flushed at the end, e.g. the "soxr" resampler.
2018-01-02 23:15:51 +01:00
Max Kellermann
5ede02aed8
filter/FilterConfig: rename to LoadChain.cxx
2018-01-02 23:09:36 +01:00
Max Kellermann
bbabb7a14c
filter/Plugin: move filter_configured_new() to LoadOne.cxx
2018-01-02 23:06:53 +01:00
Max Kellermann
b13ebe3ddb
filter/Plugin: eliminate filter_new()
2018-01-02 23:00:16 +01:00
Max Kellermann
17b0add058
filter/Observer: pass Reset() to underlying Filter
...
Wohooooo, the method Filter::Reset() has been broken because no
implementation of it has ever been called for a loooong time.
And nobody ever noticed it. WTF.
2018-01-02 22:13:14 +01:00
Max Kellermann
c68ed40661
pcm/SoxrResampler: implement method Reset()
2018-01-02 21:53:09 +01:00
Max Kellermann
b0199245d5
output/Thread: move code to method InternalDrain()
2018-01-02 18:03:48 +01:00
Max Kellermann
b93e3b2cf6
output/Thread: move code to method InternalCloseError()
2018-01-02 18:02:14 +01:00
Max Kellermann
ae7fcf4c6b
output/Thread: move common code to method Failure()
2018-01-02 18:00:20 +01:00
Max Kellermann
1607754771
output/Thread: update "last_error" after filter/play errors
2018-01-02 17:59:37 +01:00
Max Kellermann
028f659c40
output/Thread: move error handling code into the catch block
2018-01-02 17:48:14 +01:00
Max Kellermann
8dfdacf128
output/Thread: AudioOutput::Play() must not return zero
2018-01-02 17:47:46 +01:00
Max Kellermann
f4a56f839f
output/haiku: remove size==0 check from Play()
...
By API contract, this parameter must not be zero.
2018-01-02 17:45:14 +01:00
Max Kellermann
67a8eedca0
output/ao: round write_size down to a multiple of the frame size
2018-01-02 17:33:33 +01:00
Max Kellermann
be65c7d5d0
config/Block: add method GetPositiveValue()
...
Adds missing checks to several plugins.
2018-01-02 17:24:34 +01:00
Max Kellermann
7c5306a841
config/{Block,Global}: add missing strtoul() check
2018-01-02 17:23:10 +01:00
Max Kellermann
201210cfe1
neighbor/Plugin: std::unique_ptr<NeighborExplorer>
2018-01-02 17:04:23 +01:00
Max Kellermann
cd6de3b24e
neighbor/{Explorer,Listener}: add "noexcept"
2018-01-02 16:58:14 +01:00
Max Kellermann
dcd483bd99
storage/Composite: use std::unique_ptr<Storage>
2018-01-02 16:18:34 +01:00
Max Kellermann
3c5e4e2788
storage/Plugin: return std::unique_ptr<Storage>
2018-01-02 16:11:17 +01:00
Max Kellermann
3f4f7b0a53
lib/upnp/Discovery: protect "downloaders" accesses with mutex
2018-01-02 14:55:57 +01:00
Max Kellermann
0a4b866d8a
db/upnp: use SplitString() instead of stringToTokens()
2018-01-02 14:16:57 +01:00
Max Kellermann
8c7d7dfa5b
lib/upnp/Util: remove unused function csvToStrings()
2018-01-02 14:16:57 +01:00
Max Kellermann
cdf615f783
lib/upnp/ContentDirectoryService: use SplitString() instead of csvToStrings()
2018-01-02 14:16:57 +01:00
Max Kellermann
7d96883d64
lib/upnp/Util: use std::string::erase() instead of ..::replace()
2018-01-02 14:16:57 +01:00
Max Kellermann
28c5e7e6a7
Merge branch 'v0.20.x'
2018-01-02 14:16:47 +01:00
Max Kellermann
ff624075a8
storage/State: check if a CompositeStorage exists; fixes nullptr dereference
...
Fixes another crash bug caused by commit
64d141f71e
2018-01-02 14:13:26 +01:00
Max Kellermann
08db28469d
storage/State: make mount errors non-fatal
...
Fixes crash bug caused by commit
64d141f71e
2018-01-02 14:07:52 +01:00
Max Kellermann
a20b326807
storage/State: fix memory leak after database mount failure
...
Caused by commit 64d141f71e
This wasn't a serious memory leak, because after a mount failure, MPD
would abort anyway, which is subject to the next commit.
2018-01-02 14:05:07 +01:00
Max Kellermann
4db1b1b250
storage/State: remove useless #ifdef ENABLE_DATABASE
...
This source file isn't compiled when the database is disabled.
2018-01-02 13:48:16 +01:00
Max Kellermann
dbfc4abfd6
thread/SafeSingleton: disallow copying
2018-01-02 12:39:05 +01:00
Max Kellermann
5544375002
thread/SafeSingleton: pass parameters to constructor
2018-01-02 12:26:53 +01:00
Max Kellermann
1fd8d46064
lib/upnp/ClientInit: return UpnpClient_Handle
2018-01-02 12:22:44 +01:00
Max Kellermann
46406d6cca
output/ao: use class SafeSingleton for libao initialization
2018-01-02 12:13:51 +01:00
Max Kellermann
196df1ccd5
thread/SafeSingleton: new thread-safe utility class
2018-01-02 12:10:41 +01:00
Max Kellermann
d2358b42b6
output/Source: drop the "_instance" suffix from variable names
2018-01-02 09:59:22 +01:00
Max Kellermann
e387d94ff1
filter/Filter: add "noexcept"
2018-01-01 19:23:01 +01:00
Max Kellermann
3bb9c704de
pcm/*: add "noexcept"
2018-01-01 19:07:33 +01:00
Max Kellermann
551ac56a33
Filter/Internal: split header
2018-01-01 18:48:34 +01:00
loujine
42959982a9
Add basic support for MUSICBRAINZ_WORKID tag
2017-12-30 19:05:21 +00:00
Max Kellermann
78c73fb9e7
MusicChunk: reorder attributes to reduce padding
2017-12-30 17:52:07 +01:00
Max Kellermann
a06bf388d9
MusicChunk: make the struct size exactly 4096
2017-12-30 17:50:25 +01:00
Max Kellermann
de0c3e717e
MusicChunk: split struct MusicChunkInfo from struct MusicChunk
2017-12-30 17:47:16 +01:00
Max Kellermann
1194998ce9
CrossFade: use sizeof(MusicChunk::data) instead of CHUNK_SIZE
2017-12-30 17:43:56 +01:00
Max Kellermann
7171e23700
player/Thread: make seeking into a new song non-blocking
2017-12-30 11:31:26 +01:00
Max Kellermann
dee378b775
player/Thread: make SEEK (partially) non-blocking
...
When the decoder is still starting up while we handle a SEEK, finish
the "player SEEK" immediately and re-enter the player loop, being able
to handle commands (and even cancel the pending seek).
This is the first part in a series of patches to solve the "blocking
input blocks decoder, blocks player, blocks the main thread" problem.
There are many other blocking code locations left, and the main thread
isn't non-blocking either because it waits for "seeking" to become
false.
2017-12-29 17:32:12 +01:00
Max Kellermann
f76262ef79
poison.h: remove obsolete header
2017-12-29 17:29:52 +01:00
Max Kellermann
c40354bbcb
player/Outputs: abstract interface wrapping class MultipleOutputs
2017-12-29 16:39:05 +01:00
Max Kellermann
c04aafb4e3
output/Multiple: add "noexcept"
2017-12-29 16:29:49 +01:00
Max Kellermann
e31abe6d6b
player/Thread: remove redundant outputs.Cancel() call
...
The STOP, EXIT and CLOSE_AUDIO commands are not finished here; they
are propagated to PlayerControl::RunThread() where the
outputs.Cancel() call will be done again.
2017-12-28 08:39:48 +01:00
Max Kellermann
e1349ccadc
player/Thread: ProcessCommand() returns bool
...
Allows signalling a failed seek, and replaces several redundant
command checks after the ProcessCommand() call.
2017-12-28 08:30:01 +01:00
Max Kellermann
8838bdc1e3
player/Thread: move CommandFinished() call out of SeekDecoder(SongTime)
...
Decouple this function from player command execution.
2017-12-27 14:28:56 +01:00
Max Kellermann
d6386bc80f
player/Thread: update code comment
2017-12-27 14:26:14 +01:00
Max Kellermann
edef62df86
filter/Internal: return std::unique_ptr<Filter>
2017-12-27 11:56:05 +01:00
Max Kellermann
e2621d5e44
filter/Plugin: return std::unique_ptr<PreparedFilter>
2017-12-27 11:39:01 +01:00
Max Kellermann
0e3ff12dd3
filter/volume: remove from filter_plugins[]
...
Thsi filter doesn't make sense as manually configured plugin, because
nobody ever calls volume_filter_set() on it, making it a no-op.
2017-12-27 11:38:38 +01:00
Max Kellermann
b335ac4156
filter/{chain,convert}: remove unused FilterPlugin instances
...
These are not in filter_plugins[] and have dedicated constructors
anyway.
2017-12-27 11:33:15 +01:00
Max Kellermann
03cf6591c0
output/Source: convert prepared_filter to reference
2017-12-27 11:21:43 +01:00
Max Kellermann
2e0949d8e6
archive/Plugin: return std::unique_ptr<ArchiveFile>
2017-12-27 09:07:21 +01:00
Max Kellermann
5a728a069e
fs/AllocatedPath: drop obsolete GCC check
2017-12-27 08:50:55 +01:00
Max Kellermann
7384ec199e
Compiler.h: remove support for GCC 4.9
...
Supporting GCC 4.9 is becoming cumbersome as we refactor more code to
C++14.
This shouldn't be a problem for anybody, because Debian Stable
(Stretch) has version 6.3, and Ubuntu LTS (Xenial) has version 5.3.
2017-12-27 08:40:24 +01:00
Max Kellermann
7bce6329e3
archive/File, input/Plugin: return InputStreamPtr
2017-12-26 20:05:22 +01:00
Max Kellermann
49619fbd77
input/Proxy: use InputStreamPtr
2017-12-26 20:03:37 +01:00
Max Kellermann
fb9a2c5431
input/Icy: manage the parser in a std::shared_ptr
...
This resolves the circular dependency between IcyInputStream and
CurlInputStream.
2017-12-26 20:03:35 +01:00
Max Kellermann
cd38aa3b2a
Merge branch 'v0.20.x'
2017-12-26 20:03:18 +01:00
Max Kellermann
eee10ad2ed
input/curl: add missing mutex locks to OnEnd(), OnError()
2017-12-26 20:01:13 +01:00
Max Kellermann
daeb7ae949
input/InputStream: add "noexcept"
2017-12-26 11:39:34 +01:00
Max Kellermann
82a79565de
input/InputStream: use C++11 initializers
2017-12-26 11:32:36 +01:00
Max Kellermann
078839c711
archive/zzip: convert struct to class
2017-12-26 11:22:46 +01:00
Max Kellermann
98472a8104
pcm/SampleFormat: remove wrong "malloc" attribute
2017-12-23 08:38:22 +01:00
Max Kellermann
90cc32f6f8
util/RefCount: remove obsolete class
2017-12-22 16:37:30 +01:00
Max Kellermann
9aec2f019a
archive/File: eliminate Close(), make destructor virtual instead
2017-12-22 16:30:17 +01:00
Max Kellermann
5da455080b
archive/iso9660: use std::shared_ptr instead of class RefCount
2017-12-22 16:25:08 +01:00
Max Kellermann
17558102f2
archive/zzip: use std::shared_ptr instead of class RefCount
2017-12-22 16:20:05 +01:00
Max Kellermann
e1c39f3fdc
archive/bz2: use std::shared_ptr instead of class RefCount
2017-12-22 16:14:12 +01:00
Max Kellermann
20555c8e37
archive/File: remove unused attribute "plugin"
2017-12-22 16:13:29 +01:00
Max Kellermann
300a619991
Merge branch 'v0.20.x'
2017-12-22 16:10:05 +01:00
Max Kellermann
d094c168aa
archive/{iso9660,zzip}: unlock the mutex during I/O
...
Similar to commit 31ab78ae8e
2017-12-22 16:09:03 +01:00
Max Kellermann
4b18460bc6
archive/bz2: unlock the archive mutex and lock the file mutex
...
Fixes deadlock because FileInputStream::Read() unlocks the mutex
(which was not locked) and then locks it, keeping it locked. This can
result in a deadlock. This happens because the archive and the file
mutex are different.
2017-12-22 16:02:23 +01:00
Max Kellermann
4319dedb23
db/update/Walk: use std::atomic_bool for the "quit" variable
...
Fixes thread sanitizer warnings.
2017-12-22 12:02:44 +01:00
Max Kellermann
f8bb66b4e0
event/Loop: use std::atomic_bool for the "quit" variable
...
Fixes thread sanitizer warnings.
2017-12-22 11:04:24 +01:00
Max Kellermann
5d6a8b3840
MusicPipe: lock the mutex in Peek() and GetSize()
2017-12-22 11:03:37 +01:00
Max Kellermann
6a8c2848f6
thread/{Thread,Id}: use defaul-initialized pthread_t as "undefined" value
...
Use the "==" operator instead of pthread_equal().
This allows us to eliminate two boolean flags which are there to avoid
race conditions, and made the thing so fragile that I got tons of
(correct) thread sanitizer warnings.
2017-12-22 10:37:07 +01:00
Max Kellermann
6439727afc
player/Thread: use std::lock_guard in RunThread()
2017-12-22 09:35:31 +01:00
Max Kellermann
27b0a581a6
player/Thread: even more fine-grained unlocking
...
Use one single std::lock_guard in Run(), and replace the manual
Lock()/Unlock() calls.
2017-12-22 08:09:16 +01:00
Max Kellermann
15a54230f1
player/Thread: move unlock call down
...
Eliminate more unlock/lock transitions, making the code more robust.
2017-12-22 01:14:51 +01:00
Max Kellermann
f0d184884a
player/Thread: remove obsolete commented code
2017-12-22 01:14:39 +01:00
Max Kellermann
8fca04f140
player/Thread: add missing lock for StartDecoder()
...
Regression from commit 0772e571b7
2017-12-22 01:12:15 +01:00
Max Kellermann
3b2b5edd26
player/Thread: move mutex lock out of SeekDecoder()
2017-12-22 01:07:13 +01:00
Max Kellermann
5bd1fbb0d6
player/Thread: merge four mutex locks in SeekDecoder()
2017-12-22 01:04:44 +01:00
Max Kellermann
0772e571b7
player/Thread: move mutex lock out of StartDecoder()
2017-12-22 01:03:12 +01:00
Max Kellermann
910496cea9
decoder/Control: caller must lock mutex for Start()
2017-12-22 01:03:01 +01:00
Max Kellermann
739e1da279
player/Thread: move mutex lock out of ActivateDecoder()
2017-12-22 00:58:57 +01:00
Max Kellermann
08b4a7aaf2
player/Thread: eliminate LockWaitDecoderStartup()
2017-12-22 00:58:42 +01:00
Max Kellermann
1f0770ca55
player/Thread: move code to SeekDecoder(SongTime)
2017-12-22 00:49:21 +01:00
Max Kellermann
505d0bfa51
player/Thread: move mutex lock out of StopDecoder()
2017-12-22 00:48:19 +01:00
Max Kellermann
860d13c7d8
decoder/Control: caller must lock mutex for Stop()
2017-12-22 00:48:12 +01:00
Max Kellermann
76d77af0f0
player/Thread: use std::lock_guard once more
2017-12-22 00:47:36 +01:00
Max Kellermann
ea8ab4ddf2
player/Thread: merge two mutex locks
2017-12-22 00:42:10 +01:00
Max Kellermann
4bcc38c749
player/Thread: move mutex lock out of WaitDecoderStartup()
2017-12-22 00:41:05 +01:00
Max Kellermann
5becffbba5
player/Thread: merge two mutex locks
2017-12-22 00:39:54 +01:00
Max Kellermann
d0194a6fb3
decoder/Control: caller must lock mutex for Seek()
2017-12-22 00:37:25 +01:00
Max Kellermann
e45d13d469
player/Thread: add missing mutex lock around PlayerControl::SetError()
2017-12-22 00:35:18 +01:00
Max Kellermann
412c0a965c
util/WStringAPI: fix indent
2017-12-21 18:45:26 +01:00
Ilya ilyxa Tyshchenko
2becf79223
correct action for compile on Solaris 11.3 X86
2017-12-21 18:42:36 +01:00
Max Kellermann
a431274b32
player/Control: add "occupied" flag to skip REFRESH
...
Reduces main thread contention. Avoids blocking the main thread in
"status" commands.
2017-12-21 10:25:40 +01:00
Max Kellermann
994c9a01e3
player/Control: reorder attributes to reduce padding
2017-12-21 10:25:38 +01:00
Max Kellermann
ad1d5e8248
Merge branch 'v0.20.x'
2017-12-21 10:25:28 +01:00
Max Kellermann
43ec96d4a0
command/Error: translate std::{length_error,out_of_range} to ACK_ERROR_ARG
2017-12-21 10:22:04 +01:00
Max Kellermann
3d1d779da7
storage/State: use std::set instead of sorting a std::list
2017-12-21 10:22:00 +01:00
Max Kellermann
c88056ba83
db/simple: fix file corruption in the presence of mount points
...
If a directory is a mount point, omit the "directory: " as well.
This bug is years old, but has become more visible now that mount
points are persistent in the state file.
2017-12-21 10:16:52 +01:00
Max Kellermann
b2670eaba5
player/Thread: move start_time variable into the scope
2017-12-20 19:15:28 +01:00
Max Kellermann
54aff33118
player/Thread: reorder attributes to reduce padding
2017-12-20 18:43:56 +01:00
Max Kellermann
499e053d58
decoder/mad: use std::unique_ptr
2017-12-20 15:32:10 +01:00
Max Kellermann
9f33c6fe03
decoder/Bridge: use std::unique_ptr<Tag>
2017-12-20 15:24:41 +01:00
Max Kellermann
73e69edac3
input/InputStream: ReadTag() returns std::unique_ptr<Tag>
2017-12-20 15:22:18 +01:00
Max Kellermann
4c4fa68268
input/Icy: use std::unique_ptr<Tag>
2017-12-20 15:13:22 +01:00
Max Kellermann
43d2fd73ab
lib/xiph/VorbisComments: return std::unique_ptr<Tag>
2017-12-20 15:10:59 +01:00
Max Kellermann
71f1ec0bc8
tag/Id3Scan: return std::unique_ptr<Tag>
2017-12-20 15:09:20 +01:00
Max Kellermann
99f4bce112
IcyMetaDataParser: return std::unique_ptr<Tag>
2017-12-20 15:06:33 +01:00
Max Kellermann
6b77ee9a5e
IcyMetaDataParser: add "noexcept"
2017-12-20 15:05:14 +01:00
Max Kellermann
25fa3ccade
MusicChunk, player/Thread: use std::unique_ptr<Tag>
2017-12-20 15:02:14 +01:00
Max Kellermann
c6a95395b5
tag/Tag: Merge() returns std::unique_ptr<Tag>
2017-12-20 14:59:51 +01:00
Max Kellermann
cb3042ffb2
tag/Builder: CommitNew() returns std::unique_ptr<Tag>
2017-12-20 14:55:25 +01:00
Max Kellermann
1d559bf00c
util/SliceBuffer: add "noexcept"
2017-12-20 14:41:03 +01:00
Max Kellermann
4286f55c52
player/Thread: use C++11 initializers
2017-12-20 13:35:07 +01:00
Max Kellermann
0a7cad9074
player/Thread: add "noexcept"
2017-12-20 13:32:38 +01:00
Max Kellermann
069a7fe71e
player/Thread: more API documentation
2017-12-20 13:27:13 +01:00
Max Kellermann
9c8a45854a
player/Control: add SEEK documentation
2017-12-20 12:20:11 +01:00
Max Kellermann
7d035edf9d
player/Control, ...: remove API documentation references to the obsolete Error class
2017-12-20 12:20:09 +01:00
Max Kellermann
36899dba0b
event/Call: document exceptions
2017-12-20 10:50:36 +01:00
Max Kellermann
6a31446671
event/TimerEvent: add "noexcept"
2017-12-20 10:45:30 +01:00
Max Kellermann
451fbbcea1
event/FullyBufferedSocket: add "noexcept"
2017-12-20 10:44:47 +01:00
Max Kellermann
a17a481e30
event/BufferedSocket: add "noexcept"
2017-12-20 10:42:17 +01:00
Max Kellermann
5f9d4a02a5
client/*: add "noexcept"
2017-12-20 10:38:29 +01:00
Max Kellermann
7094d88958
client/Message: make valid_channel_char() constexpr
2017-12-20 10:27:43 +01:00
Max Kellermann
8ac73a9eba
output/alsa: add attributes "dop" and "allowed_formats"
2017-12-19 11:57:52 +01:00
Max Kellermann
86a06a7acc
output/Interface: add "attributes" map
...
These attributes are printed in the "outputs" response, and the new
command "outputset" allows setting new values.
No attributes are currently implemented.
2017-12-19 11:57:52 +01:00
Max Kellermann
d05c3f4e4d
lib/alsa/AllowedFormat: throw std::invalid_argument on error
2017-12-19 11:57:52 +01:00
Max Kellermann
de178e90f4
AudioParser: throw std::invalid_argument on error
2017-12-19 11:57:47 +01:00
Max Kellermann
3d960b5e55
util/RuntimeError: add FormatInvalidArgument()
2017-12-19 11:56:29 +01:00
Max Kellermann
39dc83bd82
output/Print: print the plugin name
2017-12-19 11:52:10 +01:00
Max Kellermann
503063cddc
output/Print: use %u for the index
2017-12-19 11:52:09 +01:00
Max Kellermann
914df18bf9
Main, ...: catch any exception, not just std::runtime_error
2017-12-19 10:56:23 +01:00
Max Kellermann
a539094c06
command/Error: translate std::{length_error,out_of_range} to ACK_ERROR_ARG
2017-12-19 10:54:49 +01:00
Max Kellermann
cd3ed720e0
lib/alsa/AllowedFormat: add API documentation
2017-12-19 08:41:53 +01:00
Max Kellermann
37c27fa606
output/Interface: convert need_fully_defined_audio_format to flag
2017-12-19 08:41:34 +01:00
Max Kellermann
093ca5d492
storage/Interface: add "noexcept"
2017-12-18 23:54:21 +01:00
Max Kellermann
1d24dd3067
storage/State: use std::set instead of sorting a std::list
2017-12-18 23:50:31 +01:00
Max Kellermann
b9659ba0c0
release v0.20.13
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlo4RDQQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEpm6EACTPaPwGbxS770jJ74vLGSltnZTohaKbRvp
rIaJGkHTTzPlvw8dpLHmave9fL5ODSchTBmIHqb0loM9011oJgvXUKq3fqEQJUUW
eFZ54emSDXOjholsd8ykJgrPjMBO2UNEk5T/r6bZdNZlLAN7yNOXkJHezPY8qyzA
s07o9jmFEKjyLOsMlmEaV2uiCZ9UhPUSUI+vy+Q7qwwil24AfOzXc4+gAB3bV87E
FFWWP8KO83X2ZrhPZdSeILFcI0i93X/l0rskvf4bgHtoegaYPWk/KnhPnmJ2DC48
GFzigB5ZbU+OGXz1We7O6DZg6KOB4Y6dDPThtxS0rBTZWCPM6biDVsDFexqACf8u
sCYTzaTlvAV2gHVGp3csVwXS9gqxYOZbiyMgyMOVKygrvuhgrnQydZQW8yweoscP
tRxVcKfHclbdsEJHboT1Tp4ibh4+iIT48muMpLDlX6h0KC4OOTSg8m3UGV6V4UAA
bkDVueFYQcr1tyENJbFGRt6gCENY7rdJMX30TvC0DhDtHXUwY6O5G//w5iqpeztv
svcOuQQURxmPcFuvIqpTpcX0bSEuYkCt9JF31xzFbvmUhB1bb4sZ+IMvBqS9fnUH
HJmDLLl7mppX3hlPDc9wLc3Dmpfr5Cd1GLO0CkWhnE8KBONV1auYXh8Gtwdsa/Rv
idA/53WlvQ==
=+PRl
-----END PGP SIGNATURE-----
Merge tag 'v0.20.13'
release v0.20.13
2017-12-18 23:48:14 +01:00
FlashSystems
64d141f71e
Save and restore mountpoints within the state file.
...
Signed-off-by: FlashSystems <developer@flashsystems.de>
2017-12-18 23:39:01 +01:00
FlashSystems
c488d3123f
Fix lsinfo
and add
for mounted databases.
...
If `SimpleDatabase::Visit` is called on a database that contains a mounted directry the URIs of the elements passed to the callbacks are not prefixed by the mountpoint path. This leads to lsinfo and add not working because they use the wrong URI. This pull request is using the `WalkMount` helper function to create prefixed versions of `VisitDirectory`, `VisitSong` and `VisitPlaylist` to add the correct prefix to the parameters of the callback functions.
2017-12-18 23:33:08 +01:00
Max Kellermann
b6af7abb1a
thread/PosixMutex: add "noexcept"
2017-12-18 23:29:08 +01:00
Max Kellermann
edee8a3446
Compiler.h: add gcc_returns_nonnull, gcc_returns_twice
2017-12-18 23:00:13 +01:00
Max Kellermann
5582367d68
db/DatabasePrint: support sorting by "modified-since"
...
Closes #172
2017-12-18 21:52:36 +01:00
Max Kellermann
7a55ab6acc
db/DatabasePrint: support descending sort
2017-12-18 21:50:14 +01:00
Stefano Miccoli
967af60327
rounds alsa HW mixer volume towards ±∞ depending on sgn(∆ vol)
...
This alleviates a problem in which 'volume +1' cannot be undo by
'volume -1' when using alsa hw mixer.
Closes #104
2017-12-18 21:29:03 +01:00
Max Kellermann
6246d36fe6
Merge branch 'v0.20.x'
2017-12-16 20:56:06 +01:00
Yue Wang
f1ef9f9d31
OSXOutputPlugin: set the buffer time to be 100ms
...
[mk: the following text was copied from
https://github.com/MusicPlayerDaemon/MPD/pull/167 ]
For certain format (hi-res files) and normal buffer size hardware, The
hardware may at once consume most of the buffers. However, in Delay()
function, MPD is supposed to wait for 25 ms after the next try. it
will create a hiccup. The negative impact is much major than
increasing the latency.
I understand larger buffers come at a price. That's why in my earlier
commit last year I significantly reduced it. However, the buffer size
in CoreAudio is set according to the hardware, which is super small
latency. For instance, the system audio of 2015 generation of macbook
pro has maximum buffer size of 4096 samples, which is just 0.09s for
44.1k framerate, or 0.04s for 96k frames --- . compare to the 0.5 sec
latency alsa plugin has, even if we quadruple it, it's still super
tiny.
2017-12-12 10:56:42 +01:00
Max Kellermann
dfaf08743c
*: check defined(_WIN32) instead of defined(WIN32)
...
Only _WIN32 is defined by the compiler, and WIN32 is not standardized
and may be missing.
Closes #169
2017-12-12 10:22:20 +01:00
Max Kellermann
d9552d8a6d
android/build.py: support NDK r16
2017-12-12 10:01:47 +01:00
Uwe Kleine-König
5a11e03725
lib/upnp: use include path without upnp/ prefix and honor pkg-config CFLAGS
...
If libupnp is installed in a non-standard location we must rely on the
include path provided by $(pkg-config --cflags libupnp). Relative to the
path given from that command no prefix must be used to find the respective
files.
2017-12-11 18:58:09 +01:00
Max Kellermann
fbc4bb29dc
Merge branch 'v0.20.x'
2017-12-03 16:22:08 +01:00
FlashSystems
1208503888
Removing gcc_malloc attribute from Directory::CreateChild
to fix
...
assignment of `mnt->mounted_database` in `SimpleDatabase::Mount`.
2017-12-03 12:34:08 +01:00
Max Kellermann
de90d401d2
MusicChunk: add magic value IGNORE_REPLAY_GAIN
...
This fixes spurious replay gain logs when the player inserts silence
chunks, because those silence chunks had no replay gain attached,
resetting the ReplayGainFilter state, flipping it forth and back.
2017-12-03 11:39:12 +01:00
Max Kellermann
396defaea9
MusicChunk: initialize replay_gain_serial on demand
2017-12-03 11:39:07 +01:00
Max Kellermann
18f350cd04
player/Thread: initialize MusicChunk::bit_rate in SendSilence()
...
This attribute is not particularly important, but it was
uninitialized.
2017-12-03 10:54:14 +01:00
Yue Wang
7ba7ce3af7
Correctly set the mixer plugin for osx output
2017-12-02 23:29:23 -08:00
Max Kellermann
478180ebe4
queue/PlaylistEdit: shuffle appended songs only within its priority group
...
Fixes #165 .
2017-12-02 17:17:02 +01:00
Max Kellermann
4a3059f509
queue/PlaylistControl: don't skip highest priority song on "play"
...
When starting playback with a specific song which does not have the
highest priority, the previous highest priority song was skipped
completely because its order was "swapped". This commit changes to a
more expensive operation which inserts the selected song into the
order list.
This fixes a small part of #165
2017-12-02 16:25:32 +01:00
Max Kellermann
78728138a0
lib/upnp/Compat: disable the 1.8 API emulation with libupnp 1.6.24
...
libupnp 1.6.24 added a few badly designed macros which break the MPD
build:
8177a4195a
/
To work around this, we disable our emulation functions (from
714011c81e
) on this libupnp version.
Closes #163
2017-12-02 14:47:27 +01:00
Max Kellermann
087fcc4e6e
queue/Save: fix inverted check
...
That '!' accidently got lost in commit
75582d47b9
D'oh!
Closes #162
2017-11-27 23:02:45 +01:00
FlashSystems
63fc98591d
Fix for "Mount-Points are purged from database on update/rescan."
...
Signed-off-by: FlashSystems <developer@flashsystems.de>
2017-11-27 22:34:49 +01:00
Max Kellermann
520c520512
player/Listener: add "noexcept"
2017-11-26 12:39:09 +01:00
Max Kellermann
a6910313b4
Queue: add "noexcept"
2017-11-26 12:25:53 +01:00
Max Kellermann
2f32df1f09
queue/IdTable: make non-copyable
2017-11-26 12:24:35 +01:00
Max Kellermann
23adf50194
queue/IdTable: make "data" pointer const
2017-11-26 12:24:24 +01:00
Max Kellermann
0691ecc052
queue/IdTable: add "noexcept"
2017-11-26 12:23:46 +01:00
Max Kellermann
d917f44b5b
Queue: make configuration attributes const
2017-11-26 12:22:50 +01:00
Max Kellermann
602bb7170a
Queue: use C++11 initializer
2017-11-26 12:21:36 +01:00
Max Kellermann
75582d47b9
SongSave: wrap DetachedSong* in std::unique_ptr
2017-11-26 12:18:31 +01:00
Max Kellermann
28fdf1e9ed
decoder/Control: wrap DetachedSong* in std::unique_ptr
2017-11-26 12:16:53 +01:00
Max Kellermann
9a8a3beae4
decoder/Control: add "noexcept"
2017-11-26 12:16:53 +01:00
Max Kellermann
2a774a1fea
playlist/{flac,m3u}: use std::make_unique
2017-11-26 12:10:33 +01:00
Max Kellermann
b13b023c6b
player/Control: wrap DetachedSong* in std::unique_ptr
2017-11-26 12:06:38 +01:00
Max Kellermann
b652ad9568
queue/Playlist: cast next_song to bool, because that is all we need in SyncWithPlayer()
2017-11-26 12:06:29 +01:00
Max Kellermann
624e679e35
player/Control: add "noexcept"
2017-11-26 12:02:08 +01:00
Max Kellermann
618704f504
thread/*: add "noexcept"
2017-11-26 11:58:53 +01:00
Max Kellermann
3b3ec402d6
command/CommandListBuilder: use C++11 initializer
2017-11-26 11:11:36 +01:00
Max Kellermann
2b3c1d640e
release v0.20.12
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAloZt0YQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFElF7D/9DIkK8ArcrqtGvLQFseOucf0FPmAD7csoq
oDN4TL8UGUSYxcSt3wQqt6rp5JyWAFTuXPpneytqkZ0tW04y4kkvmIrRkYzuBLgt
yupg1G5fRmidwcqdnb6LqgSdW66pY3U6keaED7LVnMrJbd5MM8R7FejiZFoWmD4C
c9pUU79MbeRk0w2F9Ws0bkd+yU7lUiolcqOg2VK25MZnObI7qf+/fIKOVK0Q9Q2W
AdHLHNliySYPBT/po5YN+VAWPcxSFHXkfN552x0N/U1D/klPLmP1q724frFT+DRQ
vXC5ojDDmSc+uUGr8D5IESfzMOPFj5ag0SqPSNe7Cp5amcy/chNqmo/XKEGqtB+X
BI/DfRHEPGz5wtz6x+AcxFdE6LBAjMpQ2H3ybxGDK1396dNsngAA/g8eyvnzie/2
USQO10O9Ymhezt7lMqhMLxJC/5Q0JLsKRIgqCxABQfTh14JF+c5bkT3zetabA87r
CSyHGr3+tN4KtSJwefGjaGTCy5lN1SB8bRgWVLVVpPYAvtsNS1LwwTyeI3AtYmxr
fylkATAHawSXzdgxgzFA8GmscxaxO/gLud+9ekb33ZIq9bnXiOXpY5u98bxCPWkn
JgzeC4E6xnI3Ft+Ss7Bu0zOgSl2jUiOV7zAy7z8Lo9Qv6QYuIvSi9m+Snxstkul0
9QwG6bA+YA==
=BUsZ
-----END PGP SIGNATURE-----
Merge tag 'v0.20.12'
release v0.20.12
2017-11-25 19:47:56 +01:00
Max Kellermann
714011c81e
lib/upnp: adapt to libupnp 1.8 API changes
...
Closes #155
2017-11-16 11:39:11 +01:00
Max Kellermann
952ff4207b
lib/upnp/Callback: make "evp" parameter const
2017-11-16 11:37:58 +01:00
Max Kellermann
150b16ec2c
lib/upnp/Discovery: make Upnp_Discovery pointers const
2017-11-16 11:37:04 +01:00
Max Kellermann
f70b4e02c4
Merge branch 'v0.20.x'
2017-11-14 21:21:14 +01:00
Max Kellermann
c98bc4a243
playlist/PlaylistRegistry: use LockRewind() instead of Rewind()
...
Fixes a deadlock caused by commit
31ab78ae8e
. That commit was not
actually bad - just these two calls have always been bad, which went
unnoticed for a long time.
2017-11-14 21:19:22 +01:00
Max Kellermann
7d579e7400
lib/alsa/NonBlock: throw exception on error
...
Avoid another potential deadlock: if no file descriptors are
registered, our non-blocking ALSA code cannot ever work.
2017-11-14 21:08:07 +01:00
Max Kellermann
e0f777d4eb
output/alsa: move code to LockCaughtError()
2017-11-14 21:07:59 +01:00
Max Kellermann
febd1ad09c
output/alsa: fix deadlock bug
...
After UnlockActivate() returns, we not only need to check for errors,
but also for more room in the ring buffer. If we don't check the ring
buffer, it may be drained already, and the cond.wait() call will never
finish.
Closes #151
2017-11-14 21:02:53 +01:00
Max Kellermann
1040b85785
lib/{curl,upnp}: add more exception handlers
...
Bugs found by Coverity.
2017-11-14 20:05:44 +01:00
Max Kellermann
e2c81aa9ea
Merge branch 'v0.20.x'
2017-11-14 12:31:13 +01:00
Max Kellermann
014f8cd693
output/httpd: flush encoder after tag
...
Without the flush, ReadPage() may not return any data, or not all
data. This may result in incomplete ddata the new "header" page,
corrupting streams with some encoders such as Vorbis.
Fixes #145
2017-11-14 12:00:14 +01:00
Max Kellermann
aea37e46e3
encoder/vorbis: default to quality 3
...
Don't require a quality or bitrate setting. If nothing is set, don't
fail startup - just go with a good default. A quality setting of 3 is
what "oggenc" defaults to as well.
2017-11-14 11:30:28 +01:00
Max Kellermann
31ab78ae8e
input/{cdio,ffmpeg,file,smbclient}: unlock the mutex during blocking I/O
...
InputStream::Read() and InputStream::Seek() are called with the mutex
locked. That means the implementation must not block, or unlock the
mutex before calling into blocking code.
Previously, a slow CD drive could stall the whole MPD process,
including the main thread, due to this problem.
Closes #149
2017-11-13 17:13:10 +01:00