Max Kellermann
cd9ff9d9b0
event/TimerEvent: use base_hook instead of member_hook
2020-10-08 17:00:09 +02:00
Max Kellermann
4cd0f661d6
event/Loop: use using
instead of typedef
2020-10-08 16:59:21 +02:00
Max Kellermann
ca0179b2a9
event/Loop: set the uring_initialized flag
...
Don't attempt to initialize the io_uring subsystem more than once.
2020-10-06 18:58:54 +02:00
Max Kellermann
6682cf749f
playlist/cue/parser: use lambda to fix ambiguous overload
...
On Windows, there is an IsWhitespaceOrNull() overload with TCHAR, and
the compiler doesn't know which one to pass to std::find_if().
2020-10-05 21:15:10 +02:00
Max Kellermann
492607ecbe
playlist/cue/parser: use StringView internally
...
Don't copy the input StringView.
2020-10-05 21:04:49 +02:00
Max Kellermann
e0c75da266
playlist/cue/parser: pass StringView to Feed()
2020-10-05 20:33:58 +02:00
Max Kellermann
34bb53a29f
playlist/cue/parser: add noexcept
2020-10-05 20:33:50 +02:00
Max Kellermann
cb4fdac469
playlist/cue/parser: fix nullptr dereference
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/974
2020-10-05 20:26:42 +02:00
Max Kellermann
ac46a84391
playlist/cue/parser: fix off-by-one buffer overflow
...
cue_next_word() can return a pointer one past the end of the string if
the word is followed by the terminating null byte.
2020-10-05 20:26:02 +02:00
Max Kellermann
4484d7a5c2
output/jack: implement Interrupt()
2020-10-02 11:00:04 +02:00
Max Kellermann
b80a135cf3
output/pulse: implement Interrupt()
2020-10-02 10:52:25 +02:00
Max Kellermann
4ad525d939
output/alsa: implement Interrupt()
...
This allows canceling the blocking method LockWaitWriteAvailable(),
and thus allows breaking free of misbehaving ALSA drivers, avoiding a
MPD lockup.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/966
2020-10-02 10:35:18 +02:00
Max Kellermann
4cb5e69811
output/Interface: add virtual method Interrupt()
...
This allows interrupting the output thread (for some plugins which
implement this method). This way, operations can be canceled
properly, instead of waiting for some external entity.
2020-10-02 10:20:39 +02:00
Max Kellermann
b0596291a8
output/Thread: simplify the main loop switch
...
Move the InternalPlay() call and the wake_cond.wait() call into the
`case Command::NONE` and revert all `continue` statements to a simple
`break`.
2020-10-02 10:10:53 +02:00
Max Kellermann
8f0a1a5d82
output/Interface: add noexcept
2020-10-01 20:44:14 +02:00
Max Kellermann
c0775d328c
output/Filtered: move try/catch from IteratePause() to caller
2020-10-01 20:44:11 +02:00
Max Kellermann
362f391b76
Merge remote-tracking branches 'neheb/defa', 'neheb/auto' and 'neheb/clocale' into master
2020-09-30 11:48:05 +02:00
Rosen Penev
980e32f69c
remove clocale test
...
clocale is part of C++11.
In practical terms, gcc's libstdc++ comes with its own locale defines
when the libc does not have them.
Also reworked to be dependent on !ANDROID.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-09-29 14:51:17 -07:00
Rosen Penev
dd639e18b8
clang-tidy: remove pointless std::move
...
Found with performance-move-const-arg
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-09-26 21:34:25 -07:00
Rosen Penev
c883f178b8
clang-tidy: use auto
...
Found with modernize-use-auto
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-09-26 21:33:35 -07:00
Max Kellermann
e9df4116fd
db/upnp: store UPnPDirContent in local variable
...
Fixes use-after-free because the temporary goes out of scope.
2020-09-23 15:25:39 +02:00
Max Kellermann
c843bce9f5
LogLevel: rename DEFAULT to NOTICE
...
"DEFAULT" is a bad name - all it says is that it's the default value,
but it doesn't say what it means. The name NOTICE mimics the syslog
level.
2020-09-23 14:22:33 +02:00
Max Kellermann
e3106a019d
LogInit: provide mappings for LogLevel::{ERROR,WARNING}
2020-09-23 14:17:11 +02:00
Max Kellermann
3e0ceb12d5
LogInit: rename "secure" to "info"
...
Calling this "secure" never made sense. Messages about client
connects are just a small part of what gets logged as "secure",
a.k.a. "info".
2020-09-23 14:15:58 +02:00
Max Kellermann
60bbc9f626
LogInit: use StringIsEqual()
2020-09-23 13:28:19 +02:00
Max Kellermann
065926d6a4
decoder/ffmpeg: support album art
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/892
2020-09-23 12:50:28 +02:00
Max Kellermann
85bab67083
input/uring: safe cancellation
...
My concept with `class CancellableOperation` doesn't work properly,
because the kernel may continue to write to the given buffer as soon
as the read finishes.
To fix this, this commit adds `class ReadOperation` which owns the
buffer and the `struct iovec`. Instances of this class persist until
the read really finishes, even if the operation is canceled.
2020-09-23 11:07:26 +02:00
Max Kellermann
4001379663
io/uring/Operation: add method ReplaceUring()
2020-09-22 21:50:48 +02:00
Max Kellermann
382273abc5
io/uring/Operation: add API documentation
2020-09-22 21:49:48 +02:00
Max Kellermann
6825e1144e
net/SocketError: work around -Wvla by defining a constexpr variable
2020-09-22 20:40:53 +02:00
Max Kellermann
bc47a16943
release v0.21.26
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl9op0MQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEvtmD/46dhcOHUXBreLkKmfy1d8YYrSUBfaNGNIa
m32Lhh2Di27yd5uclQiOVnBghbPEdPobNB6dpZzM7VFkl0LXovbi2bOP0/IkfV0L
0Aa8yacUjHo9zoSjGWnw0uJxLkMjwp7ybV/RI0yI9Z203zUdQX5BqAwc0GlDAhrq
ZheuvHbZqr6PIdy+yFMvS7zhkeO7kMRxlT8xy7/6LskkSmc5wJ90X2vS1sD/6T+9
NfAQkEE7PgKHir6xjZfPTi5PzIO+tK9/RVw705LDubsjFjEPBLWyvG4uD97dazbu
EQZzj5E82wxwvZvx+/xuyyykkhaoBqtegD2DrkafFm20sIzsc9qLC24GXzWd4Oq0
u7RQoO8hn6WI3mMUW/nJNSZk/c9xgeKcFBtgZiNFaDrnwKeWHNtafwqJlU0lanXH
tpjRP0kWphAcTfa1JBcCN0SpqjlB+s18xM102hnIWxWlfSmlEyb9yLk+jbFDQcpP
6i/UmWIDEBlNf68beg89wD4p/FJePgEuwBGrIMHxA41hqjmFCwuklcvhdbu0zBFy
frr9kWMSp6Xun1lwW0jWdfbEBWujNGMEHx//SDoIKD22gpdtnajLhNqjiZuu1LN7
RE7fF1v5c7cSGNVMLEam4bUXntzxTXhCCFbYUdh29TWqEr+pM+a429/jZMgYcGtz
jVp2qqxc5w==
=mDD4
-----END PGP SIGNATURE-----
Merge tag 'v0.21.26' into master
release v0.21.26
2020-09-21 15:20:02 +02:00
Max Kellermann
79b2366387
archive/iso9660: fix odd seeking bug (assertion failure)
...
Skip the beginning of a sector if the last seek was odd, and clear the
buffer on seek.
2020-09-21 15:11:21 +02:00
Max Kellermann
5acea014b0
archive/iso9660: remove unused macro CEILING()
2020-09-21 15:11:17 +02:00
Max Kellermann
5130acf3ea
decoder/ffmpeg: implement protocols() and uri_decode() (for RTSP)
...
This implements the feature that was missing/broken in this bug
report: https://github.com/MusicPlayerDaemon/MPD/issues/930
2020-09-21 14:57:12 +02:00
Max Kellermann
a22d1c88d7
decoder/ffmpeg: pass InputStream by pointer
...
Prepare for an implementation without InputStream.
2020-09-21 14:53:18 +02:00
Max Kellermann
85849c9396
decoder/plugin: add method protocols()
...
Similar to commit 4e2a551f30
but for
decoder plugins. This is tailored for the FFmpeg decoder plugin which
implements some protocols (e.g. RTSP) as demuxer plugin.
2020-09-21 14:53:18 +02:00
Max Kellermann
d3c257d97d
CommandLine: reindent lambdas
2020-09-21 14:52:45 +02:00
Max Kellermann
c13fe63f10
archive/iso9660: fix odd seeking bug (assertion failure)
...
Skip the beginning of a sector if the last seek was odd, and clear the
buffer on seek.
2020-09-21 14:43:58 +02:00
Max Kellermann
07842abcb0
input/ffmpeg: add "hls+http://" to the list of supported protocols
...
Same as e10b867fe6
but it got lost in
the merge, because the v0.22 branch uses a different way to detect
supported protocols at runtime.
2020-09-21 12:55:32 +02:00
Max Kellermann
07e524509f
input/Plugin: add noexcept
2020-09-21 11:43:18 +02:00
Max Kellermann
2c05752071
archive/iso9660: remove unused function CEILING()
2020-09-21 11:38:24 +02:00
Max Kellermann
7c8427b0f7
Merge branch 'v0.21.x' into master
2020-09-21 11:37:50 +02:00
Max Kellermann
b72801abf3
util/ByteOrder: add FromLE16S()
2020-09-21 11:15:45 +02:00
Desuwa
23d5a2b862
Support opus header gain tags and match opus playback volume to other tracks when ReplayGain is enabled.
2020-09-21 10:51:06 +02:00
Rosen Penev
7715311117
fix double promotions
...
Found with -Wdouble-promotion
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-09-21 09:13:51 +02:00
Max Kellermann
7552f70c8d
Merge branch 'gcc5' of git://github.com/neheb/MPD into master
2020-09-21 09:07:19 +02:00
Max Kellermann
0acc398c52
Merge branch 'v0.21.x' into master
2020-09-17 14:44:20 +02:00
Max Kellermann
4c1cfca95b
db/update/InotifyUpdate: pass path by value to recursive_watch_subdirectories()
2020-09-17 14:18:29 +02:00
Max Kellermann
e113ce9621
db/update/InotifyUpdate: obey .mpdignore
files
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/846
2020-09-17 14:17:17 +02:00
Rosen Penev
821d08999a
remove GCC5 hacks
...
GCC5 cannot build mpd.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-09-16 18:10:27 -07:00
Max Kellermann
e8213220e2
db/update/InotifyUpdate: split the WatchDirectory constructor
2020-09-16 21:08:22 +02:00
Max Kellermann
83f9d2a963
db/update/InotifyUpdate: use class DirectoryReader
2020-09-16 21:02:07 +02:00
Max Kellermann
bf97ebf89f
db/update/InotifyUpdate: convert pointer to reference
2020-09-16 20:59:41 +02:00
Max Kellermann
5b22d27cbb
db/update/InotifyUpdate: remove commented log call
2020-09-16 20:59:40 +02:00
Max Kellermann
e907ff43ae
command/file, storage/{nfs,smbclient}: use PathTraitsFS::IsSpecialFilename()
...
Eliminate some duplicate code.
2020-09-16 20:57:46 +02:00
Max Kellermann
b18fc3a8d0
db/update/InotifySource: use auto
2020-09-16 20:40:27 +02:00
Max Kellermann
a8e23c4140
db/update/InotifySource: add noexcept
2020-09-16 20:40:06 +02:00
Max Kellermann
fc3861b421
db/update/InotifyQueue: add noexcept
2020-09-16 20:40:03 +02:00
Max Kellermann
e81bb5d8f1
db/update/Inotify*: include cleanup
2020-09-16 20:39:44 +02:00
Max Kellermann
32f4f15831
player/Thread: call OnPlayerSync() in SeekDecoder()
...
This fixes a spurious "single" mode bug which occurs when using "play"
or "seek" to start playback on the song that is currently paused: in
that case, the main thread never queues the next song, and at the end
of the song, the player thread exits Run(), stopping playback, and
after that, the main thread starts the next song without considering
"single" mode.
By calling OnPlayerSync(), we ensure that the main thread gets a
chance to queue the next song before the player thread exits the Run()
loop.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/850
2020-09-16 20:36:19 +02:00
Max Kellermann
e29c06b718
player/Thread: add another code comment explaining OnPlayerSync()
2020-09-16 20:12:52 +02:00
Max Kellermann
d9d511f33e
player/Thread: update function name in comment
2020-09-16 20:12:05 +02:00
Max Kellermann
c61a3b8d13
LogBackend: change the initial log_threshold to DEFAULT
...
The log levels have always been very confusing (and badly named), but
this was most confusing: if there's a log level called "default", why
is it not the default?
Closes https://github.com/MusicPlayerDaemon/MPD/issues/926
2020-09-16 17:17:34 +02:00
Max Kellermann
e10b867fe6
decoder/ffmpeg: add "hls+http://" to the list of supported protocols
2020-09-16 16:36:07 +02:00
Max Kellermann
43e230f543
decoder/ffmpeg: remove "rtsp://" from the list of supported protocols
...
FFmpeg implements RTSP as a demuxer, not as a protocol handler. Thus,
avio_open() cannot be used, and our input plugin cannot handle RTSP.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/930
2020-09-16 16:32:31 +02:00
Max Kellermann
e8380cf2aa
Merge branch 'v0.21.x' into master
2020-09-07 21:15:53 +02:00
Max Kellermann
b2ae5298a7
archive/iso9660: implement seeking
2020-09-07 21:13:28 +02:00
Max Kellermann
17dd21ac7f
archive/iso9660: fix unaligned reads
...
Oh the horror! This plugin cannot possibly ever have worked. It was
broken from the start, when it was added in commit 37796699cf
nearly
twelve (!) years ago.
The plugin would always read at sector boundaries, so it could only
ever work at multiples of 2 kB.
2020-09-07 21:08:46 +02:00
Max Kellermann
291be84704
Merge branch 'v0.21.x' into master
2020-09-07 20:18:40 +02:00
Max Kellermann
ae23682372
system/FileDescriptor: add method FullWrite()
2020-09-07 20:13:43 +02:00
Max Kellermann
540919f256
*: use nullptr instead of NULL
2020-09-07 20:08:27 +02:00
Max Kellermann
398281cd76
io/FileDescriptor: add method FullRead()
2020-09-07 20:07:47 +02:00
Max Kellermann
67c7116f05
Merge branch 'v0.21.x' into master
2020-09-04 18:35:21 +02:00
bitkeeper
9aa432c078
Support soxr custom recipes.
...
MPD uses soxr with prefined resample recipes. Soxr also support defining a recipe your self.
This commit will support a custom recipe by changing the existing quality setting to "custom".
The same structs as the predefined recipes uses can now set by hand.
This will make the following settings available:
- precision 16|20|24|28|32 bits, example "28"
- phase_response - 0-100, example "45"
- passband_end - used bandwidth of source 80-99.7%, example "99.7.0"
- stopband_begin - anti aliasing 100.0+%, example "100".
- attenuation - signal reduciton in dB's, 0-30. example "3.0".
- flags "0" - additional bitmask with extra settings
The data is set in the structs soxr_quality_spec and soxr_io_spec (found in soxr.h).
2020-09-04 18:32:03 +02:00
Max Kellermann
db8b419b8c
archive/iso9660: free iso9660_stat_t as early as possible
2020-09-04 18:17:24 +02:00
Max Kellermann
990f631cbc
archive/bzip2: make variables more local
2020-09-04 18:02:22 +02:00
Max Kellermann
db46d84458
archive/bzip2: move the eof check out of the ScopeUnlock
2020-09-04 18:01:29 +02:00
Max Kellermann
9e6c4f8d80
archive/bzip2: throw on unexpected input EOF
...
Don't silently return 0 when there is no more data, because this may
crash the caller. And flush output even if input EOF has been reached.
2020-09-04 17:54:53 +02:00
Max Kellermann
41b47f95c5
archive/bzip2: simplify bz_stream initializer
2020-09-04 17:52:04 +02:00
Max Kellermann
15939fd87c
archive/bzip2: fold Open() into constructor
2020-09-04 17:51:41 +02:00
Max Kellermann
f63c343f68
archive/bzip2: reorder fields to improve packing
2020-09-04 17:51:22 +02:00
Max Kellermann
1a516e7744
archive/bzip2: add override
2020-09-04 17:51:21 +02:00
Max Kellermann
1f6a7d6462
archive/zzip: fix crash on corrupt ZIP file
...
Sometimes, zzip_file_read() returns 0 even though the end of the file
was not reached. This causes assertion failures in
DecoderBridge::Read().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/935
2020-09-04 14:34:54 +02:00
Max Kellermann
e44b953d9a
archive/zzip: use zzip_ssize_t to avoid integer overflows
2020-09-04 14:33:44 +02:00
Max Kellermann
6c85020630
archive/zzip: add override
2020-09-04 14:33:44 +02:00
Max Kellermann
9d910320f3
archive/zzip: pass std::shared_ptr as template parameter
...
This eliminates a tiny amount of overhead because the compiler can
choose how to pass the parameter.
2020-09-04 14:33:44 +02:00
Max Kellermann
c53074efc9
archive/zzip: add explicit
2020-09-04 14:33:11 +02:00
Max Kellermann
0aa0ffb67b
decoder/sndfile: allow partial reads at end of file
...
While libsndfile doesn't like partial reads in the middle of a file
(see commit 95ac6071b9
), it allows partial reads at the end of a file.
It doesn't pay attention to the file size when issuing a read.
Commit ecb67a1ed1
(MPD 0.18.12) was a regression: previously,
partial reads at the end of a file were possible, but switching to
decoder_read_full() made this an error condition. This way, a portion
at the end of each file was lost, leading to corruption with gapless
playback (https://github.com/MusicPlayerDaemon/MPD/issues/936 ).
This fix switches to the newly introduced function
decoder_read_much(), which does the same as the code before commit
ecb67a1ed1
.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/936
2020-09-04 13:35:00 +02:00
Max Kellermann
33f70931dd
decoder/API: add decoder_read_much()
2020-09-04 13:35:00 +02:00
Max Kellermann
8830ea319f
decoder/API: add noexcept
2020-09-04 13:35:00 +02:00
Johann Uhrmann
38498d3ee2
Removed duplicate check for negative song time
2020-08-23 12:17:10 +02:00
Max Kellermann
ddb524b6b2
input/uring: add noexcept
2020-08-14 16:45:00 +02:00
Max Kellermann
cbcdc73f9a
system/ByteOrder: add noexcept
2020-08-14 16:36:24 +02:00
Max Kellermann
4f6c54ecb3
output/osx: catch kAudioDevicePropertyHogMode errors
...
Our AudioObjectGetPropertyDataT() wrapper throws exception on error,
and calling it from OSXOutput::Disable() can cause MPD crash due to
std::terminate().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/932
2020-08-14 16:33:43 +02:00
Max Kellermann
dbdf782e59
net/{Resolver,HostParser}: include <cstring>
...
Fixup after e4dad42ca1
2020-07-23 17:40:29 +02:00
Max Kellermann
f102cbb613
net/AllocatedSocketAddress: add missing forward declaration
2020-07-23 17:40:29 +02:00
Max Kellermann
5522967286
net/StaticSocketAddress: add IWYU pragma
2020-07-23 17:40:29 +02:00
Max Kellermann
a2f42e6424
time/ISO8601: use <cstdlib>
2020-07-23 16:26:18 +02:00
Max Kellermann
bdfe6c2c45
lib/dbus/Values: use using
instead of typedef
2020-07-23 16:26:18 +02:00
Max Kellermann
5e1a2e2a93
lib/dbus/Values: add uint32_t
and uint64_t
support
2020-07-23 16:26:18 +02:00
Max Kellermann
7376f31c97
lib/dbus/Message: add noexcept
2020-07-23 16:26:18 +02:00
Max Kellermann
155fc8fa5a
include cleanup
2020-07-23 16:26:18 +02:00
Max Kellermann
7daf80a0c0
util/RuntimeError: add IWYU pragma
2020-07-23 16:10:28 +02:00
Max Kellermann
eb87c28225
util/CharUtil: fix doc typo
2020-07-23 16:08:52 +02:00
Rosen Penev
c876d6a51c
lib/icu: fix build without libc iconv support
...
Need to check for it in iconv.h. Otherwise meson prefixes a __builtin variant in the check.
2020-07-23 14:09:43 +02:00
Max Kellermann
47f54b5650
input/smbclient: close handle on stat error
2020-07-20 22:43:49 +02:00
Max Kellermann
fbfa1723e7
lib/smbclient/Mutex: remove obsolete library
2020-07-20 22:40:27 +02:00
Max Kellermann
a74140842c
storage/smbclient: add Mutex attribute
...
This per-object Mutex replaces the global `smbclient_mutex`.
2020-07-20 22:39:59 +02:00
Max Kellermann
f5a85a816c
storage/smbclient: store SmbclientStorage reference
2020-07-20 22:37:11 +02:00
Max Kellermann
2a15fafbd7
input/smbclient: remove mutex locking
...
This is no longer necessary with the new API.
2020-07-20 22:34:56 +02:00
Max Kellermann
2fc4802886
neighbor/smbclient: remove mutex locking
...
This is no longer necessary with the new API.
2020-07-20 22:32:59 +02:00
Max Kellermann
bb3f487ee5
lib/smbclient/Context: add global Mutex for smbc_{new,free}_context()
...
Preparing to replace `smbclient_mutex`, for finer-grained locking.
2020-07-20 22:32:00 +02:00
Max Kellermann
7d97d0ae87
lib/smbclient/Init: move code to SmbclientContext::New()
...
We no longer need to call smbc_init() because we don't need the compat
layer anymore.
2020-07-20 22:23:18 +02:00
Max Kellermann
f6dc9bcad6
*/smbclient: use the new API with SMBCCTX parameter
...
As a side effect, the input plugin closes the SMB/CIFS connection
after closing the file.
This solves one part of
https://github.com/MusicPlayerDaemon/MPD/issues/916
2020-07-20 22:05:05 +02:00
Max Kellermann
697531a948
lib/smbclient/Context: new wrapper for SMBCCTX
2020-07-20 22:01:10 +02:00
Max Kellermann
3c745b4bc6
neighbor/smbclient: remove obsolete commented code
2020-07-20 18:13:38 +02:00
Max Kellermann
448b397cb8
output/sles: support floating point samples
...
According to https://developer.android.com/ndk/guides/audio/opensl/android-extensions
This feature was mentioned in https://github.com/MusicPlayerDaemon/MPD/issues/922
2020-07-20 15:23:50 +02:00
Max Kellermann
64a1386eb6
output/sles: move SampleFormat selection to switch/case block
2020-07-20 14:47:36 +02:00
Max Kellermann
cf674e9273
input/Init: downgrade PluginUnconfigured to LogLevel::DEBUG
...
`LogLevel::INFO` is logged by default, but this message shall only
appear with `--verbose`.
This finally solves https://github.com/MusicPlayerDaemon/MPD/issues/430
2020-07-16 13:19:14 +02:00
Max Kellermann
b74a91427d
release v0.21.25
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl8DfoEQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEgVqD/0X+QAV77Pw+RDP7qPtyYDfBH6jOvSpAmHm
moXIFMBaPeIrAFd6jfYTL+JMcVf+jfS6H86JlrWVz5/jerV0St/LxwrTGRqkac8K
OFDmMl2SE2KkniLOTHC2nKq3RFzAKDKK8uCaw3JFpXiAezuRXutX19nHitbau+HC
jD+2Ybyy149fPAB+D6aON6vjZI9hQyyeGoEbducZ5uZz+tvzwY0w1KcnDlaicjJq
Wdu16RFFZNXJnrXQ8hPWTxltgIdRfc9xMrIkydsyQkpW5jLZAJn9Yvl4xIQJhJlb
HlF2/xAUAIqykDqjbxWGnQYywOtCh12XDdn2S2AzAGgNH0z++EBiMyQjLorHf3Eo
wSa/qvi1E5rf8WBCaz3Qa/oa9trj4TQcQFQ+v9esO/yBn3O0K6oGr67P45f1KRqg
SAwnwd+YwYp838lT+MlueD+c67QAY64qCYjI810o3rZ3cyEitWKF6kkvwfzqCfly
HeZJS7OsG1UoxInSfnYwJW1svwtkfZU0WqWHxqKSL/MnwihXhlkhkom8jIS+yYcO
pVPllLvF1H0d/Y2Eb2MH6OKZF+7c5cwSeXJzA808NwzE5dpL2tHAgjxhS/P66voF
/UqLyXySqEaUijp9hW3jEeFJ5TSP2bCaNXnbsQUoM4uqjhkoUi9QLTJIqyG1PKmM
3JKzuZXy2g==
=eK6Y
-----END PGP SIGNATURE-----
Merge tag 'v0.21.25'
release v0.21.25
2020-07-06 21:47:30 +02:00
Max Kellermann
00789de7d4
db/upnp/Object: root nodes are allowed to omit parent_id and name
...
This fixes compatibility with Plex DLNA.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/851
2020-07-06 21:36:30 +02:00
Max Kellermann
9964a5ffe8
db/update/Service: avoid copying the mount point path
2020-07-06 21:09:58 +02:00
Max Kellermann
5ece9685c2
PluginUnavailable: backport class PluginUnconfigured from master
...
Stop bothering people about the Tidal/Qobuz plugins.
2020-07-06 21:08:22 +02:00
Max Kellermann
e7c5a42821
Log: add Log() and LogFormat() overloads with std::exception_ptr
...
Make LogError()/FormatError() wrappers for those. Now we can log
exceptions with a lower level.
2020-07-06 21:08:04 +02:00
Max Kellermann
36e6079c57
Log: make LogLevel the first parameter
...
Prepare for templated functions.
2020-07-06 21:07:26 +02:00
Max Kellermann
e5f23678ca
Log: use GetFullMessage() to print exceptions
...
Print all nested exceptions on a single line to avoid confusion.
2020-07-06 21:07:16 +02:00
Max Kellermann
c3cfb5fe16
Merge branch 'v0.21.x'
2020-07-06 20:56:52 +02:00
Max Kellermann
749ad7cd83
PluginUnavailable: inherit the base class constructor
2020-07-06 20:40:25 +02:00
Max Kellermann
fe48e5596f
command/storage: automatically scan new mounts
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/841
2020-07-06 20:23:41 +02:00
Max Kellermann
d7744d2b8e
command/storage: check if storage is already mounted
...
Mounting one storage URI twice on different mount points can lead to
conflicts with the database cache file, and it doesn't make a lot of
sense.
But most importantly, our udisks storage plugin will unmount the disk
from the kernel VFS, and if two exist, they will compete with each
others. We could (and should) fix this in the udisks storage plugin,
but for now, this workaround is good enough (and useful).
2020-07-06 18:02:47 +02:00
Max Kellermann
33ee35ab92
command/storage: check if mount point is busy
...
When mounting something over a directory that is already a mount
point, CompositeStorage::Mount() silently overwrites the previously
mounted storage, disposing it. After that, SimpleDatabase::Mount()
will fail and handle_mount() will roll back the
CompositeStorage::Mount() command, effectively unmounting what was
there before (and also leaking memory).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/918
2020-07-06 17:49:38 +02:00
Max Kellermann
5b291ff768
db/update/Walk: pass concatenated .mpdignore URI to storage.MapUTF8()
...
Fixes the "Unrecognized URI" error with the udisks storage plugin,
which is caused by the kludge in UdisksStorage::MapUTF8().
2020-07-06 17:19:38 +02:00
Max Kellermann
39d6816a6d
neighbor/upnp: roll back changes if DoOpen() fails
2020-07-06 16:23:58 +02:00
Max Kellermann
6517b2d2ac
neighbor/upnp: remove D-Bus filter and match in Close()
...
Fixes use-after-free crash bug during MPD shutdown.
2020-07-06 16:15:18 +02:00
Max Kellermann
bfdf13dca3
decoder/Plugin: allow scan_{file,stream}() to throw
...
Bug #915 is about an I/O exception thrown where none was allowed,
leading to crash via std::terminate(). However, instead of catching
and logging the error inside the decoder plugin, it should be able to
propagate the I/O error to the MPD core, so MPD can avoid trying other
decoder plugins.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/915
2020-07-06 14:13:34 +02:00
Max Kellermann
86823af685
Merge branch 'v0.21.x'
2020-07-02 15:34:16 +02:00
Max Kellermann
daefc61aa4
output/osx: postpone start until the end of Play()
...
Wait until there is data in the ring buffer.
2020-07-02 15:26:38 +02:00
Max Kellermann
6fed6e50e4
output/osx: merge some duplicate code
2020-07-02 15:25:51 +02:00
Max Kellermann
bc9e074822
output/osx: postpone start until the first Play() call
...
Wait until there is some data; don't let our render callback be
invoked without any data.
2020-07-02 15:21:54 +02:00
Max Kellermann
8047102542
output/osx: don't restart AudioUnit at the end of Cancel()
...
We shouldn't restart the AudioUnit while the ring buffer is empty, or
else our render callback may emit noise.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/771
2020-07-02 15:20:43 +02:00
Max Kellermann
fe5b81e180
output/osx: check started
in Close() and Cancel()
2020-07-02 15:19:40 +02:00
Max Kellermann
f032925c2d
output/osx: add started
flag
...
This will keep track of AudioOutputUnitStart() and
AudioOutputUnitStop(). This will provide some separation between "not
(yet) (re)started" and "paused".
2020-07-02 15:18:37 +02:00
Max Kellermann
8125a5dddb
output/osx: don't uninitialize AudioUnit if restart fails
...
This shall be done by Close(), which will be called automatically
after an error.
2020-07-02 15:10:03 +02:00
Max Kellermann
154170e475
output/osx: clear pause
flag only after successful AudioOutputUnitStart()
2020-07-02 15:08:59 +02:00
Max Kellermann
fb83936feb
apple/AudioUnit: add AudioUnitSetPropertyT()
2020-07-02 14:59:40 +02:00
Max Kellermann
db8bf52f7d
apple/AudioObject: add AudioObjectGetStringProperty()
2020-07-02 13:50:05 +02:00
Max Kellermann
756f0b8027
apple: build static library
...
Move build rules from src/output/plugins/meson.build
2020-07-02 13:49:54 +02:00
Max Kellermann
b1fba8d3d7
apple/AudioObject: add missing inline
2020-07-02 13:49:52 +02:00
Max Kellermann
4d88bddfe2
Merge branch 'v0.21.x'
2020-07-01 23:07:57 +02:00
Max Kellermann
e606044271
apple/AudioUnit: library wrapping AudioUnit*() functions
2020-07-01 23:02:22 +02:00
Max Kellermann
bcbb3371ff
apple/AudioUnit: rename to AudioObject.hxx
2020-07-01 22:49:03 +02:00
Max Kellermann
de632882d1
output/osx: move code to FindAudioDeviceByName()
2020-07-01 22:48:12 +02:00
Max Kellermann
745e492d15
output/osx: use [[maybe_unused]]
2020-07-01 22:41:00 +02:00
Max Kellermann
c5dc615efe
output/osx: use IsDigitASCII()
2020-07-01 22:39:54 +02:00
Max Kellermann
a08d4b3d66
Merge branch 'v0.21.x'
2020-07-01 22:09:33 +02:00
Max Kellermann
beeb02025e
output/osx: use range-based for
2020-07-01 22:06:36 +02:00
Max Kellermann
cdf7062597
apple/AudioUnit: wrapper functions for AudioObject properties
2020-07-01 22:05:11 +02:00
Max Kellermann
346084da1e
apple/Throw: new helper library replacing osx_os_status_to_cstring()
2020-07-01 22:05:11 +02:00
Max Kellermann
bbceb5eb91
output/osx: silently ignore some errors in osx_output_set_device()
2020-07-01 22:05:11 +02:00
Max Kellermann
90d85319c2
apple/ErrorRef: new library wrapping CFErrorRef
2020-07-01 22:05:10 +02:00
Max Kellermann
3d03683e7d
output: use StringIsEqual()
2020-07-01 22:04:26 +02:00
Max Kellermann
d8a74802d1
apple/StringRef: new library wrapping CFStringRef
2020-07-01 22:01:53 +02:00
Max Kellermann
191919d1b1
output/osx: remove trailing newline from exception messages
2020-07-01 22:01:51 +02:00
Max Kellermann
df38e7565b
util/HugeAllocator: import std::swap()
2020-07-01 21:56:58 +02:00
Max Kellermann
cb49a03fd7
util/HugeAllocator: add noexcept
2020-07-01 21:56:54 +02:00
Max Kellermann
faee5bbb78
decoder/opus: implement End Trimming (RFC7845 4.4)
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/867
2020-07-01 21:26:34 +02:00
Max Kellermann
7befab7e83
decoder/opus: keep track of the granulepos
...
Will be needed for End Trimming (RFC7845 4.4,
https://github.com/MusicPlayerDaemon/MPD/issues/867 ).
2020-07-01 21:21:06 +02:00
Max Kellermann
4244e61214
decoder/opus: simplify indentation in HandleAudio()
2020-07-01 21:19:52 +02:00
Max Kellermann
46eab05045
decoder/opus: allocate buffer only in the first chained song
...
Fixes memory leak. That's what we get for
2020-07-01 21:07:49 +02:00
Max Kellermann
5ca137c73c
decoder/opus: add API docs
2020-07-01 20:55:18 +02:00
Max Kellermann
760238fe16
decoder/opus: apply pre-skip (RFC7845 4.2)
...
Fixes the first part of
https://github.com/MusicPlayerDaemon/MPD/issues/867
2020-07-01 20:44:53 +02:00
Max Kellermann
a99b4abae8
decoder/OpusHead: return pre-skip
2020-07-01 17:51:07 +02:00
Max Kellermann
472881cb95
util/ByteOrder: remove redundant inline
keywords from constexpr
functions
2020-07-01 17:50:34 +02:00
Max Kellermann
c4efc37ad8
system/ByteOrder: move to util/
2020-07-01 17:49:57 +02:00
Max Kellermann
691b6a236e
output/osx: improve sample rate selection
...
The formula in osx_output_score_sample_rate() to detect multiples of
the source sample rate was broken: when given a 44.1 kHz input file,
it preferred 16 kHz over 48 kHz, because its `frac_portion(16)=0.75`
is smaller than `frac_portion(48)=0.91`.
That formula, introduced by commit 40a1ebee29
, looks completely
wrong. It doesn't do what the code comment pretends it does.
Instead of using that `frac_portion` to calculate a score, this patch
adds to the score only if `frac_portion` is nearly `0` or `1`. This
means that the factor is nearly integer.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/904
2020-07-01 17:38:08 +02:00
Max Kellermann
5c7243d3ad
output/osx: make several fields const
2020-07-01 17:35:39 +02:00
Max Kellermann
44cfdff39a
output/osx: make variables more local
2020-07-01 17:35:33 +02:00
Max Kellermann
5eedda691a
output/osx: make more AudioObjectPropertyAddress instances static constexpr
2020-07-01 17:35:19 +02:00
Max Kellermann
a30d5e1b6a
output/osx: make AudioObjectPropertyAddress variables static constexpr
2020-07-01 17:34:12 +02:00
Max Kellermann
8ef09a0a71
output/osx: don't use C99 designated initializers
...
Fixes `-Wpedantic`.
2020-07-01 17:34:06 +02:00
Max Kellermann
e8044663b3
output/{alsa,osx}: use ConstBuffer::empty()
2020-07-01 17:32:37 +02:00
Max Kellermann
8444c33514
output/osx: don't use variable-length arrays
2020-07-01 17:31:46 +02:00
Max Kellermann
2b7328b434
output/osx: fix coding style
2020-07-01 17:11:02 +02:00
Max Kellermann
3d7147390f
Merge branch 'v0.21.x'
2020-07-01 16:56:17 +02:00
Max Kellermann
25b5ca6435
output/plugins/meson.build: add dependency on libevent.a for ALSA
2020-07-01 15:24:52 +02:00
Max Kellermann
fd217daad4
meson.build: always write encoder/Features.h
...
Fixes a build failure in `CommandLine.cxx`.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/905
2020-07-01 15:16:14 +02:00
Max Kellermann
d9f9b3df10
input/file: detect premature end of file
...
A bug report (https://github.com/MusicPlayerDaemon/MPD/issues/912 )
suggests that on Linux, reading on `cifs` files may rarely return 0 (=
end of file) before the end of the file has really been reached. But
that's just a theory which I need to validate, so this runtime check
shall catch this condition before the assertion in
DecoderBridge::Read() crashes MPD. Let's see.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/912
2020-07-01 15:14:27 +02:00
Max Kellermann
a43ee97746
util/UriUtil: strip credentials from smb:// URIs
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/910
2020-06-22 22:48:56 +02:00
Max Kellermann
43c32372e7
util/UriUtil: make schemes
array static
2020-06-22 22:48:07 +02:00
Max Kellermann
5716cde1fb
queue/PlaylistEdit: fix crash in SetSongIdRange() while playing
...
An assertion failure in UpdateQueuedSong() could trigger because the
`prev` parameter is always `nullptr`, but `queued` may be set. And in
fact, calling UpdateQueuedSong() is only necessary when the queued
song was edited, to re-queue it with the new range.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/901
2020-06-11 07:07:02 +02:00
Max Kellermann
c6a7f6dabc
release v0.21.24
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl7hRzQQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEp7dD/483fkBEyipufQyQT9nntP8R/vqKlUT+M9V
8LyoJBtNtbNkO4bdrgAQCzElYzkDnd8VR++ZDEcqSEF49y5wafsiuufJNW2/s02Y
ygAqgTCpcuS58F7aK92CW99bhZcKC6zoQovkenSMaZ39gorE1ZuO1JyrFR1LWOat
ELekougQe0JbX2YX0YOH0Qags5fv9joxYJYsx8ZC60sCRNc+h8CBQjpyhZqzk7wC
EPviLeMDw5lXkoSI3C045QmwJRFG8GMEyZ/4E/mnibxoTXBJmsm4ArKrfJznrUUs
r8Mkf4G7sVqbsRMyMFBpzw+lsRDpVWI26mhdah9Y1zuUYPaEMe7OVKuEsASJQ/oK
33wRSBVZc7EPhV3m8f7U8NAJI0/XaaPKGgP2OrtnOfxD+OyAze4vNLZ/GJCYSsh+
wN1grmJw1mTP52xBicN2AITqXSVVpuvznn+p0g9MBB9Nw8/vbeWaqGPQhMHGHW6a
JIL9yUTWwhkvkhav1bT7zKaeZv3qfgO7fjkgJqQFYt/q4FZwPFHJme55mVGq9d1y
FNR8BMh+0A8hRhhQVwVycLxr4+NJja3vaqx+uVG2kov1g3eQBSgnEYCiEV7uls4V
Pr4sIEeU/QQ+0jsMoJCaW65bNm4tOGKibpjSHrwJ+gxwKn3N7sJaAOo7PgGsUZyS
30cBC5zkjw==
=XHev
-----END PGP SIGNATURE-----
Merge tag 'v0.21.24'
release v0.21.24
2020-06-10 22:58:41 +02:00
Max Kellermann
6b3a282db4
lib/curl/Request: don't enable CURLOPT_NETRC on Windows
...
Our Windows build is built with `--disable-netrc`, and that makes
CURLOPT_NETRC fail, causing failures with all streams. D'oh!
Closes https://github.com/MusicPlayerDaemon/MPD/issues/886
2020-06-10 22:46:42 +02:00
Max Kellermann
aafc9ce75b
decoder/gme: use class NarrowPath() for Windows compatibility
2020-06-10 21:22:00 +02:00
Max Kellermann
fea326530b
decoder/gme: simplify LoadGmeAndM3u() by moving code to ReplaceSuffix()
2020-06-10 21:20:49 +02:00
Max Kellermann
8925cc17d8
decoder/gme: use StringAfterPrefix()
2020-06-10 21:11:08 +02:00
Max Kellermann
14412c867f
add a few IWYU pragmas
2020-06-10 21:10:33 +02:00
Max Kellermann
c5cc256bf2
decoder/gme: use Path::GetSuffix()
2020-06-10 21:02:07 +02:00
Max Kellermann
563c7318f9
fs/AllocatedPath: add method GetSuffix()
2020-06-10 21:00:41 +02:00
Max Kellermann
374cc51f77
decoder/Bridge: add flag to make initial seek errors fatal
...
When the client wants to seek, but the decoder has already finished
decoding the current song, the player restarts the decoder with an
initial seek at the new position. When this initial seek fails, MPD
pretends nothing has happened and plays this song from the start.
With this new flag, a restarted decoder marks the initial seek as
"essential" and fails the decoder if that seek fails.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/895
2020-06-10 17:49:10 +02:00
Max Kellermann
068006ebd7
decoder/Bridge: install an InputStreamHandler on local files
...
Before the advent of io_uring (commit dae8da7066
), this didn't
matter, because the `FileInputStream` never called this. But
`UringInputStream` is derived from `AsyncInputStream`, and needs the
handler to signal completion.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/898
2020-06-09 21:07:38 +02:00