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
Max Kellermann
f82e1453e4
input/smbclient: use std::lock_guard
2017-11-13 17:13:10 +01:00
Max Kellermann
e4a147218b
Merge branch 'v0.20.x'
2017-11-12 18:55:12 +01:00
Max Kellermann
a2b77c8813
decoder/ffmpeg, test/test_protocol: catch exceptions by reference
...
Work around -Werror=catch-value.
2017-11-12 18:54:29 +01:00
Max Kellermann
4b2b89eb5e
lib/xiph: add "noexcept"
2017-11-12 18:35:49 +01:00
Max Kellermann
4b2bb88375
lib/upnp: add "noexcept"
2017-11-12 18:33:58 +01:00
Max Kellermann
fb01e41e8a
lib/sqlite: add "noexcept"
2017-11-12 18:26:03 +01:00
Max Kellermann
ff9759c09d
lib/pulse: add "noexcept"
2017-11-12 18:25:16 +01:00
Max Kellermann
a92e0e8540
lib/nfs: add "noexcept"
2017-11-12 18:09:07 +01:00
Max Kellermann
9d47b220a4
lib/curl: add "noexcept"
2017-11-12 17:49:58 +01:00
Max Kellermann
c582a9faae
event/MultiSocketMonitor: add "noexcept"
2017-11-12 17:42:50 +01:00
Max Kellermann
cf483107c9
event/IdleMonitor: add "noexcept"
2017-11-12 17:40:25 +01:00
Max Kellermann
b57e2f5521
event/DeferredMonitor: eliminate obsolete class
...
Move its code to DeferEvent instead.
2017-11-12 17:34:06 +01:00
Max Kellermann
bf3ced6a34
event/Call: migrate from DeferredMonitor to DeferEvent
2017-11-12 17:32:23 +01:00
Max Kellermann
390e830994
{mixer,output}/alsa: migrate from DeferredMonitor to DeferEvent
2017-11-12 17:27:58 +01:00
Max Kellermann
44c60567dd
output/alsa: add "allowed_formats" setting
...
Allows defining a list of supported audio formats, and allows
switching on and off DoP with certain formats.
This is a first rough draft. The setting syntax and its semantics may
still be redesigned.
2017-11-10 23:05:50 +01:00
Max Kellermann
967d81b782
AudioFormat: add method MatchMask()
2017-11-10 23:05:50 +01:00
Max Kellermann
20199e770c
output/shout: use the shout_metadata_t only once
...
There is no documentation on whether calling shout_metadata_add()
multiple times on one instance is allowed. To be sure, let's allocate
the object on demand each time in SendTag().
2017-11-10 22:30:53 +01:00
Max Kellermann
4c824e5309
output/shout: simplify shout_tag_to_metadata()
2017-11-10 22:26:25 +01:00
Max Kellermann
981bc85879
output/shout: relax quality and bitrate checks, forward as-is
2017-11-10 22:19:00 +01:00
Max Kellermann
015527d870
output/shout: make "quality" and "bitrate" local variables
2017-11-10 22:17:51 +01:00
Max Kellermann
6464b4b372
encoder/Configured: glue code to initialize PreparedEncoder
2017-11-10 21:54:57 +01:00
Max Kellermann
fef9747fbf
output/shout: use MIME type instead of the encoder plugin name
...
This is more robust, for example it allows using the Shine encoder
plugin instead of LAME.
2017-11-10 21:52:54 +01:00
Max Kellermann
13816c1c7d
output/{recorder,httpd,shout}: use std::unique_ptr to manage PreparedEncoder pointer
2017-11-10 21:35:22 +01:00
Max Kellermann
c54a920d13
output/httpd: make enum strictly-typed
2017-11-10 21:25:03 +01:00
Max Kellermann
83f8eeec44
output/httpd: migrate from DeferredMonitor to DeferEvent
2017-11-10 21:18:00 +01:00
Max Kellermann
b83fbad6a1
output/httpd: use C++11 initializers
2017-11-10 21:15:57 +01:00
Max Kellermann
ec20784046
storage/curl: migrate from DeferredMonitor to DeferEvent
2017-11-10 21:10:54 +01:00
Max Kellermann
42ad753e39
event/MaskMonitor: migrate from DeferredMonitor to DeferEvent
2017-11-10 21:10:46 +01:00
Max Kellermann
1ccd2a7b11
lib/nfs: migrate from DeferredMonitor to DeferEvent
2017-11-10 21:06:40 +01:00
Max Kellermann
4c1d29c86c
lib/nfs/FileReader: use C++11 initializers
2017-11-10 21:03:41 +01:00
Max Kellermann
0db7a0c9e2
db/update/Service: migrate from DeferredMonitor to DeferEvent
2017-11-10 20:58:25 +01:00
Max Kellermann
13f6b1b344
db/update/Remove: migrate from DeferredMonitor to DeferEvent
2017-11-10 20:56:21 +01:00
Max Kellermann
593d82c6a9
event/DeferEvent: add "noexcept"
2017-11-10 20:55:24 +01:00
Max Kellermann
43dccbd45d
event/SocketMonitor: remove unused method Abandon()
2017-11-10 20:52:37 +01:00
Max Kellermann
0ff4350352
event/ServerSocket: pass UniqueSocketDescriptor by value
...
Passing it by value is actually smaller (32 bit) than the rvalue
reference (64 bit pointer), and it ensures that the object is consumed
after the call returns, no matter how the methods are implemented.
2017-11-10 20:43:14 +01:00
Max Kellermann
5fd2b7cc79
event/SocketMonitor: eliminate Read(), Write()
...
Migrate callers to GetSocket().Read(), GetSocket.Write(), which is the
same.
2017-11-10 20:37:52 +01:00
Max Kellermann
7e16ac305d
event/SocketMonitor: rename Get() to GetSocket()
2017-11-10 20:34:45 +01:00
Max Kellermann
59a8836924
event/SocketMonitor: add "noexcept"
2017-11-10 20:20:07 +01:00
Max Kellermann
9d4020501c
event/SocketMonitor: make constructor "explicit"
2017-11-10 20:17:27 +01:00
Max Kellermann
81350d65bc
event/SocketMonitor: use C++11 initializers
2017-11-10 20:16:26 +01:00
Max Kellermann
02642a64fd
input/Plugin: remove "#undef ERROR"
...
Maybe this was once a required kludge for Windows, but it's not
anymore.
2017-11-10 19:59:03 +01:00
Max Kellermann
3c41e9f022
evnet/SocketMonitor: move WIN32/ERROR comment to PollGroupWinSelect.hxx
2017-11-10 19:57:54 +01:00
Max Kellermann
2670e13cbd
util/{Const,Writable}Buffer: add static_assert to FromVoid()
2017-11-10 19:43:17 +01:00
Max Kellermann
49784513b1
util/{Const,Writable}Buffer, ...: rename IsEmpty() to empty(), imitating STL
2017-11-10 19:24:33 +01:00
Max Kellermann
523051132d
Merge branch 'v0.20.x'
2017-11-05 17:48:41 +01:00
cathugger
b111a8fe8d
output/Thread: ensure pending tags are flushed in all cases
...
Fixes hanging playback with soxr resampler.
Closes #139 , #141
2017-11-05 17:42:32 +01:00
Marcin Jurkowski
3b23cf0258
decoder/vorbis: scale and clip tremor-decoded samples to 15 bits
...
Tremor decoder is unusable since commit 2ee43c4
. Sound is distorted to
the point where it's nothing but noise.
The data from vorbis_synthesis_pcmout() needs to be scaled and
clipped for 16 bit sample size. For reference see
http://lists.xiph.org/pipermail/tremor/2010-April/001642.html and
http://lists.xiph.org/pipermail/vorbis/2006-October/026513.html .
Signed-off-by: Marcin Jurkowski <marcin1j@gmail.com>
2017-11-03 19:45:41 +01:00
Max Kellermann
55e6629fb4
output/Control: catch and log StartThread() exceptions
2017-10-30 08:39:44 +01:00
Max Kellermann
b6251c6968
pcm/Export: add "noexcept"
2017-10-26 12:29:13 +02:00
Max Kellermann
c51fe089ba
pcm/Dop: add "noexcept"
2017-10-26 12:28:59 +02:00
Max Kellermann
fee9f1482c
pcm/Pack: add "noexcept"
2017-10-26 12:28:21 +02:00
Max Kellermann
ae67f44c6e
pcm/Dsd*: add "noexcept"
2017-10-26 12:26:50 +02:00
Max Kellermann
54dd1ad09b
pcm/Order: add "noexcept"
2017-10-26 12:25:38 +02:00
Max Kellermann
e2a74051dc
lib/alsa/HwSetup: return effective parameters
2017-10-26 12:13:00 +02:00
Max Kellermann
b7e035b6f3
output/alsa: move AlsaSetupHw() to lib/alsa/HwSetup.cxx
2017-10-26 11:15:01 +02:00
Max Kellermann
890f1f5928
lib/alsa/Format: move HAVE_ALSA_DSD* definitions from the Alsa output plugin
2017-10-26 09:39:18 +02:00
Max Kellermann
b30c37eb79
output/alsa: move functions to lib/alsa/Format.hxx
2017-10-26 09:30:45 +02:00
Max Kellermann
b08cb148ae
output/alsa: move class PeriodBuffer to lib/alsa/PeriodBuffer.hxx
2017-10-26 09:27:36 +02:00
Max Kellermann
034bb13e1c
util/HugeAllocator: add missing "static inline"
...
Fixes the non-Linux build.
2017-10-26 09:01:06 +02:00
Max Kellermann
6657801fb1
output/alsa: pass SampleFormat& to AlsaSetupFormat()
2017-10-26 08:46:28 +02:00
Max Kellermann
a199366157
output/alsa: remove period_time adjust loop
...
This loop was introduced in commit
24c1f46353
, but -EPIPE is not a possible
error condition for snd_pcm_hw_params(). This code does not appear to
make sense. Problems with a wrong period_time should be caught before
that by snd_pcm_hw_params_set_period_time_near().
This commit removes the last "goto" in MPD! Yay!
2017-10-26 08:40:59 +02:00
Max Kellermann
2a6d5583d1
lib/alsa: add "noexcept"
2017-10-26 08:24:14 +02:00
Max Kellermann
ddabe1a6df
output/alsa: add "noexcept"
2017-10-26 08:18:05 +02:00
Max Kellermann
e7b47ce335
output/alsa: in_frame_size is a debug-only variable
2017-10-26 08:17:21 +02:00
Max Kellermann
28e864e096
player/Thread: log message when decoder is too slow
2017-10-25 20:26:09 +02:00
Max Kellermann
1de19b921a
input/curl: call StartRequest() after setting CURLOPT_RANGE
...
It's not possible to set CURL options after curl_easy_perform(), and
thus the CURLOPT_RANGE had no effect.
2017-10-24 21:43:39 +02:00
Max Kellermann
ff162b5a03
input/curl: move code to StartRequest()
2017-10-24 21:41:17 +02:00
Max Kellermann
d8e4705dd4
input/curl: move the range buffer to the stack
...
From the CURLOPT_RANGE documentation: "The application does not have
to keep the string around after setting this option."
2017-10-24 21:38:35 +02:00
Max Kellermann
ab05b70423
ClientProcess: close connection when client sends HTTP request
2017-10-24 20:32:53 +02:00
Max Kellermann
b177bffa6a
system/EventPipe: fix WSAEINPROGRESS on Windows
...
Apparently, connecting a socket to a loopback address can block on
Windows, and a non-blocking socket will return WSAEINPROGRESS. This
broken PoorSocketPair() in commit 2119e4fd3e
, which made the socket
non-blocking right from the start. This fix postpones the
ioctlsocket(FIONBIO) call until after the connect().
Closes #134
2017-10-24 20:09:11 +02:00
Max Kellermann
b4b468eb27
release v0.20.11
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlnnDXYQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEtPBD/4sOwd7sQr/eeJr5gqVpil+CaVkHN1GpVmF
H72uYnp5eKREywLMAqrY86hxvykeflroHyNyBF7CV5hIZV8kPl1ApN6WvjG3oFeX
ZnM6PQjeqgqczSVUZOd92nATJw6g/Vk0qbC+h6VwhpSoq5716dAKriSO25JzDg0L
KOwEztVsLeziKrk/sHSKjgRrYpuNS8bFVxAY8Pk9MnUhEeHB3Rb7Spd2zMUfMDLF
1pncFliIX5bOUKzDavIo4flAWc3jj514VhS7rVaU2OYpAdsQV18Z5Ze5B+46FUan
2gsn3oCOVbC3QV7X0do5MtD9p1tyX0HREokY3ttgut+iRz9zym2m0uC6t1DXwyVI
cugOF70JbBYxd/ChO4rFYPHZo6A1XE7hb89AcVf6EgZyXROK077EzptprW9et0Ge
kIUbHs01lHfA7gFefEC+8iVGSXQmEmQQp5tBnZkdUaJdpxVULdMkhhHCNU8RIIVP
ot8guH2/9oKkCj+ytHj37SUpk7bKjbzID9XIW5a+4rQPb1oRmQMvIeKgWZ6sjHP1
5cS7l51q0onPmulfdQti0jTuaRcwQZcyKOxBU+eKYNHGNgLsdk1QDxyDhqbCCqWv
0seA7h+lNBGqZL7/F6s0IxsTWIwaInkZWPE1EGSRe0wvZohDtBbNhXWQDPBlgl8O
R42Jdx6PIg==
=8U+o
-----END PGP SIGNATURE-----
Merge tag 'v0.20.11'
release v0.20.11
2017-10-18 10:21:39 +02:00
Max Kellermann
9703a401c5
Playlist{File,Save}: always use UTF-8 in playlists on Windows
...
Turns out that using CP_ACP is a lousy idea, because only very few
Unicode characters can be represented by it. Instead, switch to UTF-8
(which every sane person on other operating system already uses).
Closes #102
2017-10-18 10:05:26 +02:00
Max Kellermann
753a2aa462
PlaylistSave: move code to playlist_print_path()
2017-10-18 09:51:04 +02:00
Max Kellermann
10990a0684
queue/Playlist: call MoveOrderToCurrent() in SeekSongOrder() on song change
...
Applies the improvements from the previous commit to the "seek"
commands, which are also capable of switching songs.
Closes #119
2017-10-18 09:14:27 +02:00
Max Kellermann
91254e9211
queue/PlaylistControl: keep order list consistency in MoveOrderToCurrent()
...
Our previous use of Queue::SwapOrders() could cause surprising
results:
- sometimes, the old "current" song would be played again (if the
newly selected song had not been played already)
- sometimes, the old "current" song would not be played again (if the
newly selected song had already been played)
This is inconsistent, because it should not depend on whether the
newly selected song had already been played.
So instead of Queue::SwapOrders() we now use Queue::MoveOrderAfter()
and Queue::MoveOrderBefore(), which is more expensive, but also more
consistent. It attempts to retain as much from the previous order
list as possible, and only moves the newly selected song around.
2017-10-18 09:05:47 +02:00
Max Kellermann
0f79287b04
queue/Playlist: move code to MoveOrderToCurrent()
2017-10-18 09:05:24 +02:00
Max Kellermann
f2fac77d8c
queue/Queue: add methods MoveOrderBefore() and MoveOrderAfter()
2017-10-18 08:50:01 +02:00
Max Kellermann
81b7373637
queue/Queue: MoveOrder() returns to_order
2017-10-18 08:46:31 +02:00
Max Kellermann
fa67c2548a
decoder/Thread: clear the command after catching an exception
...
If an early exception gets caught (e.g. from
AllocatedPath::FromUTF8Throw()) before
DecoderControl::CommandFinishedLocked() is called, the decoder thread
would go in an endless loop, because DecoderCommand::START is still
set.
Closes #118
2017-09-27 17:08:16 +02:00
John Regan
ea80587ddb
GME Plugin: fix track numbering
...
GME starts all track indexes at zero, but subtune prefixes
start at one. This fixes an off-by-one error during track
enumeration.
2017-09-27 11:18:03 +02:00
John Regan
bd50a0d2ef
GME Plugin: fix track numbering
...
GME starts all track indexes at zero, but subtune prefixes
start at one. This fixes an off-by-one error during track
enumeration.
2017-09-26 08:42:53 -05:00
John Regan
9256e748c8
GME Plugin: only load m3u if it exists
...
If you load an NSFE file (which has embedded track titles),
then attempt to load an M3U file, it causes GME to lose all
information found in the NSFE file. This adds a check that
the M3U file exists before attempting to load.
2017-09-26 08:42:43 -05:00
John Regan
e96513c8db
GME Plugin: try loading m3u sidecar files
2017-09-22 19:58:17 +02:00
Max Kellermann
da9657aac4
playlist/SoundCloud: move enum key into struct, make strictly-typed
2017-09-21 23:10:11 +02:00
Max Kellermann
2886766fb5
playlist/SoundCloud: use strcmp() instead of memcmp() to avoid buffer overflow
2017-09-21 23:08:27 +02:00
Max Kellermann
6e7f866288
input/alsa: migrate from DeferredMonitor to DeferEvent
2017-09-21 22:58:00 +02:00
Max Kellermann
6fa403edd9
lib/upnp/Discovery: migrate from DeferredMonitor to DeferEvent
2017-09-21 22:53:57 +02:00
Max Kellermann
431eb7bc8c
lib/curl/{Global,Request}: migrate from DeferredMonitor to DeferEvent
2017-09-21 22:53:17 +02:00
Max Kellermann
9df4853e23
event/DeferredCall: rename to DeferEvent
2017-09-21 22:40:25 +02:00
Max Kellermann
18c4ef09d5
input/thread: use class HugeArray instead of the low-level function HugeAllocate()
2017-09-21 21:56:24 +02:00
Max Kellermann
bc93c7a1fc
input/thread: un-inline the constructor
2017-09-21 21:55:24 +02:00
Max Kellermann
c8a2a557db
util/HugeAllocator: remove obsolete class HugeAllocation
2017-09-21 21:52:08 +02:00
Max Kellermann
9f827c99cb
input/async: use class HugeArray instead of HugeAllocation
2017-09-21 21:50:45 +02:00
Max Kellermann
7b2b965415
util/SliceBuffer: use class HugeArray
2017-09-21 21:48:08 +02:00
Max Kellermann
c3cfa18ebe
util/HugeAllocator: add template class HugeArray
2017-09-21 21:47:52 +02:00
Max Kellermann
b46835e15e
util/HugeAllocator: HugeAllocator() returns WritableBuffer<void>
2017-09-21 21:47:49 +02:00
Max Kellermann
3e5ce3c92c
util/{Const,Writable}Buffer: add static method FromVoidFloor()
2017-09-21 21:45:39 +02:00
Max Kellermann
e5c9b4cd75
util/{Const,Writable}Buffer: add operator==(nullptr_t)
2017-09-21 20:34:36 +02:00
Max Kellermann
8753e558f2
util/HugeAllocator: move MADV_DONTFORK setting to HugeForkCow()
...
Enforcing MADV_DONTFORK is a surprising limitation for this library
which aims to be generic.
2017-09-21 19:36:33 +02:00
Max Kellermann
f6691579de
Merge branch 'v0.20.x'
2017-09-20 23:57:28 +02:00