3a02588fbf
fixup! WIP: rtkit support
2025-03-17 21:01:28 +01:00
27d430d9cf
WIP: rtkit support
2025-03-17 21:01:28 +01:00
b84ffa265c
Add nix-shell
2025-03-17 21:01:27 +01:00
Frank Dana
af649ae85f
Document SELinux-blocked io_uring failures
2025-03-14 22:15:29 -04:00
Camille Scholtz
30e1cbbcba
fs/glue/StandardDirectory: Add standard directories for macOS
2025-03-14 08:25:30 +01:00
Camille Scholtz
86ab4bc62c
config/Path: Always allow getting of XDG... variables
2025-03-13 22:22:14 +01:00
Camille Scholtz
a34bf3588e
fs/glue/StandardDirectory: Remove double import
2025-03-13 22:21:15 +01:00
Max Kellermann
64c9e5a2d4
.gitignore: remove tool-specific patterns
...
If somebody uses tools that create these files, they should put them
in their global gitignore.
2025-03-13 14:55:09 +01:00
Max Kellermann
9f02a88d19
.github/workflows: add more paths-ignore
2025-03-13 14:53:17 +01:00
Max Kellermann
e6a25e7e0b
doc/conf.py: use "sphinx_rtd_theme" only if it is installed
...
Don't fail at build time only because the RTD scheme is not installed.
Such a problem should be detected at configure time.
2025-03-13 14:44:23 +01:00
Max Kellermann
f6337dd95e
doc/conf.py: remove the "~git" version suffix in the 0.24 stable branch
2025-03-13 14:19:32 +01:00
Max Kellermann
42fc26cc6d
.github/workflows/build_android.yml: switch to the installed NDK r27
2025-03-13 11:33:46 +01:00
Max Kellermann
1b6567b31b
test/net/TestIPv[46]Address: initialize WinSock for some of the tests
...
Not necessary with WINE, but the "real" Windows seems to be picky
about this.
2025-03-13 11:26:05 +01:00
Max Kellermann
171bb9b737
test/TestStringFilter: enable another failing test on Windows
2025-03-13 11:25:57 +01:00
Max Kellermann
3626d4ec9a
Revert "lib/icu/Compare: add LINGUISTIC_IGNORECASE [Windows]"
...
This reverts commit 1bd204527e . This
fixes a test on WINE, but fails many others on Windows. D'oh!
2025-03-13 11:22:02 +01:00
Max Kellermann
71c8f4de40
test/TestStringFilter: disable two failing checks on Windows
2025-03-13 10:37:01 +01:00
Max Kellermann
1bd204527e
lib/icu/Compare: add LINGUISTIC_IGNORECASE [Windows]
...
This fixes one check in the "StringFilterTest.Normalize" unit test.
2025-03-13 10:35:42 +01:00
Max Kellermann
9b25d59120
test/TestStringFilter: re-enable two tests on Windows
...
These don't fail anymore. I don't know what has changed since these
`#ifndefs` were added by commit d7f545721b
2025-03-13 10:35:33 +01:00
Max Kellermann
ca5580a560
test/util/TestIntrusiveTreeSet: do not add duplicates in the LargeRandom tests
...
This can fail randomly if the order of identical values is different
in the std::deque and the IntrusiveTreeSet.
2025-03-13 09:55:01 +01:00
Max Kellermann
dd59db2be2
fs/LookupFile: check for empty file name on Windows
...
Fixes crash bug in the (synthetic) unit test. See code comment.
2025-03-13 09:21:04 +01:00
Max Kellermann
c290e0b965
LogBackend: remove the colon after the time stamp
...
This colon with spaces around it looked weird and was somewhat
redundant. Let's use a space only. This looks better if we replace
the space between date and time with a 'T', so it's mostly the ISO8601
format only in local time instead of UTC.
2025-03-13 09:02:01 +01:00
Max Kellermann
689d231809
LogBackend: include year in time stamp
...
Also use a numeric month instead of the month name.
2025-03-13 09:00:37 +01:00
Max Kellermann
84ff3c6a0d
LogBackend: use %T
2025-03-13 08:58:36 +01:00
Max Kellermann
093122aaeb
LogBackend: use fmt to format the time stamp
2025-03-13 08:57:23 +01:00
Max Kellermann
4f981adb97
lib/fmt/Unsafe: new library
2025-03-13 08:55:12 +01:00
Max Kellermann
3945b808a2
CommandLine: update copyright year
2025-03-13 08:30:28 +01:00
Max Kellermann
a171a588cf
queue/QueuePrint: switch to SPDX header
2025-03-13 08:30:28 +01:00
Max Kellermann
2388f38d7d
NEWS: mention the id3tag build failure fix merged from the obsolete v0.23.x branch
2025-03-13 08:30:28 +01:00
Jzavrk
dac2c4df9b
output/plugins/SndioOutputPlugin: Fix sndio volume calculation
...
This commit addresses issues #2226 and MusicPlayerDaemon/ncmpc#95 .
MPD and sndio volume ranges being different, the formula to transform a
value from one set to the other is in the form of `(a * x + b) / c`
where:
- a = output set max value
- b = adjustment term
- c = input set max value
Previous calculation formula had `b = 0`, scaling values too low and
rendering increment impossible. Having `b = out_maxval / 2` balances the
transformation, ensuring a better spread of values across the output
range.
Closes #2226
2025-03-12 12:24:00 +01:00
Max Kellermann
843cb1604d
net: delete UniqueSocketDescriptor.hxx.orig
...
This got committed accidently.
2025-03-11 17:16:58 +01:00
Max Kellermann
59c289c7d8
README.md: update manual and forum links
...
It's on readthedocs and GitHub now.
2025-03-11 13:03:28 +01:00
Max Kellermann
4b85bb57cc
Merge branch 'v0.23.x'
2025-03-11 12:52:05 +01:00
Max Kellermann
a19b6919e0
increment version number to 0.24.1
2025-03-11 11:24:59 +01:00
Max Kellermann
1caeb9b418
release v0.24
2025-03-11 11:05:29 +01:00
Max Kellermann
d3717c5b81
test/util/TestIntrusiveTreeSet: add test with all-zero items
2025-03-11 10:45:33 +01:00
Max Kellermann
90987194cb
.github/workflows/build.yml: run unit tests on Windows
...
The unit tests currently fail on Windows. That needs to be fixed, but
good to know that there are problems currently.
2025-03-11 10:18:19 +01:00
Max Kellermann
2953737478
.github/workflows/build.yml: remove "warning_level=3", it is the default
2025-03-11 10:11:06 +01:00
Max Kellermann
ac3a5e27ec
.github/workflows/build.yml: split "Compile and Test" into two steps
2025-03-11 10:11:06 +01:00
Max Kellermann
4ae89b7b4a
.github/workflows/build.yml: enable ccache for Windows builds
2025-03-11 10:11:06 +01:00
Max Kellermann
568494440f
.github/workflows/build.yml: add matrix.os to ccache key
2025-03-11 10:11:06 +01:00
Max Kellermann
5d0aeda4e9
.github/workflows/build.yml: run unit tests with "--print-errorlogs"
...
With this option, Meson prints errors instead of logging them to a
file (that would be inaccessible).
2025-03-11 10:11:06 +01:00
Max Kellermann
d89b9d1683
test/fs/TestParsePath: include "fs/XDG.hxx" for USE_XDG
2025-03-11 10:09:52 +01:00
Max Kellermann
c7c4e7a6bf
python/build/libs.py: update libopenmpt to 0.7.13
2025-03-11 09:26:13 +01:00
Max Kellermann
1c7c2026db
config/Path: check for empty XDG variables
2025-03-11 09:23:33 +01:00
Max Kellermann
a9805db500
config/Path: move code to GetVariable()
2025-03-11 09:19:20 +01:00
Max Kellermann
e8a4317f31
config/Path: simplify tilde expansion
2025-03-11 09:17:01 +01:00
Max Kellermann
f4f5e94a36
config/Path: pass std::string_view to ParsePath()
2025-03-11 09:15:18 +01:00
Max Kellermann
b2326b9a98
test/fs/TestParsePath: unit test for ParsePath()
2025-03-11 09:13:31 +01:00
Max Kellermann
1dc8cd8eef
config/Path: allow expanding $HOME even without XDG
2025-03-11 08:45:04 +01:00
Max Kellermann
147fe18ad6
config/Path: adjust error message (not an environment variable)
2025-03-11 08:44:18 +01:00
Max Kellermann
6fd6a5110c
config/Path: use string_view literals
2025-03-11 08:36:57 +01:00
JoanVC
e8ce417150
Initial support for $HOME and some XDG variables inside the configuration file
...
This commit tries to address issues #263 and #476 . It enables the path expansion of HOME, XDG_CONFIG_HOME, XDG_MUSIC_DIR, XDG_CACHE_HOME and XDG_RUNTIME_DIR by using the glue functions already available in MPD.
Signed-off-by: Joan Vilardaga <github-91yu@joanvc.cat >
2025-03-10 22:21:03 +01:00
Max Kellermann
da40483666
event/Loop: destroy the UringWake instance in DisableUring()
2025-03-10 19:14:10 +01:00
Max Kellermann
06bc373ace
event/Loop: read eventfd with io_uring
...
This eliminates a roundtrip to epoll.
2025-03-10 18:59:08 +01:00
Max Kellermann
7797158ea6
event/Loop: auto-restart io_uring_prep_poll_multishot()
...
Applications need to check the `IORING_CQE_F_MORE` flag to see whether
the kernel is still polling, or whether it has stopped for some reason.
2025-03-10 18:52:31 +01:00
Max Kellermann
01a04baf7b
util/DivideString: remove unused library
2025-03-10 18:35:20 +01:00
Max Kellermann
46b461df42
playlist/pls: migrate the line parser to use std::string_view
2025-03-10 18:35:20 +01:00
Max Kellermann
898e0a2bc4
test/playlist: unit tests for the playlist plugins
...
Only "pls" for now.
2025-03-10 18:35:20 +01:00
Max Kellermann
2d3271859f
input/memory: new implementation (for unit tests)
2025-03-10 18:17:33 +01:00
Max Kellermann
b6672004bc
util/StringCompare: add SkipPrefixIgnoreCase()
2025-03-10 18:17:33 +01:00
Max Kellermann
eafca183a6
input/meson.build: add libinput_basic.a
...
This is the middle ground between libinput_api.a (the raw API) and
libinput_glue.a (dependencies on all plugins).
2025-03-10 17:13:51 +01:00
Max Kellermann
59f9e0ca70
input/meson.build: do not compile ProxyInputStream.cxx twice
2025-03-10 17:11:12 +01:00
Max Kellermann
800a03f0dc
playlist/plugins/meson.build: add missing dependencies
2025-03-10 14:33:41 +01:00
Max Kellermann
55c11448ff
util/NumberParser: add ParseIntegerTo()
...
An version of the function without the `std::optional` overhead.
2025-03-10 14:04:50 +01:00
Max Kellermann
e9c1ea684b
util/NumberParser: add std::from_chars() wrapper taking std::string_view
2025-03-10 14:04:50 +01:00
Max Kellermann
103487e8ad
event/InotifyEvent: add method IsDefined()
2025-03-10 14:04:50 +01:00
Max Kellermann
fb59bbc481
python/build/libs.py: update FFmpeg to 7.1.1
2025-03-10 14:04:50 +01:00
Max Kellermann
d0f6aa5b87
subprojects: update libnpupnp to 6.2.1-1
2025-03-10 14:04:12 +01:00
Max Kellermann
fdb8874803
python/build/libs.py: update libnfs to 6.0.2
2025-02-28 19:47:57 +01:00
Max Kellermann
c9a22b3404
meson.build: disable unnecessary libsndfile features
2025-02-28 19:41:19 +01:00
Max Kellermann
fc5d10b776
subprojects: add libsndfile.wrap
2025-02-28 19:37:17 +01:00
Max Kellermann
4cefb30dd9
decoder/flac: ignore FLAC__STREAM_DECODER_END_OF_LINK (FLAC 1.5)
...
Fixes -Wswitch compiler warning when building with FLAC 1.5.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2219
2025-02-28 10:32:47 +01:00
Max Kellermann
36482f5e6a
subprojects: update gtest to 1.15.2-2
2025-02-28 09:59:07 +01:00
Jochen Sprickerhof
d822685c53
config/File: support resetting repeatable params
...
This allows resetting bind_to_address to override the default value in a
included config.
2025-02-21 13:52:44 +01:00
Max Kellermann
9d87fb5e09
subprojects: update sqlite3 to 3.49.1-1
2025-02-20 13:59:06 +01:00
Max Kellermann
85014b5fa2
event/Loop: move code to Wait()
2025-02-13 16:54:36 +01:00
Max Kellermann
aff929dbd6
event/Loop: rename Wait() to Poll()
...
Preparing to have another Wait() method wrapping Poll() and io_uring.
2025-02-13 16:53:49 +01:00
Max Kellermann
dda85e02bf
io/Open: add TryOpen(struct open_how), Open(struct open_how)
2025-02-13 16:09:12 +01:00
Max Kellermann
5b393052ee
event/Loop: pass timeout=nullptr to io_uring if there is no timer
2025-02-13 16:04:07 +01:00
Max Kellermann
624da8ce5b
event/Loop: use io_uring_prep_poll_multishot() on the epoll fd
...
This wraps epoll and io_uring the other way: previously, we had the
io_uring file descriptor registered in epoll and when it became ready,
we could query its completion ring. The problem is that the poll
wakeups cause considerable overhead in the Linux kernel, see
https://lore.kernel.org/io-uring/20250128133927.3989681-9-max.kellermann@ionos.com/
By wrapping epoll inside io_uring using
io_uring_prep_poll_multishot(), the "outer" loop is io_uring and
inside it, we have epoll. This adds another system call for epoll,
but that will go away as soon as most operations are going through
io_uring. Previously, io_uring had this extra system call.
2025-02-13 16:02:40 +01:00
Max Kellermann
bca9e3e347
io/uring/Queue: dispatch all completions in SubmitAndWaitDispatchOneCompletion()
...
io_uring_submit_and_wait_timeout() can return multiple completions,
even if we wait for only one. We should dispatch them all or we miss
wakeups.
2025-02-13 14:53:30 +01:00
Max Kellermann
2276ebd70f
io/uring/Queue: add DispatchCompletions() overload using io_uring_for_each_cqe()
2025-02-13 14:53:24 +01:00
Max Kellermann
a9bee1c64b
io/uring/Ring: add io_uring_for_each_cqe() wrapper
2025-02-13 14:53:17 +01:00
Max Kellermann
c8e88408b2
io/uring/Ring: ignore EINTR
2025-02-13 14:53:11 +01:00
Max Kellermann
45644759fe
io/uring/CancellableOperation: invoke OnUringCompletion() in destructor
...
This is important for operations that have complex cancellation
procedures (e.g. if they need to free buffers). They might leave an
Operation instance in the queue.
2025-02-13 14:52:52 +01:00
Max Kellermann
e014d31972
io/uring/Ring: add io_uring_submit_and_wait_timeout() wrapper
2025-02-13 14:52:37 +01:00
Max Kellermann
b7655d38f7
io/uring/Queue: support IORING_CQE_F_MORE
2025-02-13 14:52:30 +01:00
Max Kellermann
268f737ac4
meson.build: suppress -Wmissing-field-initializers
...
There's nothing wrong with initializing only some fields.
2025-02-13 14:21:38 +01:00
Max Kellermann
80ff0a062a
system/EpollFD: add method GetFileDescriptor()
2025-02-13 14:19:28 +01:00
Max Kellermann
24bcf44a47
subprojects: update sqlite to 3.49.0-1
2025-02-13 14:12:53 +01:00
gd
f1e43cb498
android: Loader - load early (before service thread) both in activity and service.
...
Loader converted from java to kotlin.
Instead of loading libmpd when the service thread is started,
the service will not start the the thread if libmpd failed to load.
The loader is also accessed by the view data to let
the ui adjust if failed to load, by showing the failure reason
and disabling the Start MPD button.
2025-02-06 14:23:26 +02:00
gd
ae1c5e3424
android: build.gradle - added build flavor "fail-test" to test System.loadLibrary("mpd") failure
2025-02-06 14:11:06 +02:00
gd
9eb5879542
android: IntentUtils - added license comment
2025-02-06 14:06:53 +02:00
gd
038759506f
android: added 'universal' flavor that includes both both arm64-v8a and x86_64 versions of libmpd.so
2025-02-05 20:31:43 +02:00
gd
2bf9fdf10e
android: migrated build to version catalogs
...
For easier management of dependencies versions: https://developer.android.com/build/migrate-to-catalogs
2025-02-05 20:15:58 +02:00
gd
0bf77f4eb3
android: converted Main from java to kotlin
2025-02-05 11:20:39 +02:00
gd
034bcf4f44
android: added product flavors to separatly build apk for arm64-v8a or x86_64
2025-02-04 10:23:26 +02:00
gd
834d6dcf46
android: build version of kotlin and compose updated.
...
Changed to compatible versions according to https://developer.android.com/jetpack/androidx/releases/compose-kotlin#kts
2025-02-04 10:22:57 +02:00
gd
8a642c8a83
android: MainScreen - use Icons.AutoMirrored.Filled.List instead of deprecated Icons.Default.List
2025-02-04 10:22:57 +02:00
gd
fe42ad2439
android: .gitignore - added previously misspelled app/src/main/jniLibs/
2025-02-04 10:22:57 +02:00
gd
51242be72b
android: changed permissions handling UI in status screen when show rationale is false
...
Android will ignore permission request and will not show the request dialog
if the user's action implies "don't ask again."
This leaves the app in a crippled state and the user confused.
Google says "don't try to convince the user", so it returns false for `shouldShowRequestPermissionRationale`.
To help the user proceed, we show the `Request permission` button only if `shouldShowRequestPermissionRationale == true`
because there's a good chance the premission request dialog will not be ignored.
If `shouldShowRequestPermissionRationale == false` we instead show the "rationale" message and a button to open
the app info dialog where the user can explicitly grand the permission.
2025-02-04 10:22:57 +02:00
gd
cb62aff43e
android: added missing package declaration in SettingsScreen.kt
2025-02-04 10:22:57 +02:00
gd
491e726540
android: manifest - added sdk version to legacy permission READ_EXTERNAL_STORAGE, added permission READ_MEDIA_AUDIO
...
Change fo r SDK version 33 and above
2025-02-04 10:22:57 +02:00
gd
7404be41dc
android: git ignoring .idea directory completely until a good reason emerges not to
2025-02-04 10:22:57 +02:00
Camille Scholtz
b8289ae923
input/meson.build: Add missing dependency
2025-02-03 23:07:58 +01:00
Max Kellermann
6b92b7adb9
util/PacketBigEndian: add operator|
2025-02-01 19:30:17 +01:00
Max Kellermann
00a352ffcd
event/Loop: explicit io_uring initialization
...
Log the io_uring initialization error at MPD startup.
2025-02-01 19:20:50 +01:00
Max Kellermann
63cc07b8a7
event/Loop: add method SetThread()
...
Require to call it before calling Run(); remove the setter from Run().
This gives class EventThread more control over when it is initialized.
2025-02-01 19:19:59 +01:00
Max Kellermann
b2bf95009b
event/Thread: use inline initializers
2025-02-01 18:24:02 +01:00
gd
7df041310c
android: build.gradle.kts - updated dependencies versions. Updated compile sdk to 35, and target sdk to 34
2025-02-01 18:09:12 +01:00
gd
cd9522c1d1
android: manifest - added android:foregroundServiceType=mediaPlayback and permission FOREGROUND_SERVICE_MEDIA_PLAYBACK
...
Required by newer android sdk.
2025-02-01 18:09:07 +01:00
gd
59bd0fe0f0
android: added README.md for notes and resources for MPD android maintainers.
2025-02-01 18:09:02 +01:00
gd
0872a761c8
android: gradle build - add ndk.abiFilters to package the prebuilt arm64-v8a/libmpd.so with the apk
2025-02-01 18:08:58 +01:00
gd
996e158f56
android: updated gradle version
2025-02-01 18:08:55 +01:00
gd
7fb195bc0b
android: Context.cxx - in GetExternalFilesDir removed assert type != nullptr
...
May be null for the root of the files directory.
2025-02-01 18:08:52 +01:00
gd
2fabaa2e95
android: meson.build - changed output dir name from jnilibs to jniLibs
...
It is the default name: https://developer.android.com/studio/projects/gradle-external-native-builds#jniLibs
2025-02-01 18:08:48 +01:00
Camille Scholtz
e3cf9bb0a1
Fix deamon mode on macos
2025-02-01 18:05:49 +01:00
Camille Scholtz
407db96d4a
Install some more dependencies in the macos workflow
2025-02-01 18:05:42 +01:00
Camille Scholtz
3689200b78
Add prcr2 dependency to macos workflow
2025-02-01 18:05:34 +01:00
Camille Scholtz
6c16430a85
Remove whitespace
2025-02-01 18:05:24 +01:00
Camille Scholtz
ff37d11610
Workflow fixes for macOS
2025-02-01 18:05:17 +01:00
Camille Scholtz
509786cbf1
Revert "remove macOS support"
...
This reverts commit 518ce0187a .
2025-02-01 18:05:13 +01:00
allixx
148050898a
doc/user: update windows build meson version
2025-02-01 12:16:38 +03:00
Max Kellermann
a29d3eb975
Merge branch 'id3tag-meson-fix' of https://github.com/allixx/MPD into v0.23.x
2025-02-01 08:23:12 +01:00
allixx
1247ee5347
subprojects/packagefiles/id3tag/meson.build: fix meson errors
2025-02-01 09:59:40 +03:00
gd
f15b6a43d3
Logging: curl - write debug output through MPD log instead of curl writing directly to stderr.
...
The output gets the standard MPD log format with domain curl and a timestamp.
Using CURLOPT_DEBUGFUNCTION that is only called when CURLOPT_VERBOSE is in effect
when MPD log level is verbose.
2025-02-01 08:53:38 +02:00
Max Kellermann
bddfff9c2b
meson.build: fix typo
2025-01-31 19:51:00 +01:00
allixx
cdc99812c9
python/build/libs.py: replace broken Boost 1.81.0 url
2025-01-31 19:17:28 +03:00
Max Kellermann
63ad12bb89
storage/nfs: MapUTF8("") returns the full URL including parameters
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2154
2025-01-30 20:04:19 +01:00
Max Kellermann
7c4ddb5943
input/uring: initialize uring_input_queue lazily
...
The BlockingCall() in InitUringInputPlugin() did not work because the
EventThread was not yet started. This was never noticed until commit
e309941646 which enabled `IORING_SETUP_SINGLE_ISSUER`, and suddenly
the kernel refused to accept io_uring_submit() calls from the
io_thread because io_uring_setup() had been called from the main
thread.
2025-01-30 20:00:57 +01:00
Max Kellermann
3cf5354e3f
Revert "Main: start IO threads before initializing the rest"
...
This reverts commit abc8420697 . This
was a bad idea, too, because it broke daemonization.
2025-01-30 19:58:15 +01:00
Max Kellermann
838398103c
Revert "event/Thread: start the thread in the constructor"
...
This reverts commit b49cfe96f4 . It was
a bad idea because it broke signal handlers. I need to find a better
way to fix io_uring intialization.
2025-01-30 19:58:15 +01:00
Max Kellermann
30bd70939a
lib/nfs/Connection: remove unnecessary include
2025-01-30 17:24:20 +01:00
Max Kellermann
275cd9d1d0
lib/nfs/Connection: give up connection after NFS4ERR_EXPIRED
...
Once a NFS request fails with NFS4ERR_EXPIRED, the whole connection is
broken and we need to open a new one. I wish libnfs would report this
to us as a connection-level error, but instead only the one request
fails; therefore this workaround is an ugly kludge.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2175
2025-01-30 17:23:39 +01:00
Max Kellermann
5b001957c7
input/async: skip resume and seek if there is a pending error
...
The resume/seek was received asynchronously and meanwhile an error
might have occurred that needs to be handled.
This fixes another NFS-related crash bug.
2025-01-30 16:47:51 +01:00
Max Kellermann
d1e5c90c3b
decoder/flac: do not seek when DecoderCommand::STOP is received
...
libFLAC tries to keep on seeking a stream even after a (fatal) read
error has occurred. Let the DecoderClient decide whether proceeding
is possible.
This fixes a crash bug when playing a file over NFS and the NFS
connection fails.
2025-01-30 16:46:04 +01:00
Max Kellermann
715ef846b6
input/Plugin: pass URI as std::string_view
2025-01-30 13:38:30 +01:00
Max Kellermann
aee49d1c1c
input/cdio: pass std::string_view to parse_cdio_uri()
2025-01-30 13:17:47 +01:00
Max Kellermann
459390cd56
input/alsa: use std::string_view in class SourceSpec
2025-01-30 13:03:52 +01:00
Max Kellermann
7ca8dedb35
pcm/AudioParser: use std::string_view
2025-01-30 12:27:20 +01:00
Max Kellermann
f6cee35896
fs/Traits: add IsAbsolute(string_view)
2025-01-30 11:55:44 +01:00
gd
66ee03741d
Logging: enable log timestamp to stdout logging
...
When running with stdout output to debug the server
or misbehaving clients, it is useful to have the timestamp
to detect timing issues and response times.
Especially when opening and playing online sources that
block the connection thread sometime for a significantly
long time that makes the client-server unresponsive
and cause timeouts in clients.
2025-01-30 11:33:21 +01:00
Max Kellermann
b49cfe96f4
event/Thread: start the thread in the constructor
...
This is the proper fix for the e309941646 regression; see
commit abc8420697
2025-01-30 10:58:34 +01:00
Max Kellermann
ae112fe077
Merge branch 'sticker_errors' of https://github.com/jcorporation/MPD
2025-01-30 10:48:18 +01:00
Max Kellermann
a1cbfa1623
Merge branch 'sticker_set' of https://github.com/jcorporation/MPD
2025-01-30 10:46:23 +01:00
Max Kellermann
e06d775af5
util/CircularBuffer: add method MoveTo()
...
This implements wraparound, so AsyncInputStream and ThreadInputStream
can now return all of the buffer contents in one Read() call.
2025-01-29 21:28:28 +01:00
Max Kellermann
950f5f4d32
input/{async,thread}: move code to ReadFromBuffer()
2025-01-29 21:26:05 +01:00
Max Kellermann
abc8420697
Main: start IO threads before initializing the rest
...
This fixes a regression triggered by commit e309941646 -
IORING_SETUP_SINGLE_ISSUER broke because io_uring_setup() was called
fromm the main thread, yet io_uring_submit() in the I/O thread. This
is because the I/O thread was not yet started when
InitUringInputPlugin() was called, and BlockingCall() was invoked
synchronously in the main thread. This has always been wrong, but was
never noticed.
2025-01-29 21:25:59 +01:00
Max Kellermann
e309941646
event/Loop: initialize io_uring with IORING_SETUP_SINGLE_ISSUER
...
This might give tiny kernel-side optimizations.
2025-01-29 20:29:42 +01:00
Max Kellermann
ea2ced6b9f
event/UringManager: replace with new Uring::Manager class
...
From https://github.com/CM4all/libcommon - the new class is mostly
identical, and I want to maintain only one of them.
2025-01-29 20:27:13 +01:00
Max Kellermann
f1d06396a7
client: replace num with a name string
...
This logs the client address (or the process id and uid for local
connections) in each log line instead of the number.
2025-01-29 20:24:05 +01:00
Max Kellermann
95c0e2505c
client/New: pass SocketPeerCredentials to client_new()
2025-01-29 19:36:47 +01:00
Max Kellermann
7adda0aa66
event/ServerSocket: move GetPeerCredentials() call to ClientListener::OnAccept()
2025-01-29 19:32:53 +01:00
Max Kellermann
a0825e6ce0
net/PeerCredentials: add getpeereid() support
2025-01-29 19:28:09 +01:00
Max Kellermann
c7621ec0e4
net/PeerCredentials: wrapper for struct ucred
2025-01-29 19:28:03 +01:00
Max Kellermann
2c7ca16c4e
lib/fmt/ToBuffer: add constexpr
2025-01-29 18:12:08 +01:00
Max Kellermann
ad8c2577c4
util/PackedBigEndian: add class PackedSignedBE16
2025-01-29 18:11:47 +01:00
Max Kellermann
7c9a460786
io/uring/Ring: add method SetMaxWorkers()
2025-01-29 18:10:59 +01:00
Max Kellermann
c644b7616a
io/uring/Ring: add ctor wrapping io_uring_queue_init_params()
2025-01-29 18:10:20 +01:00
Max Kellermann
badf7101e2
io/uring/Ring: use if with initializer
2025-01-29 18:10:04 +01:00
Max Kellermann
6fb91e661c
io/uring/Queue: DispatchCompletions() returns bool
2025-01-29 18:09:57 +01:00
Max Kellermann
ed819a05e3
io/uring/Ring: add SubmitAndGetEvents()
2025-01-29 18:09:52 +01:00
Max Kellermann
2e3a51a5da
io/uring/Close: use IOSQE_CQE_SKIP_SUCCESS
...
We don't want to get any completion events for "close". It's
fire-and-forget.
2025-01-29 18:09:29 +01:00
Max Kellermann
e682940c54
event/PipeEvent: add GetScheduledFlags(), [GS]etReadyFlags()
2025-01-29 18:09:10 +01:00
Max Kellermann
fa375cbaeb
event/uring/Manager: un-inline the ctor
2025-01-29 18:09:06 +01:00
Max Kellermann
3f638bfa03
io/uring/Operation: add method GetUringData()
2025-01-29 18:07:55 +01:00
Max Kellermann
0ba0c64093
event/uring/Manager: add flags parameter
2025-01-29 18:07:46 +01:00
Max Kellermann
5e107c33d9
event/DeferEvent: add ScheduleNext()
2025-01-29 18:05:50 +01:00
Max Kellermann
4bb379a218
event/ServerSocket: use SocketDescriptor::GetPeerCredentials()
2025-01-29 17:56:26 +01:00
Max Kellermann
3710b54d43
event/ServerSocket: pass SocketDescriptor to get_remote_uid()
2025-01-29 17:56:26 +01:00
Max Kellermann
70f1f9cff8
subprojects: update gtest to 1.15.2
2025-01-29 17:41:24 +01:00
Max Kellermann
9787d39c3f
subprojects: update expat to 2.6.4
2025-01-29 17:41:11 +01:00
Max Kellermann
54527068d5
.github/workflows/build.yml: fix matrix name
...
Regression by commit ab011adf77
2025-01-29 17:35:33 +01:00
Max Kellermann
0186f73c7a
client/Process: let libfmt quote the command string
2025-01-29 17:32:42 +01:00
gd
88594c81d6
Logging: added seconds to log time string.
...
Time was only in minutes before.
Seconds is more useful in analyzing the log for example
with issues of timeouts, and reponse times.
2025-01-29 17:31:21 +01:00
Max Kellermann
f6bd49ba61
Merge branch 'tag-compare' of https://github.com/geneticdrift/MPD
2025-01-29 17:21:54 +01:00
Max Kellermann
a404e5754e
Merge tag 'v0.23.17'
...
release v0.23.17
2025-01-29 17:20:02 +01:00
Max Kellermann
b080ca8627
release v0.23.17
2025-01-29 17:11:53 +01:00
Max Kellermann
0e8cd3b961
client/Process: explicitly disallow "idle" and "noidle" in command lists
...
These commands cannot possibly work with command lists because command
lists are supposed to be atomic, but suspended command execution
conflicts with that.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2167
2025-01-29 17:08:53 +01:00
Max Kellermann
8fcb6e148f
decoder/list: probe "ffmpeg" before "sndfile" and "audiofile"
...
For FFmpeg's DTS-WAV support, see code comment.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2158
2025-01-29 15:42:54 +01:00
gd
ce9ee38304
decoder/Bridge: DecoderBridge::UpdateStreamTag - return false if stream tag not changed.
...
Some streams send the same tags frequently, causeing unnecessary update
events.
2025-01-29 16:02:20 +02:00
gd
f9d47502d8
player/Thread: update song tag from remote stream only if changed.
...
Some streams send the same tags frequently, causing unnecessary player queue update events.
2025-01-29 16:00:37 +02:00
gd
f15014b6af
tag/Item: made TagItem constructor private and friend TagPoolItem
...
To only allow construction as part of TagPoolItem with its special var size allocator in TagPoolItem::Create.
2025-01-29 16:00:37 +02:00
gd
2a9c3a2e50
tag/Tag: added operator==(Tag&)
2025-01-29 16:00:37 +02:00
gd
3e9c2cce71
tag/Item: added operator== to TagItem
2025-01-29 16:00:37 +02:00
gd
93bf99f639
util/DereferenceIterator, TerminatedArray: added operator-(const IteratorType&) to DereferenceIterator and TerminatedArray::iterator
...
It is required by std::distance and some std algos.
2025-01-29 16:00:20 +02:00
Max Kellermann
c0a9434f34
command/file: "albumart" tries to send larger chunks if available
...
If we only receive very little data from the InputStream, try a second
Read() call to get more data. This works around tiny reads at input
buffer boundaries with the io_uring input plugin. These tiny reads
are inefficient, and we can afford to wait one more low-level I/O
iteration to finish (but not more).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2186
2025-01-29 13:07:05 +01:00
Max Kellermann
d7212624b0
input/{async,thread}: clear the CircularBuffer when it becomes empty
...
First step towards fixing https://github.com/MusicPlayerDaemon/MPD/issues/2186
2025-01-29 13:05:24 +01:00
Max Kellermann
70a0a781c8
input/async: move the IsEOF() check to a separate block
2025-01-29 12:59:04 +01:00
Max Kellermann
ab011adf77
meson.build: require GCC 12 or clang 14
...
GCC 10 doesn't have std::make_unique_for_overwrite(), so let's drop it.
2025-01-29 12:24:48 +01:00
Max Kellermann
8ea3f86f43
Revert "meson.build: disable -Wsuggest-override with GCC 8"
...
This reverts commit 56c0733b42 . GCC 8
is no longer supported.
2025-01-29 12:22:11 +01:00
Max Kellermann
bd78307940
input/{async,thread}: add an additional Cond field
...
This eliminates the ScopeExchangeInputStreamHandler kludge.
2025-01-29 12:14:42 +01:00
Max Kellermann
3cc7b7dbf9
Merge branch 'v0.23.x'
2025-01-29 12:09:18 +01:00
Max Kellermann
57e7fb3f62
tag/Id3Load, ...: use std::make_unique_for_overwrite()
...
Don't zero-initialize the buffers. This removes some useless
overhead.
2025-01-29 12:01:27 +01:00
Max Kellermann
687475cf3c
db/update/InotifyUpdate: handle IN_CREATE without IN_ISDIR
...
A new symlink causes `IN_CREATE`. Usually, we catch `IN_CREATE` only with
IN_ISDIR to watch the new directory, but otherwise `IN_CREATE` is not
handled. Regular files are "created" but they have usable content
only with `IN_CLOSE_WRITE`. Yet symlinks have only `IN_CREATE` and
they are immediately usable.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2192
2025-01-29 09:41:08 +01:00
Max Kellermann
c48dbd5dd4
lib/nfs/meson.build: reject libnfs 6
...
libnfs version 6 has major API changes and MPD 0.23 has never been
adapted to these. This additional configure-time check fixes
potential compile-time failures.
2025-01-29 09:04:55 +01:00
Max Kellermann
37049aab36
lib/nfs/Connection: remove EnableCloseOnExec() call
...
SOCK_CLOEXEC has been added to libnfs version 2, and since we require
at least version 4, we can safely remove this call.
2025-01-29 09:02:05 +01:00
Max Kellermann
18495fbb4e
lib/nfs/meson.build: require libnfs 4.0
...
All Linux distributions have at least version 4, and thus I cannot
test with older versions.
2025-01-29 09:00:37 +01:00
Max Kellermann
cdcee16738
client/File: improve error message
...
Users are confused by "Access denied". Let's write an error message
that is more clear.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2184
2025-01-29 08:28:30 +01:00
Max Kellermann
83c2d9c964
test/meson.build: add another missing dependency on libevent.a
...
Necessary for including Client.hxx.
2025-01-28 19:52:25 +01:00
Max Kellermann
074a041760
test/meson.build: add missing dependencies on libevent.a
2025-01-28 19:47:36 +01:00
Max Kellermann
083d39ea80
decoder/plugins/meson.build: add missing dependency to libid3tag
2025-01-28 19:38:50 +01:00
Max Kellermann
a5da7fd51a
Merge branch 'v0.23.x'
2025-01-28 19:33:19 +01:00
Max Kellermann
cf9a2eb508
.github/workflows/build.yml: disable yajl on macOS
...
This yajl on Homebrew comes with broken headers:
/opt/homebrew/Cellar/yajl/2.1.0/include/yajl/yajl_parse.h:22:10: fatal error: 'yajl/yajl_common.h' file not found
#include <yajl/yajl_common.h>
^~~~~~~~~~~~~~~~~~~~
2025-01-28 19:31:35 +01:00
Max Kellermann
0aeda01ba6
lib/yajl: drop "yajl/" prefix from #include paths
...
According to the yajl API documentation, #include lines should have
the "yajl/" path prefix, but the actual pkg-config file contains:
includedir=${dollar}{prefix}/include/yajl
.. which already contains this directory name, and thus the "yajl/"
prefix cannot work. Unfortunately, the yajl project hasn't been
maintained for nearly 10 years, and there's little chance this bug
will ever be fixed.
2025-01-28 19:27:46 +01:00
Max Kellermann
3798d11a8d
.github/workflows/build.yml: disable NFS support
...
Homebrew comes with libnfs 6 which is not supported by MPD 0.23.
2025-01-28 19:23:36 +01:00
Max Kellermann
fab03f800a
subprojects: remove libmicrohttpd
...
This one will be pulled in by libnpupnp automatically. No need to
have it here.
2025-01-28 19:17:06 +01:00
Max Kellermann
5b5b101c56
subprojects: add id3tag
2025-01-28 19:15:43 +01:00
Max Kellermann
7770accee0
python/build/libs.py: remove libmad (unused)
2025-01-28 19:14:03 +01:00
Max Kellermann
eb3cd7bed3
subprojects: add lame
2025-01-28 19:13:59 +01:00
Max Kellermann
56cc2f4c65
subprojects: add libmpdclient wrap
2025-01-28 19:13:46 +01:00
Max Kellermann
9723af3f35
subprojects: add openssl
2025-01-28 19:13:45 +01:00
Max Kellermann
dcf3cf4216
subprojects: add ogg, flac, opus
2025-01-28 19:13:19 +01:00
Max Kellermann
578c94081f
subprojects: add curl
2025-01-28 19:12:57 +01:00
Max Kellermann
efa8304d2d
subprojects/.gitignore: sort
2025-01-28 19:12:42 +01:00
Max Kellermann
2752f67877
lib/nfs/meson.build: add missing dependency on libevent.a
2025-01-28 19:05:09 +01:00
Max Kellermann
f55e0df614
lib/curl/meson.build: add missing internal dependency on libevent.a
2025-01-28 18:52:37 +01:00
Max Kellermann
177ffde90f
Merge branch 'v0.23.x'
2025-01-28 18:45:02 +01:00
Max Kellermann
0d1fb9a02c
meson.build: build libnpupnp and libmicrohttpd statically as submodules
2025-01-28 18:43:23 +01:00
Max Kellermann
a0a39ae828
.github/workflows/build.yml: update actions/checkout to v4
2025-01-28 18:39:17 +01:00
Max Kellermann
e57c60e3d8
.github/workflows/build.yml: update hendrikmuhs/ccache-action to v1.2
2025-01-28 18:38:59 +01:00
Max Kellermann
53090e3745
.github/workflows/build.yml: update actions/setup-python to v5
2025-01-28 18:37:06 +01:00
Max Kellermann
93eb3da48a
subprojects: add liburing
2025-01-28 18:35:21 +01:00
Max Kellermann
75a3d9340e
python/build/libs.py: update FFmpeg to 7.1
2025-01-28 18:34:29 +01:00
Max Kellermann
9445ea1565
subprojects: add libnpupnp
2025-01-28 18:34:29 +01:00
Max Kellermann
a5a26d304b
subprojects: update sqlite3 to 3.48.0-1
2025-01-28 18:34:29 +01:00
Max Kellermann
1d8d298a22
subprojects: update fmt to 11.1.1-2
2025-01-28 18:34:28 +01:00
Max Kellermann
508bfbe334
pipewire/meson.build: add "include_type:system"
...
This suppresses a compiler warning due to sloppy code in PipeWire:
/usr/include/spa-0.2/spa/utils/json-core.h:440:29: error: implicit conversion increases floating-point precision: 'float' to 'double' [-Werror,-Wdouble-promotion]
440 | return spa_dtoa(str, size, val);
| ~~~~~~~~ ^~~
2025-01-28 18:34:12 +01:00
Max Kellermann
1385212572
io/uring/meson.build: detect liburing with include_type=system
...
This avoids breakages due to `-Wgnu-anonymous-struct`.
2025-01-28 18:34:07 +01:00
Max Kellermann
8dcd6ea2b4
increment version number to 0.23.17
2025-01-28 18:13:07 +01:00
Max Kellermann
75d0914373
Merge branch 'fix-handle-status' of https://github.com/geneticdrift/MPD
2025-01-28 06:18:19 +01:00
Max Kellermann
35dc1fc589
io/UniqueFileDescriptor: use AdoptTag in the constructors that adopt ownership
2025-01-23 16:57:39 +01:00
Max Kellermann
765a6a2f20
net/UniqueSocketDescriptor: use AdoptTag in the constructors that adopt ownership
...
This makes it a little bit harder to use the ownershop-adopting
constructors accidently.
2025-01-23 16:56:57 +01:00
Max Kellermann
131263cbe3
util/TagStructs: add struct AdoptTag
2025-01-23 16:56:00 +01:00
Max Kellermann
936611b47c
util/ShallowCopy: rename header to TagStructs.hxx
...
This new header will be a collection of more structs like ShallowCopy.
2025-01-23 16:55:51 +01:00
gd
266eb393eb
fix: output of command status broken by a misplaced comma in the format arguments
2025-01-21 14:03:41 +02:00
Michael Herstine
194ecd69e0
lib/fmt: remove even more now-broken uses of FMT_STRING
...
MPD stopped building since fmt 11.1.0; see
<https://github.com/fmtlib/fmt/issues/4304 >. The first commit
fixing this was 9db7144 , followed by 5de0909 (both on the
unstable branch).
This commit removes what the author believes to be the remaining
uses in the MPD codebase.
2025-01-20 19:54:41 -08:00
Michael Herstine
b24b3c1054
Merge remote-tracking branch 'upstream/v0.23.x'
2025-01-20 09:44:07 -08:00
Alfred Wingate
5de0909ae5
lib/fmt: remove the rest of the broken use of FMT_STRING
...
Fixes: 9db7144d0f
Signed-off-by: Alfred Wingate <parona@protonmail.com >
2025-01-18 03:29:14 +02:00
Rudi Heitbaum
da6efd6361
plugins/meson.build: revert unintentional static link change
...
Minor revert of 9db7144d0f
- no change was to be done to meson.build.
2025-01-13 22:39:12 +00:00
Rudi Heitbaum
9db7144d0f
lib/fmt: drop use of FMT_STRING
...
When compiling with libfmt-11.1.0 and newer the following compile errors occur:
In file included from ../src/decoder/DecoderPrint.cxx:23:
../src/client/Response.hxx: In instantiation of 'bool Response::Fmt(const S&, Args&& ...) [with S = decoder_plugin_print(Response&, const DecoderPlugin&)::<lambda()>::FMT_COMPILE_STRING; Args = {const char* const&}]':
../src/decoder/DecoderPrint.cxx:38:7: required from here
38 | r.Fmt(FMT_STRING("plugin: {}\n"), plugin.name);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/client/Response.hxx:86:28: error: cannot convert 'const decoder_plugin_print(Response&, const DecoderPlugin&)::<lambda()>::FMT_COMPILE_STRING' to 'fmt::v11::string_view' {aka 'fmt::v11::basic_string_view<char>'}
86 | return VFmt(format_str,
| ~~~~^~~~~~~~~~~~
87 | fmt::make_format_args(args...));
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/client/Response.hxx:81:36: note: initializing argument 1 of 'bool Response::VFmt(fmt::v11::string_view, fmt::v11::format_args)'
81 | bool VFmt(fmt::string_view format_str, fmt::format_args args) noexcept;
| ~~~~~~~~~~~~~~~~~^~~~~~~~~~
../src/client/Response.hxx: In instantiation of 'bool Response::Fmt(const S&, Args&& ...) [with S = decoder_plugin_print(Response&, const DecoderPlugin&)::<lambda()>::FMT_COMPILE_STRING; Args = {const char* const&}]':
The error is due to the use of FMT_STRING. The libfmt team shared the following:
The correct way of using FMT_STRING is to wrap a format string when passing to a
function with compile-time checks (i.e. that takes format_string) as documented
in https://fmt.dev/11.1/api/#legacy-compile-time-checks .
Noting that FMT_STRING is a legacy API and has been superseded by consteval-based
API starting from version 8: https://github.com/fmtlib/fmt/releases/tag/8.0.0 . It
looks like MPD is trying to emulate {fmt}'s old way of implementing compile-time
checks which was never properly documented because it was basically a hack. So the
correct fix is to switch to format_string and, possibly, remove usage of FMT_STRING.
The old way of doing compile-time checks (fmt::make_args_checked) was documented
in https://fmt.dev/7.1/api.html#argument-lists but it looks like MPD is not using
that API so the problematic uses of FMT_STRING have no effect and can just be removed.
The FMT_STRING has been removed in this change based on the fmt-7.1 API and now MPD is
successfully compile against the current libfmt-11.1.0 which highlighted the issue that
had been present in the codebase as it is now triggering the error, is legacy and was
not using the API for which FMT_STRING was aligned with.
2025-01-13 06:17:01 +00:00
jcorporation
bd36b5e310
Response with error for sticker set,inc,dec and add missing asserts
2024-12-12 19:40:06 +01:00
jcorporation
015870ac71
Replace STICKER_SQL_INSERT and STICKER_SQL_UPDATE with STICKER_SQL_SET that lets handle sqlite insertion or update of the sticker value.
2024-12-12 19:15:22 +01:00
Max Kellermann
b1677bf79c
Merge branch 'sticker_inc_dec' of https://github.com/jcorporation/MPD
2024-12-12 08:38:58 +01:00
jcorporation
1078c1c1bf
Add sticker sub-commands inc and dec
...
Let sqlite do the work for incrementing or decrementing a sticker value.
This sub-commands are usefull to track playcounts with sticker values and
saves us one roundtrip.
2024-12-11 21:41:24 +01:00
Max Kellermann
9a8579d956
event/ServerSocket: do not close all listeners before rethrowing
...
If binding one address fails, we don't need to close all listeners.
For fatal errors, this will be done automatically and implicitly; and
for non-fatal errors (e.g. binding to the default port failed, but
there is an XDG listener), this closes the good listeners which are
supposed to be used.
Closes https://github.com/MusicPlayerDaemon/MPD/pull/2157
2024-12-04 14:25:42 +01:00
Max Kellermann
b6e187efd8
Merge tag 'v0.23.16'
...
release v0.23.16
2024-12-03 13:01:15 +01:00
Max Kellermann
b5bd294e5c
release v0.23.16
2024-12-03 12:56:57 +01:00
Max Kellermann
ac60bd47f0
thread/WindowsFuture: add missing include for std::error_category
2024-12-03 12:54:12 +01:00
Max Kellermann
b7248f0333
filter/ffmpeg: fill AVFrame::pts
...
Some libavfilter plugins don't produce any output if `pts` is never
set, e.g. the `lowpass` plugin.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2114
2024-12-03 12:52:15 +01:00
Marius Feraru
8a5b5378e6
db/update/Walk:FindAncestorLoop: uint64_t inode & device
...
Previously, inode numbers were truncated to 32 bits, which could lead
to problems on XFS where inodes are 64 bit; this could lead to bogus
"recursive directory found" errors during database update.
[mk: added commit description and NEWS line]
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2000
2024-12-03 12:49:02 +01:00
Michael Cho
4a49f75799
meson.build: support building with ICU 76
...
ICU 76 decided to reduce overlinking[^1] thus `icu-i18n` will no longer
add `icu-uc` when linking to shared libraries. This results in failure:
```
src/lib/icu/libicu.a.p/Converter.cxx.o: undefined reference to symbol 'ucnv_fromUnicode_76'
```
[^1]: 199bc82702
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2151
2024-12-03 12:47:55 +01:00
Max Kellermann
9d2666f293
subprojects: update sqlite3 to 3.47.1-1
2024-12-03 12:46:33 +01:00
Max Kellermann
e63fcc5982
python/build/libs: update libnfs to 5.0.3
2024-12-03 12:45:05 +01:00
Max Kellermann
4c37c17f2e
python/build/libs.py: update WildMidi to 0.4.6
2024-12-03 12:44:33 +01:00
Max Kellermann
722820a375
python/build/libs: update zlib to 1.3.1
2024-12-03 12:44:14 +01:00
Max Kellermann
688023eb9e
python/build/libs.py: update libopenmpt to 0.7.9
2024-12-03 12:43:34 +01:00
Max Kellermann
5771aeaddd
subprojects: update fmt to 11.0.2-1
2024-12-03 12:42:02 +01:00
Rudi Heitbaum
a42da90042
lib/fmt: support build with libfmt-11.0.0
...
Upstream libfmt commit fmtlib/fmt@d707292
now requires the format function to be const.
Adjust the function prototype so it is const and can compile.
Signed-off-by: Rudi Heitbaum <rudi@heitbaum.com >
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2141
2024-12-03 12:42:02 +01:00
Max Kellermann
d7d32ed6fc
meson.build: suppress -Wnan-infinity-disabled (clang 18) due to libfmt
2024-12-03 12:40:21 +01:00
Max Kellermann
4715acf27e
Log: add missing include for std::back_inserter()
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2071
2024-12-03 12:38:00 +01:00
Max Kellermann
8780db5ee8
increment version number to 0.23.16
2024-12-03 12:34:01 +01:00
Max Kellermann
30d2a31473
command/sticker: remove unreachable code
2024-12-03 12:32:33 +01:00
Max Kellermann
9a7a8ec137
io: always pass O_NONBLOCK to open()
...
Opening a FIFO may block indefinitely (until a writer connects). This
is dangerous because it may be a DoS vulnerability in many programs
that do not expect open() to block.
This obsoletes the method FileDescriptor::OpenNonBlocking() which
wasn't used anyway.
2024-12-03 12:28:17 +01:00
Max Kellermann
88fa68f030
net/SocketDescriptor: add GetPeerPidfd()
2024-12-03 12:27:20 +01:00
borine
78e643150f
output/Source: fix Close()
...
Close the filter before cancelling when closing a source.
Fixes #2148
2024-11-19 10:59:35 +00:00
Max Kellermann
eb1463fd7c
test/util/TestIntrusiveTreeSet: add constant_time_size test
2024-11-13 10:44:28 +01:00
Max Kellermann
6dce8dcaa5
io/FileDescriptor: add readv()/writev() wrappers
2024-11-13 10:44:03 +01:00
Max Kellermann
fc4a579d83
io/FileDescriptor: remove Read()/Write() with void pointers
...
Obsolete and unsafe.
2024-11-13 10:43:34 +01:00
Max Kellermann
263b9916c2
unix/PidFile: pass std::span to FileDescriptor::Read()
2024-11-13 10:43:33 +01:00
Max Kellermann
16604997d6
system/{Event,Signal}FD: pass std::span to FileDescriptor::Read()
2024-11-13 10:43:08 +01:00
Max Kellermann
77226bc0d8
test/ReadFrames: pass std::span to FileDescriptor::Read()
2024-11-13 10:42:35 +01:00
Max Kellermann
7a6672b7ed
util/IntrusiveTreeSet: update the counter, fixing constant_time_size
2024-11-13 10:36:57 +01:00
Max Kellermann
8db14c9cb3
Instance: add method FindOutput()
...
Move code from handle_moveoutput().
2024-11-11 19:08:45 +01:00
Max Kellermann
370df37596
io/uring/Ring: add more API documentation
2024-11-11 19:04:24 +01:00
Max Kellermann
84e3501084
io/uring/Queue: remove redundant include
2024-11-11 19:04:21 +01:00
Max Kellermann
a7d41a99a1
util/ForeignFifoBuffer: pass std::span to constructor
2024-11-11 19:03:31 +01:00
Max Kellermann
c9c5e84119
util/ForeignFifoBuffer: store buffer as std::span
2024-11-11 19:02:58 +01:00
Max Kellermann
8a3b48754e
util/ForeignFifoBuffer: use Read() in MoveBuffer() and Shift()
2024-11-11 19:02:43 +01:00
Max Kellermann
849c4012c0
filter/Filter: add method ReadMore()
...
This allows FilterPCM() to return more data, which some
implementations may need to do (e.g. FFmpeg).
2024-11-08 19:31:16 +01:00
Max Kellermann
d8bb833ba3
output/Source: convert runtime check to assert()
...
Flush() may only be called if the source is open.
2024-11-08 19:09:31 +01:00
Max Kellermann
4d8a2ea688
output/Source: add assert(filter)
2024-11-08 18:50:48 +01:00
Max Kellermann
a7a61e9e41
output/Source: add inline
2024-11-08 18:34:22 +01:00
Max Kellermann
415cf096e9
output/Thread: add another inline
2024-11-08 18:24:48 +01:00
Max Kellermann
7774c3369e
filter/two: check empty() instead of data()==nullptr
...
See bcab29d53a
2024-11-05 22:37:36 +01:00
Max Kellermann
bcab29d53a
filter/Filter: Flush() returns empty span, not nullptr
2024-11-05 13:19:25 +01:00
Max Kellermann
d6195025fb
filter/Filter: clarify Flush() documentation
2024-11-05 13:11:25 +01:00
Max Kellermann
d7ae512b5e
filter/Filter: clarify that the FilterPCM() return value may be empty
...
And adjust TwoFilter accordingly.
2024-11-05 12:35:10 +01:00
Max Kellermann
b7b4c6b4ea
filter/Filter: Flush() also invalidates the returned buffer
...
Just API documentation.
2024-11-05 12:35:09 +01:00
Max Kellermann
f59f17013d
MusicChunk: add method ReadData()
2024-11-05 12:34:35 +01:00
Max Kellermann
4beedec3ad
MusicChunk: add missing include
2024-11-05 12:31:30 +01:00
Max Kellermann
950888d161
output/Source: fix indent
2024-11-05 12:28:41 +01:00
Max Kellermann
76562fc093
test/run_{filter,output}: use fmt
2024-11-05 11:48:37 +01:00
Max Kellermann
0676ab7f47
filter/two: use if with initializer
2024-11-02 22:48:02 +01:00
Max Kellermann
fc5d258890
filter/ffmpeg: fill AVFrame::pts
...
Some libavfilter plugins don't produce any output if `pts` is never
set, e.g. the `lowpass` plugin.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2114
2024-11-02 22:24:53 +01:00
Max Kellermann
7dce7ad32d
Merge branch 'tagtypes_reset' of https://github.com/jcorporation/MPD
2024-11-02 20:58:06 +01:00
Max Kellermann
fa29693550
filter/ffmpeg: implement method Flush()
2024-11-02 20:55:04 +01:00
Pascal Nkornyui
2c881c63ba
doc/plugins.rst: fix spelling
2024-11-02 19:37:13 +00:00
jcorporation
fd7d251358
Add "reset" subcommand to tagtypes.
...
This subcommand combines "clear" and "enable" in one command.
2024-11-01 18:07:06 +01:00
Max Kellermann
acb9ee9792
filter/ffmpeg: move code to ReadOutput()
2024-10-30 22:49:20 +01:00
Max Kellermann
3d99f1d8a6
filter/ffmpeg: use if with initializer
2024-10-30 22:47:21 +01:00
Max Kellermann
2ef36af68d
test/run_filter: add command line parser
2024-10-30 22:17:42 +01:00
Max Kellermann
d7b4634e5e
io/FileLineReader: add missing include
2024-10-30 21:47:37 +01:00
Max Kellermann
2bc57c38d2
meson.build: set cpp_std=c++20
...
Meson supports this since version 0.57.0.
2024-10-30 21:37:49 +01:00
Max Kellermann
744308bfff
python/build/libs.py: update FFmpeg to 7.1
2024-10-30 21:31:17 +01:00
Max Kellermann
7db93fb20b
subprojects: update sqlite3 to 3.47.0-1
2024-10-30 21:29:57 +01:00
Max Kellermann
95db2db736
subprojects: update curl to 8.10.1-1
2024-10-30 21:29:47 +01:00
Max Kellermann
f807345022
event/Loop: use std::chrono::ceil()
...
Thanks to C++17, we don't need our custom implementation anymore.
2024-10-30 21:29:16 +01:00
Max Kellermann
b745d1f226
util/StringCompare: add constexpr
2024-10-30 21:29:16 +01:00
Max Kellermann
52e2130d51
util/StringCompare: simplify StringIsEqual() using operator==
2024-10-30 21:28:15 +01:00
Max Kellermann
1930ed16cb
Merge branch 'icu76-support' of https://github.com/cho-m/MPD
2024-10-27 15:22:04 +01:00
Michael Cho
1a063fee7e
meson.build: support building with ICU 76
...
ICU 76 decided to reduce overlinking[^1] thus `icu-i18n` will no longer
add `icu-uc` when linking to shared libraries. This results in failure:
```
src/lib/icu/libicu.a.p/Converter.cxx.o: undefined reference to symbol 'ucnv_fromUnicode_76'
```
[^1]: 199bc82702
2024-10-27 09:57:22 -04:00
jcorporation
51e0fefda7
Fix order of commands
2024-10-26 11:32:36 +02:00
Max Kellermann
449f8af7d0
Merge branch 'protocol_features' of https://github.com/jcorporation/MPD
2024-10-26 08:18:56 +02:00
Max Kellermann
38b46e680a
Merge branch 'stickernames-types' of https://github.com/jcorporation/MPD
2024-10-26 08:16:53 +02:00
Max Kellermann
17d0cd0abd
Merge branch 'queue_loaded_playlist' of https://github.com/jcorporation/MPD
2024-10-26 08:15:23 +02:00
Max Kellermann
98bc63251e
Merge branch 'searchplaylist_pos' of https://github.com/jcorporation/MPD
2024-10-26 08:14:31 +02:00
Max Kellermann
030bac441f
Merge branch 'playlistlength_fix' of https://github.com/jcorporation/MPD
2024-10-26 08:13:14 +02:00
Max Kellermann
f82a385be2
Merge branch 'tagtypes_available' of https://github.com/jcorporation/MPD
2024-10-26 08:10:07 +02:00
jcorporation
052719c0e4
Fix integer overflow calculating length of very large playlists
2024-10-20 12:12:50 +02:00
jcorporation
bfbff31860
Store last loaded playlist
...
Stores the last loaded playlist uri in the queue struct.
Last loaded playlist is set on load command and cleared with the clear command.
The last loaded playlist is printed in the status command and saved / restored from the partition state file.
Resolves issue #938
2024-10-20 12:03:31 +02:00
jcorporation
b1067333dc
Print positions in the search playlist functions.
2024-10-20 11:55:52 +02:00
jcorporation
35bdf74952
Mention contains and starts_with for "sticker find"
2024-09-28 22:43:20 +02:00
jcorporation
23c2bba483
This commit adds a new protocol command to toggle protocol features
...
for a client connection. It works like the tag_mask and the associated
tagtypes command.
New commands:
- protocol
Shows enabled protocol features.
- protocol available
Show all available protocol features.
- protocol enable {feature...}
Enables protocol features.
- protocol disable {feature...}
Disables protocol features.
- protocol all
Enables all available protocol features.
- protocol clear
Disables all protocol features.
This commit adds also the first protocol feature.
hide_playlists_in_root
Disables the listing of playlists in the root folder
for the lsinfo command.
2024-09-28 22:41:35 +02:00
jcorporation
25e8ce2d37
New command tagtypes available
...
Shows the list of tag types configured by the ``metadata_to_use`` setting.
2024-09-28 22:40:29 +02:00
Max Kellermann
124c0e66ee
subprojects: update libnpupnp to 6.2.0-1, libmicrohttpd to 0.9.77-3
2024-09-27 08:53:01 +02:00
Max Kellermann
202bb4f90f
subprojects: update fmt to 11.0.2-1
2024-09-27 08:52:22 +02:00
Max Kellermann
5ee42ada67
subprojects: update curl to 8.10.0-1
2024-09-27 08:52:10 +02:00
Max Kellermann
752c6c1f03
lib/fmt/ExceptionFormatter: move the exception_ptr
2024-09-27 08:48:30 +02:00
Max Kellermann
def2221dfd
Merge branch 'searchplaylist_syntax' of https://github.com/jcorporation/MPD
2024-09-27 08:47:02 +02:00
Max Kellermann
9ff8e02e54
net/Resolver: use StringIsEqual()
2024-09-04 17:26:45 +02:00
Max Kellermann
32dd9704ce
util/DeleteDisposer: add const and noexcept
2024-09-04 17:24:42 +02:00
Max Kellermann
523519182a
util/IntrusiveHashSet: add concept checks
2024-09-04 17:24:24 +02:00
jcorporation
3f718e8924
Change the semantic of the searchplaylist protocol command
...
Old: searchplaylist {NAME} {FILTER} [{START:END}]
New: searchplaylist {NAME} {FILTER} [window {START:END}]
This is more similar to the other search commands and we can reuse search specific functions in libmpdclient.
2024-08-30 21:06:50 +02:00
jcorporation
26c4211cd4
New command stickernamestypes
...
Lists sticker names with their types and optionally filters by type
2024-08-30 20:14:55 +02:00
Max Kellermann
a3a07280e8
Merge branch 'mpd-2100-nested-and' of https://github.com/m7a/mpd
2024-08-30 12:57:20 +02:00
Max Kellermann
ed755f04e9
lib/fmt/meson.build: suppress -Warray-bounds with GCC 14
...
The bug is still present in GCC 14.
2024-08-30 12:48:41 +02:00
Max Kellermann
2809db8b40
Merge branch 'searchplaylist' of https://github.com/jcorporation/MPD
2024-08-30 12:47:24 +02:00
Max Kellermann
c866199d4c
net/SocketError: cast to socket_error_t to fix -Wsign-compare
...
Only relevant on Windows where socket_error_t is a `DWORD` (unsigned).
2024-08-30 12:45:10 +02:00
Max Kellermann
39937be2e1
Merge branch 'stickertypes' of https://github.com/jcorporation/MPD
2024-08-30 12:43:54 +02:00
Max Kellermann
d207c144d6
lib/curl/Multi: remove the Wait() overload with "int" timeout
...
Enforce type-safety.
2024-08-30 12:30:18 +02:00
Max Kellermann
435f1eb6cc
lib/curl/Multi: remove default timeout value
...
-1 is an illegal value and leads to CURLM_BAD_FUNCTION_ARGUMENT. Our
API shouldn't imply this value.
2024-08-30 12:30:15 +02:00
Max Kellermann
c7b80b0828
io/FileDescriptor: add method WriteAt()
2024-08-30 12:29:32 +02:00
Max Kellermann
59199b5620
io/FileDescriptor: pass std::span to ReadAt()
2024-08-30 12:29:27 +02:00
Max Kellermann
ebfc83dac5
io/FileDescriptor: add method SetPipeCapacity()
2024-08-30 12:28:51 +02:00
Max Kellermann
f535ccf9bf
net/UniqueSocketDescriptor: add UniqueFileDescriptor constructor
2024-08-30 12:28:19 +02:00
Max Kellermann
75eb2c257c
net/SocketError: add IsSocketError() overload with socket_error_t
2024-08-30 12:27:19 +02:00
Max Kellermann
314667259e
net/SocketDescriptor: add Duplicate() method
...
The the Duplicate() method we inherited from class FileDescriptor
returns a UniqueFileDescriptor, but we really want to return a
UniqueSocketDescriptor.
2024-08-30 12:27:13 +02:00
Max Kellermann
dbb2b29271
net/IPv6Address: add method GetPortBE()
2024-08-30 12:24:12 +02:00
Max Kellermann
7f25ede888
net/AddressInfo: add method Cast()
2024-08-30 12:23:45 +02:00
Max Kellermann
4a2fff019a
util/DisposablePointer: suppress -Wuninitialized
...
I pretend to know what I'm doing :-)
2024-08-30 12:23:45 +02:00
Max Kellermann
fae5d16d43
subprojects: update curl to 8.9.1-1
2024-08-30 12:23:41 +02:00
Max Kellermann
7bc2259b35
subprojects: update sqlite3 to 3.46.1-1
2024-08-30 12:23:27 +02:00
Max Kellermann
f66aed921c
python/build/libs: update FFmpeg to 7.0.2
2024-08-30 12:22:37 +02:00
Linux-Fan, Ma_Sys.ma
6db4b818e6
song/Filter: Fix spacing error on nested AND
...
Previously, `AND` expressions were the only filters which used `++s` instead
of `s = StripLeft(s + 1)` making them sensitive to spacing issues. This caused
nested AND expressions (like e.g. `(((A) AND (B)) AND (C))`) to needlessly be
rejected with the following error message: `{find} Word expected` due to the
fact that the inner AND expression would leave the cursor `s` at a space rather
than the beginning of the next word (remainder was ` AND (C))` rather than
`AND (C)`).
This commit fixes this by consistently using `s = StripLeft(s + 1)` instead
of `++s` when parsing AND expressions. Although it is not strictly necessary
to resolve the AND nesting bug, the case of trivial AND expressions (consisting
basically of only superfluous parentheses) is also changed to the new handling.
This should be more robust although I expect that case to be even less common
than the direct nesting of AND expressions.
see MusicPlayerDaemon/MPD#2100
2024-08-23 21:36:53 +02:00
jcorporation
f94caa96b8
Add command stickertypes
...
Prints all available stickertypes like tagtypes for tags.
2024-08-14 21:07:14 +02:00
Max Kellermann
965c466e9b
Merge branch 'mpg-duration-fix' of https://github.com/boedy/MPD
2024-08-10 16:54:48 +02:00
boedy
731f20111a
Override the value for file size in bytes. Useful for getting sensible track length values in feed mode or for HTTP streams.
...
https://www.mpg123.de/api/group__mpg123__status.shtml#gad0301e80dbc3f48e47e27d39cd328755
2024-08-08 18:43:15 +02:00
jcorporation
d62f7cdc34
New command searchplaylist
2024-08-02 23:46:17 +02:00
Max Kellermann
f7790430a0
lib/curl/Multi: add SetSocketFunction(), SetTimerFunction()
2024-07-31 10:06:29 +02:00
Max Kellermann
959826d1d1
input/ffmpeg: offload FFmpeg calls to thread
...
Prepare for interruptible I/O.
2024-07-30 12:43:05 +02:00
Max Kellermann
ec30716e01
input/thread: implement size and seek
2024-07-30 12:33:44 +02:00
Max Kellermann
dc51015c75
input/mms: move MMS_BUFFER_SIZE into the class
2024-07-30 12:33:30 +02:00
Max Kellermann
72b0eeb7b1
input/mms: invoke Start() in constructor
2024-07-30 12:31:58 +02:00
Max Kellermann
b050e0132e
input/{async,thread}: add an additional Cond field
...
This eliminates the ScopeExchangeInputStreamHandler kludge.
2024-07-29 23:17:33 +02:00
Max Kellermann
cf962d94c7
input/thread: remove bogus inline
2024-07-29 23:14:16 +02:00
Max Kellermann
c29d23b4c3
input/thread: use notify_one() instead of notify_all()
...
There's only ever one waiter, and notify_one() may be faster than
notify_all().
2024-07-29 23:09:07 +02:00
Max Kellermann
61e8df913d
input/thread: check IsEOF() in IsAvailable()
2024-07-29 23:05:00 +02:00
Max Kellermann
4a55e3e8bd
input/thread: check buffer.empty() in IsEOF()
2024-07-29 23:03:00 +02:00
Max Kellermann
2e78bd430c
input/thread: use pass std::span<std::byte> to ThreadRead()
2024-07-29 22:32:52 +02:00
Max Kellermann
dbaa72cb40
util/CircularBuffer: use std::span internally
2024-07-29 22:24:54 +02:00
Max Kellermann
596d2d93dd
util/CircularBuffer: use using instead of typedef
2024-07-29 22:21:38 +02:00
Max Kellermann
10311b3a65
util/CircularBuffer: explicitly forbid the copy operator
2024-07-29 22:20:15 +02:00
Max Kellermann
332ba42073
util/HugeAllocator: add std::span cast operator
2024-07-29 22:20:12 +02:00
Max Kellermann
4262d29965
util/HugeAllocator: add constexpr
2024-07-29 22:19:28 +02:00
Max Kellermann
0899d80ae0
util/CircularBuffer: add noexcept and constexpr
2024-07-29 22:14:59 +02:00
Max Kellermann
9fe6493fc2
util/CircularBuffer: use inline initializer
2024-07-29 22:13:50 +02:00
Max Kellermann
902cb8efac
input/thread: use std::byte instead of uint8_t
2024-07-29 22:13:50 +02:00
Max Kellermann
f54210bf68
input/async: move enum definition down
2024-07-29 22:13:42 +02:00
Max Kellermann
fb151c8662
lib/fmt/meson.build: suppress -Warray-bounds with GCC 13
2024-07-29 22:13:11 +02:00
Max Kellermann
323517753d
lib/fmt/meson.build: remove obsolete clang 14 workaround
...
Android NDK r27 has clang 18 and I don't feel like supporting clang 14.
2024-07-29 22:11:20 +02:00
Max Kellermann
5726d9f06a
mixer/Memento: include cleanup
2024-07-29 17:04:53 +02:00
Max Kellermann
0992fab1c8
filter/ReplayGain: include cleanup
2024-07-29 17:04:30 +02:00
Max Kellermann
b546ddc54c
client/Idle: include cleanup
2024-07-29 17:03:59 +02:00
Max Kellermann
d45b7cc972
IdleFlags: move to procool/
2024-07-29 17:02:33 +02:00
Max Kellermann
12eaaef210
output/Thread: allow Delay() to return duration::max()
...
Eliminate the periodic wakeups while paused in some output plugins.
2024-07-29 16:52:36 +02:00
Max Kellermann
5b8ef9a62b
python/build/__init__.py: add missing file
2024-07-29 16:51:40 +02:00
Max Kellermann
196258ea13
.github/workflows/build_android.yml: update NDK to r27
2024-07-29 16:38:26 +02:00
Max Kellermann
0a035f3ce0
output/alsa: add option "close_on_pause"
...
This allows keeping the ALSA PCM open even if playback is paused. As
a side effect, this allows using the "always_on" option with ALSA
outputs, because "always_on" pauses the output.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1623
2024-07-29 16:31:09 +02:00
Max Kellermann
7ab789fbaf
doc/user.rst: add clarification to the "always_on" option
2024-07-29 16:30:15 +02:00
Max Kellermann
9c8f4aaf99
lib/alsa/meson.build: require libasound 1.2 or later
...
This allows us to drop the 1.1.4 snd_pcm_drain() bug workaround (added
by commit f85d4d28d1 ).
2024-07-29 15:42:46 +02:00
Max Kellermann
3bef4f839a
output/alsa: fix coding style
2024-07-29 15:40:52 +02:00
Max Kellermann
1dfda3a5e1
output/alsa: reorder fields to improve packing
2024-07-29 15:38:02 +02:00
Max Kellermann
9d9c4045e2
output/alsa: move redundant code to UnregisterSockets()
2024-07-29 15:28:58 +02:00
Max Kellermann
d466deedad
output/alsa: fix lambda indent
2024-07-29 15:28:27 +02:00
Max Kellermann
bbbbf5f4bd
event/MultiSocketMonitor: reschedule epoll/EPERM workaround forever
...
Fixes a regression by commit 3558317dc9 which caused the ALSA null
plugin to cease to work because the workaround timer was never rescheduled.
2024-07-25 20:16:53 +02:00
Max Kellermann
f030b22bec
player/thread: wait for the first chunk in CheckCrossFade()
...
This fixes MixRamp problems which occur because CheckCrossFade() is
called before the decoder has parsed MixRamp tags after
DecoderClient::Ready().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2084
2024-07-25 20:07:52 +02:00
Max Kellermann
a693052f2c
Merge branch 'feat/showmovement' of https://github.com/mayanez/MPD
2024-07-25 14:01:19 +02:00
Miguel A. Arroyo
e3809bd4f0
feat: Add ShowMovement Tag
...
This commit adds the `SHOWMOVEMENT` [tag](https://picard-docs.musicbrainz.org/en/appendices/tag_mapping.html#show-work-movement-4 ). Historically, this tag originates from iTunes' MP4, but has since become widely used. It is created by Picard's Classical music [plugins](https://picard-docs.musicbrainz.org/en/variables/variables_classical.html ) (such as "Classical Extras" or "Work & Movement").
The reasoning behind this tag is to display Work & Movement titles without redundant information and in a more uniform way. Moreover, it additionally serves as an implicit marker denoting classical music tracks (genre tags aren't sufficient).
If the client so chooses to support this tag, they can display `Work` and `Movement` instead of the track title allowing for cleaner display. Other clients can continue to display the `%title%` as before without any fuss.
2024-07-23 21:09:31 -07:00
Max Kellermann
41cc695848
Instance: fix io/rtio thread mixup
...
Fixes regression by commit 43d633f560
2024-07-23 15:12:30 +02:00
Max Kellermann
3558317dc9
event/MultiSocketMonitor: remove force-refresh on every iteration
...
libasound guarantees that the file descriptors never change for a
"prepared" PCM device, thus we can omit this defensive kludge.
2024-07-23 15:08:55 +02:00
Max Kellermann
18cb34825d
input/alsa: use libfmt instead of std::string concatenation
2024-07-23 15:04:49 +02:00
Max Kellermann
4c4a3c8664
event/TimerList: use FineTimerEvent::GetDue()
...
Avoid accessing the private field from an inner class of the friend
class, because some compilers apparently don't like it (Apple clang).
2024-07-23 13:38:05 +02:00
Max Kellermann
b4374ddb35
python/build/libs.py: update libopenmpt to 0.7.9
2024-07-23 13:08:04 +02:00
Max Kellermann
d24e7763f6
net/AddressInfo: remove unnecessary operator!=()
...
The compiler must generate this implicitly from operator==().
2024-07-23 13:05:19 +02:00
Max Kellermann
49ad4e9f3c
io/FileDescriptor: remove unnecessary operator!=()
...
The compiler must generate this implicitly from operator==().
2024-07-23 13:05:02 +02:00
Max Kellermann
ea96b321dc
net/SocketAdddress: remove unnecessary operator!=()
...
The compiler must generate this implicitly from operator==().
2024-07-23 13:04:48 +02:00
Max Kellermann
bc758cece0
util/StringPointer: remove unnecessary operator!=()
...
The compiler must generate this implicitly from operator==().
2024-07-23 13:04:37 +02:00
Max Kellermann
0e4885c1fa
util/IterableSplitString: remove unnecessary operator!=()
...
The compiler must generate this implicitly from operator==().
2024-07-23 13:04:30 +02:00
Max Kellermann
9944c97203
util/AllocatedString: remove unnecessary operator!=()
...
The compiler must generate this implicitly from operator==().
2024-07-23 13:04:20 +02:00
Max Kellermann
58a5550439
util/AllocatedArray: remove unnecessary operator!=()
...
The compiler must generate this implicitly from operator==().
2024-07-23 13:04:10 +02:00
Max Kellermann
8e42467bd2
decoder/mpg123: relax mpg123_length() check in Scan()
...
Do not fail the Scan() function completely if libmpg123 cannot
determine the duration.
2024-07-12 16:11:08 +02:00
Max Kellermann
e00e7802c8
decoder/mpg123: report unknown duration if mpg123_length()<0
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2058
2024-07-12 16:09:35 +02:00
Max Kellermann
55d0bbade2
decoder/mpg123: move code to GetDuration()
2024-07-12 16:08:11 +02:00
Max Kellermann
de9f0dc910
playlist/Plugin: convert _init() and _finish() to methods
2024-07-12 16:00:42 +02:00
Max Kellermann
cf5970a6e1
output/Registry: replace output_plugins_for_each() with a container class
2024-07-12 15:55:01 +02:00
Max Kellermann
29747a213f
playlist/Registry: replace playlist_plugins_for_each() with a container class
2024-07-12 15:52:05 +02:00
Max Kellermann
c64b4838dc
encoder/List: replace encoder_plugins_for_each() with a container class
2024-07-12 14:59:18 +02:00
Max Kellermann
040c4a8560
archive/ArchiveList: replace archive_plugins_for_each() with a container class
2024-07-12 09:58:19 +02:00
Max Kellermann
90dfa437e0
lib/alsa/NonBlock: use a persistent pollfd array
...
This implements the semantic API change introduced by commit
cd04da2bcf
2024-07-11 21:47:15 +02:00
Max Kellermann
4486b2eded
lib/alsa/NonBlock: add common base class
2024-07-11 21:38:45 +02:00
Max Kellermann
3db8a4f41b
lib/alsa/NonBlock: embed in "namespace Alsa"
2024-07-11 21:33:03 +02:00
Max Kellermann
9704cf3dcb
lib/alsa/NonBlock: fix lambda indent
2024-07-11 21:12:18 +02:00
Max Kellermann
9aa6b03ba8
event/MultiSocketMonitor: pass std::span to ReplaceSocketList()
2024-07-11 21:09:27 +02:00
Max Kellermann
45f92f0ef0
event/MultiSocketMonitor: fix lambda indent
2024-07-11 21:06:33 +02:00
Max Kellermann
23a3278b4e
event/MultiSocketMonitor: make ctor protected and explicit
2024-07-11 21:05:11 +02:00
Max Kellermann
951f916440
mixer/alsa: add noexcept
2024-07-11 21:03:41 +02:00
Max Kellermann
fb87e19bae
input/Registry: replace the input_plugins_for_each macros with a container class
2024-07-11 20:52:44 +02:00
Max Kellermann
49edb16de0
decoder/Thread: add enum DecodeResult, log better diagnostics
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2076
2024-07-11 16:47:43 +02:00
Max Kellermann
8671896e4c
decoder/Thread: throw StopDecoder if command==STOP in decoder_run_stream()
...
Everybody else is doing that, so let's do the same and not pretend
playback was successful.
2024-07-11 16:28:57 +02:00
Max Kellermann
c2470ebd9c
decoder/List: eliminate decoder_plugins_try()
...
Migrate callers to GetEnabledDecoderPlugins(). By not using lambdas,
we can switch to enums as return value for better diagnostics.
2024-07-11 16:15:38 +02:00
Max Kellermann
a27fb71c4c
decoder/List: add iterable container for decoder plugins
2024-07-11 15:30:31 +02:00
Max Kellermann
f6a687dc2b
util/FilteredContainer: new class
2024-07-11 15:30:30 +02:00
Max Kellermann
9210705598
util/TerminatedArray: new class
2024-07-11 15:30:30 +02:00
Max Kellermann
3d995bba5f
util/DereferenceIterator: add class DereferenceContainerAdapter
2024-07-11 14:55:35 +02:00
Max Kellermann
c77f5095d6
util/DereferenceIterator: allow comparing with sentinel end iterators
2024-07-11 14:55:35 +02:00
Max Kellermann
3701378449
util/DereferenceIterator: fix operator- and operator+ return types
2024-07-11 14:29:10 +02:00
Max Kellermann
cb9f3c1a5b
util/DereferenceIterator: optimize and simplify increment/decrement operators
2024-07-11 14:27:23 +02:00
Max Kellermann
fe66cde616
util/DereferenceIterator: add constexpr
2024-07-10 20:13:24 +02:00
Max Kellermann
0cc9ef0aee
util/DereferenceIterator: remove unnecessary operator!=()
...
The compiler must generate this implicitly from operator==().
2024-07-10 20:13:19 +02:00
Max Kellermann
68a424d9e1
util/DereferenceIterator: add missing const
2024-07-10 20:11:55 +02:00
Max Kellermann
13576b8a2e
lib/curl/Easy: use pass std::chrono::duration to SetTimeout()
2024-07-10 16:58:16 +02:00
Max Kellermann
7c21d57953
config/Block: add method GetDuration()
2024-07-10 16:58:16 +02:00
Max Kellermann
1e9e182a32
config/Data: merge the two duration parser methods, pass minimum value
2024-07-10 16:49:18 +02:00
Max Kellermann
3733bc57b7
config/{Block,Data,Param}: add concept checks to With()
2024-07-10 16:38:08 +02:00
Max Kellermann
a196d1ddf2
decoder/Thread, ...: quote log strings
2024-07-10 15:40:04 +02:00
Max Kellermann
8861279add
Merge branch 'explicit_case_sensitivity' of https://github.com/geneticdrift/MPD
2024-07-10 15:33:47 +02:00
Max Kellermann
f2f6dc5897
subprojects: update fmt to 11.0.1
2024-07-10 09:32:11 +02:00
Max Kellermann
00c4abfd2e
Merge branch 'opus' of https://github.com/neheb/MPD
2024-07-10 09:27:16 +02:00
Rosen Penev
2d1feb78b5
subprojects: opus: update to 1.5.2
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-07-09 15:04:43 -07:00
Rosen Penev
266deaaef1
subprojects: libnpupnp: update to 6.1.3
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-07-09 14:48:37 -07:00
gd
d2382e8de9
ParseStringFilter: when failed to parse the operator, indicate the unknown operator in the error message
2024-07-09 17:25:45 +03:00
gd
c39d8e5813
Added explicitly case sensitive/insensitive filter operators.
...
The default case sensitivity is hard coded for each command.
These operators allow to override the this default case sensitivity.
2024-07-09 17:25:45 +03:00
Max Kellermann
bd59c889f3
util/StringVerify: new library
2024-07-08 16:02:40 +02:00
Max Kellermann
553c2e9e2b
output/Command: trigger IDLE_OUTPUT only for the current partition
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1622
2024-07-08 15:54:14 +02:00
Max Kellermann
bdc5602244
meson.build: update the required GCC/clang versions
2024-07-08 15:44:45 +02:00
Max Kellermann
3229da48e3
tag/Mask: pass 64 bit integer to constructor, prevent truncation
...
Commit f49d4ef4ad changed the bit mask size to 64 bit, but I forgot
to change the constructor as well.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2057
2024-07-08 15:34:27 +02:00
Max Kellermann
e380ae90eb
Log: add missing include for std::back_inserter()
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2071
2024-07-07 10:10:27 +02:00
Max Kellermann
8d15e0fed3
Merge branch 'meson' of https://github.com/leigh123linux/MPD
2024-07-06 13:43:28 +02:00
Leigh Scott
b459fd3910
Fix bin install location on linux.
...
For Linux, Meson's default value for bindir is 'bin' [1].
This commit restores mpd's previous functionality of installation in ${prefix}/bin.
[1] https://mesonbuild.com/Builtin-options.html
Fixes https://github.com/MusicPlayerDaemon/MPD/issues/2043
2024-07-06 09:43:01 +01:00
Max Kellermann
8790f2469c
lib/fmt/SocketAddressFormatter: switch to the new net/FormatAddress library
2024-07-05 18:39:10 +02:00
Max Kellermann
d3ef4ab234
net/FormatAddress: new library to replace ToString.cxx
...
This library writes to a caller-specified buffer instead of
allocating a std::string which can be faster by avoiding heap
allocations.
2024-07-05 18:38:17 +02:00
Max Kellermann
fcddab84c6
subprojects: add libnpupnp/GCC14 fix
2024-07-05 18:26:51 +02:00
Max Kellermann
28c030c0f0
lib/fmt/SocketAddressFormatter: add const for fmt 11 support
...
See d70729215f
2024-07-05 18:21:38 +02:00
Max Kellermann
175103e8d4
lib/fmt/ExceptionFormatter: un-inline to reduce header dependencies
2024-07-05 18:20:31 +02:00
Max Kellermann
3f638eeed6
lib/fmt/SocketAddressFormatter: un-inline to reduce header dependencies
2024-07-05 18:20:31 +02:00
Max Kellermann
df2be0a75f
Log: add missing include for GetFullMessage()
2024-07-05 18:20:31 +02:00
Max Kellermann
608c2a8c93
.github/workflows/build.yml: add clang build
...
Due to linker failures, we need to build our own libfmt and
googletest.
2024-07-05 18:05:56 +02:00
Max Kellermann
2d918bf2c9
.github/workflows/build.yml: add matrix.packages
2024-07-05 17:50:46 +02:00
Max Kellermann
0bd1289371
.github/workflows/build.yml: remove the forced fallback for libfmt
...
Ubuntu 24.04 has fmt 9.1.0, so we don't need that anymore.
2024-07-05 17:50:44 +02:00
Max Kellermann
b2e2d36d79
.github/workflows/build.yml: add Meson option "--wrap-mode nofallback"
...
The library setup should be well-defined without implicit downloads.
2024-07-05 17:43:39 +02:00
Max Kellermann
11bb2ad0fd
.github/workflows/build_android.yml: update NDK to 27rc1
2024-07-05 17:35:54 +02:00
Max Kellermann
f37b699349
.github/workflows/build_android.yml: switch to Ubuntu 24.04 as well
...
Since 24.04 comes with Meson 1.3.2, we can install it with "apt-get"
instead of "pip".
2024-07-05 17:29:37 +02:00
Max Kellermann
044280c538
meson.build: require Meson 1.0
...
Debian Bookworm (the current stable) has 1.0.1 and Ubuntu LTS 24.04
has 1.3.2. It's acceptable to require at least version 1.0 now.
2024-07-05 17:23:52 +02:00
Max Kellermann
473fb4e19f
.github/workflows/build.yml: update GCC 11 build to GCC 14
...
We only need the oldest supported compiler (i.e. GCC 10) and the
newest one available in the runner (i.e. GCC 14).
2024-07-05 17:21:31 +02:00
Max Kellermann
404e1c3912
.github/workflows/build.yml: update ubuntu-22.04 to ubuntu-24.04
2024-07-05 17:12:34 +02:00
Max Kellermann
3648475f87
Merge branch 'libfmt' of https://github.com/heitbaum/MPD
2024-07-05 16:47:04 +02:00
Rudi Heitbaum
1402869715
lib/fmt: support build with libfmt-11.0.0
...
Upstream libfmt commit fmtlib/fmt@d707292
now requires the format function to be const.
Adjust the function prototype so it is const and can compile.
Signed-off-by: Rudi Heitbaum <rudi@heitbaum.com >
2024-07-05 14:33:07 +00:00
Max Kellermann
a64ea486e8
Merge branch 'albumart_doc' of https://github.com/jcorporation/MPD
2024-07-05 16:27:47 +02:00
Max Kellermann
ffa917e9b5
Merge branch 'stickernames_cmd' of https://github.com/jcorporation/MPD
2024-07-05 16:26:58 +02:00
Max Kellermann
ac1265b9cc
output/alsa: set up the ALSA channel map
...
This is necessary for proper multi-channel support because many ALSA
drivers do not use the channel maps from surround*.conf.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2063
2024-06-27 21:52:38 +02:00
Max Kellermann
2ce8310448
time/Convert: forward-declare struct tm
2024-06-25 20:33:13 +02:00
Max Kellermann
a739eefb01
lib/zlib/Error: derive from std::system_error
2024-06-25 20:32:33 +02:00
Max Kellermann
432bfa15f4
net/SocketError: move check to IsSocketError()
2024-06-25 20:29:27 +02:00
Max Kellermann
7b938b4d14
util/Exception: sanitize message strings
...
This should prevent leaking unsanitized strings from libraries.
2024-06-25 20:29:07 +02:00
Max Kellermann
abb23ba894
event/EpollEvents: add mapping for EPOLLPRI
2024-06-25 20:28:34 +02:00
Max Kellermann
cd64f9c422
subprojects: update curl to 8.8.0-1
2024-06-25 20:08:45 +02:00
Max Kellermann
c65d0cefc1
subprojects: update sqlite3 to 3.46.0-1
2024-06-25 20:08:45 +02:00
Max Kellermann
799e89af9e
python/build/libs.py: update FFmpeg to 7.0.1
2024-06-25 20:08:00 +02:00
Max Kellermann
381215fd73
*: use std::scoped_lock with implicit template parameter
2024-05-23 20:54:49 +02:00
Max Kellermann
4fc3230fe6
event/Loop: use std::scoped_lock with implicit template parameter
2024-05-23 20:44:12 +02:00
Max Kellermann
64bdaa46fb
lib/curl/Init: use std::scoped_lock with implicit template parameter
2024-05-23 20:44:12 +02:00
Max Kellermann
6e16eaebba
lib/fmt/SystemError: include <array> only on Windows
2024-05-23 20:31:56 +02:00
Max Kellermann
a67f7f88e4
util/MimeType: add missing include
2024-05-23 20:31:10 +02:00
Max Kellermann
ec8f467585
util/Intrusive*: add IWYU pragmas
2024-05-23 20:30:50 +02:00
Max Kellermann
9e3a66d5bf
util/djb_hash: make inline and constexpr
...
Allows calculating hashes at compile time.
2024-05-23 20:30:17 +02:00
Max Kellermann
c7409d1e04
util/AllocatedString: add missing include
2024-05-23 20:22:44 +02:00
Max Kellermann
b64d01677b
storage/nfs: optimize OpenFile()
2024-05-17 13:39:42 +02:00
Max Kellermann
9e8128ecb5
lib/nfs/FileReader: convert path to std::string
2024-05-17 12:54:08 +02:00
Max Kellermann
131dcce0a1
playlist/Mapper: use Storage::OpenFile()
2024-05-17 12:54:08 +02:00
Max Kellermann
6dfdd8c1c2
db/update/Walk: use Storage::OpenFile()
2024-05-17 12:54:08 +02:00
Max Kellermann
1b6c279850
db/update/Paylist: use Storage::OpenFile()
2024-05-17 12:54:08 +02:00
Max Kellermann
81c778a529
SongUpdate: use Storage::OpenFile()
2024-05-17 12:54:08 +02:00
Max Kellermann
f578a1cb2b
storage/Interface: add virtual method OpenFile()
...
This should replace most InputStream::Open() calls because it is a
chance to reuse existing resources (e.g. the NFS connection). No such
optimization is implemented, currently (and the method is not yet used
by anybody).
2024-05-17 12:54:08 +02:00
Max Kellermann
2576e66a55
input/nfs: cancel the pending read operation on seek
2024-05-17 12:54:08 +02:00
Max Kellermann
58e3b830e9
lib/nfs/FileReader: clear the read_buffer in CancelRead()
...
Fixes assertion failure with libnfs 6.
2024-05-17 12:53:35 +02:00
Max Kellermann
1d35031024
lib/nfs/Connection: merge CancelAndClose() into Cancel()
2024-05-17 12:53:30 +02:00
Max Kellermann
96b61755da
lib/nfs/FileReader: fix doc typo
2024-05-15 21:31:30 +02:00
Max Kellermann
9f174c56ce
playlist/Mapper: postpone the stored playlist error
...
Fixes another regression by commit
f53cd44c7a - an exception thrown by
playlist_open_in_playlist_dir() would skip over
playlist_open_in_storage().
2024-05-15 21:08:46 +02:00
Max Kellermann
c8be9662bb
playlist/Print: add missing exception handler
...
This went missing in commit f53cd44c7a
2024-05-15 20:53:55 +02:00
Max Kellermann
f53cd44c7a
playlist/{Stream,Mapper,Any}: propagate exceptions, do not catch&log them
...
Let the caller handle all the exceptions.
2024-05-15 20:19:57 +02:00
Max Kellermann
9303764a83
playlist/Print: throw PlaylistError::NoSuchList instead of returning false
2024-05-15 20:19:09 +02:00
Max Kellermann
a5456a89dc
playlist/Length: throw PlaylistError::NoSuchList instead of returning false
2024-05-15 20:15:16 +02:00
Max Kellermann
c974fc664c
playlist/Plugin: add noexcept
2024-05-15 20:02:12 +02:00
Max Kellermann
eceead671e
playlist/Stream: add API documentation
2024-05-15 19:59:57 +02:00
Max Kellermann
4e7b554605
TagAny, playlist/Mapper: use if with initializer
2024-05-15 15:02:59 +02:00
Max Kellermann
a701da6386
db/update/InotifyUpdate: use OpenLocalInputStream()
2024-05-15 14:48:32 +02:00
Max Kellermann
1f47fe47c7
input/Open: move code to WaitReady()
2024-05-15 14:39:40 +02:00
Max Kellermann
5dd07ac040
test/run_storage: use the OptionParser class for command-line options
...
Introducing the option "--verbose".
2024-05-15 14:11:25 +02:00
Max Kellermann
ca8a2aeb7b
test/run_storage: print a combined usage text for all commands
2024-05-15 11:17:30 +02:00
Max Kellermann
57fad1d4b2
test/run_storage: move initialization to class GlobalInit
2024-05-15 10:15:12 +02:00
Max Kellermann
5c2720a931
.github/workflows/build.yml: drop MINGW32 build
...
The MINGW32 build has been failing for a while because the MSYS2
repository has dropped MINGW32 versions of various packages in commit
6866be94df
I suppose nobody really uses 32 bit anymore. I'd like to have a 32
bit test of MPD, just to verify code correctness, but on the other
hand, I don't like solving problems like this MSYS2 packaging problem.
2024-05-15 06:20:57 +02:00
Max Kellermann
31e583e9f8
lib/nfs: initial support for libnfs API 2
...
Commit
5e8f7ce273
introduced the libnfs API version 2 which may eventually become libnfs
version 6.
This version detection depends on my pull request
https://github.com/sahlberg/libnfs/pull/468
2024-05-15 06:01:42 +02:00
Max Kellermann
0ac24e5a24
lib/nfs/FileReader: move code to ReadCallback()
2024-05-15 06:00:37 +02:00
Max Kellermann
98f53b6d3d
lib/nfs/Connection: add DisposablePointer parameter to CancelAndClose()
...
Just in case somebody needs to free a buffer after the NFS
cancellation has completed.
2024-05-15 06:00:35 +02:00
Max Kellermann
f5092cb73d
util/DisposablePointer: new class
2024-05-15 05:58:23 +02:00
Max Kellermann
48d3bd1cca
lib/nfs/Connection: add API documentation
2024-05-14 19:57:50 +02:00
Max Kellermann
5cffd4f673
lib/nfs/Connection: remove EnableCloseOnExec() call
...
SOCK_CLOEXEC has been added to libnfs version 2, and since we require
at least version 4, we can safely remove this call.
2024-05-14 19:51:52 +02:00
Max Kellermann
416f65fe01
util/RoundPowerOfTwo: new library
2024-05-13 20:25:57 +02:00
Max Kellermann
64c291ba78
lib/nfs/Connection: suppress bogus clang warning
...
We do need to capture "this" because we use "this->active_leases", but
clang 18 is too dumb to understand this.
2024-05-13 18:30:05 +02:00
Max Kellermann
dcde2a0bae
lib/nfs/Connection: fix -Wunused-lambda-capture
2024-05-13 18:27:38 +02:00
Max Kellermann
f0ac0c19b7
lib/nfs/Connection: remove obsolete debug field "in_destroy"
...
This is obsolete because PrepareDestroyContext() no longer calls
nfs_destroy_context().
2024-05-13 16:53:18 +02:00
Max Kellermann
ba1b8533a5
lib/nfs/Connection: fix assertion failure on mount timeout
...
When nfs_destroy_context() is called while nfs_mount_async() is in
progress, libnfs invokes MountCallback(-EINTR) (but only if a NFS RPC
call is in progress; if the TCP connect is in progress, that callback
is not invoked).
If the mount operation had timed out, OnMountTimeout() set
mount_state=FINISHED, which triggered an assertion failure in
MountCallback(); this commit adds a check on whether the mount has
timed out and ignores the MountCallback.
2024-05-13 16:51:44 +02:00
Max Kellermann
84e8927b1b
lib/nfs/FileReader: remove obsolete stat64 cast
...
Obsoleted (and broken) by commit 9947d3e67f
2024-05-13 12:33:03 +02:00
Max Kellermann
556300d59a
input/InputStream: add [[nodiscard]]
2024-05-13 12:29:16 +02:00
Max Kellermann
34f7b38f39
input/InputStream: pass std::span<std::byte> to Read()
2024-05-13 12:28:40 +02:00
Max Kellermann
f28d10d934
decoder/dsdiff: convert pointers to references
2024-05-13 11:34:05 +02:00
Max Kellermann
d6adc59265
test/run_storage: use FormatISO8601()
2024-05-13 10:37:33 +02:00
Max Kellermann
c154dc00d7
test/run_storage: use StringIsEqual()
2024-05-13 10:37:25 +02:00
Max Kellermann
6d5dab38dd
input/async: pass std::string_view to constructor
2024-05-13 10:18:18 +02:00
jcorporation
480f4d4cf1
Fix filename list for albumart
2024-05-12 22:17:13 +02:00
jcorporation
f8271fec12
command_available return stickernames only if stickerdb is enabled
2024-05-12 21:23:29 +02:00
Max Kellermann
4800f1d8f2
storage/Interface: add [[nodiscard]]
2024-05-10 19:08:57 +02:00
Max Kellermann
48ce8e9fb7
subprojects: update sqlite3 to 3450300
2024-05-10 18:18:04 +02:00
Max Kellermann
f746e5b7d7
subprojects: update liburing to 2.5
2024-05-10 18:17:52 +02:00
Max Kellermann
cdce257512
subprojects: update libnpupnp to 6.1.2
2024-05-10 18:17:42 +02:00
Max Kellermann
227ab998bc
lib/nfs/Connection: pass status and data to the NfsClientError ctor
...
This way, we avoid calling the FormatNfsClientError() which crashes
when nfs_get_error() returns nullptr; that can happen on RPC errors:
then, libnfs's check_nfs4_error() doesn't call nfs_set_error().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2040
2024-05-10 16:36:29 +02:00
Max Kellermann
9384bff6f9
lib/nfs/Manager: add method MakeConnection()
...
This uses the libnfs function nfs_parse_url_dir() which means MPD
gains support for the libnfs arguments like "version".
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2039
2024-05-07 21:22:43 +02:00
Max Kellermann
9947d3e67f
lib/nfs/Connection: use nfs_fstat64_async()
...
This is 64-bit-safe and anyway, nfs_fstat_async() doesn't work with
NFSv4.
2024-05-07 21:22:40 +02:00
Max Kellermann
67f01fbdb6
db/plugins/simple/Song: pass StorageFileInfo to UpdateFile()
...
Eliminates a redundant GetInfo() call.
2024-05-07 21:22:39 +02:00
Max Kellermann
164b5b0cf3
db/Song, SongUpdate: remove unnecessary c_str() calls
...
Just case implicitly to std::string_view, which is both simpler and
safer.
2024-05-07 21:13:38 +02:00
Max Kellermann
56bb1dddd7
lib/nfs/Connection: simplify error handling in OnSocketReady()
2024-05-06 18:35:58 +02:00
Max Kellermann
e6b1cf540b
lib/nfs/Connection: remove unnecessary initializers from MountInternal()
2024-05-06 18:24:36 +02:00
Max Kellermann
d61c83ace8
lib/nfs/Connection: create the nfs_context in the constructor
...
Another lifetime simplification.
2024-05-06 18:22:23 +02:00
Max Kellermann
4139024b3d
lib/nfs/Connection: return from OnSocketReady() after error
2024-05-06 18:20:42 +02:00
Max Kellermann
48fe8666c9
lib/nfs/Connection: call nfs_destroy_context() only in the destructor
...
This simplifies the lifetime of the nfs_context object.
2024-05-06 18:16:11 +02:00
Max Kellermann
90a44a0c07
lib/nfs/Connection: replace flag "mount_finished" with enum
2024-05-06 18:16:11 +02:00
Max Kellermann
e013c19223
storage/nfs: remove unused method EnsureConnected()
2024-05-06 18:16:11 +02:00
Max Kellermann
4684d05fa6
player/Thread: reset the decoder_starting flag in StopDecoder()
...
Fixes crash bug (assertion failure) if a new "play" command is handled
while the player thread waits for decoder startup.
2024-05-06 17:38:58 +02:00
Max Kellermann
1c3a1c842d
lib/nfs/Lease: use InstrusiveList instead of std::list
2024-05-06 17:22:36 +02:00
Max Kellermann
f5127686fe
lib/nfs/Connection: pass std::exception_ptr by value
2024-05-06 17:03:21 +02:00
Max Kellermann
2b0275a1c8
lib/nfs/Connection: pass server and export_name as std::string_view
2024-05-06 17:01:15 +02:00
Max Kellermann
028693c380
lib/nfs/Manager: forward-declare class ManagedConnection
2024-05-06 16:58:41 +02:00
Max Kellermann
63920be17e
lib/nfs/Connection: make server and export_name const
2024-05-06 16:55:57 +02:00
Max Kellermann
96888cce9c
storage/nfs: pass std::string_view to the NfsStorage ctor
2024-05-06 15:28:01 +02:00
Max Kellermann
bcc39be784
lib/nfs/Base: use std::string_view
2024-05-06 15:25:55 +02:00
Max Kellermann
b6314b4c4b
lib/nfs/Base: use std::array
2024-05-06 15:22:49 +02:00
Max Kellermann
23d895415a
lib/nfs/meson.build: require libnfs 4.0
...
All Linux distributions have at least version 4, and thus I cannot
test with older versions.
2024-05-06 14:54:04 +02:00
Max Kellermann
518ce0187a
remove macOS support
...
There were a few macOS related bug reports on the bug tracker which
have been open for years without a volunteer caring for them. The
GitHub actions build has also been broken for a long time due to bugs
in the ancient LLVM toolchain shipped with macOS, making macOS an
unsuitable non-Linux target for testing MPD's portability.
All of this makes macOS support an annoying liability for me. To
avoid more frustration, I'm hereby dropping macOS support completely
from MPD. Maybe this causes enough pain for a new maintainer to
spawn, but maybe nobody cares, so... let's see.
2024-05-06 14:11:50 +02:00
Max Kellermann
1c69498c58
.github/workflows/build.yml: do not install yajl on macOS
...
The Brew package of yajl is broken, it fails to build:
In file included from ../src/lib/yajl/Handle.cxx:4:
In file included from ../src/lib/yajl/Handle.hxx:6:
/opt/homebrew/Cellar/yajl/2.1.0/include/yajl/yajl_parse.h:22:10: fatal error: 'yajl/yajl_common.h' file not found
#include <yajl/yajl_common.h>
^~~~~~~~~~~~~~~~~~~~
1 error generated.
Therefore, MPD cannot support building with yajl on macOS.
2024-05-06 13:39:02 +02:00
Max Kellermann
615f6f50ce
lib/yajl: drop "yajl/" prefix from #include paths
...
According to the yajl API documentation, #include lines should have
the "yajl/" path prefix, but the actual pkg-config file contains:
includedir=${dollar}{prefix}/include/yajl
.. which already contains this directory name, and thus the "yajl/"
prefix cannot work. Unfortunately, the yajl project hasn't been
maintained for nearly 10 years, and there's little chance this bug
will ever be fixed.
2024-05-06 13:31:34 +02:00
Max Kellermann
79df6a646b
Merge branch 'mpdlib' of https://github.com/DDRBoxman/MPD
2024-05-06 13:03:50 +02:00
Max Kellermann
89d68fb2af
Merge branch 'debian-build-doc' of https://github.com/mxjeff/MPD
2024-05-06 13:03:05 +02:00
Max Kellermann
03b674ce73
net/meson.build: compile IPv[46]Address.cxx only if TCP is enabled
2024-05-06 12:57:55 +02:00
Max Kellermann
9c421997bf
net/SocketDescriptor: WriteNoWait() uses MSG_NOSIGNAL
2024-05-06 12:55:02 +02:00
Max Kellermann
3813433e02
test/net/TestLocalSocketAddress: add unit tests for GetLocalRaw()
2024-05-06 12:54:45 +02:00
Max Kellermann
73509fc189
net/LocalSocketAddress: new class wrapping struct sockaddr_un
2024-05-06 12:54:45 +02:00
Max Kellermann
7c9b7fa311
net/SocketAddress: use std::string_view::find() instead of std::memchr()
2024-05-06 12:54:45 +02:00
Max Kellermann
cbba22c947
net/SocketAddress: include IPv[46]Address.hxx only ifdef HAVE_TCP
2024-05-06 12:50:44 +02:00
Max Kellermann
f8529d4fe6
net/{Allocated,Static}SocketAddress: inline GetLocalRaw()
2024-05-06 12:50:29 +02:00
Max Kellermann
2a206ef309
net/StaticSocketAddress: add method GetLocalPath()
2024-05-06 12:50:24 +02:00
Max Kellermann
6200c0dc46
net/StaticSocketAddress: include <string_view> only ifdef HAVE_UN
2024-05-06 12:50:19 +02:00
Max Kellermann
1760310123
Revert "util/IntrusiveList: allow the last disposer to destroy the IntrusiveList"
...
This reverts commit 669cbcd25a
("util/IntrusiveList: allow the last disposer to destroy the
IntrusiveList"). It was bad because it could lead to off-by-one crash
bugs when the last item was removed inside the previous item's
disposer.
We need a different solution for the other crash bug that was fixed by
the reverted commit.
2024-05-06 12:49:30 +02:00
Max Kellermann
c8ed28e9c6
test/util/TestIntrusiveList: add test for clear_and_dispose() with modifying disposer
2024-05-06 12:49:04 +02:00
Max Kellermann
56d4784b11
util/IntrusiveList: add API documentation
2024-05-06 12:48:53 +02:00
Max Kellermann
4d3adaa557
event/SocketEvent: erase IMPLICIT_FLAGS in Cancel{Read,Write}()
...
Without this, calling CancelRead() after ScheduleRead() would leave
the HANGUP scheduled, and the caller could receive HANGUP events over
and over which are never properly handled, leading to a busy loop.
The semantics of this API are hard to get right, because the
IMPLICIT_FLAGS (a property of epoll) are somewhat weird. But it seems
that this change repairs a side effect of the SocketEvent interface
that seemed counterintuitive.
2024-05-06 12:48:42 +02:00
Max Kellermann
6830cf9dcf
net/AllocatedSocketAddress: add SetLocal() overload with std::string_view
2024-05-06 12:48:42 +02:00
Max Kellermann
4ba288501d
.github/workflows/build.yml: install ccache manually
...
This eliminates the additionoal "apt-get install" call by
ccache-action.
2024-05-06 12:46:44 +02:00
Colin Edwards
9dcd0604f2
android: Install the libmpd.so output on android
...
libmpd.so was getting written as a file called `arm64-v8a` instead of `arm64-v8a/libmpd.so`
2024-05-04 00:13:25 -05:00
kaliko
5a9b0c7142
doc: debian build, add pkconf build dep.
...
Build dep on pkconf is not explicitly needed because other dependencies
pull pkconf indirectly (ie libid3tag0-dev), but explicit declaration of
a direct MPD build dep is better IMHO.
2024-04-28 15:06:27 +02:00
Max Kellermann
823d6c9c0f
Merge branch 'android_deps' of https://github.com/DDRBoxman/MPD
2024-04-24 14:52:31 +02:00
Colin Edwards
57e26eb832
android: Always force wrap deps
...
This ensures that android is always built with the deps we build
with wrap.
Also put back the asm disable for openssl since the version we use needs
that flag
2024-04-23 17:58:43 -05:00
jcorporation
f9c2c2b558
Remove deprecation flag for volume command
2024-04-23 20:37:55 +02:00
Colin Edwards
a0e9dfbec2
android: null check intent in onStartCommand
...
For some reason the type annotations here show @NonNull but that is
actually false according to the documentation under service.
This may be null if the service is being restarted after its process has gone away, and it had previously returned anything except START_STICKY_COMPATIBILITY.
2024-04-23 00:24:32 -05:00
Colin Edwards
cb6f61cf37
android: Update to NDK 27
2024-04-22 22:34:34 -05:00
kaliko
964e18ab49
doc: debian build, add libpipewire
2024-04-16 19:51:46 +02:00
kaliko
709acd8920
doc: debian build, add libsystemd
2024-04-16 19:18:57 +02:00
kaliko
6f0aecbfb3
doc: debian build, fixed libexpat-dev
2024-04-16 19:05:23 +02:00
Max Kellermann
7ebe56fdd9
util/SpanCast: allow ToStringView() only with integral char types
...
This avoids std::string_view specialization that make no sense.
2024-04-16 12:37:08 +02:00
Max Kellermann
fae235197f
util/SpanCast: allow ReferenceAsBytes() only with trivially-copyable
...
Addd the std::has_unique_object_representations_v constraint so we
cast stuff to std::byte only if this would make sense.
2024-04-16 12:33:36 +02:00
Max Kellermann
141f518bdd
.github/workflows/build.yml: add missing backslashes
2024-04-16 12:10:32 +02:00
Max Kellermann
d9fefbbc5a
.github/workflows/build.yml: run Meson manually without BSFishy/meson-build
...
This eliminates the options duplication in the "build" and "tests" steps.
2024-04-16 12:07:50 +02:00
Max Kellermann
122d71a05d
.github/workflows/build.yml: build only on Ubuntu 22.04
2024-04-16 12:03:24 +02:00
Max Kellermann
3b4825dd29
.github/workflows/build.yml: do not install outdated libfmt-dev
2024-04-16 11:51:19 +02:00
Max Kellermann
0c1ecc96a8
*: let libfmt quote strings
2024-04-16 11:50:18 +02:00
Max Kellermann
39c9e92f42
lib/fmt: require libfmt 9
...
Version 9 added the "debug format" which I'd like to use.
2024-04-16 11:50:18 +02:00
Max Kellermann
08810991c2
.github/workflows/build.yml: install ccache manually
...
This eliminates the additionoal "apt-get install" call by
ccache-action.
2024-04-16 11:39:40 +02:00
Max Kellermann
f8581c4d6a
doc/user.rst: switch to Debian Bookworm
2024-04-16 11:33:00 +02:00
Max Kellermann
0d8498f1d1
lib/fmt/SocketAddressFormatter: simpler template syntax
2024-04-16 11:02:36 +02:00
Max Kellermann
7198db758d
lib/fmt/PathFormatter: eliminate AllocatedPath specialization with std::convertible_to<Path>
2024-04-16 11:00:21 +02:00
Max Kellermann
7a4743d00e
config/File: add missing include
2024-04-16 11:00:21 +02:00
Max Kellermann
ae85c2a979
db/Configured: log debug message when there is no cache directory
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1525
2024-04-16 10:57:28 +02:00
Max Kellermann
de4bdfcd1f
python/build/libs.py: disable the FFmpeg "LEAD MCMP" decoder
...
This decoder causes linker failures and MPD has no use for it anyway.
2024-04-15 22:28:03 +02:00
Max Kellermann
9c7b930f8f
Merge branch 'alsa-drain-recovery' of https://github.com/borine/MPD
2024-04-15 22:21:53 +02:00
Max Kellermann
9e8bca4879
python/build/libs.py: update FFmpeg to 7.0
2024-04-15 22:05:08 +02:00
Max Kellermann
5bd3934c00
python/build/libs.py: update WildMidi to 0.4.6
2024-04-15 22:05:08 +02:00
Max Kellermann
57212d5a35
player/Thread: remove unnecessary StartDecoder() call
...
Let Run() do this in the next loop iteration.
2024-04-15 21:49:11 +02:00
Max Kellermann
7236f83999
player/Thread: do not start the decoder twice
...
Upon receiving PlayerCommand::QUEUE, call StartDecoder() only if the
decoder is not already starting. Checking just
DecoderControl::IsIdle() is not enough because the decoder may already
have finished decoding the song before the player has started playing
it and before it had a chance to call CheckDecoderStartup().
Omitting the StartDecoder() call now means it will be started later in
the Run() main loop, after CheckDecoderStartup() has succeeded (which
effectively switches to the song that has already been decoded by the
current decoder).
This fixes an assertion failure when compiled in debug mode
(`-Db_ndebug=false`) and random noise playback in non-debug mode
(`-Db_ndebug=true`).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1900
2024-04-15 21:39:53 +02:00
Max Kellermann
c8ece786dd
player/Thread: add assert() to StartDecoder()
...
StartDecoder() must not be called when a decoder is still being
started. This detects the bug
https://github.com/MusicPlayerDaemon/MPD/issues/1900 earlier.
2024-04-15 21:36:11 +02:00
Max Kellermann
60fae87e59
doc/mpdconf.example: move "replaygain_limit" to user.rst
2024-04-15 18:58:53 +02:00
Max Kellermann
3145b10f51
doc/mpdconf.example: remove advanced replay gain settings
...
Keep the example file short, omit settings that are probably only used
by few users.
2024-04-15 18:55:03 +02:00
Max Kellermann
75047a26f8
doc/mpdconf.example: fix replaygain_limit description
...
The description (added by commit 43806d524d ) was wrong.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1977
2024-04-15 18:51:27 +02:00
Max Kellermann
1e4bf90c60
io, net, evnet: quote file names in error messages
2024-04-10 13:36:05 +02:00
Max Kellermann
b3a31b69ee
util/RedBlackTree: fix lost "right" child while swapping with successor
...
Fixes a tree corruption bug that led to assertion failures.
2024-04-10 13:35:31 +02:00
Max Kellermann
88475f2e2b
util/RedBlackTree: swap colors when swapping with successor
...
Swapping was incomplete without swapping the colors; this led to
assertion failures under certain conditions.
2024-04-10 13:35:28 +02:00
Max Kellermann
3cf0896998
test/util/TestIntrusiveTreeSet: add test with large randomized tree, erasing random elements
...
Test fails currently due to two bugs in the red-black tree
implementation.
2024-04-10 13:35:24 +02:00
Max Kellermann
e0a53d4747
util/IntrusiveTreeSet: add debug method Check()
...
Only for the unit test.
2024-04-10 13:35:21 +02:00
Max Kellermann
669cbcd25a
util/IntrusiveList: allow the last disposer to destroy the IntrusiveList
...
Fixes a use-after-free bug in Co::MultiAwaitable::SetReady() when the
last callback frees the Co::MultiAwaitable owner.
2024-04-10 13:35:09 +02:00
Max Kellermann
2f7c19f139
util/SpanCast: rewrite ToStringView(std::span<std::byte>) to avoid cast ambiguities
2024-04-10 13:34:51 +02:00
Max Kellermann
e131f22642
util/SpanCast: merge two ToStringView() using std::remove_const_t
2024-04-10 13:34:25 +02:00
Max Kellermann
a09e33bf8e
Merge branch 'RoboSchmied-AGfixT118' of https://github.com/RoboSchmied/MusicPlayerDaemon-MPD
2024-04-08 08:23:48 +02:00
Max Kellermann
cd3c34e7b9
Merge branch 'intents' of https://github.com/DDRBoxman/MPD
2024-04-08 08:23:25 +02:00
Max Kellermann
b3733ef32a
Merge branch 'sticker_filters' of https://github.com/jcorporation/MPD
2024-04-08 08:20:28 +02:00
RoboSchmied
f3b9674fed
Fix: 1 typo
...
Co-authored-by: RoAGmer <no-reply@github.com >
Signed-off-by: RoboSchmied <github@roboschmie.de >
2024-04-07 18:59:40 +02:00
Colin Edwards
b0cd456753
android: Button to jump to bottom of log view
...
This adds a button that can jump to the bottom of the log view.
If the user scrolls up we now disable the auto scroll down and show the
down button. When the down button is clicked the auto scroll resumes and
the button is removed.
2024-04-06 20:11:01 -05:00
jcorporation
c613d25f29
Add operators contains and starts_with to sticker find
2024-04-06 20:08:59 +02:00
Colin Edwards
fff9ceccc2
android: Add intents for service start and stop
...
org.musicpd.action.StartService
org.musicpd.action.StopService
You can test these actions like:
adb shell am broadcast -a org.musicpd.action.StartService org.musicpd
Calling these from an app like tasker should allow for automation
2024-04-05 23:46:14 -05:00
Colin Edwards
4bcbeae1e0
android: Move service client into it's own file
...
The service file was getting harder to read so lets pull the client code
into it's own file
2024-04-05 23:27:41 -05:00
Max Kellermann
4c56e87e36
lib/curl/Global: remove empty line
2024-04-04 09:18:34 +02:00
Max Kellermann
011b96ff98
net/UniqueSocketDescriptor: add method MoveToFileDescriptor()
2024-04-04 09:16:44 +02:00
Max Kellermann
d563f5fc87
decoder/mpg123: use mpg123_ssize_t only on MPG123_API_VERSION >= 47
2024-04-03 23:21:54 +02:00
Max Kellermann
9c2df5ce19
decoder/mpg123: implement stream_decode
2024-04-03 23:12:26 +02:00
Max Kellermann
1745c485f3
decoder/mpg123: move code to Scan()
2024-04-03 22:52:56 +02:00
Max Kellermann
a53db82ae4
decoder/mpg123: move code to Decode()
2024-04-03 22:49:43 +02:00
Max Kellermann
a20a83eb76
decoder/mpg123: move code to GetAudioFormat()
2024-04-03 22:37:29 +02:00
Max Kellermann
65e5a43e46
decoder/List: prefer "mpg123" over "mad"
...
libmad hasn't been maintained for many many years, while libmpg123 is
still maintained.
Our "mad" plugin can't do streams, but MPD will automatically fall
back to "mad" (or "ffmpeg") for streams.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1954
2024-04-03 22:25:34 +02:00
Max Kellermann
b6afdf1201
util/UriUtil: disable path segment stripping
...
This bug introduced by commit 49ed9dae34
and activated by commit acc1bd6297
caused leading spaces to disappear from the beginning of all file
names.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1961
2024-04-03 22:00:36 +02:00
Max Kellermann
08a00ee21b
config/PartitionConfig: clip the max_playlist_length setting
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1932
2024-04-03 21:43:39 +02:00
Max Kellermann
41a1e98cb9
subprojects: update sqlite3 to 3.45.2-1
2024-04-03 21:34:40 +02:00
Max Kellermann
99da022775
util/IntrusiveSortedList: remove unused class
2024-04-03 21:31:08 +02:00
Max Kellermann
1ee25b4234
event/TimerList: remove option NO_BOOST
...
Always use the new IntrusiveTreeSet class.
2024-04-03 21:30:59 +02:00
Max Kellermann
c5e607a310
event/TimerList: use IntrusiveTreeSet instead of boost::intrusive::multiset
2024-04-03 21:30:31 +02:00
Max Kellermann
5a0bad3b2f
util/IntrusiveTreeSet: new class
2024-04-03 21:29:34 +02:00
Max Kellermann
6a99f20828
util/IntrusiveHashSet: add concept checks to *Operators
...
This requires adding another template argument and reordering the others.
2024-04-03 21:27:37 +02:00
Max Kellermann
91ca502e10
output/httpd/Client: pass std::string_view to HandleLine()
2024-04-03 21:06:11 +02:00
Max Kellermann
1e5c37ee78
util/SpanCast: add ToStringView() with non-const std::byte
...
Without this, we would get std::string_view<std::byte> which makes no
sense.
2024-04-03 20:58:03 +02:00
Max Kellermann
ef2cdc0c6a
output/httpd/Client: remove duplicate API docs
2024-04-03 20:50:31 +02:00
Max Kellermann
c94c08c6b4
event/BufferedSocket: pass std::span to OnSocketInput()
2024-04-03 20:43:40 +02:00
Max Kellermann
5de8edced6
output/httpd/HttpdClient: convert metaint to a compile-time constant
...
After all these years, we had this as a field but there was never a
way to change the value. So let's just hard-code it until we actually
have a reason to make it variable at runtime.
2024-04-03 20:30:53 +02:00
Max Kellermann
8906ce07de
output/httpd/IcyMetaDataServer: pass metaint as std::size_t
2024-04-03 20:29:47 +02:00
Max Kellermann
9d66fc491c
output/httpd/Client: fix API doc syntax
2024-04-03 20:21:18 +02:00
Max Kellermann
f8a838db5d
output/httpd/Client: convert variable to std::string_view
...
In all cases, we already know the length, and casting the C string to
std::string_view has to call strlen() again.
2024-04-03 20:20:33 +02:00
Max Kellermann
e4ba736d03
input/{async,rewind}, decoder/dsdiff: use std::cmp_*() for safer integer comparisons
2024-03-15 18:45:46 +01:00
Max Kellermann
cc291e8c98
Merge branch 'extend-robustness-of-cdda-playback' of https://github.com/lazypingu/MPD
2024-03-15 18:39:45 +01:00
lazypingu
c00d217a53
Skip track if returned LSNs are negative which indicates track errors or if track is not an audio track
2024-03-12 20:39:51 +01:00
lazypingu
9d853897cd
Use track and disc functions from libcdio-paranoia to enable playback of hidden tracks and audio tracks on multisession CDs
2024-03-12 20:37:50 +01:00
lazypingu
88c77f9c8a
Add debug logging if setting speed failed
2024-03-12 20:37:50 +01:00
lazypingu
1a7278f1d3
Move cddap_speed_set below cddap_open to make sure that the drive was initialized and opened before attemting to set the speed
2024-03-12 20:36:28 +01:00
Max Kellermann
9916d455f9
python/build/libs: fix libnfs 5.0.3 path
2024-03-11 15:55:25 +01:00
Max Kellermann
541707f9a8
lib/curl/Easy: add SetRequestBody() overload with std::span
2024-03-11 15:32:24 +01:00
Max Kellermann
00cf036d58
lib/avahi/Client: relax assertion after COLLISION/REGISTERING
...
Turns out that `AVAHI_CLIENT_S_COLLISION` can occur after
`AVAHI_CLIENT_S_RUNNING`, and `connected==true`. Relaxing this fixes
a bogus assertion failure.
2024-03-11 15:32:24 +01:00
Max Kellermann
9c68f24cfc
net/SocketError: fix typo
...
Whoops. This function has never been used.
2024-03-11 15:32:24 +01:00
Max Kellermann
02c4512b00
util/CharUtil: add IsLowerHexDigit()
2024-03-11 15:32:24 +01:00
Max Kellermann
be84b189dc
util, io, net, ...: use "#pragma once"
2024-03-11 15:32:24 +01:00
Max Kellermann
313f2a1894
python/build/libs: update libnfs to 5.0.3
2024-03-11 15:32:24 +01:00
Max Kellermann
a1ae1a1e95
python/build/libs: update FFmpeg to 6.1.1
2024-03-11 15:32:24 +01:00
Max Kellermann
4874bcf8e8
python/build/libs: update libopenmpt to 0.7.4
2024-03-11 15:32:24 +01:00
Max Kellermann
280ff9211f
python/build/libs: update zlib to 1.3.1
2024-03-11 15:32:24 +01:00
Max Kellermann
494f658dee
meson.build: suppress -Wnan-infinity-disabled (clang 18) due to libfmt
2024-03-11 15:32:24 +01:00
Max Kellermann
c144d0a00d
meson.build: build fmt in C++20 mode
...
Enables `char8_t` support which eliminates clang 18's
`-Wdeprecated-declarations` warning about fmt's use of
`std::string_view<unsigned char>`.
2024-03-11 15:32:24 +01:00
Max Kellermann
696a36bd5a
subprojects: update sqlite3 to 3.45.1-1
2024-03-11 15:32:24 +01:00
Max Kellermann
3a3fc5e13a
subprojects: update openssl to 3.0.8-3
2024-03-11 15:32:24 +01:00
Max Kellermann
0b89cc306e
subprojects: update fmt to 10.2.0-2
2024-03-11 15:32:24 +01:00
Max Kellermann
dbc68047ad
subprojects: update flac to 1.4.3-2
2024-03-11 15:32:24 +01:00
Max Kellermann
2fdfe3a854
subprojects: update curl to 8.6.0
2024-03-11 15:10:41 +01:00
Max Kellermann
d685d693e8
input/rewind, archive/iso9660: use use std::cmp_*() for safe integer comparison
2024-03-11 15:09:57 +01:00
Max Kellermann
b0cfdfa257
client/Idle: consume only idle flags that were subscribed to
...
Since the very beginning when idle subscriptions where introduced
(commit 0bad84066b ), waiting for a certain idle mask would clear
all other idle flags as well. This would cause idle events to get
lost.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1998
2024-03-11 15:07:07 +01:00
Marius Feraru
7b6909f2c0
db/update/Walk:FindAncestorLoop: uint64_t inode & device
...
Previously, inode numbers were truncated to 32 bits, which could lead
to problems on XFS where inodes are 64 bit; this could lead to bogus
"recursive directory found" errors during database update.
[mk: added commit description and NEWS line]
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2000
2024-03-11 13:34:27 +01:00
jcorporation
45553c5f61
This commit adds the sort and window parameter to "sticker find"
...
The three new compare operators "eq", "gt" and "lt" are casting the values to int.
Sort supports:
- uri: sort by uri
- value: sort by value as string
- value_int: casts value to int
Closes #1894
2024-03-07 20:52:11 +01:00
naglis
1efb9d41db
doc/protocol.rst: clarify message event
...
The term "queue" is used in MPD to refer to the current playlist;
clarify that in this case it refers to the client's message queue.
2024-02-25 19:59:26 +01:00
naglis
9292b39cf5
doc/protocol.rst: document max number of subscriptions
2024-02-18 12:42:53 +02:00
Max Kellermann
9eb26ab90c
Merge branch 'countplaylist' of https://github.com/jcorporation/MPD
2024-02-15 11:28:11 +01:00
jcorporation
f801f299c9
New command playlistlength
...
Count the number of songs and their total playtime in the playlist.
2024-02-15 11:25:34 +01:00
Max Kellermann
7f18cae2e4
Merge branch 'skidoo23-patch-1' of https://github.com/skidoo23/MPD
2024-02-13 08:06:16 +01:00
jcorporation
a3794f8c3b
Allow range in listplaylist and listplaylistinfo
2024-02-08 21:26:28 +01:00
skidoo23
31a88e7ccc
Update Templates.cxx
...
Remove Spotify leftovers
2024-01-26 14:34:58 +01:00
skidoo23
4074e3a9e4
Update Option.hxx
2024-01-26 14:31:08 +01:00
Max Kellermann
c71e586c53
.readthedocs.yaml: install sphinx-rtd-theme
2024-01-19 10:31:50 +01:00
Max Kellermann
1039fb5582
.readthedocs.yaml: add
2024-01-19 10:22:36 +01:00
Max Kellermann
7f60acdfdd
util/CharUtil: add IsUpperAlphaNumericASCII()
2024-01-18 18:53:05 +01:00
Max Kellermann
aef2c5dc14
lib/avahi/Service: add field visible
...
Now individual services can be hidden or shown at any time.
2024-01-18 18:50:06 +01:00
Max Kellermann
8d02986b0e
lib/avahi/Publisher: add missing defer_register_services.Cancel() calls
2024-01-18 18:50:01 +01:00
Max Kellermann
461da92064
lib/avahi/Publisher: make the service list dynamic
...
This allows editing the list of services at any time instead of
passing a constant list at construction time. To do this, Service
instances are now caller-owned and managed in an IntrusiveList instead
of Publisher-owned in a std::forward_list.
2024-01-18 18:48:27 +01:00
Max Kellermann
b20b773189
zeroconf/avahi/Helper: embed the Avahi::Publisher without std::unique_ptr
2024-01-18 18:45:51 +01:00
Max Kellermann
74125c0922
test/meson.build: suppress compiler warnings in GTest headers
2024-01-18 18:42:56 +01:00
Max Kellermann
5023432802
lib/avahi/Publisher: use DeferEvent for RegisterServices()
...
Prepares making the service list dyammic; the DeferEvent not only
moves the operation out of the current stack frame, but also allows
combining several AddService() calls.
2024-01-18 18:24:08 +01:00
Max Kellermann
4a14248004
lib/avahi/Publisher: move code to RegisterServices(AvahiEntryGroup)
2024-01-18 18:24:04 +01:00
Max Kellermann
1b241fc97a
lib/avahi/Publisher: allow RegisterServices() to throw
2024-01-18 18:24:01 +01:00
Max Kellermann
09d1ab7abe
lib/avahi/Publisher: move try/catch in GroupCallback() to the top level
2024-01-18 18:23:57 +01:00
Max Kellermann
d28cb93835
lib/avahi/Client: add method IsConnected()
...
Publish only if the client is really connected.
2024-01-18 18:23:52 +01:00
Max Kellermann
6b43338e06
lib/avahi/Client: add assert()
2024-01-18 18:23:48 +01:00
Max Kellermann
9a7a49350c
lib/avahi/Client: free the AvahiClient on AVAHI_CLIENT_FAILURE
...
Previously the AvahiClient was only freed when AVAHI_ERR_DISCONNECTED
was detected, but all other error conditions would lead to a memory
leak.
2024-01-18 18:23:45 +01:00
Max Kellermann
f85629afa6
lib/avahi/Client: is if with initializer
2024-01-18 18:23:42 +01:00
Max Kellermann
a39473a912
lib/avahi/Service: add API docs
2024-01-18 18:23:37 +01:00
Max Kellermann
05d0e9b8bb
lib/avahi/Publisher: reuse the AvahiEntryGroup
...
The libavahi-client documentation recommends reusing AvahiEntryGroup
instances instead of freeing them and creating new ones.
2024-01-18 18:23:30 +01:00
Max Kellermann
b68c3b7f55
net/SocketDescriptor: disable msghdr methods on Windows
2024-01-18 15:44:44 +01:00
Max Kellermann
0fbed6dec1
net/SocketDescriptor: remove misplaced [[nodiscard]]
2024-01-18 15:44:43 +01:00
naglis
16af2a2998
CommandLine: fix typo
...
I believe this is a typo since all other sections have the form
"<Singular> plugins", e.g. "Encoder plugins".
2024-01-18 14:23:41 +02:00
Max Kellermann
7a40ac52a8
Merge branch 'bottombar' of https://github.com/DDRBoxman/MPD
2024-01-18 09:59:48 +01:00
Max Kellermann
6352d1b1ca
Merge branch 'sdkcheck' of https://github.com/DDRBoxman/MPD
2024-01-18 09:59:17 +01:00
Max Kellermann
c93fc161dc
Merge branch 'next_prev_fix' of https://github.com/DDRBoxman/MPD
2024-01-18 09:58:39 +01:00
Colin Edwards
5b7de2bc2f
android: Refactor settings UI into screens and add a bottom bar.
...
This puts Status, logs, and settings all on different tabs. This gives us plenty more room to work to improve these views going forward
2024-01-18 01:23:31 -06:00
Colin Edwards
04ba7eb987
android: Use build tools and SDK 34
...
The gradle config for the app is already compiling with the 34 SDK
so lets bump it for the bridge build too
2024-01-17 23:55:01 -06:00
Colin Edwards
5a2267bdb4
Android: Look for license to verify Android SDK folder
...
The `android` command was depricated and has been removed from new installs of the sdk
The license file existing is about all that is stable between different sdk versions and
cli vs Android studio installs
2024-01-17 23:46:17 -06:00
Colin Edwards
0075c57bd4
android: Check playlist state before changing track
...
Playlist will throw an exception if we call next or previous track when it is not in the "playing" state
2024-01-13 23:23:29 -06:00
Colin Edwards
87873c9a73
android: Support play / pause from media session
2024-01-13 23:15:56 -06:00
Max Kellermann
380e0abbe4
python/build/libs.py: fix libopenmpt source path
...
Fixes regression by commit ea23ea28ce
2024-01-13 22:51:07 +01:00
Max Kellermann
e4cc89b2d9
Merge branch 'jg' of https://github.com/neheb/MPD
2024-01-13 22:38:34 +01:00
Max Kellermann
14dea04ee9
test/util: use unsigned integer literals for -Wsign-compare
2024-01-13 22:33:23 +01:00
Max Kellermann
6f6cbeba80
net/SocketDescriptor: add Send()/Receive() overloads with iovec
2024-01-13 22:32:35 +01:00
Max Kellermann
974ed0166c
net/SocketDescriptor: add sendmsg(), recvmsg() wrappers
2024-01-13 22:31:58 +01:00
Max Kellermann
a91920a8ff
net/SocketDescriptor: pass span<byte> to Read()/Write()
2024-01-13 22:31:34 +01:00
Max Kellermann
7cd38dde09
net/SocketDescriptor: add [[nodiscard]]
2024-01-13 22:31:24 +01:00
Max Kellermann
b63a794fbe
io/FileDescriptor: add [[nodiscard]]
2024-01-13 22:31:16 +01:00
Max Kellermann
3e862b85d4
Merge branch 'mediasession' of https://github.com/DDRBoxman/MPD
2024-01-13 22:27:00 +01:00
Max Kellermann
85bca660d1
Merge branch 'update-failure-response-example' of https://github.com/naglis/MPD
2024-01-13 22:25:00 +01:00
Max Kellermann
87704f49c9
Merge branch 'NEWS-update' of https://github.com/mxjeff/MPD
2024-01-13 22:24:31 +01:00
Max Kellermann
9f9cbb8823
Merge branch 'logging' of https://github.com/DDRBoxman/MPD
2024-01-13 22:24:22 +01:00
kaliko
fa6ef6f1c7
Add NEWS entry about the switch to sphinx_rtd_theme
...
Change introduced in 6913148d99
2024-01-13 11:32:55 +01:00
naglis
db354f5e53
doc/protocol.rst: update failure response example
...
The commands in the example currently result in `ACK_ERROR_ARG`.
2024-01-10 21:03:26 +02:00
Max Kellermann
d3335f9947
db/simple: make more fields const
2024-01-08 13:55:15 +01:00
Max Kellermann
1a67062e1e
db/simple: reorder fields to reduce padding
2024-01-08 13:54:15 +01:00
Max Kellermann
fec1a4ac32
db/simple: pass hide_playlist_targets to sub-instance
2024-01-08 13:53:59 +01:00
Max Kellermann
7f439b01a3
net/SocketAddress: move code to IsInet()
2024-01-08 13:48:13 +01:00
Max Kellermann
0fd6f83766
net/StaticSocketAddress: add constexpr
2024-01-08 13:48:05 +01:00
Max Kellermann
b15b2125e2
net/AddressInfo: add methods IsInet(), IsTCP()
2024-01-08 13:47:59 +01:00
Colin Edwards
3711bd0d24
android: Implement basic media session handling for next and previous track
...
This starts a Media3 MediaSession when the service starts. A custom player class gets passed into that session to receive commands from other apps and the android os.
Currently we pad out some dummy items to make SimpleBasePlayer think we can do next and previous tracks.
MPD handles the threading for the native calls so we can just directly call the bridge from the player class.
2024-01-05 18:23:16 -06:00
Colin Edwards
e086f09d48
android: add next and previous track to the jni bridge
...
This will allow the android client to directly make calls to the mpd process to change tracks
I went with camel case on the function names here, if you use an underscore
javac generates a function tht looks like this:
JNIEXPORT void JNICALL Java_org_musicpd_Bridge_play_1previous
I figured what we ended up with looks a little nicer:
JNIEXPORT void JNICALL Java_org_musicpd_Bridge_playPrevious
2024-01-05 18:21:46 -06:00
Colin Edwards
324bd95c91
android: Move logging into it's own repository class.
...
Logs will be maintained and appended even when the main UI is not bound to the service.
This also lets us log without filling a Handler with a bunch of messages we might just throw away anyway.
2024-01-04 17:44:49 -06:00
Colin Edwards
5d122c3bc8
android: Add dependencies and new application class for dagger / hilt support
...
Dagger and hilt give us dependency injection which makes it easier to split up parts of the app. This lets us easily split out things like logging and paves the way to migrate off preferences to DataStore
This also remove the process name on the service to pull eveything into one process so we don't have to do IPC to pass logs around. This lets us use the same instances of injected classes between the UI and the service side.
2024-01-04 17:44:43 -06:00
Rosen Penev
8e123e7fc9
test: archive: fix compilation with Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-04 14:22:25 -08:00
Rosen Penev
e8163124e3
mpg123: fix compilation under Windows
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-04 14:22:25 -08:00
Rosen Penev
0651be8366
fluidsynth: fix compilation on Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-04 14:22:25 -08:00
Rosen Penev
4957035be6
mikmod: fix compilation on Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-04 14:22:25 -08:00
Rosen Penev
bcd55c0b75
sidplay: fix compilation under Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-04 14:22:25 -08:00
Rosen Penev
914ee92015
wavpack: fix compilation on Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-04 14:22:25 -08:00
Rosen Penev
fb9194b537
tests: fix ChromaPrint test on Windows
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-04 14:22:24 -08:00
Max Kellermann
c04490bd52
storage/curl: eliminate std::strings, parse string_view directly
2024-01-04 21:11:07 +01:00
Max Kellermann
b601f4dc15
util/CNumberParser: remove unused function ParseInt64()
2024-01-04 21:07:50 +01:00
Max Kellermann
4086190c80
decoder/OpusTags: use ParseInteger()
2024-01-04 21:06:38 +01:00
Max Kellermann
e1eea9d98a
util/NumberParser: new library based on std::from_chars()
2024-01-04 21:03:37 +01:00
Max Kellermann
393d57b387
util/NumberParser: rename to CNumberParser
...
A new NumberParser library based on std::from_chars() will be added.
2024-01-04 21:02:45 +01:00
Max Kellermann
b283fe07af
lib/expat/ExpatParser: pass std::string_view to CharacterData()
2024-01-04 20:55:14 +01:00
Max Kellermann
feeb21577f
lib/upnp/Device: use std::forward_list instead of std::vector
2024-01-04 20:51:20 +01:00
Max Kellermann
1fca16737d
lib/upnp/Device: remove unnecessary ctors/dtors
2024-01-04 20:49:27 +01:00
Max Kellermann
4ec85a12e3
lib/upnp/Discovery: use std::map instead of std::list
2024-01-04 20:45:24 +01:00
Max Kellermann
3d2aebccad
lib/upnp/Discovery: pass std::string_view to LockRemove()
2024-01-04 20:40:47 +01:00
Max Kellermann
22382f799c
lib/upnp/Discovery: add noexcept
2024-01-04 20:39:21 +01:00
Max Kellermann
468eceabff
lib/upnp/Discovery: remove unreachable exception handler
2024-01-04 18:04:46 +01:00
Max Kellermann
08e0eb79f5
lib/upnp/Discovery: remove unused default ctor
2024-01-04 18:04:21 +01:00
Max Kellermann
8b03ce562c
input/curl: increase CURLOPT_BUFFERSIZE from 16 kB to 512 kB
2024-01-04 17:57:42 +01:00
Max Kellermann
997311ba14
lib/curl/Easy: add method TrySetOption()
2024-01-04 17:51:48 +01:00
Max Kellermann
cbd031ca7f
lib/upnp/Action: common UpnpSendAction() wrapper for pupnp and npupnp
...
Merge a lot of duplicate code.
2024-01-04 17:40:59 +01:00
Max Kellermann
95842e7984
db/upnp: eliminate the std::forward_list, use IterableSplitString()
2024-01-04 16:31:28 +01:00
Max Kellermann
cc41e95806
db/upnp: add rootid_sv
2024-01-04 16:20:44 +01:00
Max Kellermann
2c77e088b4
db/upnp: eliminate temporary std::string from Visit()
2024-01-04 16:19:03 +01:00
Max Kellermann
4eefc2e47c
test/DumpDatabase: add "URI" parameter
2024-01-04 15:37:10 +01:00
Max Kellermann
7c13666226
test/DumpDatabase: remove the "PLUGIN" parameter, load from config file
2024-01-04 15:36:18 +01:00
Max Kellermann
4ed8313954
test/DumpDatabase: use libfmt
2024-01-04 15:32:26 +01:00
Max Kellermann
c8e2ab6781
db/upnp/Object: smaller enums
2024-01-04 14:31:41 +01:00
Max Kellermann
b2ed29b8c0
lib/upnp/ContentDirectoryService: getFriendlyName() returns std::string reference
...
This can avoid the overhead of casting a C string back to std::string_view.
2024-01-04 14:28:12 +01:00
Max Kellermann
1789b56a85
db/upnp: pass std::string_view to songPath()
2024-01-04 14:28:12 +01:00
Max Kellermann
714dbc9294
lib/upnp/Discovery: forward-declare inner class ContentDirectoryDescriptor
2024-01-04 14:28:12 +01:00
Max Kellermann
f40eb963fd
lib/upnp/Discovery: forward-declare inner class Downloader
2024-01-04 14:28:12 +01:00
Max Kellermann
ee4b49d12f
lib/expat/ExpatParser: pass std::string_view to Parse()
2024-01-04 14:28:12 +01:00
Max Kellermann
4c9942534c
lib/upnp/Device: pass url as std::string_view to Parse()
2024-01-04 14:28:12 +01:00
Max Kellermann
d5f7db59a8
lib/upnp/Util: pass std::string_view to path_getfather()
2024-01-04 14:28:12 +01:00
Max Kellermann
8d1b73ae89
lib/upnp/Discovery: use string_view::starts_with() instead of strncmp()
2024-01-04 14:28:08 +01:00
Rosen Penev
afa77099cf
msys2 CI
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-04 12:49:43 +01:00
Rosen Penev
f68fab53a7
zzip: fix compilation on Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-04 12:38:36 +01:00
Rosen Penev
6a4dc281d1
bzip2: fix compilation on Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-04 12:38:30 +01:00
Max Kellermann
26831a417a
subproject: update expat to 2.5.0-4
2024-01-04 09:49:10 +01:00
Max Kellermann
6293818c35
subproject: update fmt to 10.2.0-1
2024-01-04 09:49:09 +01:00
Rosen Penev
a859de6806
sndfile: fix compilation with clang's libc++
...
error: non-constant-expression cannot be narrowed from type 'sf_count_t'
(aka 'long long') to 'size_type' (aka 'unsigned int') in initializer list
[-Wc++11-narrowing]
215 | std::span{buffer, num_frames * frame_size},
| ^~~~~~~~~~~~~~~~~~~~~~~
note: insert an explicit cast to silence this issue
215 | std::span{buffer, num_frames * frame_size},
| ^~~~~~~~~~~~~~~~~~~~~~~
| static_cast<size_type>()
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2024-01-03 12:18:52 -08:00
Rosen Penev
13202bfce4
test: neighbor_explorer: fix compilation on WIN32
...
Need NarrowPath. Matches what is done in other tests.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2023-12-31 15:38:49 -08:00
Rosen Penev
f3d031b38a
libnpupnp: update subproject
...
Fixes compilation under Windows.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2023-12-31 13:58:10 -08:00
Rosen Penev
f6dbf38e99
upnp: change interface variable name
...
rpc.h under Windows defines interface as struct, which blows up the
build here. Rename to avoid.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2023-12-28 19:39:05 -08:00
Max Kellermann
d0a4270449
lib/upnp/Compat: remove obsolete kludges
...
Those bugs have been fixed looong ago.
2023-12-28 21:24:58 +01:00
Max Kellermann
b9a7a9981e
lib/upnp/ContentDirectoryService: remove unused fields
2023-12-28 21:22:41 +01:00
Max Kellermann
d9fb152b95
lib/upnp/ContentDirectoryService: include some headers only with libpupnp
2023-12-28 21:18:41 +01:00
Max Kellermann
09a0f7a45c
Merge branch 'android_fix' of https://github.com/DDRBoxman/MPD
2023-12-28 21:02:49 +01:00
Max Kellermann
9396ffb509
db/plugins/upnp/ContentDirectoryService: add missing closing curly brace
2023-12-28 20:52:53 +01:00
Max Kellermann
66a8afd18c
subprojects: add libnpupnp
2023-12-28 20:51:13 +01:00
Rosen Penev
e7e07c39c5
meson: fix flac_dep under Windows
...
declare_dependency's found() method evaluates to true always, resulting
in MPD trying to build flac when not found. Check for dependency()'s
find() first.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2023-12-27 12:43:08 -08:00
Colin Edwards
201e081750
android: Fix boot receiver settings and intent check
2023-12-27 13:38:38 -06:00
Colin Edwards
5f7f1d738d
android: set kotlin target to 9
...
The naming scheme was changed in kotlin but not java after java 8
2023-12-27 13:34:37 -06:00
Colin Edwards
8a3d144714
android: Set kotlin jvm target to 1.9
2023-12-27 13:27:02 -06:00
Rosen Penev
44080154b0
no setenv on Windows
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2023-12-27 10:50:00 -08:00
Max Kellermann
c17493f2d3
Merge branch 'fs' of https://github.com/neheb/MPD
2023-12-27 12:38:30 +01:00
Max Kellermann
dcfc1ca6a0
Merge branch 'doc-time-case' of https://github.com/naglis/MPD
2023-12-27 12:37:58 +01:00
Max Kellermann
07e1bae0af
Merge branch 'doc-config-comments' of https://github.com/naglis/MPD
2023-12-27 12:35:32 +01:00
Max Kellermann
658a7f1ca7
Merge branch 'material' of https://github.com/DDRBoxman/MPD
2023-12-27 12:35:13 +01:00
Max Kellermann
bd408cd627
Merge branch 'bootfix' of https://github.com/DDRBoxman/MPD
2023-12-27 12:33:14 +01:00
Rosen Penev
7c520f6475
fs: fix typo
...
Wrong macro used.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2023-12-26 10:57:44 -08:00
naglis
07ee11b963
doc/protocol.rst: fix time tag case
...
The `Time` song tag starts with an uppercase letter.
2023-12-26 10:51:34 +02:00
Colin Edwards
a4c7041561
subprojects: properly export id3tag include headers
...
According to the Makefile.am from libid3 only i3dtag.h should be installed to the include directory.
include_HEADERS = id3tag.h
2023-12-24 11:31:29 -06:00
naglis
d7eb223343
doc: mention config file comment syntax
2023-12-23 09:33:01 +02:00
Colin Edwards
ddc048e2c3
android: Move settings to compose and material UI 3
...
This changes lets us use the latest UI design from Google, Material 3.
Google only provides the material UI 3 themes for compose, compose only works with kotlin.
2023-12-22 23:04:51 -06:00
Colin Edwards
625ab6decd
android: Move preferences class out of settings
2023-12-22 22:51:14 -06:00
Colin Edwards
2638396df5
android: add dependencies for Material 3 and Compose
2023-12-22 13:30:43 -06:00
Colin Edwards
3d8e285e2b
android: Fix launching on device boot
2023-12-22 12:30:45 -06:00
Colin Edwards
793a12d58d
android: Use Java 9
2023-12-22 12:30:27 -06:00
Max Kellermann
23b4688c44
util/ByteOrder: move Packed* classes to separate headers
2023-12-22 18:20:46 +01:00
Max Kellermann
c4d8888972
subprojects: add id3tag
2023-12-22 18:15:25 +01:00
Max Kellermann
6e50031c49
python/build/libs.py: remove libmad (unused)
2023-12-22 18:05:40 +01:00
Max Kellermann
833ca1e350
test/dump_rva2: fix TCHAR/char confusion on Windows
2023-12-22 18:05:40 +01:00
Max Kellermann
a888b3a707
decoder/plugins/meson.build: add missing dependency to libid3tag
2023-12-22 18:03:47 +01:00
Max Kellermann
d9bbe39f48
android/include/meson.build: remove custom "-I" flag
...
This is not necessary because the declared dependency is enough for
Meson to generate the "-I" flag automatically.
2023-12-22 17:07:50 +01:00
Max Kellermann
38226dfe81
android/include/meson.build: generate *.class in @PRIVATE_DIR@
...
We're not interested in the *.class files, we run javac only to
generate the JNI header. By using @PRIVATE_DIR@, it gets stored to a
directory we can ignore, and not into the source tree.
2023-12-22 16:46:25 +01:00
Max Kellermann
94ef1e13e0
android/include/meson.build: call javac directly, eliminate run-javac.sh
2023-12-22 16:41:35 +01:00
Max Kellermann
35c7c005ba
android/meson.build: move target org_musicpd_Bridge.h to include/meson.build
2023-12-22 16:39:13 +01:00
Max Kellermann
1e732f9b9b
android/run-javac.sh: remove unnecessary realpath call
2023-12-22 16:35:06 +01:00
Max Kellermann
ee5c471280
android/meson.build: pass @OUTDIR@ to run-javac.sh
2023-12-22 16:32:10 +01:00
Max Kellermann
8ef47147a0
.github/workflows/build_android.yml: do not ignore "python"
...
Python scripts are used to build Android.
2023-12-22 15:17:47 +01:00
Max Kellermann
fb4dd4e1ce
.github/workflows/build_android.yml: remove branch v0.23.x
...
This branch cannot be built this way.
2023-12-22 15:17:45 +01:00
Max Kellermann
a19f3a4f9f
python/build/meson.py: put ccache prefix in array instead of stripping it
...
Turns out Meson disables ccache auto-detection when a cross-file is
used. To use ccache, the ccache prefix must be expressed in an array
instead of a single string with spaces.
2023-12-22 15:11:53 +01:00
Max Kellermann
c3ba52a1fc
python/build/toolchain.py: auto-detect ccache
2023-12-22 15:05:41 +01:00
Max Kellermann
1b2bd0cc0a
.github/workflows/build_android.yml: use preinstalled Android SDK/NDK
2023-12-22 14:39:20 +01:00
Max Kellermann
dd3779d64b
.github/workflows/build_android.yml: use preinstalled Java
2023-12-22 14:39:20 +01:00
Max Kellermann
806d1483a8
.github/workflows/build_android.yml: install Meson 1.3.0
...
We need at least 0.63.0 for "diff_files" support in subprojects;
without this, the Opus build breaks.
2023-12-22 14:39:20 +01:00
borine
b1f28d6003
output/alsa: Fix (theoretical error in) ALSA device recovery
...
It is not possible to prepare an ALSA device when it is is state
SND_PCM_STATE_OPEN; it is necessary to set the hardware parameters
first.
This pedantic commit corrects that error. Note that in practice
this code path cannot be encountered because MPD always sets the
hardware parameters before attempting to start playback.
2023-12-22 12:02:33 +00:00
borine
50e6950fa8
output/alsa: handle recoverable errors in DrainInternal()
...
It is possible that an underrun may occur in the ALSA output
device while MPD is draining its own internal buffer. If this
happens then MPD stops playback, reporting the error EPIPE.
This commit attempts to recover the ALSA device instead of
stopping playback, so that the drain can complete and the next
song in the play queue is played.
2023-12-22 11:53:20 +00:00
Max Kellermann
1d60d3cd2b
subprojects: update libmpdclient to 2.22
...
2.22 fixes the "version.h" conflict.
Closes https://github.com/MusicPlayerDaemon/MPD/pull/1927
2023-12-22 12:08:02 +01:00
Max Kellermann
59ed18e112
Merge branch 'android_network_address' of https://github.com/DDRBoxman/MPD
2023-12-22 10:26:36 +01:00
Colin Edwards
c4c1044427
android: Add a text field to display the devices network address
2023-12-21 11:50:10 -06:00
Max Kellermann
791b3c65f3
python/build/meson: bringt back configure()
...
This reverts part of commit a3765cd363 .
The MesonProject class was not used, but the "configure" function.
2023-12-21 12:02:05 +01:00
Max Kellermann
a3765cd363
python/build: remove Meson project support
...
Obsolete, we're now using Meson subprojects.
2023-12-21 11:50:33 +01:00
Max Kellermann
3c5b864396
tag/IcyMetadataParser: use std::span
2023-12-21 08:42:23 +01:00
Colin Edwards
b09654b53a
build: Remove absolute path on pkg-config
...
This allows it to be found on macOS and should fix linking libnfs with builds of the Android app
2023-12-20 23:23:18 -06:00
Max Kellermann
58fc857a2d
tag/IcyMetadataParser: pass std::string_view to icy_parse_tag()
2023-12-20 20:18:39 +01:00
Max Kellermann
e443ee357a
tag/IcyMetadataParser: do not null-terminate strings in icy_parse_tag()
...
Just pass std::string_views into the unmodified buffer to
icy_parse_tag_item().
2023-12-20 19:58:35 +01:00
Max Kellermann
2618294eb7
tag/IcyMetadataParser: pass std::string_view to icy_parse_tag_item()
2023-12-20 19:51:22 +01:00
Max Kellermann
03352cb4ad
tag/IcyMetadataParser: use std::byte in ParseInPlace()
2023-12-20 19:49:08 +01:00
Max Kellermann
2c851498cc
meson.build: do not leak CPP macros to subprojects
2023-12-20 17:49:13 +01:00
Max Kellermann
a52292ae17
subprojects: update sqlite to 3.44.2-1
2023-12-20 17:34:05 +01:00
Max Kellermann
f6a886f092
subprojects: update curl to 8.5.0-2
2023-12-20 17:33:28 +01:00
Max Kellermann
6234ae5a8b
doc/user.rst: do not name the deprecated /var/run/ directory
2023-12-20 17:32:13 +01:00
Max Kellermann
a4ead670ed
subprojects: add libmpdclient wrap
2023-12-20 17:15:29 +01:00
Max Kellermann
303d981099
subprojects: add lame
2023-12-20 16:50:13 +01:00
Max Kellermann
7727311df7
meson.build: disable "openssl:asm"
...
Work around "call to undeclared function "asm" on Android.
2023-12-20 16:30:16 +01:00
Max Kellermann
5f54a8e94e
Merge tag 'v0.23.15'
...
release v0.23.15
2023-12-20 16:23:58 +01:00
Max Kellermann
b8bfc98618
release v0.23.15
2023-12-20 16:21:57 +01:00
Max Kellermann
6e6f72a521
win32/HResult: convert assert() to runtime check to work around -Walloc-size-larger-than
2023-12-20 16:15:58 +01:00
Max Kellermann
a654c5d643
Revert "android: Fix MPD shutdown from settings UI"
...
This reverts commit 94b5b9f370 . It was
not necessary for branch v0.23.x because there, Break() is
thread-safe; this was only changed later by commit
a3b32819b1
2023-12-20 16:15:58 +01:00
Max Kellermann
c5d6aa169f
lib/curl/patches: refresh no_CMAKE_C_IMPLICIT_LINK_LIBRARIES.patch for 7.85.0
2023-12-20 13:43:20 +01:00
Max Kellermann
c1c67286d3
python/build/libs.py: update CURL to 8.5.0
2023-12-20 13:28:54 +01:00
borine
2fb34697c7
input/plugins/Alsa: catch all exceptions
...
snd_pcm_poll_descriptors_revents() may return any error code; the
ALSA docs do not constrain the permitted values. A 'hw' device
will only ever return an error if the pfd array passed in is
invalid (-EINVAL), but other I/O plugins may return arbitary
errors. For example a network-based device may return -EPIPE etc.
The resulting exception thrown by
AlsaNonBlockPcm::DispatchSockets() must be caught to prevent the
mpd process from being aborted.
2023-12-20 13:27:25 +01:00
Colin Edwards
94b5b9f370
android: Fix MPD shutdown from settings UI
2023-12-20 13:27:16 +01:00
Max Kellermann
a9467513e1
doc/developer.rst: add missing return type to code style sample
2023-12-20 13:26:48 +01:00
borine
17d944f6ce
input/plugins/Alsa: limit ALSA buffer time to 2 seconds maximum
...
Some ALSA capture devices can have very large buffers, holding 10
seconds or more audio. Using the maximum buffer size with such
devices leads to unacceptably large, and unnecessary, latency.
Also, some ALSA drivers (e.g. HDA Intel PCH) report an invalid
maximum period size, and the period size that mpd calculates from
the maximum buffer size results in "Invalid argument" error when
applying the hw_params. Note that the "default" capture device on
many cards includes the "dsnoop" plugin which imposes a buffer
size of 16384 frames, so that "alsa://" works OK but
"alsa://plughw" or "alsa://hw" both fail.
Limit the maximum buffer time for ALSA input devices to a more useable
2 seconds, thereby avoiding both the above problems.
2023-12-20 13:26:24 +01:00
Max Kellermann
0f82f18652
python/build/libs.py: update CURL to 8.4.0
2023-12-20 13:25:08 +01:00
Max Kellermann
3db3e577f1
python/build/libs.py: update OpenSSL to 3.1.4
2023-12-20 13:25:04 +01:00
Max Kellermann
37ee821947
python/build/libs.py: update FFmpeg to 6.1
2023-12-20 13:25:00 +01:00
Max Kellermann
916ab9a7e6
python/build/libs.py: update openmpt to 0.7.3
2023-12-20 13:24:57 +01:00
Max Kellermann
1802cf9fd1
python/build/cmake.py: add CMAKE_FIND_ROOT_PATH on Windows
...
Works around CURL build failure because cmake insists on using
/usr/include/zlib.h.
2023-12-20 13:24:53 +01:00
Max Kellermann
1bf7d30623
subprojects: update fmt to 10.1.1-1
2023-12-20 13:24:14 +01:00
naglis
b2d89253a6
doc/protocol.rst: mention song id lifetime
2023-12-20 13:23:03 +01:00
Max Kellermann
7727630f24
Merge branch 'alsa_input_exception' of https://github.com/borine/MPD
2023-12-20 13:21:37 +01:00
Max Kellermann
e2f8c9a4c2
Merge branch 'android_action' of https://github.com/DDRBoxman/MPD
2023-12-20 10:55:44 +01:00
Max Kellermann
22dbfec126
Merge branch 'android_shutdown' of https://github.com/DDRBoxman/MPD
2023-12-20 10:54:35 +01:00
Max Kellermann
efc462eebf
Merge branch 'doc-features' of https://github.com/mxjeff/MPD
2023-12-20 10:53:34 +01:00
Max Kellermann
c3883e2fe0
Merge pull request #1911 from MusicPlayerDaemon/dependabot/github_actions/actions/setup-python-5
...
build(deps): bump actions/setup-python from 4 to 5
2023-12-20 10:53:16 +01:00
Colin Edwards
16c91a3f4b
android: Fix MPD shutdown from settings UI
2023-12-19 22:05:03 -06:00
Colin Edwards
80bb5a0542
android: Add github action
...
This lives under a separate workflow so it can have different ignore paths.
2023-12-19 17:25:25 -06:00
Colin Edwards
906d58a918
android: migrate app build system to use gradle
...
Most of the Android specific meson code has been removed and replaced with
the grade build system.
The new meson build scripts build and move the libmpd.so binaries into the correct
location that gradle expects. After than gradle handles building the rest of the Android app.
Icons and banners have been updated for the modern app packaging expectations.
For reference here was the figma template Google provides that I used to back the png versions
for older versions of Android <https://www.figma.com/community/file/1283953738855070149 >
2023-12-17 22:38:34 -06:00
kaliko
23b34fe142
Document new added-since filter introduced in 1615fbc
2023-12-17 10:00:19 +01:00
Colin Edwards
8d6f503e04
android: require NDK r26b
...
This fixes `no member named 'invocable' in namespace 'std'`
2023-12-13 12:01:30 -06:00
Colin Edwards
3284a61f43
android: build with java 8 target
...
The latest Android `sdkmanager` tool requires a version of the jdk that no longer
supports Java 7 as a target
2023-12-13 11:50:21 -06:00
Colin Edwards
c1a852d0e8
android: Pick toolchain based on current OS
2023-12-13 11:48:22 -06:00
Colin Edwards
4c90ad3704
android: realdir doesn't accept nonexistant files on macOS
2023-12-13 11:47:18 -06:00
Colin Edwards
a92a801f08
android: List additional build dependencies in instructions
2023-12-13 10:38:51 -06:00
Colin Edwards
9059c6c657
android: find apksigner in build tools folder
2023-12-13 10:35:52 -06:00
dependabot[bot]
bd6f8cd585
build(deps): bump actions/setup-python from 4 to 5
...
Bumps [actions/setup-python](https://github.com/actions/setup-python ) from 4 to 5.
- [Release notes](https://github.com/actions/setup-python/releases )
- [Commits](https://github.com/actions/setup-python/compare/v4...v5 )
---
updated-dependencies:
- dependency-name: actions/setup-python
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-12-11 15:18:48 +00:00
Max Kellermann
a6024f476a
subprojects: add openssl
2023-12-11 11:01:32 +01:00
Max Kellermann
dfef30a737
subprojects: add curl
2023-12-11 10:53:43 +01:00
Max Kellermann
55ca3709ef
subprojects: add ogg, flac, opus
2023-12-11 10:53:43 +01:00
Max Kellermann
ab6ae7520d
doc/developer.rst: add missing return type to code style sample
2023-12-10 08:24:05 +01:00
Max Kellermann
c7a300d12d
meson.build: static liburing wrap build
2023-12-09 21:00:18 +01:00
Max Kellermann
babf322695
subprojects: update liburing to 2.4-2
2023-12-09 20:55:13 +01:00
Max Kellermann
642de1510b
lib/curl/Request: remove redundant CurlEasy wrapper methods
2023-12-09 20:54:21 +01:00
borine
f61eed1a82
input/plugins/Alsa: catch all exceptions
...
snd_pcm_poll_descriptors_revents() may return any error code; the
ALSA docs do not constrain the permitted values. A 'hw' device
will only ever return an error if the pfd array passed in is
invalid (-EINVAL), but other I/O plugins may return arbitary
errors. For example a network-based device may return -EPIPE etc.
The resulting exception thrown by
AlsaNonBlockPcm::DispatchSockets() must be caught to prevent the
mpd process from being aborted.
2023-11-26 15:36:42 +00:00
Max Kellermann
e9c40dead8
output/SharedPipeConsumer: add noexcept
2023-11-26 08:48:45 +01:00
Max Kellermann
31bf6d29b9
BulkEdit: forbid copying
2023-11-26 08:47:06 +01:00
Max Kellermann
571b6f0cdb
queue/IdTable: add constexpr (because we can)
2023-11-26 08:43:50 +01:00
Max Kellermann
e7b9e8de14
queue/IdTable: add API docs
2023-11-26 08:43:20 +01:00
Max Kellermann
321553d5f9
queue/IdTable: add explicit
2023-11-26 08:41:57 +01:00
Max Kellermann
4d23068c5c
queue/IdTable: use C++11 initializer
2023-11-26 08:41:19 +01:00
Max Kellermann
634b38169a
Merge branch 'alsa_input_buffer' of https://github.com/borine/MPD
2023-11-26 08:24:51 +01:00
Max Kellermann
fe4695f92a
Merge branch 'added_time_proxy_plugin' of https://github.com/jcorporation/MPD
2023-11-26 08:20:18 +01:00
Max Kellermann
3c7941b24b
Instance: work around -Wunused-parameter
2023-11-26 08:13:57 +01:00
Max Kellermann
a5d7f5e1fa
client/Client: add interface IClient
...
This allows detangling dependencies and fixes a linker problem in
test/test_translate_song.cxx.
2023-11-26 08:11:06 +01:00
Max Kellermann
0dfd7e3d8c
net/SocketDescriptor: SO_PROTOCOL is really Linux-specific
2023-11-25 23:03:30 +01:00
Max Kellermann
f757dfdc4f
SongLoader: add noexcept
2023-11-25 22:57:24 +01:00
Max Kellermann
eb675ad1b1
pcm/meson.build: add missing dependency on libconfig.a
2023-11-25 22:51:43 +01:00
Max Kellermann
08a5768764
fs/io/TextFile: split into class FileLineReader and AutoGunzipFileLineReader
...
Detangle dependencies.
2023-11-25 22:50:32 +01:00
Max Kellermann
d888bb1902
io/meson.build: move libfmt dependency to libio.a
2023-11-25 22:16:47 +01:00
Max Kellermann
6dc708f53f
net/SocketDescriptor: use method GetOption() internally
2023-11-25 21:58:17 +01:00
Max Kellermann
60033f3eb4
net/SocketDescriptor: add method GetProtocol()
2023-11-25 21:58:09 +01:00
Max Kellermann
1239e075b8
net/SocketDescriptor: add method GetIntOption()
2023-11-25 21:56:07 +01:00
Max Kellermann
85286d74ef
python/build/libs.py: update CURL to 8.4.0
2023-11-25 21:52:41 +01:00
Max Kellermann
f8f646497c
python/build/libs.py: update OpenSSL to 3.1.4
2023-11-25 21:52:41 +01:00
Max Kellermann
24ace6da25
python/build/libs.py: update FFmpeg to 6.1
2023-11-25 21:52:41 +01:00
Max Kellermann
ea23ea28ce
python/build/libs.py: update openmpt to 0.7.3
2023-11-25 21:52:41 +01:00
Max Kellermann
4072a6e445
python/build/cmake.py: add CMAKE_FIND_ROOT_PATH on Windows
...
Works around CURL build failure because cmake insists on using
/usr/include/zlib.h.
2023-11-25 21:52:41 +01:00
Max Kellermann
54601b292a
subprojects: update liburing to 2.4-1
2023-11-25 21:52:41 +01:00
Max Kellermann
964e193fcd
subprojects: update sqlite to 3.44.1-1
2023-11-25 21:52:41 +01:00
Max Kellermann
d5909b6d5d
subprojects: update expat to 2.5.0-3
2023-11-25 20:47:43 +01:00
Max Kellermann
67a00ee541
subprojects: update fmt to 10.1.1-1
2023-11-25 20:47:11 +01:00
Max Kellermann
d0eea87b1a
song/*SongFilter: use libfmt
2023-11-25 20:42:50 +01:00
Max Kellermann
273fc329e0
Merge branch 'added-since' of https://github.com/jcorporation/MPD
2023-11-25 20:36:38 +01:00
Max Kellermann
d85be95c30
Merge branch 'doc-mention-song-id-lifetime' of https://github.com/naglis/MPD
2023-11-25 20:34:40 +01:00
kaliko
ff60cf8a4c
Document new added attribute introduced in 7bf43a97
2023-11-25 14:40:03 +01:00
Max Kellermann
b9daeef524
event/FineTimerEvent: add SetDue(), ScheduleCurrent()
2023-11-21 20:47:29 +01:00
Max Kellermann
9383ceac30
event/{Coarse,Fine}TimerEvent: add API docs
2023-11-21 20:47:25 +01:00
Max Kellermann
3d2bd08132
test/meson.build: eliminate variable gtest_main_dep
2023-11-21 20:46:10 +01:00
Max Kellermann
1259fdc2e3
test/meson.build: re-enable various compiler warnings with GTest
2023-11-21 20:46:10 +01:00
Max Kellermann
a564b7eedb
test/test_translate_song: remove unused Log() symbol
2023-11-21 20:46:10 +01:00
Max Kellermann
ebf1fc7ca4
util/IntrusiveList: convert static_assert to concept check
2023-11-21 20:42:01 +01:00
Max Kellermann
73708e7be7
event/TimerEvent: remove transitional header
2023-11-21 20:41:55 +01:00
Max Kellermann
0c409aa290
input/LastInputStream: use CoarseTimerEvent
2023-11-21 20:41:47 +01:00
Max Kellermann
edfa329e64
util/DereferenceIterator: use *declval() to guess the default value type
...
This allows the iterator to point to another iterator.
2023-11-21 20:40:47 +01:00
Max Kellermann
5ab2c31500
Merge branch 'v0.23.x'
2023-11-21 20:37:46 +01:00
skidoo23
50c1e3738a
decoder/ffmpeg: Fix build error with ffmpeg 6.1
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1898
2023-11-21 20:36:37 +01:00
Max Kellermann
7a939746ae
increment version number to 0.23.15
2023-11-21 20:32:45 +01:00
naglis
ce178c7e1f
doc/protocol.rst: mention song id lifetime
2023-11-16 22:58:07 +02:00
jcorporation
1615fbc30e
Add "added-since" filter expression
2023-11-04 17:25:24 +01:00
jcorporation
45a4fcab1e
Add support for added attribute to proxy plugin
2023-11-02 21:22:48 +01:00
Max Kellermann
68b19ae087
util/SpanCast: add ReferenceAsWritableBytes()
2023-11-02 10:50:24 +01:00
Max Kellermann
a073db1e52
util/SpanCast: add ReferenceAsBytes()
2023-11-02 10:50:00 +01:00
Max Kellermann
10940da381
util/Intrusive{List,HashSet}: add "tag" for base hooks
2023-11-02 10:48:46 +01:00
Max Kellermann
57d9cffc42
event/PipeEvent: expose the EventPollBackendEvents constants
2023-11-02 10:48:21 +01:00
Max Kellermann
65a3062f45
Merge branch 'configure-systemd-units-based-on-build-options' of https://github.com/naglis/MPD
2023-11-02 10:43:02 +01:00
Max Kellermann
ac25f3456a
Merge branch 'added_time' of https://github.com/jcorporation/MPD
2023-11-02 10:42:31 +01:00
jcorporation
f4f79a3d5f
New command "stickernames" lists uniq and sorted sticker names
2023-10-21 18:21:03 +02:00
jcorporation
7bf43a9712
Add "added" timestamp to song database
...
- added is set to current time, if a new song is added to the database.
- GetAdded falls back to mtime.
Code for proxy plugin is missing, this needs a patch for libmpdclient.
closes #378
2023-10-20 17:29:31 +02:00
Nick Steel
97da29cc90
Stickers: fix documentation typos
2023-10-16 14:25:58 +01:00
Max Kellermann
de1da485ab
LICENSES: add all licenses referred to by SPDX headers
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1877
2023-10-15 11:39:08 +02:00
Max Kellermann
2b10cf3c15
pcm/Normalizer: change license identifier to LGPL-2.1-only
...
"LGPL-2.1" doesn't exist, and the old copyright header did not specify
the "or later" clause, so I must assume it's 2.1 only.
2023-10-15 11:37:21 +02:00
gd
432675d4c2
Stickers: added support for stickers on playlists and some tag types
2023-10-15 11:25:16 +02:00
Max Kellermann
70ac638d93
tag/Mask: make everything constexpr
2023-10-15 11:03:56 +02:00
Max Kellermann
ccbacb369b
io/linux/ProcPath: new library
2023-10-15 10:55:32 +02:00
Max Kellermann
7c0b561a16
event/InotifyEvent: add method TryAddWatch()
2023-10-15 10:51:06 +02:00
Max Kellermann
db5f270f42
util/AllocatedString: fix string_view specialization in TotalSize()
2023-10-09 14:54:40 +02:00
Max Kellermann
3a86956257
Merge tag 'v0.23.14'
...
release v0.23.14
2023-10-08 10:12:34 +02:00
Max Kellermann
feac1a3f56
release v0.23.14
2023-10-08 10:11:05 +02:00
Max Kellermann
f49d4ef4ad
tag/Mask: switch to 64 bit because have we 34 tags now and 32 bits are not enough
2023-10-08 10:02:50 +02:00
Max Kellermann
2859845567
Merge branch 'v0.23.x'
2023-10-08 10:02:19 +02:00
Max Kellermann
f3c37e484e
tag/Mask: add static_assert on the size of the mask
2023-10-08 10:01:00 +02:00
Max Kellermann
e521b58b01
io/PeekReader: fix offset/size mixup
...
Regression by commit 7ccc4ddf0d
2023-10-08 09:55:59 +02:00
Max Kellermann
34182990ef
fs/FileInfo: add fstat() wrapper
2023-10-07 12:49:07 +02:00
Max Kellermann
1ca5d6baa6
io/FileReader: do not copy the path
2023-10-07 12:48:03 +02:00
Max Kellermann
9365f68454
io/FileReader: use GetFileInfoByHandle()
2023-10-07 12:47:57 +02:00
Max Kellermann
7b5f107341
fs/FileInfo: add GetFileInformationByHandleEx() wrapper
2023-10-07 12:37:49 +02:00
Max Kellermann
e9ec03f769
PlaylistFile: use uint_least64_t
2023-10-07 12:29:14 +02:00
Max Kellermann
579a6ee299
fs/FileInfo: un-inline the constructor to reduce header dependencies
2023-10-07 12:28:31 +02:00
Max Kellermann
7d31659137
PlaylistFile: add missing include
2023-10-07 12:28:31 +02:00
Max Kellermann
f549c611ab
fs/FileInfo: make constructor explicit
2023-10-07 12:24:05 +02:00
Max Kellermann
51c0a03e94
fs/FileInfo: add constexpr and noexcept
2023-10-07 12:22:54 +02:00
Max Kellermann
19c73680cf
io/FileReader: use uint_least64_t
2023-10-07 08:49:04 +02:00
Max Kellermann
a9ba9a5f92
io/Reader: add [[nodiscard]]
2023-10-07 08:45:59 +02:00
Max Kellermann
3032792563
io/Reader: add method ReadFull()
2023-10-07 08:45:52 +02:00
Max Kellermann
7ccc4ddf0d
io/Reader: use std::span
2023-10-07 08:44:42 +02:00
Max Kellermann
b9704715fb
io/FileOutputStream: pass dfd=-1 for absolute /proc/self/fd/N path
2023-10-07 08:42:35 +02:00
Max Kellermann
86e7dff2fc
util/TextFile: add missing cast
2023-10-07 08:39:24 +02:00
Max Kellermann
c450f644e6
lib/xiph/OggSyncState: fix indent
2023-10-07 08:30:12 +02:00
Max Kellermann
496184b1bc
io/Reader: add method ReadT()
2023-10-07 08:27:13 +02:00
Max Kellermann
b81cac3305
lib/nfs/Error: include cleanup
2023-10-04 23:12:45 +02:00
Max Kellermann
bf9dd24536
lib/pcre/UniqueRegex: wrap Compile() options in struct
2023-10-04 17:32:12 +02:00
Max Kellermann
e5680c712b
util/IntrusiveList: add reverse_iterator
2023-10-04 16:51:17 +02:00
Max Kellermann
44daa6d3e6
util/IntrusiveForwardList: reset last_cache properly in clear()
2023-10-04 16:50:46 +02:00
Max Kellermann
5ddddbb16f
test/util/TestIntrusiveForwardList: add push_back() test
2023-10-04 16:50:38 +02:00
Max Kellermann
5aaa3f50aa
util/BindMethod: move SignatureHelper to return type
2023-10-04 16:50:25 +02:00
Max Kellermann
7d26cd74c1
util/BindMethod: add noexcept
2023-10-04 16:50:25 +02:00
Max Kellermann
7e6941acc8
util/BindMethod: add constexpr
2023-10-04 16:50:25 +02:00
Max Kellermann
63d865666e
util/StringBuffer: use using instead of typedef
2023-10-04 16:50:25 +02:00
Max Kellermann
5dda4084df
util/BindMethod: use using instead of typedef
2023-10-04 16:50:25 +02:00
Max Kellermann
19f9238ef0
util/BindMethod: fix indent
2023-10-04 16:50:25 +02:00
Max Kellermann
491cc8f54d
net/SocketDescriptor: add {Read,Write}NoWait()
...
It was surprising that Read() was non-blocking, but there was no
blocking version of it. Let's make the non-blocking behavior explicit
and change Read() to be blocking.
In order to find existing callers easily with compiler errors, this
also refactors Read()/Write() to take a std::span parameter.
2023-09-27 11:39:55 +02:00
Max Kellermann
cad35a83fb
io/FileDescriptor: add Read()/Write() overloads with std::span
2023-09-27 11:14:23 +02:00
Max Kellermann
5fbe5951ab
output/snapcast/Client: use SocketDescriptor::Send()
2023-09-27 10:39:48 +02:00
Max Kellermann
21590e60e6
event/FullyBufferedSocket: pass std::span to DirectWrite()
2023-09-27 10:36:56 +02:00
Max Kellermann
fe69ad0861
event/BufferedSocket: pass std::span to DirectRead()
2023-09-27 10:34:50 +02:00
Max Kellermann
9daf8f6de5
event/BufferedSocket: use std::byte
2023-09-27 10:30:09 +02:00
Max Kellermann
8ca6606323
net/SocketDescriptor: move code to Receive(), Send()
2023-09-27 10:16:21 +02:00
Max Kellermann
09a2da89a2
io/FileDescriptor: pass std::span to Full{Read,Write}()
2023-09-27 10:14:02 +02:00
Max Kellermann
9a0b3775d8
encoder/ToOutputStream: add API docs
2023-09-26 15:48:55 +02:00
Max Kellermann
2075a9a999
encoder/ToOutputStream: remove unnecessary cast
2023-09-26 15:48:22 +02:00
Max Kellermann
1090cc964a
event/Loop: relicense to BSD-2
...
This library has been initially developed at CM4all and eventually
published here:
https://github.com/CM4all/libcommon/tree/master/src/event/
On this copy of it, there were only minor modifications by people
other than me, and these are below the copyright threshold; only
non-epoll backends (which remain under the GPL) were developed by
somebody else.
2023-09-26 15:47:09 +02:00
Max Kellermann
39476bed85
Merge branch 'v0.23.x'
2023-09-26 15:36:26 +02:00
Max Kellermann
49130c2018
python/build/openssl: remove obsolete variable
2023-09-26 15:32:49 +02:00
Max Kellermann
94af199c49
python/build/openssl: add --cross-compile-prefix=...
2023-09-26 15:31:21 +02:00
Max Kellermann
2d25f6f57f
python/build/openssl: pass arch only if cross-compiling
2023-09-26 15:31:11 +02:00
Max Kellermann
cf179ec294
python/build/openssl: pass --libdir=lib to Configure
...
Without this, the AMD64 build installs to "lib64/" which then cannot
be found by CURL.
2023-09-26 15:30:51 +02:00
Max Kellermann
4d6f220a2f
python/build/cmake: write toolchain file only if cross-compiling
2023-09-26 15:29:45 +02:00
Max Kellermann
0ffbe5b5ea
python/build/autotools: add --host=... only if cross-compiling
2023-09-26 15:27:05 +02:00
Max Kellermann
5b83c834ac
python/build/meson: write cross-file only if cross-compiling
2023-09-26 15:26:17 +02:00
Max Kellermann
da7f32bddb
python/build/toolchain: rename arch to host_triplet
2023-09-26 15:25:23 +02:00
Max Kellermann
9a5eac4ea9
python/build/toolchain: set arch=llvm_triple
2023-09-26 15:13:28 +02:00
Max Kellermann
6571b5d118
python/build/openssl: add option "no-makedepend"
...
We do not need "make" dependencies for one-time builds.
2023-09-26 15:05:14 +02:00
Max Kellermann
12dff8e382
python/build/openssl: use no-asm only on Windows
2023-09-26 15:03:50 +02:00
Max Kellermann
c4da87a0cb
python/build/openssl: add configure variable
2023-09-26 15:03:24 +02:00
Max Kellermann
446f8f29d3
python/build/openssl: add Darwin archs
2023-09-26 15:02:02 +02:00
Max Kellermann
48cc76f114
python/build/toolchain: add is_android, is_darwin
2023-09-26 14:49:39 +02:00
Max Kellermann
a0892b852e
build/python/autotools: add option per_arch_cflags
2023-09-26 14:33:24 +02:00
Max Kellermann
485c7805eb
python/build/autotools: use list.extend() to append configure_args
2023-09-26 14:31:30 +02:00
Max Kellermann
23802f4489
python/build/tarball: Python type hints
2023-09-26 14:28:23 +02:00
Max Kellermann
3fedd978a2
python/build/meson: disable ccache because Meson detects it automatically
2023-09-26 14:27:43 +02:00
Max Kellermann
a9f1bed922
build/python/cmake: add cast to fix mypy warning
2023-09-26 14:25:51 +02:00
Max Kellermann
eb23788fec
python/build: add support for fallback download URLs
2023-09-26 14:25:51 +02:00
Max Kellermann
f6d73555a6
python/build/libs: update OpenSSL toi 3.1.3
2023-09-26 14:21:43 +02:00
Max Kellermann
a56a709406
python/build/download: relative imports
2023-09-26 14:15:01 +02:00
Max Kellermann
5f253e66f6
python/build/toolchain.py: add AnyToolchain for type hints
2023-09-26 12:54:58 +02:00
Max Kellermann
4669f7e2b9
{android,win32}/build.py: move Toolchain classes to python/build/toolchain.py
2023-09-26 12:47:02 +02:00
Max Kellermann
4c90f88704
win32: rename CrossGccToolchain to MingwToolchain
2023-09-26 12:46:10 +02:00
Max Kellermann
a7213b78d6
win32/build.py: move code to class CrossGccToolchain
2023-09-26 12:20:53 +02:00
Max Kellermann
719333e16e
android/build.py: move code to class AndroidNdkToolchain
2023-09-26 12:18:18 +02:00
Max Kellermann
100e471b49
android/build.py: remove duplicate import
2023-09-26 12:12:00 +02:00
Max Kellermann
3f2016e552
python: add type hints
2023-09-26 12:04:08 +02:00
Max Kellermann
dd89ea4505
android/AndroidManifest.xml: raise minSdkVersion to 24
...
This is needed to build libFLAC which uses ftello().
2023-09-26 12:04:05 +02:00
Max Kellermann
5cea03bb4f
Merge branch 'v0.23.x'
2023-09-26 11:49:30 +02:00
Max Kellermann
101e12cf9a
modplug: add patch to remove the deprecated register keyword
2023-09-26 11:48:44 +02:00
Max Kellermann
f382808450
python/build/libs.py: update CURL to 8.2.1
2023-09-26 11:48:16 +02:00
Max Kellermann
0cbe3c2a93
python/build/libs.py: update OpenSSL to 3.1.2
2023-09-26 11:48:13 +02:00
Max Kellermann
4f0ae28359
python/build/libs.py: update zlib to 1.3
2023-09-26 11:48:09 +02:00
Max Kellermann
6a4250f485
python/build/libs.py: update Opus to 1.4
2023-09-26 11:48:06 +02:00
Max Kellermann
3322b29e6a
python/build/libs.py: update FLAC to 1.4.3
2023-09-26 11:48:02 +02:00
Max Kellermann
26467e61a3
Merge branch 'consume_single_oneshot-restore' of https://github.com/jcorporation/MPD
2023-09-26 11:43:27 +02:00
naglis
33ac472601
doc/plugins.rst: change command to list PipeWire targets
...
The `dump` command was dropped[1] in favor of other tools.
[1]: 50bdebe4e8
2023-09-26 11:41:37 +02:00
Max Kellermann
2bb4c7cfa7
test/meson.build: add missing libfmt dependency
...
Should have been part of 64647edbe1
2023-09-26 10:47:52 +02:00
Max Kellermann
fbdd2324a5
sticker/Database: add method Reopen()
2023-09-26 10:14:05 +02:00
Max Kellermann
dc31aa6a61
decoder/Plugin: remove unused and broken wrapper method ContainerScan()
2023-09-26 10:13:42 +02:00
Max Kellermann
5b28a987e5
util/IntrusiveForwardList: add method remove_and_dispose_if()
2023-09-22 11:32:40 +02:00
Max Kellermann
78d28063c4
util/IntrusiveForwardList: push_{front,back}() returns iterator
2023-09-22 11:32:33 +02:00
Max Kellermann
64647edbe1
lib/fmt/SocketAddressFormatter: new library
2023-09-19 11:22:39 +02:00
Max Kellermann
b36f5f1ec4
net/ToString: use #pragma once
2023-09-18 22:01:40 +02:00
Max Kellermann
592649d3f2
net/ToString: check family==AF_INET6 instead of looking for colons
2023-09-18 21:59:27 +02:00
Max Kellermann
9398599816
net/ToString: use libfmt
2023-09-18 21:58:55 +02:00
Max Kellermann
61c29473d3
net/ToString: append port only if it is non-zero
2023-09-18 11:11:00 +02:00
Max Kellermann
5fd2fc77f3
net/ToString: add null check
2023-09-18 11:08:16 +02:00
Max Kellermann
3eb0681e3d
net/ToString: use SocketAddress::GetLocalRaw()
2023-09-18 10:54:52 +02:00
Max Kellermann
e831af35fd
input/curl: move code to CreateEasy()
2023-09-17 14:26:47 +02:00
Max Kellermann
fb2e0f734e
lib/fmt/ToBuffer: add overload with StringBuffer parameter
2023-09-16 23:05:48 +02:00
Max Kellermann
3d69f43cff
event/Loop: include SocketEvent.hxx only if HAVE_THREADED_EVENT_LOOP
2023-09-16 22:55:04 +02:00
Max Kellermann
41b1931d91
event/Loop: move the poll_backend to the top
...
This is where all sockets are registered, so it should be initialized
first and destructed last.
2023-09-16 22:45:45 +02:00
Max Kellermann
f086444e4a
lib/curl/Easy: add method SetRequestBody(std::string_view)
2023-09-16 22:39:03 +02:00
Max Kellermann
b8210bbc45
lib/avahi/Poll: fix copyright header
2023-09-16 22:39:03 +02:00
Max Kellermann
ce2965b5bc
io/uring/meson.build: disable io_uring on Android
...
On Android, the feature is forbidden by a seccomp filter, see
https://security.googleblog.com/2023/06/learnings-from-kctf-vrps-42-linux.html
2023-09-16 22:39:03 +02:00
Max Kellermann
18000ff499
io/uring/Handler: remove unused header
2023-09-16 22:39:03 +02:00
Max Kellermann
64e91d6eb7
test/util/TestIntrusiveForwardList: add constant_time_size test
2023-09-16 22:39:03 +02:00
Max Kellermann
6f7dce6dca
test/util/TestIntrusiveForwardList: implement size() only if options.constant_time_size is set
2023-09-16 22:39:03 +02:00
Max Kellermann
175524ad02
util/IntrusiveForwardList: make end() non-static
...
So we can have a `const` overload which is important for some
algorithm templates.
2023-09-16 22:39:03 +02:00
Max Kellermann
bfbde72676
util/Intrusive*: insertion methods return an iterator
2023-09-16 22:39:03 +02:00
Max Kellermann
f76583a08a
util/IntrusiveList: document the erase() return value
2023-09-16 22:39:03 +02:00
Max Kellermann
6d39b401b5
util/IntrusiveForwardList: add method iterator_to()
2023-09-16 22:39:03 +02:00
Max Kellermann
f448bfd3f3
util/IntrusiveForwardList: add option cache_last
2023-09-16 22:39:03 +02:00
Max Kellermann
64b0587e78
util/OptionalField: new library
2023-09-16 22:39:03 +02:00
Max Kellermann
9fe813e572
util/IntrusiveForwardList: add pop_front_and_dispose()
2023-09-16 22:39:03 +02:00
Max Kellermann
b0da0bbf8b
util/IntrusiveForwardList: pop_front() returns reference
2023-09-16 22:39:03 +02:00
Max Kellermann
5c44082b77
util/IntrusiveForwardList: add non-static insert_after() implementation
2023-09-16 22:39:03 +02:00
Max Kellermann
df7ed27b78
util/IntrusiveForwardList: fix move operator, really swap counter
2023-09-16 22:39:03 +02:00
Max Kellermann
bef7ce37d9
RemoteTagCache: use the pop_front() return value
2023-09-16 22:39:03 +02:00
Max Kellermann
c74cf79e0f
Merge pull request #1865 from MusicPlayerDaemon/dependabot/github_actions/actions/checkout-4
...
build(deps): bump actions/checkout from 3 to 4
2023-09-16 21:58:20 +02:00
naglis
992488c6c6
doc/plugins.rst: document missing httpd settings
2023-09-16 00:18:03 +03:00
naglis
bdfe5e97cd
systemd: base "RestrictAddressFamilies" on build options
...
This allows to not allow `AF_NETLINK` if `smbclient` is not enabled.
2023-09-15 23:39:00 +03:00
naglis
df069bc456
systemd: base "ListenStream" on build options
...
Make `mpd.socket` configurable based on build options, so that e.g.
`ListenStream=6600` is not added if `tcp` option is not enabled.
2023-09-15 23:38:59 +03:00
Max Kellermann
9bb67ae7f0
subprojects: update sqlite to 3.43.0-1
2023-09-12 10:21:27 +02:00
Max Kellermann
c994fe4879
io/uring/meson.build: detect liburing with include_type=system
...
This avoids breakages due to `-Wgnu-anonymous-struct`.
2023-09-12 10:20:58 +02:00
Max Kellermann
32421fed89
subprojects: update liburing to 2.3-3
2023-09-12 10:17:03 +02:00
Max Kellermann
077add79cd
subprojects: update fmt to 9.1.0-2
2023-09-12 10:16:56 +02:00
Max Kellermann
50f0163f5f
time/SystemClock: pass by value
2023-09-12 09:56:06 +02:00
Max Kellermann
481c1b6f2e
lib/dbus/ReadIter: add method GetBool()
2023-09-12 09:53:58 +02:00
Max Kellermann
474b6610fa
lib/dbus/Error: add method GetName()
2023-09-12 09:53:15 +02:00
Max Kellermann
11c49da871
io/FileReader: remove unused method Close()
...
It's enough to have the destructor.
2023-09-12 09:53:06 +02:00
Max Kellermann
678828b56f
io/FileOutputStream: remove obsolete maybe_unused
2023-09-12 09:43:14 +02:00
Max Kellermann
9e802ad721
util/StringCompare: add pure attribute
2023-09-12 09:34:52 +02:00
Max Kellermann
859ffddea3
io/BufferedReader: fix ReadFullT() after std::span migration
2023-09-12 09:32:20 +02:00
Max Kellermann
daf935d310
util/HexFormat: add non-const overload
2023-09-12 09:11:38 +02:00
Max Kellermann
6953800628
python/build/libs.py: update CURL to 8.2.1
2023-09-11 22:24:27 +02:00
Max Kellermann
7c65c4f485
python/build/libs.py: update OpenSSL to 3.1.2
2023-09-11 22:23:59 +02:00
Max Kellermann
8950fb9393
python/build/libs.py: update zlib to 1.3
2023-09-11 22:22:00 +02:00
Max Kellermann
b754f3dc34
python/build/libs.py: update Opus to 1.4
2023-09-11 22:21:04 +02:00
Max Kellermann
e8a25dc8d9
python/build/libs.py: update FLAC to 1.4.3
2023-09-11 22:19:41 +02:00
Max Kellermann
99765cc704
modplug: add patch to remove the deprecated register keyword
2023-09-11 22:17:45 +02:00
Max Kellermann
a868dbce3b
android/AndroidManifest.xml: raise minSdkVersion to 24
...
This is needed to build libFLAC which uses ftello().
2023-09-11 22:14:23 +02:00
Max Kellermann
f68305bf00
util/NumberParser: remove obsolete __ANDROID_API__ check
2023-09-11 22:12:13 +02:00
Max Kellermann
517c234461
lib/zlib/GzipOutputStream: use MAX_WBITS
2023-09-11 22:02:04 +02:00
Max Kellermann
a58275591d
util/StaticVector: add methods erase(), pop_front()
2023-09-11 21:59:28 +02:00
Max Kellermann
a2f4fb9ddb
util/StaticVector: add method pop_back()
2023-09-11 21:59:21 +02:00
Max Kellermann
b2acf02af9
util/StaticVector: push_back(), emplace_back() return reference
...
Imitating std::vector since C++17.
2023-09-11 21:59:12 +02:00
Max Kellermann
d5b1ca1a52
util/StaticVector: use emplace_back() to implement push_back()
...
For this class, both are equal.
2023-09-11 21:58:56 +02:00
Max Kellermann
339b9f6e7b
net/StaticSocketAddress: add method GetSteadyPart()
2023-09-11 21:27:12 +02:00
Max Kellermann
35cfa6efa3
net/StaticSocketAddress: add SocketAddress cast constructor
2023-09-11 21:27:12 +02:00
Max Kellermann
34ec024bf4
net/AllocatedSocketAddress: add method GetSteadyPart()
2023-09-11 21:27:12 +02:00
Max Kellermann
75aa08ed6b
tag/Pool: use a power-of-2 hash table size
...
This is simpler to calculate and the advantage of using a prime is
negligible anyway.
2023-09-11 21:23:11 +02:00
Max Kellermann
c8dc1e0665
tag/Pool: use class IntrusiveHashSet intead of rolling a custom hash table
2023-09-11 21:15:28 +02:00
Max Kellermann
847ae7dd7c
util/IntrusiveHashSet: add insert_check_if()
2023-09-11 21:15:28 +02:00
Max Kellermann
44f55e1866
util/IntrusiveList: add missing initializer to insert_after()
...
We must not call std::next() if the list head was not yet initialized.
This was missing in commit 7065425927
2023-09-11 21:15:28 +02:00
Max Kellermann
c391adad10
tag/Pool: move code from calc_hash() to util/djb_hash.cxx
2023-09-11 20:53:37 +02:00
Max Kellermann
f578b06d83
tag/Pool: move calc_hash() returns std::size_t
2023-09-11 20:51:44 +02:00
Max Kellermann
0748f75d9b
tag/Pool: rename TagPoolSlot to TagPoolItem
2023-09-11 20:44:55 +02:00
Max Kellermann
7dff29bcd1
util/IntrusiveHashSet: add option zero_initialized
2023-09-11 20:34:17 +02:00
Max Kellermann
3e09f95b40
tag/Pool: enable option zero_initialized
...
Commit 44beae519d caused the MPD
executable to grow by more than 1 MB because the `slots` array
suddenly was not zero-initialized anymore, because the doubly-linked
list is circular, while the singly-linked list is zero-terminated.
This option moves the array back to the `bss` section.
2023-09-11 20:32:26 +02:00
Max Kellermann
7065425927
util/IntrusiveList: add option zero_initialized
2023-09-11 20:30:38 +02:00
Max Kellermann
f01793ad4a
util/Intrusive*: move constant_time_size to an options struct
...
This makes it easier to add more options later.
2023-09-11 19:18:36 +02:00
Max Kellermann
1f495efb46
test/LoadDatabase: ignore tag/charset mismatches
...
This program shouldn't fail just because the configuration doesn't
match - it has no configuration, it's just a dumb test program.
2023-09-07 09:54:03 +02:00
Max Kellermann
38d8359384
test/LoadDatabase: new test program (for benchmarking the database loader)
2023-09-06 16:17:24 +02:00
Max Kellermann
2c01e79b47
SongSave: omit FixTagString() for strings from the database file
...
Strings in the database should have been sanitized already, so let's
not waste CPU on this.
2023-09-06 16:12:20 +02:00
Max Kellermann
a573d57de8
tag/Builder: remove unnecessary explicit AddItem() overload
2023-09-06 16:10:31 +02:00
Max Kellermann
2f4e2935a3
db/upnp, playlist/pls: use AddItem(std::string_view)
2023-09-06 16:08:42 +02:00
Max Kellermann
44beae519d
tag/Pool: use doubly-linked list
...
This adds some memory overhead but eliminates the linear search from
tag_pool_put_item().
2023-09-06 16:00:25 +02:00
Max Kellermann
b896711fc6
tag/Pool: fix crash in tag_pool_put_item()
...
Regression by commit 76bdfabcc5
2023-09-06 15:53:17 +02:00
Max Kellermann
76bdfabcc5
tag/Pool: use class IntrusiveForwardList
2023-09-06 15:33:26 +02:00
Max Kellermann
b35e8a588f
util/IntrusiveForwardList: add operator++(int)
2023-09-06 15:31:07 +02:00
Max Kellermann
6c48f5ac63
tag/Pool: use std::array
2023-09-06 15:10:47 +02:00
Max Kellermann
1448f52eac
util/VarSize: convert static_assert to concept check
2023-09-06 15:05:26 +02:00
Max Kellermann
c96e8ab47c
db/simple/DirectorySave: optimize duplicate checks with std::set
...
This reduces the CPU usage for loading a large database by more than 50%.
2023-09-06 14:56:41 +02:00
Max Kellermann
2c4ef4460f
db/update/SpecialDirectory: more std::string_view migration
2023-09-06 14:51:37 +02:00
Max Kellermann
20bbe1b57b
fs/Traits: add GetFilenameSuffix() overload with std::string_view
2023-09-06 14:50:36 +02:00
Max Kellermann
449d59af2f
db/simple/Directory: use operator== to compare strings
2023-09-06 14:30:08 +02:00
Max Kellermann
851136e6fd
db/simple/Directory: GetName() returns std::string_view
2023-09-06 14:29:32 +02:00
Max Kellermann
ad854e9867
db/simple/Save: initialize array without memset()
2023-09-06 14:17:07 +02:00
dependabot[bot]
f53dde970f
build(deps): bump actions/checkout from 3 to 4
...
Bumps [actions/checkout](https://github.com/actions/checkout ) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases )
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md )
- [Commits](https://github.com/actions/checkout/compare/v3...v4 )
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-09-04 15:51:28 +00:00
naglis
046a385070
doc/user.rst: use explicit meson setup command
...
The implicit setup command is deprecated since 0.64.0
2023-08-24 13:57:03 +03:00
jcorporation
9a28176d72
Save consume and single oneshot as string
...
Consume and single oneshot should be saved as string.
closes #1853
2023-08-07 23:23:08 +02:00
Max Kellermann
ba2df05fb4
lib/zlib/GzipOutputStream: add noexcept
2023-08-03 20:58:43 +02:00
Max Kellermann
8722c51306
lib/dbus/AppendIter: add Append(int32_t), Append(int64_t)
2023-08-03 20:58:01 +02:00
Max Kellermann
80104eb6d5
util/IntrusiveList: fix illegal downcast (ubsan)
...
Fixes UBSanitizer warning:
src/util/IntrusiveList.hxx:108:10: runtime error: downcast of address 0xdeadbeef which does not point to an object of type 'Foo'
2023-08-03 20:56:34 +02:00
Max Kellermann
8743326924
sticker/Database: allow moving
2023-08-03 20:54:57 +02:00
Max Kellermann
83a6cb804b
util/IntrusiveHashSet: add template argument GetKey
...
This is a big simplification of all IntrusiveHashSet users: instead of
having to implement multiple overloads of Hash and Equal, the
IntrusiveHashSet class can first extract the effective key from an
item and then pass it to the Hash/Equal functions.
2023-08-03 20:50:21 +02:00
Max Kellermann
78801f303e
test/util/TestIntrusiveHashSet: add test for remove_and_dispose_key()
2023-08-03 20:44:52 +02:00
Max Kellermann
9691b609a2
util/IntrusiveHashSet: remove_and_dispose() returns number of removed elements
2023-08-03 20:44:47 +02:00
Max Kellermann
250fa8c732
util/IntrusiveHashSet: rename remove_and_dispose() to remove_and_dispose_key()
2023-08-03 20:44:39 +02:00
Max Kellermann
2cd5f4cd3e
util/IntrusiveHashSet: replace template parameters Hash/Equal with a single one
...
Preparing to add a key extraction function. Without this "Operators"
template parameter, we'd have even more template parameters, and that
parameter list would grow too complex. Better wrap it in one single
template that contains all operators.
This is an API change which all callers need to adjust to, but it will
be worth it.
2023-08-03 20:44:14 +02:00
Max Kellermann
dcd7c6337c
util/Intrusive{List,HashSet}: reimplement hook mode detection with implicit cast
2023-08-03 20:33:15 +02:00
Max Kellermann
43d633f560
Instance: use C++11 initializers
2023-07-23 09:14:25 +02:00
Max Kellermann
1c37b0487c
lib/fmt/SystemError: add VFmtErrno()
2023-07-21 19:44:45 +02:00
Max Kellermann
acc92b156b
util/Concepts: remove obsolete fallbacks
2023-07-21 19:43:04 +02:00
Max Kellermann
aeadae5399
util/IntrusiveHashSet: insert_check() returns the bucket head on success
...
The list head is a stable value that is guaranteed to be still valid
when insert_commit() gets called.
This fixes a linked list corruption bug in class StaticCache which
occurs when the cache item pointed to by the iterator gets evicted
between insert_check() and insert_commit().
2023-07-21 19:42:35 +02:00
Max Kellermann
42d5b05f54
util/IntrusiveHashSet: rename insert() to insert_commit()
...
Clarify that the method is not a freestanding insertion method but
should only be used after insert_check().
2023-07-21 19:42:26 +02:00
Max Kellermann
e133f621a4
util/IntrusiveHashSet: add insert_check() documentation
2023-07-21 19:41:46 +02:00
Max Kellermann
91437d9e63
util/IntrusiveList: add insert_after()
2023-07-21 19:41:40 +02:00
Max Kellermann
f1b497fb0c
util/IntrusiveList: document insert()
2023-07-21 19:41:36 +02:00
Max Kellermann
cc9d061e51
util/IntrusiveList: pop_front() and pop_back() return reference
2023-07-21 19:41:13 +02:00
Max Kellermann
62ee9a4d60
util/DynamicFifoBuffer: use T instead of std::byte
...
Mistake added by commit b528b467649754
2023-07-21 19:40:38 +02:00
jcorporation
082f72dd20
Add support of TAG_MUSICBRAINZ_RELEASEGROUPID
...
Closes #1767
2023-07-12 19:43:37 +02:00
Max Kellermann
9c19368fc7
Merge branch 'v0.23.x'
2023-06-02 14:36:02 +02:00
Simon Arlott
561d6fd478
meson: Use correct prefix for systemd_system_unit_dir
...
systemd uses "rootprefix", not "prefix" for this value
059b1b31ad/src/core/systemd.pc.in (L23)
2023-06-02 14:33:13 +02:00
Naïm Favier
42a01822bf
meson: use correct prefix for systemd dirs
...
See https://www.bassi.io/articles/2018/03/15/pkg-config-and-paths/
Fixes the build in nixpkgs
2023-06-02 14:33:09 +02:00
Shen-Ta Hsieh
38f1237d49
output/wasapi: cast to const char * for fmt 10 compatible
2023-06-02 14:29:43 +02:00
Shen-Ta Hsieh
8df77122e5
python/build/libs.py: use right cmake variable to disable SDL
2023-06-02 14:28:22 +02:00
Shen-Ta Hsieh
fef6b9df80
flac: Try InputStream interface if flac failed to read through a wchar_t path
2023-06-02 14:28:22 +02:00
Shen-Ta Hsieh
d52eac66db
doc/mpdconf.example: add hardware mixer example config for wasapi
2023-06-02 14:27:24 +02:00
Shen-Ta Hsieh
70879f0abc
thread/WindowsFuture: remove wrong address_of operator
2023-06-02 14:27:24 +02:00
Shen-Ta Hsieh
bcb393628e
win32/ComWorker: rename variable name to prevent ambiguous
2023-06-02 14:22:11 +02:00
Max Kellermann
18d3a5c12b
decoder/flac: add noexcept and inline
2023-06-02 14:22:11 +02:00
Simon Arlott
6ee3d0102b
decoder/mad: Fix decode of LAME peak value
...
6d91b5c7b2 ("fix double promotions") changed
how LAME peak values are decoded, producing large incorrect values that
cause some MP3 files to play silently.
Restore the original decode from MAD fixed-point format to double and
document what it's doing.
Fixes #1823
2023-06-02 14:15:48 +02:00
Max Kellermann
fc9626e2f4
increment version number to 0.23.14
2023-06-02 14:15:14 +02:00
Simon Arlott
3bedd94fc8
doc: Fix syntax error
...
With sphinx-build 5.0.0:
doc/user.rst:728: ERROR: Unexpected indentation.
doc/user.rst:731: ERROR: Unexpected indentation.
2023-06-02 14:10:38 +02:00
Max Kellermann
45f81cde6d
Merge branch 'null-always-off' of https://github.com/nomis/MPD
2023-05-25 10:42:58 +02:00
John Regan
a482c798ad
pcm: declare IsSilentSample as const
...
GNU libstdc++ declares cmath functions as constexpr, but libc++ does
not. The C++ standards state the standard library functions should not
be declared constexpr unless explicitly required.
2023-05-24 15:05:19 -04:00
Naïm Favier
838af929a0
meson: use correct prefix for systemd dirs
...
See https://www.bassi.io/articles/2018/03/15/pkg-config-and-paths/
Fixes the build in nixpkgs
2023-05-22 22:23:38 +02:00
Max Kellermann
d9b1f6223e
io/uring/Close: wrapper for io_uring_prep_close()
2023-05-22 21:59:44 +02:00
Max Kellermann
26577d1301
io/uring/Queue: make Submit() virtual, Push() not
...
This allows submitting io_uring calls without an `Operation` instance
(fire & forget). We'll do that for close().
2023-05-22 21:57:18 +02:00
Max Kellermann
6496c1b806
util/ScopeExit: convert the function from base class to member
...
This allows using `final` callables.
2023-05-22 21:20:49 +02:00
Max Kellermann
7bb251dad8
db/update/Walk: use marker to remove deleted items
...
This eliminates all `Storage::GetInfo()` calls from
`UpdateWalk::PurgeDeletedFromDirectory()` and instead uses a "marker"
field to mark items that have been visited; later, all unmarked items
can be deleted.
This eliminates a lot of redundant I/O which is noticable with the
`curl` storage plugin (i.e. WebDAV).
2023-05-22 20:13:01 +02:00
Max Kellermann
9027e5c5bb
Merge tag 'v0.23.13'
...
release v0.23.13
2023-05-22 19:52:08 +02:00
Max Kellermann
8842650c33
release v0.23.13
2023-05-22 19:46:38 +02:00
Max Kellermann
d5bf128cee
storage/curl: throw HttpStatusError
2023-05-22 19:29:46 +02:00
Max Kellermann
5cd86e272f
input/curl: disable CURLOPT_FAILONERROR
...
Let OnHeaders() check the status.
The status checking code was added by commit 4f021cbced in 2011,
but in 2008, commit a8e81326d0 enabled `CURLOPT_FAILONERROR`, which
means the status checking code never had any effect.
This allows `LoadExcludeListOrLog()` to hide boring "404 Not Found"
log messages via `IsFileNotFound()`.
2023-05-22 19:03:12 +02:00
Max Kellermann
740cbe9e02
event/Loop: remove failing assert()
...
The `assert(!quit)` can fail if the `EventThread` gets stopped before
it enters `EventLoop::Run()`. There is a similar problem with `alive`,
which gets reset by `EventThread::Stop()`.
If that happens, then `EventLoop::Run()` should return immediately
without handling any events.
2023-05-22 18:14:25 +02:00
Max Kellermann
ed890a273a
doc/user.rst: document the replaygain_missing_preamp setting
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1785
2023-05-22 16:17:05 +02:00
Max Kellermann
068cd559e1
db/update/Walk: clear Song::in_playlist
...
Without clearing all `in_playlist` flags, the songs will never be
revealed again if they were hidden once by a CUE sheet, not even after
the CUE sheet gets deleted or modified.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1784
2023-05-22 15:41:58 +02:00
Max Kellermann
dc127f39a7
util/ScopeExit: use std::declval()
...
Fixes GCC 10 error:
error: cannot call member function `Foo` without object
2023-05-22 15:01:25 +02:00
Max Kellermann
7a99a7008c
util/ScopeExit: use std::exchange()
2023-05-22 14:44:45 +02:00
Max Kellermann
70b451db7b
util/ScopeExit: add noexcept
2023-05-22 14:44:17 +02:00
Max Kellermann
2ab03a0914
util/ScopeExit: allow the function to throw
...
Fixes crash inside AtScopeExit() in the WASAPI output plugin.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1759
2023-05-22 14:43:23 +02:00
Max Kellermann
2fa8c7d2db
lib/crypto/meson.build: link with ffmpeg_util_dep
...
This adds `MakeFfmpegError()` to the executable and fixes a linker
failure when `libavutil` is available, but `libavformat` and
`libavcodec` are not.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1786
2023-05-22 14:05:13 +02:00
Max Kellermann
7c759ba8b0
lib/ffmpeg/meson.build: move libavutil helpers into separate library
2023-05-22 14:03:47 +02:00
Max Kellermann
6d9b452fde
lib/ffmpeg/LogError: remove unused library
2023-05-22 13:48:33 +02:00
Max Kellermann
8ba68fdb47
io/OutputStream: use std::span
2023-05-21 21:35:11 +02:00
Max Kellermann
e72d27566c
io/BufferedOutputStream: use std::string_view
2023-05-21 21:31:32 +02:00
Max Kellermann
01c02a1ef8
util/StaticFifoBuffer: add method MoveFrom()
2023-05-21 21:26:20 +02:00
Max Kellermann
4bb4611e78
Merge branch 'v0.23.x'
2023-05-21 21:18:45 +02:00
Michiel Beijen
f7eb1c9a83
Fix meson build warning for get_pkgconfig_variable
...
Otherwise, building will generate these warnings:
systemd/system/meson.build:5: WARNING: Project targeting '>= 0.56.0' but tried to use feature deprecated since '0.56.0': Dependency.get_pkgconfig_variable. use Dependency.get_variable(pkgconfig : ...) instead
systemd/user/meson.build:5: WARNING: Project targeting '>= 0.56.0' but tried to use feature deprecated since '0.56.0': Dependency.get_pkgconfig_variable. use Dependency.get_variable(pkgconfig : ...) instead
2023-05-21 21:07:14 +02:00
Max Kellermann
2d22e6dee4
subprojects: update sqlite to 3.41.2-2
2023-05-21 21:05:17 +02:00
Max Kellermann
4587bf759d
subprojects: update expat to 2.5.0-2
2023-05-21 21:04:56 +02:00
Max Kellermann
e1e37cfe3c
TagPrint, command/File: two more libfmt 10 workarounds
...
libfmt 10 doesn't know how to format a StringView, and doesn't cast to
std::string_view anymore. The StringView class has been removed from
MPD 0.24 completely, and this is a stable-branch-only workaround.
Closes https://github.com/MusicPlayerDaemon/MPD/pull/1814
2023-05-21 21:03:20 +02:00
latex
381934985a
reorder ffmpeg to be lower priority than gme
...
This should prevent ffmpeg from taking priority over the gme plugin.
The ffmpeg plugin is more buggy than gme.
One of the prominent bugs of preferring ffmpeg over gme is that ffmpeg
cannot seek SAP files while gme can. This should prevent that from
happening.
2023-05-21 20:58:53 +02:00
Max Kellermann
a8042885ac
TimePrint: minor fixup for libfmt 10
...
libfmt version 10 has difficulties formatting a `StringBuffer`, and we
need to help it by explicitly invoking the `c_str()` method.
2023-05-21 20:58:19 +02:00
Max Kellermann
a71e68db50
command/player, SongPrint: use AudioFormatFormatter()
...
libfmt version 10 apparently doesn't know how to format a
`StringBuffer`, failing the MPD build. Since we have a formatter
specialization for `AudioFormat`, let's use that - it's better and
easier to use.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1807
2023-05-21 20:57:59 +02:00
Max Kellermann
1417578b3d
db/update/Archive: validate directory names
...
Fixes assertion failure if the ZIP file contains a path that begins
with a slash.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1793
2023-05-21 20:57:38 +02:00
Max Kellermann
96befa138c
db/update/Archive: ignore filenames with newline character
2023-05-21 20:56:38 +02:00
Max Kellermann
16a99804de
db/update/Archive: move check to IsAcceptableFilename()
2023-05-21 20:56:32 +02:00
Max Kellermann
75a39ed279
db/update/Archive: remove useless log message
2023-05-21 20:55:59 +02:00
Benjamin Cremer
4d357ab77c
Fix syntax error in mpdconf.example
2023-05-21 20:51:57 +02:00
datasone
d4f3dd49b4
db/SimpleDatabasePlugin: store in_playlist value of songs into database
...
Fixes hide_playlist_targets not working after server restart
Currently, `hide_playlists_targets` works by skipping songs with
`in_playlist` value set to true in
[`Directory::Walk`](a57bcd0238/src/db/plugins/simple/Directory.cxx (L237) ). But
`in_playlist` is not stored and only updated in
[`UpdateWalk::PurgeDanglingFromPlaylists`](a57bcd0238/src/db/update/Playlist.cxx (L139) ),
which will only be executed while updating DB.
This causes the problem that playlist target songs are correctly
hidden after database update, but will remain visible after mpd server
restarted. This pr solves the problem by storing `in_playlist` value
of songs into the `SimpleDatabase` file.
2023-05-21 20:51:47 +02:00
kaliko
4ec6d0555a
check systemd unit dir from systemd.pc in meson
2023-05-21 20:51:33 +02:00
Max Kellermann
a6a1182c4c
python/build/libs.py: update OpenSSL to 3.1.0
2023-05-21 20:50:03 +02:00
Max Kellermann
a59c9c602b
python/build/libs.py: update CURL to 8.0.1
2023-05-21 20:50:03 +02:00
Max Kellermann
0c4d824d64
subprojects/sqlite3.wrap: update to 3.41.0-1
2023-05-21 20:50:03 +02:00
Max Kellermann
a5281856c9
python/build/libs.py: update WildMidi to 0.4.5
2023-05-21 20:50:03 +02:00
Max Kellermann
0206a46d39
decoder/gme: require GME 0.6 or later
...
This allows dropping a few compile-time version checks and we can use
pkg-config to detect the library.
2023-05-21 20:50:03 +02:00
Max Kellermann
9475ef2202
fs/Charset: assign fs_charset
...
This got lost 8 years ago in commit 87c88fcb27
D'oh!
2023-05-21 20:50:03 +02:00
Max Kellermann
edae00e719
fs/Charset: remove useless log message
2023-05-21 20:50:03 +02:00
Max Kellermann
fb695bc55f
command/{file,storage}: remove stray "#pragma GCC diagnostic pop"
2023-05-21 20:50:03 +02:00
Max Kellermann
23a5b8fd3c
python/build/meson.py: remove unused import
2023-05-21 20:43:09 +02:00
Max Kellermann
273a93cfcf
build/python/cmake: set CMAKE_C_FLAGS_INIT, not CMAKE_C_FLAGS
...
According to
https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_FLAGS_INIT.html
the _INIT variables should be set in the toolchain file.
2023-05-21 20:43:05 +02:00
Max Kellermann
d105985d78
build/python/cmake: set CMAKE_OSX_SYSROOT on macOS
2023-05-21 20:43:00 +02:00
Max Kellermann
f8cfeb39e9
build/python/cmake: add "env" parameter
2023-05-21 20:42:51 +02:00
Max Kellermann
d5d3982d3c
build/python/build/project.py: add "lazy" parameter to make_build_path()
2023-05-21 20:42:27 +02:00
Max Kellermann
47341107ea
build/python/build/project.py: raise exception on regex mismatch
2023-05-21 20:42:18 +02:00
Max Kellermann
90eaa87a4d
python/build/zlib.py: use autotools to be more portable
...
Right now, zlib is only built for Windows, but we may eventually
changed that, so don't hard-code `win32/Makefile.gcc`.
2023-05-21 20:42:12 +02:00
Max Kellermann
b09a54b2c2
python/build/autotools.py: use toolchain.arflags
2023-05-21 20:42:04 +02:00
Max Kellermann
10aec174d5
python/{cmake,autotools}: build in verbose mode
...
Make sure all the gory details are visible in CI logs.
2023-05-21 20:41:49 +02:00
Max Kellermann
d32ed194e8
python/build/autotools.py: dump config.log on configure error
...
For better error logs on CI.
2023-05-21 20:41:44 +02:00
Felix Hädicke
70d0fbd715
python/makeproject: do not use hard-code absolute path to make
2023-05-21 20:41:38 +02:00
Felix Hädicke
302432e157
python/makeproject: set appropriate build jobs count depending on the number of CPUs
2023-05-21 20:41:34 +02:00
Felix Hädicke
4ab8a677dc
build/python: do not use absolute path for tar
2023-05-21 20:41:29 +02:00
Max Kellermann
52e4a4c904
build/python/build/project.py: lazy tarball extraction
2023-05-21 20:41:25 +02:00
Max Kellermann
a0f6932ebe
unix/SignalHandlers: shut down if parent process dies in --no-daemon mode
...
By default, if the parent of a process dies, the process gets SIGHUP
and is supposed to shut down. This however doesn't work for MPD,
because MPD redefines SIGHUP with a different meaning (like most
daemons do).
To work around this, we configure the kernel to send SIGTERM instead
of SIGHUP.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1706
2023-05-21 20:40:47 +02:00
Max Kellermann
6e700dab69
CommandLine: hard-code daemon=false if ENABLE_DAEMON is not set
2023-05-21 20:40:39 +02:00
Max Kellermann
35eaed7206
python/build/libs.py: update FFmpeg to 6.0
2023-05-21 20:40:39 +02:00
Max Kellermann
e7c963f2ce
python/build/libs.py: disable more unused FFmpeg features
2023-05-21 20:40:39 +02:00
Naïm Favier
949d72e368
output/PipeWire: lock thread loop in SendTag
2023-05-21 20:40:29 +02:00
Max Kellermann
8d2a184658
python/build/libs.py: update CURL to 7.88.1
2023-05-21 20:36:28 +02:00
Max Kellermann
c877a32d97
python/build/libs.py: update OpenSSL to 3.0.8
2023-05-21 20:36:23 +02:00
Max Kellermann
541468f0ca
input/async: check for errors in Seek()
...
Fixes a busy loop in BufferingInputStream::RunThreadLocked() because
the method never learns that seeking is ignored, even though the HTTP
stream is already broken and can never be read; nobody cared to check
for errors.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1727
2023-05-21 20:34:19 +02:00
Max Kellermann
d2797effa3
command/database: add missing include for UINT_MAX
2023-05-21 20:33:34 +02:00
Max Kellermann
1170fb1e1e
output/osx: change type to std::size_t to fix -Wc++11-narrowing
2023-05-21 20:33:03 +02:00
Max Kellermann
65b9b3195c
lib/dbus/AppendIter: add missing include
2023-05-21 20:33:03 +02:00
Max Kellermann
258830e913
increment version number to 0.23.13
2023-05-21 20:29:23 +02:00
Max Kellermann
c69b9780df
Merge branch 'reorder-decoder-plugins' of https://github.com/fuck-shithub/MPD
2023-05-15 21:03:35 +02:00
Max Kellermann
f869593ac8
TimePrint: minor fixup for libfmt 10
...
libfmt version 10 has difficulties formatting a `StringBuffer`, and we
need to help it by explicitly invoking the `c_str()` method.
2023-05-15 21:00:24 +02:00
Max Kellermann
181b96dd2d
command/player, SongPrint: use AudioFormatFormatter()
...
libfmt version 10 apparently doesn't know how to format a
`StringBuffer`, failing the MPD build. Since we have a formatter
specialization for `AudioFormat`, let's use that - it's better and
easier to use.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1807
2023-05-15 20:59:05 +02:00
latex
4e9f463bb6
reorder ffmpeg to be lower priority than gme
...
This should prevent ffmpeg from taking priority over the gme plugin.
The ffmpeg plugin is more buggy than gme.
One of the prominent bugs of preferring ffmpeg over gme is that ffmpeg
cannot seek SAP files while gme can. This should prevent that from
happening.
2023-05-12 00:28:56 +02:00
borine
4947bb113d
input/plugins/Alsa: limit ALSA buffer time to 2 seconds maximum
...
Some ALSA capture devices can have very large buffers, holding 10
seconds or more audio. Using the maximum buffer size with such
devices leads to unacceptably large, and unnecessary, latency.
Also, some ALSA drivers (e.g. HDA Intel PCH) report an invalid
maximum period size, and the period size that mpd calculates from
the maximum buffer size results in "Invalid argument" error when
applying the hw_params. Note that the "default" capture device on
many cards includes the "dsnoop" plugin which imposes a buffer
size of 16384 frames, so that "alsa://" works OK but
"alsa://plughw" or "alsa://hw" both fail.
Limit the maximum buffer time for ALSA input devices to a more useable
2 seconds, thereby avoiding both the above problems.
2023-05-06 10:33:48 +01:00
skidoo23
4345a656aa
output/httpd: fix libfmt icy-metaint replacement field
...
Since using libfmt (commit: dfc5b49 ) ICY MetaData was broken. Eg MP3 streams encoded with LAME were affected resulting in missing stream titles on VLC or strange noises on Sonos hardware. This commit fixes the icy-metaint field.
2023-05-04 18:15:13 +02:00
Max Kellermann
31dc8b73b7
db/update/Archive: validate directory names
...
Fixes assertion failure if the ZIP file contains a path that begins
with a slash.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1793
2023-04-30 08:46:52 +02:00
Max Kellermann
e84db4f411
db/update/Archive: ignore filenames with newline character
2023-04-30 08:45:34 +02:00
Max Kellermann
395bf34a91
db/update/Archive: move check to IsAcceptableFilename()
2023-04-30 08:42:16 +02:00
Max Kellermann
dcc7628b67
db/update/Archive: remove useless log message
2023-04-30 08:39:34 +02:00
Max Kellermann
f2a4ae15aa
db/update: pass filenames as std::string_view
2023-04-30 08:28:43 +02:00
Max Kellermann
434bcb08ee
db/simple/Song: pass std::string_view to Load{File,FromArchive}()
2023-04-30 08:21:20 +02:00
Max Kellermann
99885c4cbc
util/IntrusiveHashSet: add method remove_and_dispose()
2023-04-22 08:40:53 +02:00
Simon Arlott
ab196f7afc
output/Control: Support always_off outputs that are never used for playback
...
Add an `always_off` option to outputs that causes them to never start
playback even if they're enabled.
This allows placeholder `null` outputs to be defined for the purpose
of having an external client react to the enabled state without the
side effects of real outputs. Like an external mixer, the client can
perform some action when an output is enabled.
Normally `null` outputs can be used for playback so it's possible for
MPD to continue playback silently if a problem occurs with all the real
outputs (or there are none enabled).
2023-04-21 20:54:37 +01:00
Max Kellermann
90c3fe22f5
decoder/openmpt: check libopenmpt version at compile time, not at configure time
2023-04-21 17:29:20 +02:00
Simon Arlott
ad8117e7c8
decoder/openmpt: Fix build error with libopenmpt < 0.5
...
openmpt_at_end is a string, not an integer
Fixes build error:
src/decoder/plugins/OpenmptDecoderPlugin.cxx: In function 'void mod_decode(DecoderClient&, InputStream&)':
src/decoder/plugins/OpenmptDecoderPlugin.cxx:85:44: error: invalid cast from type 'std::string_view' {aka 'std::basic_string_view<char>'} to type 'unsigned in '
85 | mod.ctl_set("play.at_end", std::to_string((unsigned)openmpt_at_end));
| ^~~~~~~~~~~~~~~~~~~~~~~~
2023-04-21 17:24:42 +02:00
Benjamin Cremer
82568c0b52
Fix syntax error in mpdconf.example
2023-04-13 08:47:43 +02:00
datasone
838b19c2b5
db/SimpleDatabasePlugin: store in_playlist value of songs into database
...
Fixes hide_playlist_targets not working after server restart
Currently, `hide_playlists_targets` works by skipping songs with
`in_playlist` value set to true in
[`Directory::Walk`](a57bcd0238/src/db/plugins/simple/Directory.cxx (L237) ). But
`in_playlist` is not stored and only updated in
[`UpdateWalk::PurgeDanglingFromPlaylists`](a57bcd0238/src/db/update/Playlist.cxx (L139) ),
which will only be executed while updating DB.
This causes the problem that playlist target songs are correctly
hidden after database update, but will remain visible after mpd server
restarted. This pr solves the problem by storing `in_playlist` value
of songs into the `SimpleDatabase` file.
2023-04-12 05:18:21 +02:00
kaliko
0d2f67b523
check systemd unit dir from systemd.pc in meson
2023-04-11 21:06:53 +02:00
Max Kellermann
a57bcd0238
thread/Mutex: add RecursiveMutex
2023-04-06 21:32:18 +02:00
Max Kellermann
76497bd5f7
util/IntrusiveSortedList, event/TimerList: include cleanup
2023-04-06 10:24:53 +02:00
Max Kellermann
53ec02d5e9
net/SocketDescriptor: decouple from FileDescriptor on Windows
...
On Windows, a socket is not a file descriptor; it is a different beast
(and anyway, Windows doesn't have file descriptors).
2023-03-29 10:12:50 +02:00
Max Kellermann
7a5f485cf8
event/ServerSocket: use class UniqueSocketDescriptor in SupportsIPv6()
2023-03-29 10:06:48 +02:00
Max Kellermann
90565b1e36
test/run_{input,output}: add missing includes
2023-03-29 10:06:48 +02:00
Max Kellermann
6f7c7a2149
event/EpollBackend: add missing header guard
2023-03-21 11:00:41 +01:00
Max Kellermann
91123983ad
Revert "python/build/meson.py: keep Meson from executing Android-x86 test binaries"
...
This reverts commit 8ab2722300 . The
"needs_exe_wrapper" setting was already there, and the new one was
misplaced, it belongs in "[properties]".
2023-03-21 09:46:25 +01:00
Max Kellermann
2506edbffb
python/build/libs.py: update OpenSSL to 3.1.0
2023-03-21 09:39:28 +01:00
Max Kellermann
929520ecd2
python/build/libs.py: update CURL to 8.0.1
2023-03-21 09:38:22 +01:00
Max Kellermann
a20d467bf1
event/Loop: move quit_injected check to inside #ifdef HAVE_THREADED_EVENT_LOOP
2023-03-20 15:02:32 +01:00
Max Kellermann
102dc123e8
LogBackend: log to stderr (regression fix)
2023-03-14 20:25:28 +01:00
Max Kellermann
b4d0b23369
LogBackend: use fmt::print()
2023-03-14 20:24:14 +01:00
Max Kellermann
119a949bb5
ls: use fmt::print()
2023-03-14 20:20:46 +01:00
Max Kellermann
f5b22bf2c3
input/Offset: remove unused macro PRIoffset
2023-03-14 20:20:10 +01:00
Max Kellermann
5b7a89d714
mixer/plugins/volume_mapping: convert to C++
2023-03-14 20:18:41 +01:00
Max Kellermann
5b41857a22
mixer/plugins/volume_mapping: add SPDX header
2023-03-14 20:08:43 +01:00
Max Kellermann
688d9ff114
util/UriExtract: add uri_get_path_query_fragment()
...
Rename uri_get_path() to uri_get_path_query_fragment() and add a new
uri_get_path() function.
2023-03-14 20:03:17 +01:00
Max Kellermann
c2d202e9b0
meson_options.txt: add option "libfuzzer"
...
This option allows disabling libFuzzer, which is required to run the
fuzzers with Honggfuzz.
2023-03-14 19:47:22 +01:00
Max Kellermann
bc51bc2933
pcm/Normalizer: add method Reset()
2023-03-13 13:54:12 +01:00
Max Kellermann
f547a56b1d
pcm/Normalizer: use Traits::long_type
2023-03-13 13:51:27 +01:00
Max Kellermann
1f6637d49a
pcm/Normalizer: add constant SHIFT
2023-03-13 13:49:25 +01:00
Max Kellermann
de155a740c
pcm/Normalizer: convert peakPos to std::size_t
2023-03-13 13:47:04 +01:00
Max Kellermann
f323fc48d7
pcm/Normalizer: eliminate the local variable slot
2023-03-13 13:45:28 +01:00
Max Kellermann
2ea634c302
pcm/Normalizer: replace the gain array with a simple prev_gain variable
2023-03-13 13:44:45 +01:00
Max Kellermann
c0d38d941a
pcm/Normalizer: split the normalization loop
...
Performance improvement because the ramp code is now moved out of the
hot code path, allowing the compiler to vectorize.
2023-03-13 13:38:19 +01:00
Max Kellermann
d7f2d90fd3
pcm/Normalizer: no in-place editing, separate src/dest parameters
...
This eliminates the memcpy() call from NormalizeFilter::FilterPCM().
2023-03-13 13:37:49 +01:00
Max Kellermann
8ea9b89321
pcm/Normalizer: use std::span
2023-03-13 13:16:44 +01:00
Max Kellermann
738254b2fc
pcm/Normalizer: use SampleTraits
2023-03-13 12:42:37 +01:00
Max Kellermann
fcc9a98cad
pcm/Normalizer: use PcmClamp()
2023-03-13 12:42:36 +01:00
Max Kellermann
dcf0a3e475
pcm/Normalizer: remove clipped (only written to, never read)
2023-03-13 12:42:34 +01:00
Max Kellermann
e990d6eecc
pcm/Normalizer: make variables more local
2023-03-13 12:42:31 +01:00
Max Kellermann
941636b87b
pcm/Normalizer: eliminate local variable ap
2023-03-13 12:31:16 +01:00
Max Kellermann
1298a82f4f
pcm/Normalizer: use std::size_t
2023-03-13 12:31:16 +01:00
Max Kellermann
e6fedcbd10
pcm/Normalizer: expose the class, convert functions to methods
2023-03-13 12:25:09 +01:00
Max Kellermann
48c8c7daf5
pcm/Normalizer: move code to ctor/dtor
2023-03-13 12:25:09 +01:00
Max Kellermann
6e5d9d4490
pcm/Normalizer: hard-code the preferences
2023-03-13 12:25:09 +01:00
Max Kellermann
d2f2dde2e1
pcm/Normalizer: eliminate struct CompressorConfig
2023-03-13 12:25:09 +01:00
Max Kellermann
d0dd035075
pcm/Normalizer: use new/delete instead of malloc()/free()
2023-03-13 12:25:09 +01:00
Max Kellermann
7702643e1b
pcm/Normalizer: remove Compressor_setHistory(), no resize possible
...
This feature was never used.
2023-03-13 12:25:09 +01:00
Max Kellermann
984c9c317a
pcm/Normalizer: add noexcept
2023-03-13 12:25:09 +01:00
Max Kellermann
2d7068a09d
pcm/AudioCompress: convert to C++
2023-03-13 12:25:01 +01:00
Max Kellermann
d712c3b408
pcm/AudioCompress: fold config.h into compress.c
2023-03-13 11:55:44 +01:00
Max Kellermann
0a623122dc
pcm/AudioCompress: add SPDX header
2023-03-13 11:40:46 +01:00
Max Kellermann
68c36c0d3f
decoder/dsf: use PackedLE64 instead of DsdUint64
2023-03-12 20:27:05 +01:00
Max Kellermann
f3ebaf8bdd
util/ByteOrder: add class PackedLE64
2023-03-12 20:25:49 +01:00
Max Kellermann
c472046cbb
decoder/dsdiff: use PackedBE64 instead of DffDsdUint64
2023-03-12 20:22:50 +01:00
Max Kellermann
02296adbba
io/FileDescriptor: include cleanup
2023-03-12 20:18:13 +01:00
Max Kellermann
a375f0f160
io/BufferedReader: add method ReadFullT()
2023-03-12 20:15:41 +01:00
Max Kellermann
fb961e89da
util/StringCompare: add constexpr
2023-03-12 20:14:23 +01:00
Max Kellermann
3e2bff296f
event/SocketEvent: add method GetReadyFlags()
2023-03-12 20:12:15 +01:00
Max Kellermann
cf01db4d08
event/Chrono, ...: relicense to BSD-2
2023-03-12 20:02:54 +01:00
Max Kellermann
08dbb4a69a
event/BackendEvents: relicense to BSD-2
...
These headers contain only trivial integer constants and these are
probably not even copyrightable.
2023-03-12 19:53:03 +01:00
Max Kellermann
b5eff3cecd
decoder/plugin: kludge for Android NDK r25c
2023-03-12 19:53:03 +01:00
Max Kellermann
89d66b6100
decoder/ffmpeg: check for DST codec
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1756
2023-03-12 19:39:49 +01:00
Max Kellermann
c53ee41855
decoder/ffmpeg: check for DSD codec
...
DSD uses a generic demuxer, therefore it does not appear in the
demuxer list.
2023-03-12 19:37:09 +01:00
Max Kellermann
3c798b4907
decoder/ffmpeg: query supported demuxers at runtime
2023-03-12 19:37:09 +01:00
Max Kellermann
78a9c17bc6
decoder/plugin: add "suffixes" function
...
For decoder plugins like FFmpeg where the supported codecs cannot be
determined at compile time.
2023-03-12 09:17:38 +01:00
Max Kellermann
8b77da545d
*: use transparent comparison for std::{map,set} with std::string keys
...
This avoids many std::string temporaries for lookups.
2023-03-12 09:12:02 +01:00
Max Kellermann
27d3dcf14c
CommandLine: use libfmt
2023-03-12 09:02:21 +01:00
Max Kellermann
5388759bd5
db/proxy: require libmpdclient 2.15 or later
2023-03-10 13:45:37 +01:00
Max Kellermann
e927655774
db/proxy: require MPD 0.21 or later
2023-03-10 13:43:49 +01:00
Max Kellermann
3be8375e4f
subprojects/sqlite3.wrap: update to 3.41.0-1
2023-03-10 13:35:01 +01:00
Max Kellermann
27ba8c181f
pcm/SoxrResampler: require libsoxr 0.1.2 or later
2023-03-10 12:49:57 +01:00
Max Kellermann
1410bcbce9
lib/alsa: require alsa-lib 1.1 or later
2023-03-10 12:49:40 +01:00
Max Kellermann
43b26ee612
{de,en}coder/flac: remove obsolete FLAC_API_VERSION_CURRENT checks
...
We check the libFLAC version via pkg-config at configure time, no need
to do it again.
2023-03-10 12:43:19 +01:00
Max Kellermann
2c47357991
python/build/libs.py: update WildMidi to 0.4.5
2023-03-09 18:33:21 +01:00
Max Kellermann
7e2538e07a
decoder/sidplay: require libsidplayfp (drop support for the original sidplay)
...
The original sidplay project has been mostly unmaintained for nearly
12 years, and the most recent release was in 2016, while the
libsidplayfp project has been actively maintained all the time.
2023-03-09 18:27:05 +01:00
Max Kellermann
851fcf4823
decoder/gme: require GME 0.6 or later
...
This allows dropping a few compile-time version checks and we can use
pkg-config to detect the library.
2023-03-09 18:27:05 +01:00
Max Kellermann
63b9fb3d2b
event/meson.build: add missing dependency on libio.a
2023-03-09 18:27:05 +01:00
Max Kellermann
a79454f6a6
io/FileDescriptor: fold CreateSignalFD() into the SignalFD constructor
2023-03-09 18:04:58 +01:00
Max Kellermann
b5fbfe9aa6
io/FileDescriptor: fold CreateEventFD() into the EventFD constructor
2023-03-09 17:59:56 +01:00
Max Kellermann
598894211f
decoder/ffmpeg: require FFmpeg 4.0 or later
2023-03-08 20:32:35 +01:00
Max Kellermann
dbfd0a833d
io/meson.build: move sources to libio_fs.a
...
Only that one has a dependency on libfs.a (for class AllocatedPath
etc.).
2023-03-07 12:48:47 +01:00
Max Kellermann
d45994268f
system/PeriodClock: move to time/
2023-03-07 12:08:44 +01:00
Max Kellermann
815b248990
*/Registry: use constinit
2023-03-07 12:04:16 +01:00
Max Kellermann
333b36f090
output/Registry: add noexcept
2023-03-07 11:57:55 +01:00
Max Kellermann
b18ef61361
output/Registry: rename function
2023-03-07 11:57:36 +01:00
Max Kellermann
86ae45108c
output/Finish: fold into Filtered.cxx
2023-03-07 11:54:46 +01:00
Max Kellermann
5ef29c424d
output/meson.build: add liboutput_registry.a
2023-03-07 11:53:16 +01:00
Max Kellermann
c8dfb57408
output/meson.build: move OutputPlugin.cxx to liboutput_api.a
2023-03-07 11:52:32 +01:00
Max Kellermann
b773ef3f0f
win32/HResult: use libfmt
2023-03-06 20:10:06 +01:00
Max Kellermann
c8f54b3509
lib/pcre/UniqueRegex: use libfmt
2023-03-06 20:10:06 +01:00
Max Kellermann
00d5e6e9c7
lib/avahi/Publisher: use libfmt
2023-03-06 20:10:06 +01:00
Max Kellermann
1132a1c9a7
protocol/ArgParser: use libfmt
2023-03-06 20:10:06 +01:00
Max Kellermann
149d1a2f47
output/shout: use libfmt
2023-03-06 20:10:06 +01:00
Max Kellermann
17f2c0ae88
output/httpd: use libfmt
2023-03-06 20:10:06 +01:00
Max Kellermann
ce0b4d5c19
system/Error: remove unused function FormatSystemError()
2023-03-06 20:10:06 +01:00
Max Kellermann
0c102a8f2f
meson.build: add missing libfmt dependencies
2023-03-06 20:10:06 +01:00
Max Kellermann
415de497d3
use more libfmt instead of sprintf()
2023-03-06 19:50:53 +01:00
Max Kellermann
02d108774c
test/meson.build: add missing dependencies on libio.a
2023-03-06 19:50:52 +01:00
Max Kellermann
2c66d90626
fs/io: move to separate library
...
To eliminate the libio.a dependency.
2023-03-06 19:47:29 +01:00
Max Kellermann
e4cdf29951
fs/meson.build: make several dependencies internal
2023-03-06 19:44:34 +01:00
Max Kellermann
b5d224ce22
fs/{StandardDirectory,CheckFile}: move to fs/glue/
...
Distangle library dependencies.
2023-03-06 19:43:09 +01:00
Max Kellermann
c937a299f7
fs/Charset: assign fs_charset
...
This got lost 8 years ago in commit 87c88fcb27
D'oh!
2023-03-06 19:25:44 +01:00
Max Kellermann
6d4ec8b46f
fs/Charset: remove useless log message
2023-03-06 19:20:22 +01:00
Max Kellermann
941f2ca60d
pcm/{Traits,Dsd*}: use std::byte
2023-03-06 18:44:20 +01:00
Max Kellermann
7a1b996da9
pcm/Dsd2Pcm: use SampleTraits<SampleFormat::DSD>::SILENCE
2023-03-06 18:30:16 +01:00
Max Kellermann
302a571367
pcm/Buffer: use std::byte
2023-03-06 18:22:12 +01:00
Max Kellermann
ec195acf4f
pcm/Interleave: use std::byte
2023-03-06 18:22:10 +01:00
Max Kellermann
8f41e05a39
db/upnp/ContentDirectoryService: use fmt::format_int
2023-03-06 16:45:59 +01:00
Max Kellermann
35b6d65f27
util/Compiler.h: remove unused compiler version check macros
2023-03-06 16:37:46 +01:00
Max Kellermann
e602bcf41e
pcm/ReplayGainAnalyzer: remove GCC version checks, assume proper C++17 support
2023-03-06 16:37:45 +01:00
Max Kellermann
8c5ba50840
command/{file,storage}: remove stray "#pragma GCC diagnostic pop"
2023-03-06 16:37:45 +01:00
Max Kellermann
ff239fff4f
util/ByteOrder: check only __GNUC__
...
Assume GCC/clang is recent enough.
2023-03-06 16:37:45 +01:00
Max Kellermann
abdbaf605e
player/Thread, ...: assume [[fallthrough]] is supported
2023-03-06 16:29:55 +01:00
Max Kellermann
47b3577d6b
util/Compiler.h: remove unused macro gcc_printf
2023-03-06 16:27:47 +01:00
Max Kellermann
2ffc7c2088
io/BufferedOutputStream: remove unused method Format()
2023-03-06 16:27:28 +01:00
Max Kellermann
1f56960c44
util/FormatString: remove unused library
2023-03-06 16:24:51 +01:00
Max Kellermann
dfc5b4972b
output/httpd/IcyMetaDataServer: use libfmt
2023-03-06 16:23:43 +01:00
Max Kellermann
18c3c2118d
util/Compiler.h: remove unused macros
2023-03-06 16:14:30 +01:00
Max Kellermann
42f6a0441c
use [[gnu::...]] attributes
2023-03-06 16:14:15 +01:00
Max Kellermann
3b9aab0684
util/UTF8: fix indent
2023-03-06 16:12:09 +01:00
Max Kellermann
7a46c57ef3
tag/Type: require C++
2023-03-06 15:28:44 +01:00
Max Kellermann
118b76a8f1
db/Interface, ...: forward-declare TagType
2023-03-06 15:25:30 +01:00
Max Kellermann
a302d34f6d
tag/Names: convert to C++
2023-03-06 15:16:33 +01:00
Max Kellermann
148aca23be
use SPDX IDs, replacing the long copyright headers
2023-03-06 14:59:48 +01:00
Max Kellermann
8ab2722300
python/build/meson.py: keep Meson from executing Android-x86 test binaries
2023-03-06 14:21:37 +01:00
Max Kellermann
bd25528ca3
python/build/meson.py: remove unused import
2023-03-06 14:17:44 +01:00
Max Kellermann
9f02d8978b
build/python/cmake: set CMAKE_C_FLAGS_INIT, not CMAKE_C_FLAGS
...
According to
https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_FLAGS_INIT.html
the _INIT variables should be set in the toolchain file.
2023-03-06 14:15:57 +01:00
Max Kellermann
7e51d1dba0
build/python/cmake: set CMAKE_OSX_SYSROOT on macOS
2023-03-06 14:15:23 +01:00
Max Kellermann
4d4755352d
build/python/cmake: add "env" parameter
2023-03-06 14:13:08 +01:00
Max Kellermann
0360f79e6f
build/python/build/project.py: add "lazy" parameter to make_build_path()
2023-03-06 14:10:10 +01:00
Max Kellermann
6d8f92c185
build/python/build/project.py: raise exception on regex mismatch
2023-03-06 14:07:59 +01:00
Max Kellermann
c989327eb0
python/build/zlib.py: use autotools to be more portable
...
Right now, zlib is only built for Windows, but we may eventually
changed that, so don't hard-code `win32/Makefile.gcc`.
2023-03-06 13:48:40 +01:00
Max Kellermann
22eccaa64f
python/build/autotools.py: use toolchain.arflags
2023-03-06 13:33:11 +01:00
Max Kellermann
740cc8ce49
python/{cmake,autotools}: build in verbose mode
...
Make sure all the gory details are visible in CI logs.
2023-03-06 13:32:48 +01:00
Max Kellermann
70eafba0d4
python/build/autotools.py: dump config.log on configure error
...
For better error logs on CI.
2023-03-06 13:32:42 +01:00
Felix Hädicke
79fb9834d9
python/makeproject: do not use hard-code absolute path to make
2023-03-06 13:32:37 +01:00
Felix Hädicke
146db77025
python/makeproject: set appropriate build jobs count depending on the number of CPUs
2023-03-06 13:32:32 +01:00
Felix Hädicke
e6d607fef3
build/python: do not use absolute path for tar
2023-03-06 13:10:03 +01:00
Max Kellermann
ca46992d3e
build/python/build/project.py: lazy tarball extraction
2023-03-06 13:07:17 +01:00
Max Kellermann
c83ab0dc58
unix/SignalHandlers: shut down if parent process dies in --no-daemon mode
...
By default, if the parent of a process dies, the process gets SIGHUP
and is supposed to shut down. This however doesn't work for MPD,
because MPD redefines SIGHUP with a different meaning (like most
daemons do).
To work around this, we configure the kernel to send SIGTERM instead
of SIGHUP.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1706
2023-03-06 13:00:07 +01:00
Max Kellermann
d9952b9054
CommandLine: hard-code daemon=false if ENABLE_DAEMON is not set
2023-03-06 13:00:06 +01:00
Max Kellermann
04e60d67ae
command/playlist: allow range in "playlistmove"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1689
2023-03-06 12:01:45 +01:00
Max Kellermann
f4adbdbe31
python/build/libs.py: update FFmpeg to 6.0
2023-03-06 10:13:12 +01:00
Max Kellermann
484b820dfc
python/build/libs.py: disable more unused FFmpeg features
2023-03-06 10:06:39 +01:00
Max Kellermann
9bcba41cd6
Merge branch 'pipewire-lock' of https://github.com/ncfavier/MPD
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1753
2023-03-06 10:06:03 +01:00
Naïm Favier
eabc487e59
output/PipeWire: lock thread loop in SendTag
2023-03-06 10:03:14 +01:00
Max Kellermann
5c5e522fcd
output/jack: remove DLL support
...
This effectively reverts commit 0f02bbc2fe which was a horrible
kludge for JACK support on Windows. Maintaining this kludge doesn't
seem worth the trouble (the JACK version was never updated), and
apparently nobody uses this.
2023-03-06 08:10:00 +01:00
Max Kellermann
f687028c87
output/PipeWire: use class StaticVector
2023-03-06 08:09:07 +01:00
Max Kellermann
05f0b9c29c
python/build/libs.py: update CURL to 7.88.1
2023-03-06 07:56:08 +01:00
Max Kellermann
4a8ec20858
python/build/libs.py: update OpenSSL to 3.0.8
2023-03-06 07:56:08 +01:00
Max Kellermann
c5e36a7dd8
subprojects: update expat to 2.5.0-2
2023-03-06 07:51:02 +01:00
Max Kellermann
d5fafa1340
output/PipeWire: map tags "Date" and "Comment"
2023-03-06 07:48:25 +01:00
Max Kellermann
e8994b43a0
output/PipeWire: convert tag mapping to array
2023-03-06 07:44:06 +01:00
Max Kellermann
6ada2c9c3f
lib/curl/Request: add method GetEasy()
2023-03-05 08:50:39 +01:00
Max Kellermann
bbf190fc42
lib/curl/Multi: add noexcept
2023-03-05 08:49:20 +01:00
Max Kellermann
963ff1997d
lib/curl/Easy: add methods SetXferInfoFunction(), SetMimePost()
2023-03-05 08:47:40 +01:00
Max Kellermann
5c2a576546
io/BufferedReader: add missing include
2023-03-05 08:43:41 +01:00
Max Kellermann
452400b7ef
net/SocketAddress: remove __cpp_lib_span checks
2023-03-05 08:41:33 +01:00
Moviuro
20a5276560
doc/mpd.1.rst: add documentation for --systemd
...
This switch was introduced in ce77b148d9
2023-03-01 09:55:27 +01:00
Max Kellermann
c94eee6199
Merge branch 'master' of https://github.com/lerenwe/MPD-Windows-With-Libsample
2023-02-23 14:44:06 +01:00
Sweet Blue
2a75222fe2
Added libsamplerate to win32 build script
2023-02-23 14:26:32 +01:00
Sweet Blue
7d9d173c9f
Updated libs.py to integrate libsamplerate 0.2.2
2023-02-23 14:25:11 +01:00
Dave Hocker
f248fe2dec
Resolve deprecation warnings by replacing use of sprintf with FmtBuffer
2023-02-06 11:56:49 +01:00
Brad Smith
e0df0b6d74
oss: Remove use of the soundcard.h header, OpenBSD no longer uses OSS
2023-02-03 18:38:20 -05:00
Sean DuBois
a41414e0e0
Decoder/FluidSynth: Allow gain to be adjusted
2023-02-01 12:00:19 -05:00
Max Kellermann
f1cea1f152
util/IntrusiveHashSet: add unlink(), is_linked()
2023-01-31 13:07:26 +01:00
Max Kellermann
02f5698868
event/Loop: remove unnecessary include
...
Not used since a3b32819b1
2023-01-31 13:04:25 +01:00
Bryan Waite
e25816fc05
Provide alternative ways to check for
...
https://superuser.com/questions/287371/obtain-kernel-config-from-currently-running-linux-system/287372#287372
2023-01-31 08:21:39 +00:00
Max Kellermann
5b07c8fc6c
util/CharUtil: add IsLowerAlphaNumericASCII()
2023-01-29 09:39:40 +01:00
Max Kellermann
b45afd1cab
util/StringBuffer: add constexpr
2023-01-29 09:38:40 +01:00
Max Kellermann
8b73257a86
storage/meson.build: move MemoryDirectoryReader.cxx to storage_api.a
...
This library is required by the plugins, so this fixes a dependency issue.
2023-01-29 08:21:58 +01:00
Max Kellermann
def6fffcf1
event/Loop: fixup for NO_FINE_TIMER_EVENT
2023-01-29 08:07:03 +01:00
Max Kellermann
78b13577ef
test/net/TestIPv[46]Address: add more tests
2023-01-28 08:15:41 +01:00
Max Kellermann
1f5d50ccce
lib/curl/Setup: include cleanup
2023-01-28 08:06:10 +01:00
Max Kellermann
ebf65572dd
util/ByteOrder: remove unnecessary operator=
...
The compiler can just use the uint32_t constructor instead. This was
redundant code.
2023-01-28 07:48:03 +01:00
Max Kellermann
c30c293d6f
input/async: check for errors in Seek()
...
Fixes a busy loop in BufferingInputStream::RunThreadLocked() because
the method never learns that seeking is ignored, even though the HTTP
stream is already broken and can never be read; nobody cared to check
for errors.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1727
2023-01-28 07:44:59 +01:00
Max Kellermann
9ee1be6fba
command/database: add missing include for UINT_MAX
2023-01-23 15:50:49 +01:00
Max Kellermann
76177dbc79
win32/HResult: use [[gnu::const]]
2023-01-23 15:35:36 +01:00
Max Kellermann
6cc532c9a0
win32/HResult: remove unused function FormatHResultError()
2023-01-23 15:35:36 +01:00
Max Kellermann
3cc770a00b
remove obsolete Boost dependency
...
Boost makes building a piece of software much more difficult than
necessary. It's a huge library, and just uncompressing it takes a
considerable amount of time. MPD only used a tiny fraction of it, yet
its header bloat made the MPD build very slow. Locating Boost was
difficult due to its arcane build system and its resistance to use
pkg-config; it's always a special case. MPD could never use features
of newer Boost versions because Linux distributions always shipped old
Boost versions. Boost made everything complicated and slow.
So, finally, after getting rid of GLib (commit ccdb94b06c ), switching
to C++ and using Boost (commit 0801b3f495 ), we've finally get rid of
it 8 years later.
Unfortunately, I had to reimplement parts of it along the way
(e.g. IntrusiveList). Kind of NIH, but on the other hand, compiling
MPD has become much easier for users.
2023-01-23 15:06:58 +01:00
Max Kellermann
7ef0bfbdf1
event/meson.build: disable Boost
2023-01-23 14:58:38 +01:00
Max Kellermann
bafde1900b
lib/nfs/Manager: use IntrusiveList instead of boost::intrusive::set
...
MPD usually has only one NFS connection, maybe two, so managing them
in a tree seems like overkill, and since we want to get rid of Boost
anyway...
2023-01-23 14:58:09 +01:00
Max Kellermann
5844242cfb
input/cache/Manager: use IntrusiveHashSet instead of boost::intrusive::set
2023-01-23 14:19:22 +01:00
Max Kellermann
7e7cdf73b9
input/InputStream: add method GetUriView()
2023-01-23 14:15:18 +01:00
Max Kellermann
5ca74acd8d
input/InputStream: allow emplacing the URI
2023-01-23 14:15:18 +01:00
Max Kellermann
cd2aaac0c2
output/osx: fix typo
2023-01-23 14:15:18 +01:00
Max Kellermann
ff8a7225fc
output/osx: change type to std::size_t to fix -Wc++11-narrowing
2023-01-23 14:06:56 +01:00
Max Kellermann
c6eac285ea
test/util/TestRingBuffer: add "U" literal suffix to work around -Wsign-compare
2023-01-23 14:05:55 +01:00
Max Kellermann
d0be122fc6
output/osx: use class RingBuffer instead of boost::lockfree::spsc_queue
2023-01-23 13:55:50 +01:00
Max Kellermann
01e5a7b1b5
output/wasapi: use class RingBuffer instead of boost::lockfree::spsc_queue
2023-01-23 13:44:54 +01:00
Max Kellermann
0b42018377
output/PipeWire: use class RingBuffer instead of boost::lockfree::spsc_queue
2023-01-23 13:44:54 +01:00
Max Kellermann
7cb6c70bc2
output/alsa: use class RingBuffer instead of boost::lockfree::spsc_queue
2023-01-23 13:44:54 +01:00
Max Kellermann
f31ae7c556
util/RingBuffer: replacement for boost::lockfree::spsc_queue
2023-01-23 13:44:54 +01:00
Max Kellermann
5728c514d1
output/wasapi: use std::hardware_destructive_interference_size
2023-01-23 13:44:53 +01:00
Max Kellermann
debac0dfd4
win32/ComWorker: use std::queue/Mutex/Cond instead of boost::lockfree::spsc_queue/WinEvent
2023-01-23 13:25:07 +01:00
Max Kellermann
80b1f49af7
lib/dbus/AppendIter: add missing include
2023-01-22 12:29:54 +01:00
Max Kellermann
868958e159
util/IntrusiveHashSet: fix find_if() concept
2023-01-22 12:25:55 +01:00
Max Kellermann
52af03a5a6
util/IntrusiveHashSet: implement remove_and_dispose_if() with constant_time_size
2023-01-22 12:24:50 +01:00
Max Kellermann
7475e971bc
util/IntrusiveList: remove_and_dispose_if() returns the number of removed items
2023-01-22 12:24:43 +01:00
Max Kellermann
c65b1fee8d
util/IntrusiveHashSet: check key equivalence in remove_and_dispose_if()
2023-01-22 12:24:41 +01:00
Max Kellermann
e2abade6aa
util/IntrusiveList: add postfix operator++
2023-01-22 12:24:33 +01:00
Max Kellermann
57673136d8
util/IntrusiveHashSet: add method expire_find_if()
2023-01-22 12:24:30 +01:00
Max Kellermann
49e122a81d
util/IntrusiveHashSet: add method remove_and_dispose_if(key)
2023-01-22 12:24:23 +01:00
Max Kellermann
74976d3199
event: make FineTimerEvent optional
...
Several applications don't need it, so let's eliminate the code from
the executable.
2023-01-22 12:21:46 +01:00
Max Kellermann
a750e4afa7
event/Loop: move code to GetEarlierTimeout()
2023-01-22 12:19:07 +01:00
Max Kellermann
c122e990a3
Merge branch 'master' of https://github.com/faceless2/MPD
2023-01-17 19:03:49 +01:00
Max Kellermann
b1422fbda4
Merge tag 'v0.23.12'
...
release v0.23.12
2023-01-17 18:58:04 +01:00
Max Kellermann
d91da96798
release v0.23.12
2023-01-17 18:54:47 +01:00
Max Kellermann
b3897df682
decoder/mad: add assert()
2023-01-17 18:53:18 +01:00
Max Kellermann
3cacb56bb7
fs/StandardDirectory: don't fall back to getpwuid() without $HOME
...
If the environment variable $HOME does not exist, don't attempt to
obtain it from /etc/passwd; without $HOME, the calling process
indicates that it does not wish MPD to access the home directory.
This also prevents MPD from attempting to load
`/root/.config/mpd/mpd.conf` if MPD got started as global systemd
service. Reading from there makes no sense, only /etc/mpd.conf shall
be used then.
This piece of code was initially added by commit 5d85792178 .
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1687
2023-01-17 18:51:49 +01:00
Max Kellermann
15a1973e28
decoder/mad: fix integer underflow with very small files
...
When drop_start_samples and drop_end_samples overlap and are greater
than the actual number of samples, the `num_samples` calculation in
SubmitPCM() could underflow.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1712
2023-01-17 17:41:37 +01:00
Max Kellermann
ad7d47a8ba
output/PipeWire: use PW_KEY_TARGET_OBJECT with PipeWire 0.3.64
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1721
2023-01-17 11:50:09 +01:00
Max Kellermann
0948c607b6
lib/curl/meson.build: require CURL 7.55.0 or later
...
For CURLINFO_CONTENT_LENGTH_DOWNLOAD_T (commit 4efd0a9f77 ).
2023-01-16 19:42:48 +01:00
Max Kellermann
60d04052c5
NEWS: mention the GCC13 fixes
2023-01-16 19:41:37 +01:00
Max Kellermann
c1780ac657
python/build/libs.py: update CURL to 7.87.0
2023-01-16 19:06:08 +01:00
Max Kellermann
e49cf0ec38
python/build/libs.py: update Boost to 1.81.0
2023-01-16 19:03:50 +01:00
Mike Bremford
b96e44b362
Unlike album, artist and albumartist, title and composer were not used as a fallback
...
when titlesort and composersort were specified but unavailable - this patch fixes that.
2023-01-09 18:15:44 +00:00
Max Kellermann
8a7b7dffec
Merge branch 'v0.23.x'
2023-01-06 08:12:38 +01:00
latex
7774e78864
openmpt: add at_end option
2023-01-06 03:18:36 +01:00
Max Kellermann
e1d641f684
lib/curl/Easy: drop deprecated CURLOPT_HTTPPOST wrapper
2023-01-02 14:29:17 +01:00
Max Kellermann
4efd0a9f77
lib/curl/Easy: use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T
...
CURLINFO_CONTENT_LENGTH_DOWNLOAD is deprecated and is ugly because it
uses floating point.
2023-01-02 14:28:42 +01:00
Max Kellermann
f6f8751332
io/FileReader: add missing include for uint64_t
2023-01-02 14:27:47 +01:00
gd
abb28593ce
TagBuilder::RemoveType: added missing tag pool lock before call to tag_pool_put_item
2022-12-29 08:43:10 +01:00
Max Kellermann
115693b046
increment version number to 0.23.12
2022-12-29 08:42:02 +01:00
Max Kellermann
d7de8b1453
Merge branch 'iss-1546' of https://github.com/sp1ff/MPD
2022-12-29 08:37:25 +01:00
Max Kellermann
3242943cd1
doc/protocol.rst: fix reference target
2022-12-18 08:30:25 +01:00
Mike Bremford
6adff85fd6
Added "searchcount" command, a case-insensitive "count"
...
The `count` command isn't case-insensitive. This adds `searchcount`
which is a case-insensitive version of `count`.
2022-12-18 08:29:14 +01:00
Alex
8b1ff3f005
build: harden build.yml permissions
...
This PR adds explicit [permissions section](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions ) to workflows. This is a security best practice because by default workflows run with [extended set of permissions](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token ) (except from `on: pull_request` [from external forks](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ )). By specifying any permission explicitly all others are set to none. By using the principle of least privilege the damage a compromised workflow can do (because of an [injection](https://securitylab.github.com/research/github-actions-untrusted-input/ ) or compromised third party tool or action) is restricted.
It is recommended to have [most strict permissions on the top level](https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions ) and grant write permissions on [job level](https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs ) case by case.
Signed-off-by: Alex <aleksandrosansan@gmail.com >
2022-12-09 11:28:26 +01:00
Max Kellermann
756621c6e4
neighbor/meson.build: add missing dependency on libfmt
2022-12-01 15:57:28 +01:00
Max Kellermann
7e2ab1fd53
lib/yajl/meson.build: add missing dependency on libfmt
2022-12-01 15:50:34 +01:00
Max Kellermann
c7a0597fe7
util/Intrusive*: add C++20 concept checks
2022-12-01 15:43:51 +01:00
Max Kellermann
253d551684
lib/dbus/meson.build: add missing dependency on libfmt
2022-12-01 15:43:51 +01:00
Max Kellermann
00b7535cf1
util/Concepts: compatibility wrapper for std::predicate
2022-12-01 15:11:27 +01:00
Max Kellermann
5945877313
util/IntrusiveHashSet: add missing Cast()/ToHook() functions to IntrusiveHashSetMemberHookTraits
2022-12-01 15:10:42 +01:00
Max Kellermann
fe3e1d31bf
util/IntrusiveHashSet: remove unused type alias "ListHookTraits"
2022-12-01 15:10:38 +01:00
Max Kellermann
65f1cafa43
util/IntrusiveHashSet: add method find_if()
2022-12-01 15:10:32 +01:00
Max Kellermann
d9b1f2fefa
net/SocketAddress: add method HasPort()
2022-12-01 15:10:25 +01:00
Max Kellermann
e3ef0929f1
util/IntrusiveHashSet: add const overloads
2022-12-01 15:10:20 +01:00
Max Kellermann
8860962e09
util/IntrusiveHashSet: make several methods const
2022-12-01 15:10:13 +01:00
Max Kellermann
f13b8f669d
util/IntrusiveList: simplify ToHook() overload with const_cast
2022-12-01 15:10:09 +01:00
Đoàn Trần Công Danh
e4b055eb6d
v0.23.x: RemoteTagCache: add missing include
...
Fix build with Boost 1.81.0. `<array>` was included by one of those boost headers,
however, it's no longer included as of Boost 1.81.0.
`master` doesn't use `std::array` in this file.
While we're at it, add all necessary inclusion files.
2022-12-01 08:29:23 +07:00
Max Kellermann
fa58db798b
lib/fmt/RuntimeError: new library
...
Replacing FormatRuntimeError().
2022-11-29 14:10:34 +01:00
Max Kellermann
45b13fc2a6
util/OptionParser: move to cmdline/
...
This library will depend on libfmt, and libutil shouldn't depend on
any library.
2022-11-29 11:32:16 +01:00
Max Kellermann
cf3f3a7750
lib/pulse/Error: use std::system_error
2022-11-29 09:56:47 +01:00
Max Kellermann
e455b93fac
lib/nfs/Connection: use class NfsClientError
2022-11-29 09:45:25 +01:00
Max Kellermann
cf762f2a9d
lib/icu/Error: std::system_error with UErrorCode
2022-11-29 09:31:48 +01:00
Max Kellermann
8ad0d919b1
lib/icuConverter, ...: use FmtBuffer() and FmtErrno()
2022-11-29 09:09:11 +01:00
Max Kellermann
4b5c8d1f3e
mixer/meson.build: split libmixer_api from libmixer_glue
2022-11-29 09:09:11 +01:00
Max Kellermann
eb6c649d47
lib/fmt/SystemError: add concept check to work around ambiguous overloads
2022-11-29 09:09:10 +01:00
Max Kellermann
f2b025ca6c
lib/alsa/meson.build: add dependency on libpcm_basic
...
For PcmExport::CalcInputSampleRate().
2022-11-29 09:09:10 +01:00
Max Kellermann
4328a6f77d
lib/fmt/ToBuffer: fix FMT_VERSION check
2022-11-29 09:09:10 +01:00
Max Kellermann
97a6851525
lib/curl/Error: std::system_error with CURLcode
2022-11-29 06:33:32 +01:00
Max Kellermann
846d7dc317
lib/curl/Error: rename header to HttpStatusError.hxx
2022-11-29 06:33:32 +01:00
Max Kellermann
f62d61f088
lib/fmt/ToBuffer: add missing template parameters
2022-11-29 06:33:32 +01:00
Max Kellermann
1f33ac3e98
lib/upnp/Error: wrap libupnp errors in std::system_error
2022-11-29 00:32:48 +01:00
Max Kellermann
ed08a4bd58
lib/fmt/ToBuffer: use iterator instead of pointer
2022-11-28 23:10:25 +01:00
Max Kellermann
40d0828ccd
util/StringBuffer: add non-const iterator
2022-11-28 23:10:01 +01:00
Max Kellermann
66029c405f
system/FmtError: move to lib/fmt/
2022-11-28 23:09:27 +01:00
Max Kellermann
7d8c076e06
lib/fmt/ToBuffer: include fmt/format.h on libfmt 7 to fix linker error
2022-11-28 23:03:52 +01:00
Max Kellermann
05dcac55f9
lib/fmt: add meson.build
2022-11-28 22:18:46 +01:00
Max Kellermann
2aa42d2647
lib/fmt/ToBuffer: new library
2022-11-28 22:18:46 +01:00
Max Kellermann
dc8e0c9c5c
archive/zzip: add missing include
2022-11-28 22:18:45 +01:00
Max Kellermann
96ae659fdf
system/FmtError: new library
...
Replaces the Format*() functions in system/Error.hxx.
2022-11-28 21:56:12 +01:00
Max Kellermann
124e75c286
thread/Thread, fs: add missing WIN32 includes
2022-11-28 21:56:11 +01:00
Max Kellermann
25da798e7a
system/Clock: compile only on Windows
2022-11-28 21:16:49 +01:00
Max Kellermann
88d5347d94
Log, client/Response, io/BufferedOutputStream: remove unnecessary libfmt include
2022-11-28 20:44:48 +01:00
Max Kellermann
7f3868727b
Log, client/Response, io/BufferedOutputStream: drop support for libfmt < 7
...
Remove some compatibility code.
2022-11-28 20:17:16 +01:00
Max Kellermann
b09a776a26
.travis.yml: remove obsolete file
...
We've migrated to GitHub actions in commit
c13911b171 a year ago
2022-11-28 20:17:16 +01:00
Max Kellermann
3103e8d719
fs/StandardDirectory: update #ifdef for GetEnvPath()
...
Fixes regression from a38eabc8bc
2022-11-28 20:17:16 +01:00
Max Kellermann
cfbd751742
fs/StandardDirectory: pass Path to IsValidDir()
2022-11-28 18:48:10 +01:00
Max Kellermann
a38eabc8bc
fs/StandardDirectory: move code to GetExistingEnvDirectory()
2022-11-28 18:43:45 +01:00
Max Kellermann
9669ea6a12
fs/StandardDirectory: add noexcept
2022-11-28 18:27:06 +01:00
Max Kellermann
863a28daa3
fs/StandardDirectory: eliminate global variable "home_prefix"
2022-11-28 18:27:06 +01:00
Max Kellermann
ea5bcfed8b
fs/StandardDirectory: pass std::string_view to ParseConfigLine()
2022-11-28 17:11:17 +01:00
Max Kellermann
f6f3c4c25b
fs/StandardDirectory: pass const string to ParseConfigLine()
2022-11-28 17:07:29 +01:00
Max Kellermann
8fe29f5728
Merge tag 'v0.23.11'
...
release v0.23.11
2022-11-28 17:00:38 +01:00
Max Kellermann
9866adff95
release v0.23.11
2022-11-28 16:55:46 +01:00
Max Kellermann
a8b0c55818
input/curl: make proxy verify setting optional
...
These settings do not work if CURL was compiled with
CURL_DISABLE_PROXY, and cause error "An unknown option was passed in
to libcurl".
Fixes regression by commit 7ab0dfc8ce
2022-11-28 16:14:01 +01:00
Max Kellermann
cac88e8be5
python/build/libs.py: re-enable verbose error strings
...
This compile-time option is not about debug logging, but about
curl_easy_strerror().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1670
2022-11-28 16:12:17 +01:00
Max Kellermann
e9f6a3482c
db/Configured: add default "cache_directory" setting
2022-11-28 14:24:52 +01:00
Max Kellermann
5d2e80f188
db/Configured: use GetAppCacheDir() instead of GetUserCacheDir()
2022-11-28 14:20:15 +01:00
Max Kellermann
cfd4d5b13e
StateFileConfig: use GetAppCacheDir() instead of GetUserCacheDir()
2022-11-28 14:20:14 +01:00
Max Kellermann
06514aec63
fs/StandardDirectory: add GetAppCacheDir()
2022-11-28 14:19:30 +01:00
Max Kellermann
4ded1ae67b
fs/FileSystem: add CreateDirectoryNoThrow()
2022-11-28 14:19:08 +01:00
Max Kellermann
1da974e3fa
fs/StandardDirectory: use PACKAGE_NAME from version.h
2022-11-28 14:05:34 +01:00
Max Kellermann
94f06f0946
fs/StandardDirectory: use mode=0777 in mkdir() call
...
Of course, mode=0700 is more secure, but allowing other users access
to new directories is a choice the user should make via umask(). If
the user-chosen umask allows everybody access, MPD should probably
respect that.
2022-11-28 14:04:47 +01:00
Max Kellermann
d9eec8a455
fs/StandardDirectory: do not use $RUNTIME_DIRECTORY on Android
...
This is systemd specific, and Android doesn't have systemd.
2022-11-28 10:44:50 +01:00
Max Kellermann
eaecbcafb2
PlaylistFile: disallow backslash in playlist names on Windows
...
The function spl_valid_name() should verify playlist names and prevent
path traversal, but it failed to do so on Windows, because it forgot
to check for backslashes.
This buggy piece of code was already present when stored playlists
were initially implemented in 2006 by commit 08003904d7 , and
even during the many rounds of code refactoring, nobody ever bothered
to verify it. D'oh!
(Thanks, Paul Arzelier)
2022-11-28 09:53:49 +01:00
Max Kellermann
73b5d0a9b9
system/Error: truncate the snprintf() return value
...
snprintf() does not return the (truncated) length actually written,
but the length that would be needed if the buffer were large enough.
This API usage mistake in FormatLastError() can lead to overflow of
the stack buffer, crashing the process (Windows only).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1676
2022-11-28 09:42:37 +01:00
Michael Herstine
1adc2c0c51
playlist_load_into_queue: log on failure to load song.
...
Log at level error when failing to load a song. Limit the number
of log messages produced to avoid flooding the log file when attempting
to load a large, broken playlist.
Closes #1546
2022-11-26 08:28:10 -08:00
Max Kellermann
a3b32819b1
event/Loop: split InjectBreak() from Break()
2022-11-22 22:30:12 +01:00
Max Kellermann
a57cf443ed
event/Loop: set "again" in AddDefer() only if HAVE_THREADED_EVENT_LOOP
...
Only AddDefer()/AddIdle() calls from within DeferEvents are relevant.
2022-11-22 21:40:52 +01:00
Max Kellermann
d0d095cbcd
util/IntrusiveHashSet: rename "slot" to "bucket"
2022-11-22 21:40:52 +01:00
Max Kellermann
3239fce5c1
util/IntrusiveHashSet: add remove_and_dispose_if()
2022-11-22 21:40:11 +01:00
Max Kellermann
200b770104
util/IntrusiveHashSet: add for_each()
2022-11-22 21:40:04 +01:00
Max Kellermann
3aa959eda7
util/IntrusiveHashSet: add erase_and_dispose()
2022-11-22 21:39:40 +01:00
Max Kellermann
72c047f4f0
util/IntrusiveHashSet: add hash_function(), key_eq()
2022-11-21 09:10:44 +01:00
Max Kellermann
c71958af4b
input/async: pass std::span to AppendToBuffer()
2022-11-17 06:15:58 +01:00
Max Kellermann
ce13d82657
input/async: use std::byte instead of uint8_t
2022-11-17 06:15:19 +01:00
Max Kellermann
73dc8ff6bd
lib/nfs/FileReader: pass std::span to OnNfsFileRead()
2022-11-17 06:15:16 +01:00
Max Kellermann
3278ad2ed8
storage/State: remove obsolete Boost compiler warning workaround
2022-11-17 05:32:29 +01:00
Max Kellermann
2e453ef58a
storage/State: use std::hash() instead of boost::crc
...
Also eliminate the useless std::set.
2022-11-17 05:28:53 +01:00
Max Kellermann
a5d04be21f
storage/State: add noexcept
2022-11-17 05:19:11 +01:00
Max Kellermann
9467df526c
song/StringFilter: add enum Position
...
Replaces two conflicting bools.
2022-11-15 21:55:55 +01:00
Max Kellermann
9ca75589c0
song/StringFilter: simplify GetOperator()
2022-11-15 21:55:55 +01:00
Max Kellermann
c158abe87c
lib/icu/Compare: use StringIsEqualIgnoreCase()
2022-11-15 21:13:01 +01:00
Max Kellermann
53530bd1d5
lib/icu/Canonicalize: convert all punctuation to ASCII
...
To make tag matching easier.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1669
2022-11-15 21:04:16 +01:00
Max Kellermann
d7f545721b
lib/icu/Canonicalize: use unorm2_normalize() instead of u_strFoldCase()
...
unorm2_normalize() can case-fold as well, plus it applies Unicode
normalization which MPD should do for proper string comparisons.
2022-11-15 20:53:29 +01:00
Max Kellermann
8b72cb64b2
lib/icu/CaseFold: rename to IcuCanonicalize() and add flag parameter
...
Prepare for adding more transformations.
2022-11-15 20:53:04 +01:00
Max Kellermann
852df2239e
lib/icu/Transliterator: pass std::basic_string_view<UChar> to constructor
2022-11-15 20:53:03 +01:00
Max Kellermann
5a1fbe60af
test/TestStringFilter: new unit test
2022-11-15 20:52:53 +01:00
Max Kellermann
88e33b7b32
test/TestTagSongFilter: initialize ICU
2022-11-15 20:51:59 +01:00
Max Kellermann
264b3f8543
lib/icu/Collate: clear the global variable in IcuCollateFinish()
...
To allow repeated init/finish cycles.
2022-11-15 20:48:50 +01:00
Max Kellermann
ac2bce8b7b
lib/icu/Transliterator: add missing include
2022-11-15 17:07:54 +01:00
Max Kellermann
9f3faaf3c4
lib/icu/Transliterator: wrapper for UTransliterator
2022-11-15 01:09:27 +01:00
Max Kellermann
7be39e07e1
lib/icu/Normalize: wrapper for unorm2_normalize()
2022-11-15 00:49:25 +01:00
Max Kellermann
154fb4317f
lib/icu/CaseFold: move low-level wrapper to FoldCase.cxx
2022-11-15 00:46:58 +01:00
Max Kellermann
aad5210820
lib/icu/CaseFold: use ToStringView()
2022-11-15 00:36:47 +01:00
Max Kellermann
7c4fca0ae1
util/SpanCast: add ToStringView() template
2022-11-15 00:36:28 +01:00
Max Kellermann
1a6ec716ef
lib/icu/Converter: add noexcept
2022-11-15 00:28:41 +01:00
Max Kellermann
0b22cc962d
Merge branch 'private_users' of https://github.com/bluca/MPD
2022-11-14 23:53:43 +01:00
Max Kellermann
51769c40d8
util/IntrusiveSortedList: new class
2022-11-13 09:08:36 +01:00
Max Kellermann
85ab89a08b
util/IntrusiveHashSet: add missing typename (to make clang happy)
2022-11-13 08:40:53 +01:00
Max Kellermann
a43062c575
RemoteTagCache: use IntrusiveHashSet instead of boost::intrusive::unordered_set
2022-11-13 08:39:04 +01:00
Max Kellermann
c943e27d51
util/IntrusiveHashSet: new class
...
Incomplete draft implementation, just enough methods for current
needs.
2022-11-13 08:38:53 +01:00
Max Kellermann
fb5d77158a
util/IntrusiveList: add enum LinkMode
...
Compile-time code simplification.
2022-11-13 08:15:47 +01:00
Max Kellermann
3023816491
subprojects/.gitignore: ignore liburing
2022-11-12 12:40:44 +01:00
Max Kellermann
51e17e89f4
subprojects: add liburing.wrap
2022-11-12 12:30:13 +01:00
Max Kellermann
98c24d1a32
Merge branch 'v0.23.x'
2022-11-12 12:29:21 +01:00
Max Kellermann
c2d0f35e7a
storage/meson.build: move StorageState.cxx to "mpd" executable
...
Fixes spurious linker errors.
2022-11-12 12:24:48 +01:00
Max Kellermann
ab99a57997
test/meson.build: reduce test_translate_song. dependencies
2022-11-12 12:17:35 +01:00
Max Kellermann
c8ebaf3521
python/build/meson.py: use "meson setup" instead of the deprecated syntax
2022-11-12 12:10:06 +01:00
Max Kellermann
f1dc1af85d
util/IntrusiveList: use const_cast to eliminate duplicate HookTraits functions
...
I hate const_cast, but what I hate more is duplicate code. Sigh.
2022-11-12 08:45:24 +01:00
Max Kellermann
7b3d870516
util/IntrusiveForwardList: remove unnecessary initializer from hook
2022-11-11 21:14:52 +01:00
Max Kellermann
963ff846ff
test/util/TestIntrusiveForwardList: new unit test
2022-11-11 21:13:41 +01:00
Max Kellermann
48c4081ba1
test/util/TestIntrusiveList: remove unused code
2022-11-11 21:11:22 +01:00
Max Kellermann
970ccf043b
util/SortList: enable the std::predicate kludge for macOS as well
...
Sigh.
2022-11-11 19:30:58 +01:00
Max Kellermann
0c92c12adf
Merge branch 'v0.23.x'
2022-11-11 19:27:22 +01:00
Max Kellermann
52d00f7e30
subprojects: update fmt to 9.1.0
2022-11-11 19:22:39 +01:00
Max Kellermann
309491a6d8
subprojects: update expat to 2.5.0
2022-11-11 19:22:30 +01:00
Max Kellermann
29143dec87
util/SortList: kludge for Android NDK compatibility
2022-11-11 19:17:13 +01:00
Max Kellermann
0fd4c14043
db/simple/Directory: re-add Song.hxx to fix clang build failure
2022-11-11 19:13:01 +01:00
Max Kellermann
81e1f87e8c
db/simple/{Directory,Song}: use IntrusiveList instead of boost::intrusive::list
2022-11-11 19:08:22 +01:00
Max Kellermann
a448d04d46
util/SortList: library which sorts linked lists
2022-11-11 19:03:39 +01:00
Max Kellermann
60e640af5a
util/IntrusiveList: add single-item splice() overload
2022-11-11 18:29:50 +01:00
Max Kellermann
df15c418c7
util/IntrusiveList: fix swap() implementation if second list is empty
2022-11-11 18:29:50 +01:00
Max Kellermann
04ab8ae27b
util/IntrusiveList: add type aliases value_type, pointer, reference
2022-11-11 17:15:20 +01:00
Max Kellermann
b4a64af15e
util/IntrusiveList: constant_time_size is a template argument, not a variable
2022-11-11 17:15:16 +01:00
Max Kellermann
1ccfd1fb67
test/util/TestIntrusiveList: simplify tests
2022-11-11 16:41:24 +01:00
Max Kellermann
838c057231
util/IntrusiveList: use auto
...
Fixes typos in the const_iterator return types, and fixes returning
references to stack values.
2022-11-11 16:33:49 +01:00
Max Kellermann
af544bb16f
util/IntrusiveList: fix typos
2022-11-11 10:11:42 +01:00
Max Kellermann
84fd401d21
util/IntrusiveList: add method splice()
2022-11-11 10:05:20 +01:00
Max Kellermann
b78d6c9dd7
test/util/TestIntrusiveList: add tests for reverse iterators
2022-11-11 09:53:00 +01:00
Max Kellermann
b5d224496f
util/IntrusiveList: iterators are bidirectional
2022-11-11 09:20:09 +01:00
Max Kellermann
78d8b5f73c
util/OptionalCounter: add operator+= and operator-=
2022-11-10 16:55:04 +01:00
Max Kellermann
5670d98c54
util/IntrusiveList: move code to IntrusiveListNode::Connect()
2022-11-10 16:52:34 +01:00
gd
440c676be2
EventLoop: added assert(IsInside()) in Insert(CoarseTimerEvent &) and AddIdle(DeferEvent &)
...
Like AddDefer(DeferEvent &), Insert(FineTimerEvent &), these methods don't lock to update EventLoop::again
2022-11-10 15:35:14 +01:00
Max Kellermann
e820222c5b
lib/nfs/Manager: use IntrusiveForwardList instead of boost::intrusive::slist
2022-11-10 12:08:23 +01:00
Max Kellermann
1786eef8e6
util/IntrusiveForwardList: new class
2022-11-10 12:07:59 +01:00
Max Kellermann
5f2fa1dbe3
RemoteTagCache: use IntrusiveList instead of boost::intrusive::list
2022-11-10 12:06:00 +01:00
Max Kellermann
77d257de27
input/cache: use IntrusiveList instead of boost::intrusive::list
2022-11-10 12:05:09 +01:00
Max Kellermann
89d950e9a7
output/httpd: use IntrusiveList instead of boost::intrusive::list
2022-11-10 12:02:54 +01:00
Max Kellermann
4041d87c34
lib/nfs/Cancellable: use IntrusiveList instead of boost::intrusive::list
2022-11-10 12:01:11 +01:00
Max Kellermann
b3c5e6a3cc
event/Loop: use IntrusiveList instead of boost::intrusive::list
2022-11-10 11:57:57 +01:00
Max Kellermann
1da8faa285
client/List: use IntrusiveList instead of boost::intrusive::list
2022-11-10 11:08:11 +01:00
Max Kellermann
988f5d1b5d
util/StringSplit: add SplitWhile()
2022-11-09 19:23:19 +01:00
Max Kellermann
3ab3d5555e
util/StringSplit: reimplement without std::distance()
...
Avoid including <iterator>.
2022-11-09 19:23:10 +01:00
Max Kellermann
2e5d46c399
util/StringSplit: add constexpr
2022-11-09 19:23:05 +01:00
Max Kellermann
7600ad7cac
util/StringSplit: add Partition()
2022-11-09 19:22:54 +01:00
Max Kellermann
485ad583a0
util/CharUtil: add IsLowerAlphaNumericASCII()
2022-11-09 19:21:43 +01:00
Max Kellermann
bbc82a9892
io/FileDescriptor, net/SocketDescriptor: make lots of methods "const"
...
Only the file descriptor value itself is const, but the file itself
may be readable/writable.
2022-11-09 19:19:20 +01:00
Max Kellermann
69596106d3
io/FileDescriptor: add pread() wrapper
2022-11-09 19:18:41 +01:00
gd
6913148d99
Docs: changed sphinx theme from classic to sphinx_rtd_theme
...
Dependency: pip install sphinx-rtd-theme
2022-11-09 09:35:59 +02:00
gd
14460c6b6d
Docs: added custom.css to override default hyphenation and text align styles
2022-11-08 17:31:37 +02:00
Max Kellermann
a0a11be79b
Merge branch 'v0.23.x'
2022-11-08 14:36:09 +01:00
gd
4fa5bd9d5c
doc/plugins.rst: changed 'More information' links to unnamed to suppress warning: Duplicate explicit target name
2022-11-08 14:34:45 +01:00
gd
e7bfd32ccc
doc/index.rst: added man pages links to suppress warnings: document isn't included in any toctree
2022-11-08 14:32:40 +01:00
gd
6f283b52ab
doc/conf.py: set language = 'en' to suppress warning: Invalid configuration value found
2022-11-08 14:32:32 +01:00
Luca Boccassi
714bb991aa
systemd: use PrivateUsers= in user unit
...
ProtectSystem= and other sandboxing options require a user namespace in
order to work as user units (the user manager does not run as root and
thus without a user namespace it is unable to perform mounts).
2022-11-03 23:11:13 +00:00
Max Kellermann
32bddfabea
archive/plugins/meson.build: do not generate empty library
...
If no archive library was found, return from the "plugins" directory
without creating "libarchive_plugins.a". Empty static libraries are
unsupported on some operating systems such as macOS.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1650
2022-11-03 20:36:00 +01:00
Max Kellermann
1944c826bc
doc/conf.py: fix version regular expression
...
Commit 44ef34db88 was broken.
2022-11-03 20:33:08 +01:00
Max Kellermann
619bb60b26
python/build/libs.py: update FLAC to 1.4.2
2022-11-03 10:28:13 +01:00
Max Kellermann
c549e16ed1
python/build/libs.py: update CURL to 7.86.0
2022-11-03 10:28:13 +01:00
Max Kellermann
01c9c4507f
python/build/libs.py: update OpenSSL to 3.0.7
...
Punycode hooray!
2022-11-03 10:28:13 +01:00
gd
a1359f2388
TagBuilder: skip unnecessary preperation if there are no items to add
2022-11-01 17:55:42 +02:00
gd
ab687481cc
Tag: skip tag pool lock if there are no items
2022-11-01 15:37:54 +02:00
Max Kellermann
0efbd4df8b
lib/gcrypt: use std::size_t
2022-10-29 07:31:25 +02:00
gd
caaa050e60
curl input plugin - added config options: verbose, low_speed_limit, low_speed_time, tcp_keepalive, tcp_keepidle, tcp_keepintvl
2022-10-22 13:49:58 +03:00
Max Kellermann
8c9d7bf07e
increment version number to 0.23.11
2022-10-20 19:09:03 +02:00
Max Kellermann
44ef34db88
doc/conf.py: read version number from meson.build
2022-10-20 19:08:27 +02:00
jcorporation
5781f223f6
Document curl plugin .netrc and .curlrc behavior
2022-10-18 22:39:01 +02:00
Max Kellermann
b4e3891912
Merge branch 'config_curl_conn_timeout' of https://github.com/geneticdrift/MPD
2022-10-16 11:45:19 +02:00
gd
160f793e2a
Added connect_timeout configuration to curl input plugin
2022-10-16 12:13:51 +03:00
Max Kellermann
1429d6bfb9
playlist/cue/Parser: use Split()
2022-10-15 08:33:51 +02:00
Max Kellermann
ced6a5ae07
playlist/cue/Parser: remove always-failing assert()
...
Not the assert() here fails, but the illegal src[-1] call. Yet
another regression from commit 21e4c25e61
2022-10-15 08:32:37 +02:00
Max Kellermann
d6d0f78e93
Merge tag 'v0.23.10'
...
release v0.23.10
2022-10-14 23:56:33 +02:00
Max Kellermann
e4c8ebe056
release v0.23.10
2022-10-14 23:51:41 +02:00
Max Kellermann
76b25a1377
output/alsa: add nullptr check for snd_pcm_name() return value
...
It is not explicitly documented whether snd_pcm_name() is allowed to
return NULL:
https://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m.html#ga5031edc0422df8db1f70af056a12dd77
But apparently this is legal:
0222f45d11/src/pcm/pcm.c (L2761-L2762)
That's ... surprising!
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1645
2022-10-14 23:14:30 +02:00
Max Kellermann
ccc3ee663b
java/File: remove assertions to work around -Wtautological-pointer-compare
2022-10-14 23:00:35 +02:00
Max Kellermann
0626661764
android/Context: fix typo in assert() variable name
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1644
2022-10-14 22:59:39 +02:00
Max Kellermann
31db04a3ca
meson.build: suppress bogus clang 14 warning on libfmt headers
2022-10-14 22:54:34 +02:00
Max Kellermann
0c7163b9db
subprojects: update expat
2022-10-14 22:46:30 +02:00
Max Kellermann
7d78cad8af
doc/user.rst: update Android NDK requirement to 25b
2022-10-14 22:41:33 +02:00
Max Kellermann
912530ed20
test/meson.build: remove obsolete CURL workaround
...
This appears to have been fixed in some recent CURL version.
2022-10-14 22:41:33 +02:00
Max Kellermann
d3f37199b9
python/build/libs.py: update libnfs to 5.0.2
2022-10-14 22:41:33 +02:00
Max Kellermann
a4748d84b0
python/build/libs.py: update CURL to 7.85.0
2022-10-14 22:41:33 +02:00
Max Kellermann
8f847ec381
python/build/libs.py: update FFmpeg to 5.1.2
2022-10-14 22:41:33 +02:00
Max Kellermann
3a70f09dd3
python/build/libs.py: update libopenmpt to 0.6.6
2022-10-14 22:41:33 +02:00
Max Kellermann
568f63100b
python/build/libs.py: update zlib to 1.2.13
2022-10-14 21:54:04 +02:00
jcorporation
2937a55582
add precondition for mount/unmount in commands response
2022-10-07 13:59:54 +02:00
Max Kellermann
209e4e940e
Merge branch 'queue_save_with_append' of https://github.com/geneticdrift/MPD
2022-10-02 11:41:17 +02:00
gd
cd093a6014
Added new optional argument MODE to command 'save' to be able to append or replace an existing playlist
2022-10-02 11:19:36 +03:00
Max Kellermann
3e25916b37
time/Parser: remove unused library
2022-09-30 18:17:03 +02:00
Max Kellermann
5f9438dae6
storage/curl: include cleanup
2022-09-30 18:16:46 +02:00
BurroCargado
99e65c58ce
storage/curl: make timestamp parsing more robust
...
According to the latest WebDAV specification (RFC4918),
timestamp string in the getlastmodified property is formatted
as rfc1123-date, such as "Sun, 06 Nov 1994 08:49:37 GMT".
However, to process responses from servers in the older style
format specified in RFC2518, timestamps in the HTTP-date format
had better be accepted.
As described in the libcurl api documentation, curl_getdate() can handle
timestamp strings in HTTP-date formats, including rfc1123-date.
https://www.rfc-editor.org/rfc/rfc4918#section-15.7
https://www.rfc-editor.org/rfc/rfc2518.html#section-13.7
https://curl.se/libcurl/c/curl_getdate.html
2022-09-29 18:19:30 +02:00
BurroCargado
df71b07e9d
storage/curl: fix can't get timestamp of remote file
2022-09-29 18:19:03 +02:00
Max Kellermann
2694195215
storage/curl: add noexcept and [[gnu::pure]]
2022-09-29 18:18:18 +02:00
Max Kellermann
b0d6c0e7cb
Merge branch 'v0.23.x'
2022-09-28 13:08:34 +02:00
Max Kellermann
66450d1f3c
subprojects: update expat, fmt, sqlite3, vorbis
2022-09-28 11:34:33 +02:00
Max Kellermann
76efea3aa7
decoder/ffmpeg: add libfmt formatter for AVSampleFormat
...
Fixes compiler warning because formatting unscoped enums is deprecated
since libfmt 9.
2022-09-28 11:34:33 +02:00
Max Kellermann
ac7bf12743
event/Loop: move call to FlushClockCaches()
2022-09-28 10:03:39 +02:00
Max Kellermann
db21e20c99
event/Loop: improve API doc wording
2022-09-28 09:55:35 +02:00
Max Kellermann
56adb27b44
event/Loop: push new idle events to the back of the list
2022-09-28 09:47:36 +02:00
Max Kellermann
520e96b6e8
event/Loop: rename parameter
2022-09-28 09:45:58 +02:00
Max Kellermann
45599e7840
Merge branch 'v0.23.x'
2022-09-27 20:40:41 +02:00
Max Kellermann
8d9b0c42cb
Merge branch 'reflection' of https://github.com/jcorporation/MPD
2022-09-27 20:35:17 +02:00
jcorporation
7ab0dfc8ce
Sets the curl proxy ssl verify options to the values of the host configuration options
...
This fixes #1616
2022-09-27 20:26:50 +02:00
Max Kellermann
2c11095eed
lib/icu/Compare: use StringStartsWith() for improved code clarity
...
Also fixes the inverted strncmp() call.
2022-09-27 20:23:10 +02:00
jcorporation
07a0369b74
Add pcre status to config response
2022-09-27 20:10:35 +02:00
Max Kellermann
cd253e470a
Merge branch 'starts_with' of https://github.com/jcorporation/MPD
2022-09-27 20:05:38 +02:00
jcorporation
868a06eaf9
Add starts_with to filter expressions
2022-09-27 19:45:15 +02:00
Max Kellermann
512cd7b0de
Merge branch 'ConsumeMode' of https://github.com/jcorporation/MPD
2022-09-21 11:36:25 +02:00
Max Kellermann
352c598916
command/other: use if-with-initializer
2022-09-20 22:07:10 +02:00
Max Kellermann
661aee29da
Merge branch 'reflection' of https://github.com/jcorporation/MPD
2022-09-20 21:07:06 +02:00
jcorporation
0439df05cc
Add playlist_directory to config command response
2022-09-20 21:04:25 +02:00
jcorporation
4333854293
Add documentation for consume oneshot mode
2022-09-20 20:32:32 +02:00
jcorporation
eb3baf7e99
Cast enum to unsigned
2022-09-20 20:27:25 +02:00
jcorporation
48a936ef5b
Add ConsumeMode oneshot, closes #925
2022-09-20 20:26:49 +02:00
Max Kellermann
5a7d2be77d
Merge remote-tracking branch 'jcorporation/idle'
2022-09-20 15:11:41 +02:00
Max Kellermann
15ff7c4cad
Merge branch 'fix-oggflac-serial' of https://github.com/anthonyde/MPD into v0.23.x
2022-09-20 14:44:13 +02:00
Anthony DeRossi
9ab9b97f20
encoder/flac: only set a serial number for oggflac
...
This fixes a bug introduced in 87fa6bca where the FLAC encoder fails to
initialize unless libFLAC is built with Ogg support. When libFLAC is
built without Ogg support, FLAC__stream_encoder_set_ogg_serial_number
unconditionally returns false.
2022-09-16 17:58:41 -07:00
Max Kellermann
88d92aceab
python/build/libs.py: update libFLAC to 1.4.0
2022-09-16 18:21:47 +02:00
Max Kellermann
a2ce4352c8
python/build/libs.py: update Boost to 1.80.0
2022-09-16 17:54:07 +02:00
jcorporation
310a146a55
OutputCommands get ride of global mixer idle events
2022-09-06 21:58:18 +02:00
Max Kellermann
0e201ffdcc
archive/iso9660: simplify std::span initializer
2022-09-06 21:16:28 +02:00
Max Kellermann
d5d25d78da
Merge branch 'v0.23.x'
2022-09-06 21:15:42 +02:00
Max Kellermann
84f43ccde8
LogInit: default to stderr on Windows
...
Don't require "log_file" setting, for "--no-config" operation.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1600
2022-09-06 21:04:53 +02:00
Max Kellermann
38704c9cf3
LogInit: improve systemd/journald comment
2022-09-06 21:03:56 +02:00
Max Kellermann
910d0ec92b
test/net/meson.build: add missing dependency
2022-09-06 20:44:24 +02:00
Max Kellermann
3b05c89765
archive/iso9660: fix off-by-one assertion failure
...
Calling data[fill] could trigger an assertion failure if
fill==data.size(), even if we call it only to take the address.
Instead of doing that, this commit changes the code to pointer
arithmetic.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1556
2022-09-06 20:28:33 +02:00
Max Kellermann
e77b3fa46f
increment version number to 0.23.10
2022-09-06 20:23:50 +02:00
jcorporation
4f8b4c605e
player/Control: Change idle events from global to partition scope
2022-08-28 11:33:14 +02:00
Max Kellermann
b2fb920d28
android/PrivacyPolicy.rst: add Privacy Policy
...
The Google overlords require me to publish a privacy policy, even if
MPD does not collect any data.
2022-08-18 18:53:10 +02:00
Max Kellermann
4f041694d3
Merge tag 'v0.23.9'
...
release v0.23.9
2022-08-18 18:23:12 +02:00
Max Kellermann
12147f6d58
release v0.23.9
2022-08-18 18:20:54 +02:00
Max Kellermann
40bc60d6ae
Main: load Android mpd.conf from ExternalFilesDir
...
See also https://github.com/MusicPlayerDaemon/MPD/issues/1061
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1570
2022-08-18 18:17:43 +02:00
Max Kellermann
7778210269
Main: move code to TryReadConfigFile()
2022-08-18 18:12:21 +02:00
Max Kellermann
6229210d51
Main: move code to LoadConfigFile()
2022-08-18 18:11:49 +02:00
Max Kellermann
5d0d5b5d97
Android/Context: allow type=nullptr in GetExternalFilesDir()
2022-08-18 18:11:49 +02:00
Max Kellermann
1aa3c1e543
java/String: add static method Optional()
2022-08-18 18:10:16 +02:00
Max Kellermann
b90e32fe4e
Android/Context: look up methods once during startup
2022-08-18 18:10:14 +02:00
Max Kellermann
1f4df2a64d
android/Environment: pass JNIEnv to all functions
2022-08-18 18:09:54 +02:00
Max Kellermann
2efc1db6a9
android/Environment: no namespace indent
2022-08-18 18:08:45 +02:00
Max Kellermann
51aa1d2db8
mixer/Internal: hide internal fields
2022-08-18 17:42:30 +02:00
Max Kellermann
2d2df25d04
mixer/Mixer: avoid locking twice
2022-08-18 17:39:17 +02:00
Max Kellermann
29eb3e9ebc
mixer/Control: move some code to Lock*() methods
2022-08-18 17:34:00 +02:00
Max Kellermann
b0873fbc90
mixer/Mixer*: drop the "Mixer" prefix from source files
2022-08-18 17:21:39 +02:00
Max Kellermann
c14484a5cc
mixer/MixerList: eliminate header
2022-08-18 17:14:42 +02:00
Max Kellermann
a966cfeb1f
playlist/cue/CueParser: fix nullptr dereference
...
Regression from commit 21e4c25e61
2022-08-18 17:06:51 +02:00
Max Kellermann
6c0546d829
mixer/Internal: document that caller must lock the mutex
2022-08-18 16:57:58 +02:00
Max Kellermann
e1e8f45983
mixer/Control: add noexcept
2022-08-18 16:56:32 +02:00
Max Kellermann
3eedcc55b9
mixer/Control: convert pointers to references
2022-08-18 16:56:06 +02:00
Max Kellermann
dd2cab1488
Merge branch 'v0.23.x'
2022-08-18 16:54:18 +02:00
Max Kellermann
f883c09b6b
fs/FileSystem: add pure attributes
2022-08-18 16:53:32 +02:00
Max Kellermann
71acad6c21
fs/FileSystem: add noexcept
2022-08-18 16:53:31 +02:00
Max Kellermann
e2d4654e20
filter/ReplayGain: invoke the MixerListener after volume change
...
This ensures that Partition::OnMixerVolumeChanged() invokes
MixerMemento::InvalidateHardwareVolume(), clearing the cached volume
level.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1526
2022-08-18 14:45:45 +02:00
Max Kellermann
2b8f1170a6
mixer/Control: use Mixer::IsGlobal()
2022-08-18 14:33:35 +02:00
Max Kellermann
5c4743441e
mixer/All: use Mixer::IsPlugin()
2022-08-18 14:08:31 +02:00
Max Kellermann
938054bdb8
command/all: fix off-by-one bug in parameter count check
2022-08-09 12:47:57 +02:00
Max Kellermann
d0909adf6b
command/all: use class StaticVector
2022-08-09 12:46:26 +02:00
Max Kellermann
a12b004fa4
util/StaticVector: new class
2022-08-09 12:44:02 +02:00
Max Kellermann
a8452957fc
command/Request: pass std::span to constructor
2022-08-09 12:43:52 +02:00
Max Kellermann
feb334756e
command/all: convert macro to constexpr
2022-08-09 12:39:18 +02:00
Max Kellermann
50a4d7169e
TagAny: pass std::string_view to uri_has_scheme()
2022-08-09 11:43:35 +02:00
Max Kellermann
6239b6c0e2
Merge branch 'v0.23.x'
2022-08-08 23:48:38 +02:00
Max Kellermann
cb288439a4
{android,win32}/build.py: make stdout/stderr unbuffered
...
Avoid excessive buffering if run by CI.
2022-08-08 23:48:23 +02:00
Max Kellermann
b789ffd2bf
Merge branch 'v0.23.x'
2022-08-08 23:46:22 +02:00
Max Kellermann
69f741e8a6
mixer/Memento: move IDLE_MIXER out of SetVolume()
...
Make this idle event per-partition.
2022-08-08 23:32:57 +02:00
Max Kellermann
4b4f47002b
mixer/Volume: refactor to class MixerMemento, per partition
...
Eliminate global variables, convert them to MixerMemento fields.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1583
2022-08-08 23:30:27 +02:00
Max Kellermann
615c301961
mixer/Volume: remove logging (mostly useless)
2022-08-08 23:13:14 +02:00
Max Kellermann
dc07180e48
input/CdioParanoia: add options "mode" and "skip"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1529
2022-08-08 22:53:48 +02:00
Max Kellermann
d3b235bab5
input/CdioParanoia: move global variables up
2022-08-08 22:38:28 +02:00
Max Kellermann
0279f4fb57
output/jack: fix bogus assertion failure
...
Regression from commit 45071607aa
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1571
2022-08-08 22:01:59 +02:00
Max Kellermann
7c920ddebe
filter/ffmpeg: fix FFmpeg 5.1 deprecation warnings
2022-08-08 21:34:26 +02:00
Max Kellermann
88793cbc1a
output/httpd: avoid extra buffer copy if possible
2022-08-08 21:00:38 +02:00
Max Kellermann
2afe427ab3
output/httpd: copy from returned encoder buffer
...
This fixes a regression from commits c266fb7758 and 00b8ced09f ,
but really caused by API change in commit 7e14f8f830 , and this
plugin's failure to adapt to this API change.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1585
2022-08-08 21:00:27 +02:00
Dave Hocker
bbc088ae4e
This PR provides forward and backward compatibility at macos SDK 12.0. At SDK 12.0, API function names were changed essentially replacing
...
occurrences of the word Master/master with Main/main. This change was test built on two different systems.
1. macos 10.15.7 with Xcode 12.4 and clang 12.0.0 on x86_64
2. macos 12.5 with Xcode 13.4.1 and clang 13.1.6 on arm64 (Apple silicon M1)
It should be noted that on macos 10.15.7 with Xcode 11.2 and clang 11.0, MPD will not build.
The MPD documentation states that clang 11.0 is the minimum requirement,
but clang 11.0 produces compile errors. Apparently the macos version
of clang 11.0 is not fully compliant.
2022-08-08 17:39:29 +02:00
Max Kellermann
4c08c0b8b1
Merge branch 'v0.23.x'
2022-07-27 11:06:47 +02:00
Max Kellermann
fe195257d8
python/build/libs.py: update FFmpeg to 5.1
2022-07-27 11:04:14 +02:00
Max Kellermann
57d5df8118
decoder/ffmpeg: fix FFmpeg 5.1 deprecation warnings
2022-07-27 11:04:09 +02:00
Max Kellermann
59792cb0b8
decoder/ffmpeg: wrap FFmpeg include in "extern C"
...
Commit ebae25d175 added that #include, but forgot to wrap it in
"extern C", so the linker tried to look up C++ symbols, causing linker
failure.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1582
2022-07-27 11:04:03 +02:00
Max Kellermann
b864094fdc
Merge branch 'master' of https://github.com/Sonico98/MPD
2022-07-21 21:14:15 +02:00
Sonico
3ef83cc34e
Add titleSort tag
2022-07-20 23:05:10 -03:00
Rosen Penev
3f133dd586
use data() instead of &[0]
...
No need for C pointer manipulation.
Removed data() for string_view as [] can be used without.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2022-07-20 13:50:48 -07:00
Rosen Penev
cc557c4d60
meson: port ncpmc iconv solution
...
Properly deals with iconv, unlike the current solution. have_iconv fails
when libiconv CFLAGS are passed to the compiler. Tested under OpenWrt
with its CONFIG_BUILD_NLS, which adds libiconv include flags.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2022-07-20 08:03:24 +02:00
Max Kellermann
0c98d93e9a
io/FileOutputStream: write to temporary file if O_TMPFILE is not available
2022-07-14 18:45:33 +02:00
Max Kellermann
c344403bed
fs/Path: add operator+
2022-07-14 18:42:25 +02:00
Max Kellermann
150e8f78bf
io/FileOutputStream: use fsync() if fdatasync() is unavailable
...
Fixes the macOS build which apparently doesn't implement the POSIX
function fdatasync().
2022-07-14 18:34:44 +02:00
Max Kellermann
bc7fdba36d
test/fs/TestPath: add missing PATH_LITERAL
2022-07-14 18:34:43 +02:00
Max Kellermann
fe3ab7b937
fs/Path: add WithSuffix()
2022-07-14 18:23:48 +02:00
Max Kellermann
458084d79b
fs/Path: add GetSuffix()
2022-07-14 18:20:55 +02:00
Max Kellermann
f44bc19ce1
test/fs/TestPath: new unit test
2022-07-14 18:20:45 +02:00
Max Kellermann
d3947d0ad5
fs/Path: GetExtension() skips all leading dots
...
Don't return an empty string for "..", because this path doesn't have
an extension.
2022-07-14 18:20:45 +02:00
Max Kellermann
849ed122c7
fs/Path: document GetExtension()
2022-07-14 18:12:00 +02:00
Max Kellermann
254ee00c37
fs/Path: rename GetSuffix() to GetExtension()
...
The "extension" is the name after the dot, but the "suffix" is the
string including the dot.
2022-07-14 18:12:00 +02:00
Max Kellermann
594b97feb1
fs/Path: change cast syntax
2022-07-14 18:12:00 +02:00
Max Kellermann
cc0def15c4
Copyright year 2022
2022-07-14 17:59:35 +02:00
Max Kellermann
81154130b5
test/fs: rename TestFs.cxx to TestGlob.cxx
2022-07-14 17:57:10 +02:00
Max Kellermann
0514f25c61
test/TestFs: move to test/fs/
2022-07-14 17:56:37 +02:00
Max Kellermann
2670bbdcc8
io/FileOutputStream: simplify OpenTempFile() call
2022-07-14 15:47:10 +02:00
Max Kellermann
bd3e096411
io/FileOutputStream: move code to Delete()
2022-07-14 15:43:36 +02:00
Max Kellermann
270a74e53b
io/FileOutputStream: add method Sync()
2022-07-14 15:41:12 +02:00
Max Kellermann
47d103e8a1
io/FileOutputStream: add API documentation
2022-07-14 15:41:03 +02:00
Max Kellermann
188f7ab795
thread/WindowsCond: add explicit cast
2022-07-14 13:04:08 +02:00
Max Kellermann
4953a57c1c
java/String: add std::string_view constructor
2022-07-14 13:03:23 +02:00
Max Kellermann
199037c682
config: allow configuring partitions
...
This just allows creating empty partitions. More features to come.
2022-07-13 15:18:06 +02:00
Max Kellermann
64f84d5468
player/Listener: add virtual method OnPlayerState(), wrapping IDLE_PLAYER
...
This eliminates most of the remaining global "player" idle events.
2022-07-13 14:11:36 +02:00
Max Kellermann
047561dc22
player/Listener: add virtual method OnPlayerError()
...
Replaces two global idle_add() calls.
2022-07-13 14:11:36 +02:00
Max Kellermann
a542a0804a
Partition: OnPlayerTagModified() emits IDLE_PLAYER
...
Replaces one global idle_add() call.
2022-07-13 14:11:36 +02:00
Max Kellermann
cddeb2a0df
io/BufferedOutputStream: add missing #include
2022-07-13 14:11:36 +02:00
Max Kellermann
de1d443db1
output/Multiple: use std::size_t
2022-07-13 13:26:27 +02:00
Max Kellermann
e2040ed395
output/Multiple: use [[gnu::pure]]
2022-07-13 13:25:17 +02:00
Max Kellermann
8a0ba7a725
output/Control: GetName() returns std::string&
2022-07-13 13:23:21 +02:00
Max Kellermann
e74788ea32
output/Control: inline GetName()
2022-07-13 13:13:23 +02:00
Max Kellermann
fef79931c5
output/Multiple: pass std::string_view to FindByName()
2022-07-13 13:13:21 +02:00
Max Kellermann
b52b0ac85a
*: use BufferedOutputStream::Fmt()
2022-07-13 13:10:14 +02:00
Max Kellermann
9a30286289
io/BufferedOutputStream: add libfmt support
2022-07-13 12:52:20 +02:00
Max Kellermann
20310437d0
.github/workflows/build.yml: build with Ubuntu 22.04 as well
2022-07-13 12:41:04 +02:00
Max Kellermann
d29e1544bf
.github/workflows/build.yml: explicitly select ubuntu-20.04
...
According to https://github.com/actions/virtual-environments
"ubuntu-latest" maps to "ubuntu-20.04", even though "ubuntu-22.04" is
also available. Since our job description is very specific to
"ubuntu-20.04", let's select this explicitly.
2022-07-13 12:37:02 +02:00
Max Kellermann
ae4f4d3533
config/Data: add WithEach(ConfigBlockOption)
...
To improve error messages without making callers more complex.
2022-07-13 11:05:21 +02:00
Max Kellermann
89a18b49a7
Merge branch 'v0.23.x'
2022-07-12 14:00:00 +02:00
guihkx
956c5faebb
output/PipeWire: set app icon
...
Closes #1564
2022-07-12 13:59:05 +02:00
Max Kellermann
eb589b0a46
output/osx: fix CI failure
2022-07-12 13:37:46 +02:00
Max Kellermann
52eff41379
remove Haiku support
...
Haiku support has been unmaintained for many years, and this issue has
been open for more than 5 years, but apparently the Haiku people have
lost interest:
https://github.com/MusicPlayerDaemon/MPD/pull/183
Haiku support was therefore deprecated by this commit 4 years ago:
7de8fd04a4 - but in those 4 years, nobody stepped up to adopt
maintainership.
I don't have any computer (or VM) with Haiku and there is no CI with
Haiku support, so I'm unable to adapt the Haiku specific code to API
changes.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/182
Closes https://github.com/MusicPlayerDaemon/MPD/issues/185
2022-07-12 13:14:49 +02:00
Max Kellermann
45071607aa
output/Interface: pass std::span to Play()
2022-07-12 12:59:47 +02:00
Max Kellermann
f5d104e7af
output/ao: simplify write_size checks
2022-07-12 12:58:19 +02:00
Max Kellermann
4f8d2a8b1c
output/alsa: use std::byte instead of uint8_t
2022-07-12 12:36:39 +02:00
Max Kellermann
0158a2b6b9
encoder/flac: refactor input buffer conversion
2022-07-12 12:31:08 +02:00
Max Kellermann
00b8ced09f
encoder/flac: Read() returns the internal buffer
2022-07-12 12:19:55 +02:00
Max Kellermann
5f51be43cf
decoder/flac: add noexcept and inline
2022-07-12 12:15:06 +02:00
Max Kellermann
3e2de560ca
encoder/lame: eliminate the audio_format field
2022-07-12 12:08:46 +02:00
Max Kellermann
c266fb7758
encoder/lame: Read() returns the internal buffer
...
Eliminate memcpy() calls.
2022-07-12 12:01:31 +02:00
Max Kellermann
0d09f307b2
encoder/Interface: update API docs
2022-07-12 12:00:02 +02:00
Max Kellermann
eb7d321cb8
Merge branch 'v0.23.x'
2022-07-12 11:59:49 +02:00
Max Kellermann
cd0396c1f1
test/run_decoder: remove bogus assert()
2022-07-12 11:59:14 +02:00
Max Kellermann
79f9b268bb
increment version number to 0.23.9
2022-07-12 11:50:47 +02:00
Max Kellermann
b45f3c8deb
Android release 0.23.8
2022-07-12 11:48:41 +02:00
Max Kellermann
f8a8de87e4
android/AndroidManifest.xml: update targetSdkVersion to 30
...
Required by Google Play.
2022-07-12 11:48:41 +02:00
Max Kellermann
2183f0553c
android/meson.build: use apksigner instead of jarsigner
...
This is required for targetSdkVersion=30.
apksigner requires running zipalign first.
2022-07-12 11:48:41 +02:00
Max Kellermann
7e14f8f830
encoder/Interface: pass std::span to Write() and Read()
2022-07-12 10:33:59 +02:00
Max Kellermann
28e044a36a
encoder/lame: use std::size_t
2022-07-12 10:14:10 +02:00
Max Kellermann
4e91d8279b
encoder/vorbis: use std::size_t
2022-07-12 10:11:30 +02:00
Max Kellermann
ff3d8509ac
output/httpd: move buffer to stack
2022-07-12 10:08:26 +02:00
Max Kellermann
e861d4f83d
encoder/interface: make Read() noexcept (all implementations are)
2022-07-12 10:07:38 +02:00
Max Kellermann
31d89b36cf
encoder/flac: use std::size_t
2022-07-12 09:53:16 +02:00
Max Kellermann
6b24344031
output/shout: move buffer to stack
2022-07-12 09:48:02 +02:00
Max Kellermann
c55e250c45
encoder/Interface: include cleanup
2022-07-11 22:38:24 +02:00
Max Kellermann
cd241a93c1
util/DynamicFifoBuffer: pass std::span to Append()
2022-07-11 22:38:24 +02:00
Max Kellermann
53acf7ae82
encoder/*: use std::byte instead of uint8_t
2022-07-11 22:38:24 +02:00
Max Kellermann
c34f6ed8c0
decoder/Client: pass std::span to SubmitData()
2022-07-11 22:37:38 +02:00
Max Kellermann
329c448d30
decoder/wavpack: use [[gnu::pure]]
2022-07-11 22:11:42 +02:00
Max Kellermann
a6619e9a13
decoder/wavpack: add "constexpr" and "const_cast"
2022-07-11 22:10:11 +02:00
Max Kellermann
24ce5da2b8
decoder/wavpack: convert pointer to reference
2022-07-11 22:08:49 +02:00
Max Kellermann
b4f751080d
decoder/wavpack: add noexcept
2022-07-11 22:06:10 +02:00
Max Kellermann
6d02edebc9
decoder/wavpack: rename "samples" to "frames"
2022-07-11 22:05:49 +02:00
Max Kellermann
349882ed75
decoder/wavpack: require libwavpack version 5
2022-07-11 22:04:15 +02:00
Max Kellermann
4464310e74
Merge tag 'v0.23.8'
...
release v0.23.8
2022-07-09 01:08:16 +02:00
Max Kellermann
1f28790476
release v0.23.8
2022-07-09 01:05:38 +02:00
Max Kellermann
c8dae95eff
output/PipeWire: after Cancel(), refill buffer before resuming playback
...
Deactivate the stream in Cancel(). This fixes stuttering after a
manual song change by refilling the whole ring buffer before
reactivating the stream.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1354
2022-07-09 01:03:36 +02:00
Max Kellermann
547a084c7e
output/PipeWire: call pw_stream_flush() in Cancel()
...
Clear not only MPD's ring buffer, but also libpipewire's buffers, to
avoid playing some audio from the previous song after a manual song
change.
Fixes part 1 of https://github.com/MusicPlayerDaemon/MPD/issues/1354
2022-07-09 01:01:29 +02:00
Max Kellermann
493677ff81
output/PipeWire: skip Cancel() if already drained
2022-07-09 00:53:53 +02:00
Max Kellermann
6b430ba271
output/PipeWire: activate stream in Drain()
2022-07-09 00:53:20 +02:00
Max Kellermann
4b3dcf831b
output/Timer: add noexcept
2022-07-08 22:58:45 +02:00
Max Kellermann
bc6924d303
output/snapcast: fix busy loop while paused
...
Removing the LockHasClients(); this code was copied from the "httpd"
output plugin, but unlike "httpd", the SnapCast output plugin does not
feed silence while paused, so we need to implement a delay to avoid
busy-looping the CPU.
As a side effect, this eliminates the suttering after resuming
playback, because the timer now gets reset even if there is a client.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1394
2022-07-08 22:55:41 +02:00
Max Kellermann
02b00f9146
output/PipeWire: don't force initial volume=100%
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1484
2022-07-08 18:25:41 +02:00
Max Kellermann
e807ed5870
output/PipeWire: ignore SPA_PROP_channelVolumes if n_values==0
...
After connecting, PipeWire sometimes sends SPA_PROP_channelVolumes
with no values, and this led to "volume=-NaN".
2022-07-08 18:13:33 +02:00
Max Kellermann
f08944253b
output/PipeWire: check SPA_PROP_channelVolumes, not control name
...
Since PipeWire 0.3.53, there is no control name anymore, therefore the
name check doesn't work anymore, breaking volume change events.
This obsoletes the crash bug fix in commit 2ee57f9b0d
2022-07-08 18:06:36 +02:00
Max Kellermann
792d6584b9
output/PipeWire: move code to OnChannelVolumes()
2022-07-08 18:02:36 +02:00
Max Kellermann
7b45d01462
output/PipeWire: update field "volume"
2022-07-08 17:44:39 +02:00
Max Kellermann
5c17b2966a
output/PipeWire: use std::accumulate
2022-07-08 17:44:08 +02:00
Max Kellermann
0c54f29446
output/PipeWire: document field "volume"
2022-07-08 17:30:57 +02:00
Max Kellermann
9c3cf39fdd
output/PipeWire: catch exceptions in ParamChanged()
...
Fixes a potential crash bug.
2022-07-08 17:24:41 +02:00
Max Kellermann
d2fb229685
output/PipeWire: call ::SetVolume() in ParamChanged()
...
This is a lower-level function without some of the clutter of
PipeWireOutput::SetVolume() which is not needed in that case.
2022-07-08 17:21:17 +02:00
Max Kellermann
f55bc6682f
output/PipeWire: move code to ::SetVolume()
2022-07-08 17:19:10 +02:00
Max Kellermann
6857286b42
decoder/Thread: don't scan for replay gain tags in PCM streams
...
This disables a long delay for playing songs from the cdio_paranoia
input plugin if ReplayGain is enabled.
2022-07-08 16:33:19 +02:00
Max Kellermann
c0d5bd2048
decoder/Thread: move code to DecoderControl::LockIsReplayGainEnabled()
2022-07-08 16:21:53 +02:00
Max Kellermann
666e5d7904
input/CdioParanoia: use integer modulo to calculate "diff"
2022-07-08 16:04:05 +02:00
Max Kellermann
3613407ac5
input/CdioParanoia: use typedef lsn_t
2022-07-08 16:03:04 +02:00
Max Kellermann
c32dceb4d4
input/CdioParanoia: remove loop from Read()
...
The Read() method is not required to fill the whole buffer. By
returning as soon as at least one byte was read, we allow faster
cancellation.
2022-07-08 16:01:23 +02:00
Max Kellermann
5573e78364
input/CdioParanoia: skip seek if seeking within the buffer
2022-07-08 13:57:11 +02:00
Max Kellermann
807a19889f
input/CdioParanoia: update offset only after successful seek
...
If seeking fails, don't leave the class with a wrong offset.
2022-07-08 13:57:11 +02:00
Max Kellermann
df7242de91
input/CdioParanoia: eliminate redundant field "lsn_relofs"
2022-07-08 13:36:59 +02:00
Max Kellermann
d62426f168
input/CdioParanoia: eliminate redundant field "lsn_to"
...
Use "size" instead.
2022-07-08 12:42:49 +02:00
Max Kellermann
1714cf3417
input/CdioParanoia: use IsEof() in Read()
2022-07-08 12:42:42 +02:00
Max Kellermann
1080c917be
input/CdioParanoia: use std::min()
2022-07-08 12:37:21 +02:00
Max Kellermann
8eb3164878
input/CdioParanoia: fix crash if no drive was found
...
cdio_get_devices_with_cap() can return nullptr if no drive was found,
or it can instead return an empty list. The latter caused MPD to
crash.
2022-07-08 12:05:20 +02:00
Max Kellermann
915c5442d1
input/CdioParanoia: use AtScopeExit() for cdio_free_device_list()
2022-07-08 12:03:57 +02:00
Max Kellermann
be0360d5e8
doc/user.rst: clarify .mpdignore documentation
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1532
2022-07-08 11:44:14 +02:00
Max Kellermann
4d6ae6ffdd
output/PipeWire: add nullptr check to SetVolume()
...
If the PipeWire output has not yet been enabled and no thread_loop has
been created yet, a nullptr dereference in SetVolume() was possible
because nullptr was passed to pw_thread_loop_lock().
2022-07-08 11:32:59 +02:00
Max Kellermann
ecee6f415b
mixer/MixerInternal: remember error details
...
If a mixer is not open, rethrow the original exception each time
setting the volume is requested. This further improves error messages
sent to MPD clients.
2022-07-08 11:11:53 +02:00
Max Kellermann
47680f936b
mixer/All: auto-open "global" mixers
...
If a mixer is "global", it is available even if the output isn't
open. However, since the check was changed from IsEnabled() to
IsReallyEnabled(), enabled outputs have not yet been used have not
been "really" enabled yet, preventing using the mixer.
Fixes a regression by commit 35dbc1a90c
(part of https://github.com/MusicPlayerDaemon/MPD/pull/1480 ).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1563
2022-07-08 11:05:26 +02:00
Max Kellermann
2d7181105d
output/MultipleOutputs: SetVolume() throws on error
...
This reveals more about the nature of an error instead of just
returning "problems setting volume".
2022-07-08 10:56:55 +02:00
Max Kellermann
9bdc75524b
python/build/libs.py: update CURL to 7.84.0
2022-07-08 10:13:52 +02:00
Max Kellermann
2f6ceb4949
python/build/libs.py: update OpenSSL to 3.0.5
2022-07-08 10:10:42 +02:00
Max Kellermann
cd933aa35f
subprojects: update fmt and vorbis
2022-07-08 10:08:27 +02:00
Max Kellermann
138738075b
libfmt 9 support
...
libfmt version 9 broke the API by removing fmt::make_args_checked().
Fixes https://bugs.debian.org/1014543
2022-07-08 10:06:53 +02:00
Max Kellermann
7dd65f3028
Merge branch 'v0.23.x'
2022-07-04 19:21:18 +02:00
Max Kellermann
2ee57f9b0d
output/PipeWire: add nullptr check, fixing crash with PipeWire 0.3.53
...
Since PipeWire 0.3.53, control names can apparently be nulled, leading
to crashes in applications assertion that the string cannot be
nullptr.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1558
2022-07-04 19:20:08 +02:00
Max Kellermann
bc56f8c2f0
util/ConstBuffer: remove obsolete library
...
Everything has been migrated to std::span.
2022-07-04 19:15:10 +02:00
Max Kellermann
596ff7e6bf
output/*: use std::span instead of ConstBuffer
2022-07-04 19:14:12 +02:00
Max Kellermann
e8667f99be
util/OptionParser: use std::span instead of ConstBuffer
2022-07-04 19:04:16 +02:00
Max Kellermann
9b427b3171
command/*: use std::span instead of ConstBuffer
2022-07-04 18:58:13 +02:00
Max Kellermann
baff5e5594
lib/yajl: use std::span instead of ConstBuffer
2022-07-04 18:37:36 +02:00
Max Kellermann
020c9b41cc
lib/icu: use std::span instead of ConstBuffer
2022-07-04 18:37:35 +02:00
Max Kellermann
e975e2e477
lib/ffmpeg: use std::span instead of ConstBuffer
2022-07-04 18:37:35 +02:00
Max Kellermann
4e1dc562f7
lib/curl: use std::span instead of ConstBuffer
2022-07-04 18:37:35 +02:00
Max Kellermann
d097babe73
lib/chromaprint: use std::span instead of ConstBuffer
2022-07-04 18:37:35 +02:00
Max Kellermann
8fa212f04d
lib/cdio: use std::span instead of ConstBuffer
2022-07-04 18:37:35 +02:00
Max Kellermann
b9c9a5f1dd
db/*: use std::span instead of ConstBuffer
2022-07-04 18:37:35 +02:00
Max Kellermann
4fb8b45111
song/Filter: use std::span instead of ConstBuffer
2022-07-04 18:37:35 +02:00
Max Kellermann
6c107443d3
input/qobuz: include cleanup
2022-07-04 18:37:35 +02:00
Max Kellermann
67c6d111a8
filter/*: use std::span instead of ConstBuffer
2022-07-04 18:37:35 +02:00
Marceline Cramer
18ebd42c52
.github: Add reminder to include backtrace in issue template
2022-07-04 10:32:58 -06:00
Max Kellermann
9675cc77e2
decoder/*: use std::span instead of ConstBuffer
2022-07-04 18:11:21 +02:00
Max Kellermann
4ce1dae673
pcm/*: use std::span instead of ConstBuffer
2022-07-04 18:11:21 +02:00
Max Kellermann
d89136b09c
util/ConstBuffer: hard-code std::span support
2022-07-04 18:09:32 +02:00
Max Kellermann
d58c38943a
util/StringView: remove obsolete class
...
Everything has been migrated to std::string_view.
2022-07-04 15:04:31 +02:00
Max Kellermann
66704ec879
util/UriExtract: use std::string_view instead of StringView
2022-07-04 15:04:31 +02:00
Max Kellermann
422c1e9288
util/TemplateString: remove StringView support
2022-07-04 15:04:31 +02:00
Max Kellermann
683f0da2e7
tag/*: use std::string_view instead of StringView
2022-07-04 15:04:31 +02:00
Max Kellermann
c7a8fc91c0
storage/curl: use std::string_view instead of StringView
2022-07-04 15:04:31 +02:00
Max Kellermann
cfd255a014
lib/xiph: use std::string_view instead of StringView
2022-07-04 15:04:31 +02:00
Max Kellermann
1c30b3d5a1
lib/dbus/UDisks2: use std::string_view instead of StringView
2022-07-04 15:04:31 +02:00
Max Kellermann
4964eda167
fs/StandardDirectory: use std::string_view instead of StringView
2022-07-04 15:04:31 +02:00
Max Kellermann
502e5f006a
decoder/*: use std::string_view instead of StringView
2022-07-04 14:50:18 +02:00
Max Kellermann
23235e3194
db/upnp/Directory: use std::string_view instead of StringView
2022-07-04 14:50:18 +02:00
Max Kellermann
93834fe389
db/simple/Directory: use std::string_view instead of StringView
2022-07-04 14:50:18 +02:00
Max Kellermann
bd32b229b5
config/Path: use std::string_view instead of StringView
2022-07-04 14:41:39 +02:00
Max Kellermann
c7d2cb855a
Permission: use std::string_view instead of StringView
2022-07-04 14:38:29 +02:00
Max Kellermann
04c924ae3b
playlist/Registry: use std::string_view instead of StringView
2022-07-04 14:36:21 +02:00
Max Kellermann
6c8a85a391
playlist/{asx,cue,rss,xspf}: use std::string_view instead of StringView
2022-07-04 14:35:52 +02:00
Max Kellermann
74780131bd
lib/zlib/GzipOutputStream: add SyncFlush()
2022-07-04 10:09:04 +02:00
Max Kellermann
2c092d2613
lib/zlib/GzipOutputStream: add exception API docs
2022-07-04 10:08:55 +02:00
Max Kellermann
171b31ae67
lib/zlib/GzipOutputStream: rename Flush() to Finish()
2022-07-04 10:08:54 +02:00
Max Kellermann
5b3abe2c9c
lib/zlib/GzipOutputStream: grow Write() buffer to 64 kB
2022-07-04 10:08:53 +02:00
Max Kellermann
59186f1fb0
event/Loop: include cleanup
2022-07-04 09:55:48 +02:00
Max Kellermann
5e68531428
event/SocketEvent: move ssize_t to class BufferedSocket
2022-07-04 09:54:08 +02:00
Max Kellermann
e7b15a9041
lib/curl/Request: remove obsolete method prototypes
2022-07-02 18:42:08 +02:00
Max Kellermann
853afa1bce
lib/curl/Adapter: add missing StripLeft() call
...
Fixes regression by commit 88a66df9d6
2022-07-02 18:36:15 +02:00
Max Kellermann
627fd755e8
lib/curl/Adapter: remove redundant size check
2022-07-01 16:54:47 +02:00
Max Kellermann
88a66df9d6
lib/curl/Adapter: use std::string_view internally
2022-07-01 16:51:37 +02:00
Max Kellermann
af951dc08a
Merge branch 'v0.23.x'
2022-07-01 12:45:07 +02:00
Max Kellermann
5a5655b790
lib/curl/Adapter: catch and postpone exceptions in WriteFunction()
...
This fixes a std::terminate() crash in the CURL storage plugin when
PropfindOperation::OnHeaders() throws an exception after receiving a
non-207 status.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1559
2022-07-01 12:43:42 +02:00
Max Kellermann
a6d20d1907
Merge branch 'v0.23.x'
2022-07-01 12:39:41 +02:00
Max Kellermann
b88d1e6820
lib/curl/Headers: make the comparison type "transparent"
2022-07-01 12:17:41 +02:00
Max Kellermann
19d2864c34
lib/curl/Headers: central type definition for the header map
2022-07-01 12:17:36 +02:00
Max Kellermann
29e3a17f26
lib/curl/Request: move code from SetupEasy() to Setup.cxx
2022-07-01 12:17:26 +02:00
Max Kellermann
252e9f736f
lib/curl/Request: move code to class CurlResponseHandlerAdapter
2022-07-01 12:17:20 +02:00
Max Kellermann
5d08988dda
lib/curl/Handler: fix typo
2022-07-01 12:17:17 +02:00
Max Kellermann
47ca4246aa
lib/curl/Request: add constructor with CurlEasy parameter
2022-07-01 12:17:13 +02:00
Max Kellermann
f8338d4f00
lib/curl/Request: use std::size_t
2022-07-01 12:16:59 +02:00
Max Kellermann
5cf6032c90
lib/curl/Request: move code to SetupEasy()
2022-07-01 12:16:55 +02:00
Max Kellermann
8d8b77412d
lib/curl/Request: add API docs
2022-07-01 12:16:50 +02:00
Max Kellermann
d882c3361d
playlist/PlaylistPlugin: use std::string_view
2022-07-01 11:31:31 +02:00
Max Kellermann
9d50306e2f
lib/xiph/ScanVorbisComment: use std::string_view
2022-07-01 11:30:44 +02:00
Max Kellermann
96f99aeb8f
TagPrint: use std::string_view
2022-07-01 11:29:58 +02:00
Max Kellermann
ed7263ee3e
decoder/OpusTags: use std::string_view
2022-07-01 11:29:11 +02:00
Max Kellermann
f32d752ccb
util/NumberParser: use std::string_view
2022-07-01 11:29:11 +02:00
Max Kellermann
671b7e079f
decoder/OpusReader: use std::string_view
2022-07-01 11:29:11 +02:00
Max Kellermann
e10b15010c
decoder/OpusReader: add noexcept
2022-07-01 11:29:11 +02:00
Max Kellermann
02fe857755
util/IterableSplitString: return std::string_view
2022-07-01 11:29:11 +02:00
Max Kellermann
ea3f044cd8
util/SplitString: use std::string_view
2022-07-01 11:29:11 +02:00
Max Kellermann
e6bb6c59ec
storage/Composite: use std::string_view
2022-07-01 11:29:11 +02:00
Max Kellermann
6d23ac67f9
util/UriQueryParser: use std::string_view
2022-07-01 11:29:10 +02:00
Max Kellermann
ca46b4d7a7
util/MimeType: use std::string_view
2022-07-01 11:29:10 +02:00
Max Kellermann
0727ee94c0
tag/Id3Scan: use std::string_view
2022-07-01 11:29:10 +02:00
Max Kellermann
21e4c25e61
playlist/cue/CueParser: more std::string_view
2022-07-01 11:29:10 +02:00
Max Kellermann
e921c0b40b
lib/yajl/Callbacks: use std::string_view
2022-07-01 11:16:42 +02:00
Max Kellermann
c05d4cddfb
input/qobuz: use std::string_view
2022-07-01 11:16:42 +02:00
Max Kellermann
c9723ee4b7
playlist/SoundCloud: use std::string_view
2022-07-01 11:16:42 +02:00
Max Kellermann
ca90c75c61
lib/alsa/AllowedFormat: pass std::string_view to constructor
2022-07-01 10:57:49 +02:00
Max Kellermann
9976665cc7
util/UriRelative: use std::string_view internally
2022-07-01 10:56:29 +02:00
Max Kellermann
c5f037fa64
util/StringCompare: move code from StringView
2022-07-01 10:48:34 +02:00
Max Kellermann
5ec13c0b06
util/StringStrip: add libc++ compatibility kludge
2022-07-01 10:45:37 +02:00
Max Kellermann
60ca12e4bd
db/simple/Song: use std::string_view
2022-06-30 21:04:13 +02:00
Max Kellermann
67fcf7d7c5
output/ao: add missing include
2022-06-30 21:03:25 +02:00
Max Kellermann
c953ed48b7
output/ao: use std::string_view
2022-06-30 21:01:29 +02:00
Max Kellermann
6440df60aa
output/jack: use std::string_view
2022-06-30 21:00:23 +02:00
Max Kellermann
b806b0a97f
util/StringStrip: add std::string_view overloads
2022-06-30 21:00:07 +02:00
Max Kellermann
10197a0041
util/IterableSplitString: use std::string_view internally
2022-06-30 20:54:42 +02:00
Max Kellermann
166885802a
util/StringSplit: move code from StringView.hxx
2022-06-30 20:40:41 +02:00
Max Kellermann
4a97c45585
tag/Config: use IterableSplitString instead of SplitString()
2022-06-30 20:39:39 +02:00
Max Kellermann
0173d3b313
util/IterableSplitString: use StringView::Split()
2022-06-30 20:37:58 +02:00
Max Kellermann
aadd32c973
util/IterableSplitString: add noexcept
2022-06-30 20:34:04 +02:00
Max Kellermann
0f4bf5569a
event/InotifyEvent: new class wrapping inotify
...
Replaces class InotifySource.
2022-06-30 12:05:50 +02:00
Max Kellermann
ff4cf6c6d1
test/run_inotify: add class Instance
2022-06-30 11:57:03 +02:00
Max Kellermann
a7b7e35512
tag/ReplayGainParser: use std::string_view
2022-06-30 10:59:56 +02:00
Max Kellermann
11135b48e6
tag/MixRampParser: use std::string_view
2022-06-30 10:59:27 +02:00
Max Kellermann
d0382caa88
tag/ApeLoader: use std::string_view
2022-06-30 10:58:22 +02:00
Max Kellermann
4765726bda
tag/VorbisComment: use std::string_view
2022-06-30 10:57:01 +02:00
Max Kellermann
455a412aaa
tag/Table: use std::string_view
2022-06-30 10:53:26 +02:00
Max Kellermann
1a2b505979
tag/ParseName: use std::string_view
2022-06-30 10:52:21 +02:00
Max Kellermann
c34f3c9b94
tag/Handler: use StringIsEqualIgnoreCase()
2022-06-30 10:50:56 +02:00
Max Kellermann
232084c2f9
playlist/cue/CueParser: use std::string_view in public API
2022-06-30 10:50:53 +02:00
Max Kellermann
2ba092711f
event/net/UdpListener: use IsSocketErrorReceiveWouldBlock()
2022-06-30 10:32:25 +02:00
Max Kellermann
8aa4227c0c
net/SocketAddress: add std::span cast operators
2022-06-30 10:30:54 +02:00
Max Kellermann
81afb47cd0
util/ByteOrder: add class PackedBE64
2022-06-30 10:30:54 +02:00
Max Kellermann
60a3aae35f
io/FileDescriptor: add OpenReadOnly() overload with directory fd
2022-06-30 10:30:54 +02:00
Max Kellermann
bc3415ce8b
Copyright year 2022
2022-06-30 09:41:53 +02:00
Max Kellermann
3f1acd3642
lib/avahi/Publisher: fix comment typo
2022-06-30 09:38:44 +02:00
Max Kellermann
4564d251a8
zeroconf/avahi: move generic sources to lib/avahi
2022-06-30 09:37:30 +02:00
Max Kellermann
8783ed1981
lib/curl/Adapter: use std::string_view
2022-06-29 17:38:58 +02:00
Max Kellermann
1da09f5b1b
lib/curl: use std::span
2022-06-29 17:37:12 +02:00
Max Kellermann
062df65b1e
lib/dbus: use std::span
2022-06-29 17:32:58 +02:00
Max Kellermann
899eaa3307
io/FileDescriptor: add Duplicate() returning UniqueFileDescriptor
2022-06-29 17:31:37 +02:00
Max Kellermann
5140eaa5e7
util/IntrusiveList: use std::is_base_of_v
2022-06-29 17:30:11 +02:00
Max Kellermann
cca20fec07
event/FineTimerEvent: adjust "friend" declaration
2022-06-29 17:29:44 +02:00
Max Kellermann
12d67dad35
net/SocketError: support ETIMEDOUT
2022-06-29 17:28:47 +02:00
Max Kellermann
8a68d085b4
util/IntrusiveList: add option "constant_time_size"
2022-06-29 17:28:39 +02:00
Max Kellermann
e437cc4faf
util/IntrusiveList: add size()
2022-06-29 17:28:35 +02:00
Max Kellermann
1fb858e2d7
util/IntrusiveList: add struct IntrusiveListMemberHookTraits
2022-06-29 17:28:16 +02:00
Max Kellermann
3945a3add9
util/MemberPointer: new library
2022-06-29 17:28:15 +02:00
Max Kellermann
5348a446a7
util/IntrusiveList: move various static functions to struct IntrusiveListBaseHook
2022-06-29 17:27:40 +02:00
Max Kellermann
e8e33d5fc4
util/IntrusiveList: add missing ToHook() calls
2022-06-29 17:27:37 +02:00
Max Kellermann
c28580745b
util/IntrusiveList: move struct HookDetection to top-level
2022-06-29 17:24:08 +02:00
Max Kellermann
e7b587d550
util/CopyConst: use std::add_const
2022-06-29 17:23:50 +02:00
Max Kellermann
5d34b9b5bb
util/SpanCast: move CopyConst to separate header
2022-06-29 17:23:44 +02:00
Max Kellermann
86be7938f1
util/SpanCast: swap the CopyConst template parameters
2022-06-29 17:23:41 +02:00
Max Kellermann
7ad5a5efec
util/OffsetPointer: use std::byte
2022-06-29 17:23:32 +02:00
Max Kellermann
64f2735e60
util/SpanCast: add ToStringView()
2022-06-29 17:23:14 +02:00
Max Kellermann
3a0a0facdf
util/SpanCast: suppress alignment warnings
2022-06-29 17:23:13 +02:00
Max Kellermann
ec66ee3bfb
tag/Handler: use std::string_view instead of StringView
2022-06-29 17:22:17 +02:00
Max Kellermann
ca9dd74fbf
tag/Builder: use std::string_view instead of StringView
2022-06-29 17:22:17 +02:00
Max Kellermann
2da847dd30
tag/Pool: use std::string_view instead of StringView
2022-06-29 17:22:17 +02:00
Max Kellermann
4cb5c3782b
util/HexFormat: require std::span
2022-06-29 17:22:17 +02:00
Max Kellermann
dcf39ee44e
.github/workflows/build.yml: add "python-version: 3.x"
...
This appears to be necessary as of actions/setup-python@v4 (commit
45d908e25f ).
2022-06-13 21:37:04 +02:00
Max Kellermann
f2cfa3e1c4
net/SocketError: add SocketErrorCategory()
2022-06-13 21:26:58 +02:00
Max Kellermann
0c2c20254b
system/Error: add IsLastError()
2022-06-13 21:23:11 +02:00
Max Kellermann
193d6a4fd4
system/Error: add LastErrorCategory()
2022-06-13 21:19:20 +02:00
Max Kellermann
acfeec7a5d
system/Error: add [[gnu::const]] attribute
2022-06-13 21:16:24 +02:00
dependabot[bot]
45d908e25f
build(deps): bump actions/setup-python from 3 to 4
...
Bumps [actions/setup-python](https://github.com/actions/setup-python ) from 3 to 4.
- [Release notes](https://github.com/actions/setup-python/releases )
- [Commits](https://github.com/actions/setup-python/compare/v3...v4 )
---
updated-dependencies:
- dependency-name: actions/setup-python
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-06-13 15:23:52 +00:00
Naglis Jonaitis
fd9114e7e2
doc/user.rst: fix neighbor plugin config block name
2022-06-08 12:57:27 +02:00
Max Kellermann
b4f454a553
Merge pull request #1548 from MusicPlayerDaemon/dependabot/github_actions/actions/setup-python-3
...
build(deps): bump actions/setup-python from 1 to 3
2022-06-08 12:56:55 +02:00
Max Kellermann
299f813e28
Merge pull request #1549 from MusicPlayerDaemon/dependabot/github_actions/actions/checkout-3
...
build(deps): bump actions/checkout from 2 to 3
2022-06-08 12:56:21 +02:00
Max Kellermann
eedd490e2d
net/AddressInfo: add iterator type aliases
2022-06-07 10:11:26 +02:00
Max Kellermann
0a8aca516a
util/StringBuffer: use data() instead of &front()
2022-06-07 10:11:05 +02:00
Max Kellermann
70808bde64
util/ForeignFifoBuffer: add MoveFrom() overload with std::span
2022-06-07 10:09:08 +02:00
Max Kellermann
93bf0fc547
util/ForeignFifoBuffer: use iterators
2022-06-07 10:08:58 +02:00
Max Kellermann
95e7f8b1c8
util/ForeignFifoBuffer: more constexpr
2022-06-07 10:08:58 +02:00
dependabot[bot]
e2d6bb7444
build(deps): bump actions/checkout from 2 to 3
...
Bumps [actions/checkout](https://github.com/actions/checkout ) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases )
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md )
- [Commits](https://github.com/actions/checkout/compare/v2...v3 )
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-06-05 08:28:29 +00:00
dependabot[bot]
f89916e6fb
build(deps): bump actions/setup-python from 1 to 3
...
Bumps [actions/setup-python](https://github.com/actions/setup-python ) from 1 to 3.
- [Release notes](https://github.com/actions/setup-python/releases )
- [Commits](https://github.com/actions/setup-python/compare/v1...v3 )
---
updated-dependencies:
- dependency-name: actions/setup-python
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-06-05 08:28:27 +00:00
naveen
7d95b15cbc
chore: Included githubactions in the dependabot config
...
This should help with keeping the GitHub actions updated on new releases. This will also help with keeping it secure.
Dependabot helps in keeping the supply chain secure https://docs.github.com/en/code-security/dependabot
GitHub actions up to date https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot
https://github.com/ossf/scorecard/blob/main/docs/checks.md#dependency-update-tool
Signed-off-by: naveen <172697+naveensrinivasan@users.noreply.github.com >
2022-06-05 01:30:13 +00:00
Max Kellermann
27e78c71e0
util/HexFormat: use std::span instead of ConstBuffer
2022-06-01 22:50:54 +02:00
Max Kellermann
8333927737
time/Zone: add native Windows implementation
2022-06-01 22:35:04 +02:00
Max Kellermann
db03db0dca
util/SpanCast: add FromBytesStrict()
2022-06-01 21:50:01 +02:00
Max Kellermann
bd96f6e572
util/SpanCast: add const support to FromBytesFloor()
2022-06-01 21:49:35 +02:00
Max Kellermann
04041f9583
util/Manual: use std::aligned_storage_t
...
By using std::launder(), we can re-enable -Wstrict-aliasing.
2022-05-31 16:44:07 +02:00
Max Kellermann
826d1b207e
util/Manual: add type aliases
2022-05-31 16:44:07 +02:00
Max Kellermann
f92bae887f
util/Manual: add noexcept
2022-05-31 16:44:07 +02:00
Max Kellermann
d2983b7fde
net/SocketAddress: include cleanup
2022-05-31 13:54:19 +02:00
Max Kellermann
059955a48c
net/SocketAddress: add #ifdefs for std::span
2022-05-31 13:51:12 +02:00
Max Kellermann
6ebac6a0b2
net/StaticSocketAddress: use std::string_view instead of StringView
2022-05-31 13:49:18 +02:00
Max Kellermann
b5a9d0654e
net/Resolver: use std::copy()
2022-05-31 13:44:25 +02:00
Max Kellermann
242ba727b2
net/HostParser: use std::string_view instead of StringView
2022-05-31 13:44:25 +02:00
Max Kellermann
d5db4ca0e7
net/SocketAddress: GetSteadyPart() returns std::span
2022-05-31 13:32:27 +02:00
Max Kellermann
d256d3dabe
util/StringCompare: use std::string_view instead of StringView
2022-05-31 13:24:45 +02:00
Max Kellermann
759da033fc
lib/curl/Escape: use std::string_view instead of StringView
2022-05-31 13:22:56 +02:00
Max Kellermann
c074338f4c
system/EventFD: include cleanup
2022-05-31 12:43:26 +02:00
Max Kellermann
3dd2434149
lib/crypto/Base64: add overload which returns AllocatedArray<std::byte>
2022-05-24 14:29:41 +02:00
Max Kellermann
3699514d18
lib/xiph/VorbisPicture: use std::string_view instead of StringView
2022-05-24 14:24:48 +02:00
Max Kellermann
f045cf43e4
output/snapcast/Client: work around clang 14 std::span cast bug
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1538
2022-05-24 14:18:50 +02:00
Max Kellermann
843dad19e9
output/snapcast/Client: use std::string_view instead of StringView
2022-05-24 14:18:33 +02:00
Max Kellermann
73e2ac4211
tag/FixString: use std::string_view instead of StringView
2022-05-24 14:18:33 +02:00
Max Kellermann
6d113de1f8
tag/Handler: pass std::span to OnPicture()
2022-05-24 14:18:33 +02:00
Max Kellermann
2e6f115bcc
Merge branch 'v0.23.x'
2022-05-24 10:58:40 +02:00
Max Kellermann
a3fba2f8f7
python/build/libs.py: update CURL to 7.83.1
2022-05-24 10:56:29 +02:00
Max Kellermann
e2b671f1b2
python/build/libs.py: add --disable-vulkan to FFmpeg configuration
...
Fixes Android build failure with NDK r25 beta4 because "vulkan_beta.h"
was not found.
2022-05-24 10:55:55 +02:00
Max Kellermann
2a35fbe29e
python/build/libs.py: fix the OpenSSL SHA256
2022-05-24 10:55:55 +02:00
Max Kellermann
81cde72fd0
meson.build: suppress -Wstringop-overflow due to bogus libfmt warnings
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1536
2022-05-24 10:39:30 +02:00
Naglis Jonaitis
bf9ffba4f7
doc/user.rst: fix playlist plugin name option
...
`playlist_plugin` blocks use `name` to identify the plugins.
2022-05-24 10:22:45 +02:00
Dave Hocker
c975d8b943
Fix deprecation warnings caused by name changes in OSX audio inerfaces
2022-05-24 10:20:47 +02:00
Max Kellermann
97f78059a2
util/AllocatedArray: add missing type alias "value_type"
2022-05-23 22:15:20 +02:00
Max Kellermann
fd47edb905
apple/AudioObject: call AllocatedArray::data() instead of begin()
...
Since commit 5fb97b81d1 , begin() returns
an iterator class and not a pointer.
Fixes one part of https://github.com/MusicPlayerDaemon/MPD/issues/1538
2022-05-23 22:06:54 +02:00
Max Kellermann
8ee442e9b1
Merge branch 'v0.23.x'
2022-05-23 21:35:26 +02:00
Max Kellermann
2730f91872
.github/workflows/build.yml: build everything, not just unit tests (Linux)
2022-05-23 21:32:42 +02:00
Max Kellermann
97ca85e155
.github/workflows/build.yml: verbose build (Linux)
2022-05-23 21:32:02 +02:00
Max Kellermann
39bb4c5871
.github/workflows/build.yml: build everything, not just unit tests
2022-05-23 21:28:28 +02:00
Max Kellermann
bdceb90c59
.github/workflows/build.yml: verbose build
2022-05-23 21:25:28 +02:00
Max Kellermann
6633c7fd42
lib/crypto/Base64: use std::string_view
2022-05-20 11:25:04 +02:00
Max Kellermann
01b32d5ee0
util/WritableBuffer: remove unused library
2022-05-20 11:22:03 +02:00
Max Kellermann
1260a0147a
lib/crypto/Base64: use std::span
2022-05-20 11:21:44 +02:00
Max Kellermann
ef54b7d9de
archive/iso9660: use std::span
2022-05-20 11:15:45 +02:00
Max Kellermann
f66315d2de
MusicChunk: use std::span
2022-05-20 11:15:45 +02:00
Max Kellermann
b50173ae8b
util/CircularBuffer: use std::span
2022-05-20 11:15:45 +02:00
Max Kellermann
b37c031fd1
util/{HugeAllocator,SparseBuffer}: use std::span
2022-05-20 11:15:45 +02:00
Max Kellermann
84e5da4bf0
pcm/Silence: use std::span
2022-05-20 11:15:45 +02:00
Max Kellermann
3bb7693200
decoder/HybridDsd: remove
...
This is a proprietary extension which nobody appears to use.
2022-05-20 10:08:17 +02:00
Max Kellermann
b22c00d0cd
Merge branch 'v0.23.x'
2022-05-20 10:04:19 +02:00
Max Kellermann
7006b075c3
util/AllocatedArray: fix -Wunused-parameter
2022-05-20 09:48:49 +02:00
Max Kellermann
774024a41b
net/SocketAddress: add std::span cast operator
2022-05-19 20:52:48 +02:00
Max Kellermann
5fb97b81d1
util/AllocatedArray: migrate from {Const,Writable}Buffer to std::span
2022-05-19 20:52:48 +02:00
Max Kellermann
8bd1b5228c
lib/upnp/Compat: suppress -Wunused-but-set-parameter
2022-05-19 20:10:41 +02:00
Max Kellermann
23dd613ff9
system/VmaName: suppress -Wunused-parameter
2022-05-19 14:01:57 +02:00
Max Kellermann
bb7be9a4cd
util/*FifoBuffer: migrate from WritableBuffer to std::span
2022-05-19 14:01:57 +02:00
Max Kellermann
570755f05a
io/BufferedReader: migrate from WritableBuffer to std::span
2022-05-19 13:25:19 +02:00
Max Kellermann
957d3e51e0
util/{Const,Writable}Buffer: add std::span cast operators
2022-05-19 13:25:02 +02:00
Max Kellermann
fc6c274c97
pcm/{Dop,Dsd*}: explicitly capture "this"
...
Implicit capturing is deprecated in C++20.
2022-05-19 13:25:02 +02:00
Max Kellermann
313b092ba8
system/meson.build: depend on libfmt, not our log.a
...
Fixes linker error.
2022-05-19 13:25:02 +02:00
Max Kellermann
0e9e213324
meson.build: switch to C++20
2022-05-19 09:46:59 +02:00
Max Kellermann
86e6f4fcc0
Merge branch 'v0.23.x'
2022-05-19 09:27:06 +02:00
Max Kellermann
a009e95afd
.github/ISSUE_TEMPLATE/bug_report.md: add "Configuration" section
2022-05-19 09:26:21 +02:00
Max Kellermann
32aafb3572
.github/ISSUE_TEMPLATE/question.md: remove, we have GitHub discussions now
2022-05-19 09:25:00 +02:00
Max Kellermann
b577783cf0
.github/FUNDING.yml: remove, no funding
...
This was an experiment, but I decided I don't need that.
2022-05-19 09:24:22 +02:00
Max Kellermann
aa7b872a14
.github/workflows/build.yml: run "apt-get update"
...
The build has been failing for a week or two because the package lists
in the image are outdated.
2022-05-19 09:23:08 +02:00
Caleb Xu
c6f7f57776
apple/Throw: add missing <cstring> header
...
strlen() and strcpy() are provided by the <string.h> and <cstring>
headers (as functions in global and std namespaces, respectively).
Compilers MAY provide an implementation for either of the functions
without including the extra header but the existence of a declaration
without the header is not assured.
2022-05-19 09:08:44 +02:00
Max Kellermann
122db76781
Merge tag 'v0.23.7'
...
release v0.23.7
2022-05-09 23:14:07 +02:00
Max Kellermann
106ad08cd2
increment version number to 0.23.8
2022-05-09 23:12:17 +02:00
Max Kellermann
0341ca1b6a
release v0.23.7
2022-05-09 23:04:30 +02:00
Max Kellermann
7581ea55db
python/build/libs.py: update CURL to 7.83.0
2022-05-09 23:03:14 +02:00
Max Kellermann
fc9cee38d8
python/build/libs.py: update OpenSSL to 3.0.3
2022-05-09 23:03:14 +02:00
Max Kellermann
b175e4128d
encoder/meson.build: always generate encoder/Features.h
...
Fixes regression from commit 85f9863e0a
2022-05-09 22:52:59 +02:00
Max Kellermann
97b07798b0
doc/protocol.rst: clarify repeat/single/random side effects
2022-05-09 22:50:57 +02:00
Max Kellermann
112fcd206d
Merge branch 'fix-hls-seeking' of https://github.com/burrocargado/MPD into v0.23.x
2022-05-09 22:44:53 +02:00
BurroCargado
11d1f56062
Fix seeking HLS on-demand streaming not working
...
This issue occurs when playing HLS streaming delivered
from a server that does not support partial requests.
The issue is reproduced as follows(using Ubuntu 20.04 PC):
1. Prepare HLS example content.
$ mkdir test
$ ffmpeg -i example.flac -vn -c:a aac -b:a 128000 -f hls -hls_list_size 0 test/output.m3u8
(ffmpeg 4.2.4 is used)
2. Prepare web server without partial requests support.
(Docker version 20.10.12 and NGINX official Docker image is used)
$ docker run --name tmp-nginx-container -d nginx
$ docker cp tmp-nginx-container:/etc/nginx/conf.d/default.conf .
$ docker rm -f tmp-nginx-container
Edit default.conf and add "max_ranges 0;" to "location / {...}".
This disables partial requests support,
removes 'Accept-Ranges: bytes' header from the server response.
Then, run the server:
$ docker run --name test-nginx -v $PWD/test:/usr/share/nginx/html:ro -v $PWD/default.conf:/etc/nginx/conf.d/default.conf -d -p 8080:80 nginx
3. Setup MPD to Play the next URL.
http://address-of-the-server:8080/output.m3u8
Seeking this stream results in "exception: Not seekable".
2022-05-07 12:18:56 +09:00
BurroCargado
bd840d4638
decoder/plugins/FFmpegDecoder: fix IsSeekable()
...
AVFMTCTX_UNSEEKABLE signals the stream is not seekable
according to FFmpeg source code description:
8e98dfc57f/libavformat/avformat.h (L1181)
2022-05-07 09:48:04 +09:00
Max Kellermann
601e5e6abc
net/AddressInfo: add noexcept
2022-04-26 21:17:01 +02:00
Max Kellermann
6bacb23002
decoder/ffmpeg: add "noexcept"
2022-04-26 21:07:25 +02:00
Max Kellermann
5c300a9f1a
tag/ReplayGainParser: add "noexcept"
2022-04-26 21:06:26 +02:00
Max Kellermann
6e1500c251
Merge branch 'v0.23.x'
2022-04-26 21:05:39 +02:00
Max Kellermann
c3d393f214
tag/Id3Picture: fix unaligned access
2022-04-26 21:03:48 +02:00
Max Kellermann
f88fc0ca1a
util/ByteOrder: add class PackedBE32
2022-04-26 21:03:05 +02:00
Max Kellermann
fb8d8242ab
tag/ApeLoader: fix unaligned access
...
Fixes part 4 of https://github.com/MusicPlayerDaemon/MPD/issues/1490
2022-04-26 21:00:41 +02:00
Max Kellermann
f2a3dfd700
decoder/ffmpeg: add missing nullptr checks
...
Fixes part 1 of https://github.com/MusicPlayerDaemon/MPD/issues/1490
2022-04-26 20:51:57 +02:00
Max Kellermann
9e1b24f3a1
input/{Async,Buffering,Thread}InputStream: set VMA name
2022-04-26 20:45:49 +02:00
Max Kellermann
58a345d346
MusicBuffer: set VMA name
...
Shows the name in /proc/PID/maps, e.g.:
7fa57b000000-7fa57c000000 rw-p 00000000 00:00 0 [anon:MusicBuffer]
2022-04-26 20:44:36 +02:00
Max Kellermann
7ed67d216b
util/HugeAllocator: add SetName()
2022-04-26 20:44:36 +02:00
Max Kellermann
3ae660ca90
system/VmaName: new library
2022-04-26 20:31:56 +02:00
Max Kellermann
a742e1fc71
util/PeakBuffer, ...: use [[gnu::]] attributes
2022-04-26 20:31:56 +02:00
Max Kellermann
85f9863e0a
meson.build: always enable Wave encoder for Snapcast
...
Even if the "wave_encoder" option is disabled (and no other encoder
plugins are enabled), forcefully enable the Wave encoder (if Snapcast
is enabled).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1500
2022-04-26 20:13:43 +02:00
Max Kellermann
ce88dee14d
Merge branch 'v0.23.x'
2022-04-26 18:30:34 +02:00
Max Kellermann
83572701f4
python/build/libs.py: update Boost to 1.79.0
2022-04-26 18:27:51 +02:00
Max Kellermann
fa7d7e9187
python/build/libs.py: update OpenSSL to 3.0.2
2022-04-26 18:27:51 +02:00
Max Kellermann
f818cde32c
python/build/libs.py: update FFmpeg to 5.0.1
2022-04-26 18:27:51 +02:00
Max Kellermann
9da93cd887
python/build/libs.py: update zlib to 1.2.12
2022-04-26 18:27:51 +02:00
Rosen Penev
026e7ea32a
update all subprojecs
...
Done with meson wrap update
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2022-04-26 18:01:53 +02:00
Max Kellermann
9659d19718
lib/upnp/Init: use if with initalizer
2022-04-26 17:58:33 +02:00
Rosen Penev
50d35c9677
upnp: use UpnpInit2 always
...
libupnp 1.14 removes the non 2 function. Fixes compilation there.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1499
2022-04-26 17:57:48 +02:00
Thomas Guillem
4260e78861
android: add gdb.sh
...
This script setup a dummy android native app folder and call ndk-gdb from it.
It needs a modification in ANDROID_NDK since ndk-gdb may attach to the wrong
pid, cf. comments in the script.
2022-04-26 17:47:54 +02:00
Thomas Guillem
7342ae2e33
android: set application debuggable
...
This debuggable flag should not be set with release builds. Generally, graddle
is taking care of that.
2022-04-26 17:46:51 +02:00
Arsen Arsenović
35dbc1a90c
mixer,output: prevent setting volume before outputs are really enabled
...
Previous versions of MPD would call SetVolume on enabled outputs before
they are ready, causing all of MPD to crash. Checking the really_enabled
flag prevents this, though it also prevents setting volume before the
player starts.
Before (with the PipeWire output):
[i] ~$ mpc clear
volume: 81% repeat: off random: off single: off consume: off
[i] ~$ systemctl --user restart mpd.service
[i] ~$ mpc volume 100
MPD error: Connection closed by the server
[i] ~ 1 $
After:
[i] ~$ # mpd is freshly started w/o anything in the queue
[i] ~$ mpc
volume:100% repeat: off random: off single: off consume: off
[i] ~$ mpc volume 80
MPD error: problems setting volume
[i] ~ 1 $ mpc
volume:100% repeat: off random: off single: off consume: off
[i] ~$
2022-04-26 17:45:29 +02:00
Arsen Arsenović
c7a4355153
outputs/pipewire: fix ParamChanged incorrectly setting volume
...
Previous versions of MPD would, on parameter change, set the PipeWire
volume before clearing the restore_volume flag, causing the call to
short circuit and do nothing. Instead, clear the flag before the call.
2022-04-26 17:44:19 +02:00
Max Kellermann
33a84a8ca2
output/shout: use shout_set_metadata_utf8()
2022-04-26 17:41:21 +02:00
Max Kellermann
1d04490ed3
output/shout: use shout_set_content_format()
2022-04-26 17:38:43 +02:00
Max Kellermann
4a30c2d79c
output/shout: use shout_set_meta()
2022-04-26 17:24:49 +02:00
Max Kellermann
83072d6b9c
output/shout: pass reference to Setup()
2022-04-26 16:49:18 +02:00
Max Kellermann
c779fc37eb
output/shout: declare minimum version 2.4.0
...
This version was released 7 years ago, and it's reasonable to require
at least this version.
2022-04-26 16:46:36 +02:00
Max Kellermann
e08c13ad7e
output/shout: add "noexcept"
2022-04-26 15:57:03 +02:00
Max Kellermann
2c82a6b2e0
output/shout: handle shout_metadata_add() errors
...
Fixes -Wunused-result
2022-04-26 15:56:55 +02:00
Max Kellermann
3929f17aef
NEWS: mention the libiconv fix
2022-04-26 15:56:54 +02:00
Andreas Ziegler
ee39af3419
fix typo in comment
2022-04-24 04:14:17 +00:00
aeolio
3882a5a263
src/lib/icu: fix iconv() detection when libiconv is installed
2022-04-20 16:10:39 +02:00
Max Kellermann
a360475c7b
Merge branch 'v0.23.x'
2022-03-26 06:49:51 +01:00
Vitaly Ostrosablin
ac06088948
Make volume changes to apply to disabled software mixers.
...
Move audio output state check ahead of mixer check and force volume
applying even for disabled software mixed outputs.
This fixes incorrect software mixer volume that used to occur when
volume was changed while output being disabled.
This is easily reproduced with following sequence of commands on
multi-output software mixed MPD setup.
mpc volume 38; mpc disable 3; mpc volume 88; mpc enable 3
On current MPD, following commands would result in output 3 playing at
volume 38, while all other enabled outputs would play at volume
88. Moreover, global volume would display average of outputs real
volumes. In my case, it's 75.
After applying this patch, following commands would produce expected
behavior. All outputs play at expected (88) volume. And volume is
correctly displayed as 88.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1423
Signed-off-by: Vitaly Ostrosablin tmp6154@yandex.ru
Signed-off-by: Vitaly Ostrosablin <tmp6154@yandex.ru >
2022-03-26 06:29:18 +01:00
Max Kellermann
a757eebfbb
decoder/OggSyncState: allow skipping up to 64 kB after seek
...
This is more of what we did in commit 70bd35abe2 because it turns
out there are Ogg-Opus files with pages larger than 40 kB.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1487
2022-03-16 16:54:50 +01:00
Max Kellermann
2be4f89555
test/DumpOgg: new debug program
2022-03-16 16:51:44 +01:00
Tim Sweet
3a3f605a56
decoder/opus: Implement bitrate calculation
2022-03-15 10:34:23 +01:00
Max Kellermann
407fa2720a
Merge tag 'v0.23.6'
...
release v0.23.6
2022-03-14 18:58:47 +01:00
Max Kellermann
4a5c7d8261
increment version number to 0.23.7
2022-03-14 18:55:55 +01:00
Max Kellermann
f591193dda
release v0.23.6
2022-03-14 18:55:47 +01:00
Max Kellermann
434869900e
android/build.py: fix typo in error message
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1379
2022-03-14 18:49:50 +01:00
Max Kellermann
2aed7378cc
TagAny: support CUE tracks
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1482
2022-03-14 18:42:31 +01:00
Max Kellermann
71cd6e6248
lib/xiph/meson.build: define FLAC__NO_DLL for static libFLAC build (Windows)
...
In libFLAC 0.3.4 (commit c9530118a4 ), the "dllimport" check has been
changed from "_MSC_VER" to "_WIN32", and now the MPD build is affected
by it.
Defining FLAC__NO_DLL disables the use of "dllimport", which allows
linking properly to the static libFLAC build.
2022-03-14 15:08:59 +01:00
Max Kellermann
c83294916a
python/build/libs.py: update Boost to 1.78.0
2022-03-14 14:52:24 +01:00
Max Kellermann
603bbe0afd
python/build/libs.py: update libnfs to 5.0.1
2022-03-14 14:52:24 +01:00
Max Kellermann
c361e235eb
python/build/libs.py: update CURL to 7.82.0
2022-03-14 14:52:24 +01:00
Max Kellermann
8a59493d96
python/build/libs.py: update OpenSSL to 3.0.1
2022-03-14 14:50:06 +01:00
Max Kellermann
7ef86cbf9f
python/build/libs.py: update FFmpeg to 5.0
2022-03-14 14:50:06 +01:00
Max Kellermann
c9530118a4
python/build/libs.py: update FLAC to 1.3.4
2022-03-14 14:31:13 +01:00
Max Kellermann
878d9abeb7
python/build/libs.py: update libogg to 1.3.5
2022-03-14 14:29:59 +01:00
Max Kellermann
2d705efe1c
python/build/libs.py: update libmpdclient to 2.20
2022-03-14 14:29:22 +01:00
Richard Schorrig
aeaef85507
WasapiOutputPlugin pause bug fix
...
Wasapi output plugin won't start playing after being paused
The cause is that the scope guard in the WASAPI work thread
(WasapiOutputPlugin.cxx, function WasapiOutputThread::Work(), in the
while (true) loop) is set up too 'late' in the execution. There is one
condition ("if (data_in_frames >= buffer_size_in_frames)") when it is
hit, the loop will continue without executing the scope guard. This
scope guard is responsible for emptying the buffer again, and if the
buffer is not emptied, the above mentioned condition will stay true.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1451
2022-03-14 14:26:00 +01:00
nick black
ebae25d175
plugins/FfmpegIO: include libavutil/mem.h
...
ffmpeg from current git master no longer exposes
av_malloc() nor av_free() through other included
headers. directly include libavutil/mem.h to fix
compilation with (as-yet-unreleased) ffmpeg.
2022-03-14 14:11:31 +01:00
jcorporation
5ad1a01d7a
Remove bmp, tiff and add webp for coverimage filenames
...
- supporting bmp and tiff seems outdated
- webp is more widely used for coverimages
2022-03-14 14:09:23 +01:00
Max Kellermann
8f84e1befd
decoder/plugins/FfmpegIo: return AVERROR_EOF at end of file
...
This part of the AVIOContext API is not documented :-(
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1448
2022-03-14 14:00:28 +01:00
Max Kellermann
7293b32025
util/HexFormat: faster implementation without snprintf()
2022-03-14 12:18:52 +01:00
Max Kellermann
fed8f12863
input/plugins/QobuzClient: pass std::string_view to QueryStringBuilder()
2022-03-14 12:11:46 +01:00
Max Kellermann
9975905faf
output/PipeWire: initialize field "stream" in Open()
...
Must be initialized for the check in SetVolume().
2022-03-09 14:29:46 +01:00
Max Kellermann
718ae433b2
Merge branch 'build-nits' of git://github.com/sp1ff/MPD
2022-02-27 17:23:17 +01:00
Michael Herstine
ed65f52f50
Address feedback on PR #1452 .
...
Move the invocation of `find_program` for doxygen into the if
branch & make failure to find the program fatal.
2022-02-27 08:00:12 -08:00
Michael Herstine
ba1d86ec80
Add (resurrect?) doxygen support.
...
Added a `doxygen` option to the `doc` build. It makes use of the
already-present but unused file `doxygen.conf.in`.
2022-02-20 10:42:39 -08:00
Max Kellermann
7661c408a4
Merge branch 'master' of git://github.com/jcorporation/MPD
2022-02-16 05:29:22 +01:00
Max Kellermann
ee8d5f18ef
doc/protocol.rst: fix misnamed priority filter
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1443
2022-02-16 05:29:02 +01:00
Jürgen Mang
de3b9b8232
Update protocol version to 0.24.0
2022-02-15 23:12:06 +01:00
Max Kellermann
8e99448819
lib/curl/Headers: make the comparison type "transparent"
2022-02-14 18:19:28 +01:00
Max Kellermann
1e548fb6e3
lib/curl/Headers: central type definition for the header map
2022-02-14 18:19:05 +01:00
Max Kellermann
fdc0329e64
archive/List: add option to disable archive plugins in mpd.conf
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1384
2022-02-14 17:54:21 +01:00
Max Kellermann
d3db0400b0
archive/List: convert pointer to reference
2022-02-14 16:43:44 +01:00
Max Kellermann
b1096a9935
test/{visit_archive,dump_text_file}: add basic config file support (not wired yet)
2022-02-14 16:43:37 +01:00
Max Kellermann
ab5b6f83fd
queue/Print: support sorting by priority
2022-02-14 14:10:33 +01:00
Max Kellermann
2172aaf1ce
song/PrioritySongFilter: new filter
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1412
2022-02-14 14:06:37 +01:00
Max Kellermann
c68dbc4e5c
queue/Queue: add method GetLight()
2022-02-14 13:33:34 +01:00
Max Kellermann
ec961f26e9
song/DetachedSong: add API docs
2022-02-14 13:27:52 +01:00
Max Kellermann
c3be961ccf
queue/Print: implement sorting
2022-02-14 13:07:13 +01:00
Max Kellermann
166ce0da5a
db/VHelper: move CompareTags() to tag/Sort.cxx
2022-02-14 12:37:05 +01:00
Max Kellermann
edbaea8df2
db/Selection: refactor IsEmpty() to IsFiltered()
2022-02-14 09:21:32 +01:00
Max Kellermann
af3a625f64
time/Convert: move GetTimeZoneOffset() to Zone.cxx
2022-02-14 09:21:10 +01:00
Max Kellermann
11d24a583d
command/queue: "playlistfind"/"playlistsearch" have a "window" parameter
2022-02-14 09:12:19 +01:00
Max Kellermann
e9e3d8c57c
queue/Selection: add "window" field
2022-02-14 09:12:18 +01:00
Max Kellermann
5588291a35
queue/Selection: wrap SongFilter in a new struct
2022-02-14 09:12:18 +01:00
Max Kellermann
4b41e766c6
queue/Queue{Save,Print}: remove redundant "Queue" prefix from file name
2022-02-14 09:12:06 +01:00
Max Kellermann
90d52b6501
Merge branch 'v0.23.x'
2022-02-14 09:11:50 +01:00
Max Kellermann
233184568c
doc/protocol.rst: describe the FILTER argument to playlist{find,search}
2022-02-14 09:11:41 +01:00
Wolfgang Müller
59da778009
doc/user.rst: Clarify how MPD reads metadata
...
The writing and reading of metadata involves lots of different programs
and libraries. Therefore it is prudent to point out how exactly MPD
receives metadata. Ideally this helps to point users to the right place
if their tags are not picked up correctly.
2022-02-14 09:11:11 +01:00
Max Kellermann
ad4cf79cc9
tag: new tag "Mood"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1435
2022-02-12 07:50:18 +01:00
dgcampea
4f3828237a
Fix DSCP LE value
...
Correct value is 0x04 since we need to account for the 2 ECN bits.
2022-02-02 16:29:01 +00:00
Max Kellermann
946cf25732
Merge branch 'v0.23.x'
2022-01-26 14:44:37 +01:00
Max Kellermann
108ce95b7c
android/Receiver: fix indent
2022-01-26 14:43:47 +01:00
Max Kellermann
86e9ed5f3a
decoder/opus: fix "readpicture" on Opus files
...
Don't return early from ScanOpusTags() if only
TagHandler::WantPicture() is set.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1413
2022-01-26 14:43:45 +01:00
Sam Bazley
fbecb05bf4
Fix Android build error: needs_exe_wrapper
...
lib/src/libmpdclient-2.19/meson.build:1:0: ERROR: Unknown options: "needs_exe_wrapper"
The "needs_exe_wrapper" option was incorrectly set under
[built-in options] rather than [properties].
2022-01-11 20:33:48 +01:00
Max Kellermann
be72d45356
output/httpd: add config option "dscp"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1401
2022-01-11 20:31:52 +01:00
Max Kellermann
219c416a1e
event/ServerSocket: rename ip_tos to dscp_class and support IPv6
2022-01-11 20:31:52 +01:00
Max Kellermann
16f7ec9950
net/DscpParser: new library
2022-01-11 20:31:52 +01:00
Max Kellermann
d79bf853b1
output/httpd: make configuration fields const
2022-01-10 22:59:50 +01:00
Max Kellermann
1ae6378d85
event/ServerSocket: add ip_tos setting
2022-01-10 22:59:50 +01:00
Max Kellermann
089a843abd
net/SocketDescriptor: add method SetIntOption()
2022-01-10 21:36:15 +01:00
Max Kellermann
aea4d3c4b0
lib/zlib/GunzipReader: use std::size_t
2022-01-10 16:59:13 +01:00
Sam Bazley
4983703375
Android: Detect output change with ACTION_AUDIO_BECOMING_NOISY
...
Improves the changes made in 57687779be by
using AudioManager.ACTION_AUDIO_BECOMING_NOISY rather than listening for
wired headset unplug events or Bluetooth headset disconnect events. This
method is more flexible, allowing the feature to work on other types of
audio output device, as well as Bluetooth devices that don't set their
device class correctly. This change also has the benefit of being more
responsive, pausing the audio before it is rerouted to the built-in
speaker.
https://developer.android.com/guide/topics/media-apps/volume-and-earphones
2022-01-04 16:42:53 +01:00
aeolio
3856224df9
lib/alsa/Error: add missing #include
2021-12-15 11:14:38 +01:00
aeolio
6d4bedfc56
lib/alsa/Error: fix typo
2021-12-15 11:14:34 +01:00
Max Kellermann
dda0dfc140
lib/curl/Request: move code from SetupEasy() to Setup.cxx
2021-12-08 20:03:30 +01:00
Max Kellermann
e0f56b9e2d
lib/curl/Request: move code to class CurlResponseHandlerAdapter
2021-12-08 19:51:54 +01:00
August2111
3c3c3eeeca
MSVC: use winsock2.h instead of sys/time.h for struct timeval
2021-12-08 19:45:03 +01:00
Max Kellermann
31c7151580
time/Calendar: add DaysInYear()
2021-12-08 19:44:31 +01:00
Max Kellermann
50a617764a
lib/curl/Handler: fix typo
2021-12-08 19:41:39 +01:00
Max Kellermann
7d67c87a47
io/FileReader: use std::size_t
2021-12-08 19:40:22 +01:00
Philipp Wollschlegel
c072902f23
io/FileOutputStream: merge win32 function Cancel
...
Win32 had a separate implementation for FileOutputStream::CANCEL Logic
was added to the other platform function, but forgotten in this one.
This merges the functions into one, as only the call for file deletion
is platform specific.
2021-12-08 19:35:11 +01:00
Max Kellermann
5ad4f3c54b
system/EventPipe: include cleanup
2021-12-08 19:32:06 +01:00
Max Kellermann
0b6055954d
thread/AsyncWaiter: new class
...
Merges some redundant code.
2021-12-08 19:26:57 +01:00
Max Kellermann
80c177e9a0
io/BufferedOutputStream: add missing char* cast
2021-12-07 12:07:13 +01:00
Max Kellermann
cdcef49eef
lib/curl/Request: add constructor with CurlEasy parameter
2021-12-07 12:01:09 +01:00
Max Kellermann
9e18aafccc
lib/curl/Request: use std::size_t
2021-12-07 12:00:12 +01:00
Max Kellermann
f7346c1d78
lib/curl/Request: move code to SetupEasy()
2021-12-07 11:57:42 +01:00
Max Kellermann
b709401814
lib/curl/Request: add API docs
2021-12-07 11:56:45 +01:00
Max Kellermann
4074db5f50
io/BufferedReader: use std::size_t
2021-12-07 11:54:11 +01:00
Max Kellermann
8c6bc02bf7
io/BufferedOutputStream: use std::byte
2021-12-07 11:47:45 +01:00
Max Kellermann
35c11afd54
player/Thread: add option "mixramp_analyzer"
2021-12-06 23:06:08 +01:00
Max Kellermann
c884e2f285
config/PlayerConfig: default buffer size is 8 MB
...
Computers are getting more and more RAM, and 8 MB is rarely ever
noticable, but allows longer MixRamp-assisted cross-fading.
2021-12-06 23:05:45 +01:00
Max Kellermann
b6ba17a865
Merge branch 'v0.23.x'
2021-12-06 21:32:48 +01:00
Max Kellermann
bea821f194
doc/user.rst: add MixRamp documentation
2021-12-06 21:32:39 +01:00
Max Kellermann
713c7585b5
pcm/MixRampAnalyzer: a MixRamp implementation
2021-12-06 21:09:28 +01:00
Max Kellermann
f12c25b7ae
pcm/ReplayGainAnalyzer: new library
2021-12-06 21:06:19 +01:00
Max Kellermann
0a54b987a1
test/run_filter: move ReadFrames() to separate source
2021-12-06 10:31:52 +01:00
Max Kellermann
2240327286
ReplayGainInfo: move to tag/
2021-12-06 09:28:36 +01:00
Rosen Penev
4e276256c0
more braced init list conversion
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-12-06 09:16:04 +01:00
Max Kellermann
866e7ff3ce
config/PlayerConfig: move code to functions
2021-12-06 09:14:36 +01:00
Tim Siegel
d0f9062b56
mpdconf.example: fix a few spelling typos
2021-12-05 22:58:45 +01:00
Max Kellermann
2cafbb2aba
player/CrossFade: move code to CanCrossFade()
2021-12-03 23:45:34 +01:00
Max Kellermann
b78c64376f
player/Thread: move code to CheckCrossFade()
2021-12-03 23:32:41 +01:00
Max Kellermann
2518612b1b
player/CrossFade: add method IsMixRampEnabled()
2021-12-03 23:22:55 +01:00
Max Kellermann
dda521a150
ReplayGain{Config,Global}: move to config/
2021-12-03 23:08:16 +01:00
Max Kellermann
95a155b10d
Partition: pass configuration as struct
2021-12-03 23:03:41 +01:00
Max Kellermann
2384a240e0
increment version number to 0.24
2021-12-03 23:01:43 +01:00
Max Kellermann
b9cc036703
.github/workflows/build.yml: rebuild branch v0.23.x
2021-12-03 23:00:42 +01:00
Max Kellermann
4e9b88559b
SingleMode: convert "pure" to "const"
2021-12-03 16:09:34 +01:00
Max Kellermann
3452682a42
IcyMetaDataParser: move to tag/
2021-12-03 16:07:39 +01:00
Max Kellermann
9262b24504
AudioCompress: move to pcm/
2021-12-03 16:04:59 +01:00
Max Kellermann
a5fa43b526
fs/io: move to io/
2021-12-03 14:35:41 +01:00
Max Kellermann
8681a3d74c
replace TextFile references with LineReader
2021-12-03 14:22:56 +01:00
Max Kellermann
f9c4d88b12
fs/io/TextFile: add interface LineReader
2021-12-03 14:20:29 +01:00
Max Kellermann
799032505e
io/uring/Queue: add method RequireSubmitEntry()
...
Fixes assertion failure when the submit queue is empty.
2021-12-03 13:58:39 +01:00
Max Kellermann
c8f174ac92
io/uring/Operation: disallow copying
2021-12-03 13:52:04 +01:00
Max Kellermann
047e169f3e
util/BindMethod: merge MakeBind{Method,Function}Wrapper(), they are identical now
2021-12-03 13:51:56 +01:00
Max Kellermann
687327c9e8
util/BindMethod: merge structs {Method,Function}SignatureHelper into one
2021-12-03 13:51:56 +01:00
Max Kellermann
26dc37bd76
util/BindMethod: merge structs {Method,Function}WrapperGenerator into one
2021-12-03 13:51:55 +01:00
Max Kellermann
c693e4aa64
util/BindMethod: remove unused struct MethodWithSignature
2021-12-03 13:51:55 +01:00
Max Kellermann
acab731fef
util/BindMethod: simplify MakeBindFunctionWrapper()
2021-12-03 13:51:55 +01:00
Max Kellermann
7e4ba3cb72
util/BindMethod: add MethodSignatureHelper::function_pointer
2021-12-03 13:51:55 +01:00
Max Kellermann
172c4d9c7d
util/BindMethod: remove unnecessary template arguments from BindMethodWrapperGenerator
2021-12-03 13:51:55 +01:00
Max Kellermann
bd5f6cbc7b
util/BindMethod: simplify more templates using "auto" template arguments
2021-12-03 13:51:55 +01:00
Max Kellermann
6fcd1c734b
util/BindMethod: eliminate struct BindMethodWrapperGenerator2
2021-12-03 13:51:55 +01:00
Max Kellermann
eca097dbfb
util/BindMethod: simplify more templates using "auto" template arguments
2021-12-03 13:51:55 +01:00
Max Kellermann
51ffafa011
util/BindMethod: use std::remove_reference_t
2021-12-03 13:51:25 +01:00
Max Kellermann
8dca602346
util/BindMethod: simplify BindMethod()
2021-12-03 13:51:18 +01:00
Max Kellermann
0ed24f3a05
util/IntrusiveList: disallow copying IntrusiveListHook
2021-12-03 13:50:05 +01:00
Max Kellermann
e25e0030e7
increment version number to 0.23.6
2021-12-01 20:01:22 +01:00
Max Kellermann
df4b6b92f2
release v0.23.5
2021-12-01 20:00:00 +01:00
Max Kellermann
1c69913eca
decoder/flac: submit MixRamp only if there is actual data
2021-12-01 17:58:51 +01:00
Max Kellermann
cb5c6259fd
decoder/mad: submit MixRamp only if there is actual data
...
Fixes MixRamp failures when a MP3 file has two ID3 tags, one of them
without MixRamp.
2021-12-01 17:19:53 +01:00
Max Kellermann
bf287fefb5
decoder/mad: move parse_id3_mixramp() to tag/Id3MixRamp.cxx
2021-12-01 17:11:36 +01:00
Max Kellermann
20bf1d68e6
MixRampInfo: move to tag/
2021-12-01 17:09:02 +01:00
Max Kellermann
9bc4c168fd
tag/MixRamp: rename to MixRampParser.cxx
2021-12-01 17:07:53 +01:00
Max Kellermann
3415049d1c
test/tag/TestMixRampParser: include the header, not the .cxx file
2021-12-01 17:07:39 +01:00
Max Kellermann
a45949b597
tag/MixRamp: [[gnu::...]] attributes
2021-12-01 15:48:33 +01:00
Max Kellermann
6009d4abab
tag/MixRamp: use std::string_view
2021-12-01 15:47:54 +01:00
Max Kellermann
16fb843c9b
tag/MixRamp: fix typo which broken MixRamp
...
Fixes regression by commit 8e0d810968 which is 2 years old, and nobody
noticed. D'oh, how embarassing!
2021-12-01 15:46:31 +01:00
Max Kellermann
36b333459b
test/tag/TestMixRampParser: new unit test
2021-12-01 15:46:01 +01:00
Max Kellermann
4d3320233e
test/test_mixramp: move to test/tag/
2021-12-01 15:33:17 +01:00
Max Kellermann
933a1a41e6
lib/upnp/Discovery: use InjectEvent instead of DeferEvent
...
Fixes regression by commit 774b4313f2
2021-11-30 18:03:27 +01:00
August2111
1ff8626716
MSVC util/StringAPI.hxx add usage of MSVC compiler
2021-11-26 17:30:17 +01:00
Max Kellermann
c30466b84a
net/IPv4Address: add method GetPortBE()
2021-11-26 16:25:43 +01:00
Max Kellermann
868f1a4431
net/UniqueSocketDescriptor, ...: include <utility> instead of <algorithm>
...
Since C++11, std::swap() lives in <utility>.
2021-11-26 16:25:29 +01:00
Max Kellermann
05f529fffd
util/StringStrip: use [[gnu::...]] attributes
2021-11-26 16:24:55 +01:00
Max Kellermann
f01388559f
.github/workflows/build.yml: fix the ccache.key
2021-11-26 13:32:48 +01:00
Max Kellermann
27edd4a610
.github/workflows: merge build-{linux,macos}.yml into one
2021-11-26 13:32:08 +01:00
Max Kellermann
cc421b04cd
test/meson.build: add "protocol:gtest" where appropriate
2021-11-26 08:47:06 +01:00
Max Kellermann
3f2bc325a1
test/meson.build: fix test() indent
2021-11-26 08:40:40 +01:00
Max Kellermann
54686dfd79
test/meson.build: add dependencies on run_input
...
Fixes spurious unit test failures because run_input has not yet been
built.
2021-11-26 08:35:49 +01:00
Rosen Penev
f22cf02ed8
fix wrong namespace name
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-26 08:08:45 +01:00
Rosen Penev
5b51d0f733
use some auto
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-26 08:08:45 +01:00
Rosen Penev
e03f82636a
const reference conversion
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-23 12:33:03 -08:00
Rosen Penev
d53d85bd79
remove unused includes
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-23 12:33:03 -08:00
Max Kellermann
4682ae0898
command/database: support relative offsets for "searchadd"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1337
2021-11-23 12:17:32 +01:00
Max Kellermann
fd5b195879
.github/workflows/build-macos.yml: use actions/setup-python@v1
...
Without it, BSFishy/meson-build defaults to /usr/local/bin/python,
which is Python 2.
2021-11-23 12:17:32 +01:00
Max Kellermann
bb5df9839d
.github/workflows/build-macos.yml: install Meson, ninja and Boost
2021-11-23 12:17:32 +01:00
Max Kellermann
be34d55291
.github/workflows: add macOS build
2021-11-23 11:41:40 +01:00
Max Kellermann
c13911b171
.github/workflows: auto-build with GitHub Actions
2021-11-23 10:45:14 +01:00
Max Kellermann
6f83bdd6f3
Merge branch '1' of git://github.com/neheb/MPD
2021-11-23 10:39:07 +01:00
Rosen Penev
9bcd425a85
array conversions
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-23 01:38:10 -08:00
Max Kellermann
ec917f70d2
Merge remote-tracking branches 'neheb/2' and 'neheb/3'
2021-11-23 09:23:43 +01:00
Rosen Penev
40ce4eeb43
use cinttypes header
...
stdint.h is deprecated.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-22 23:30:36 -08:00
Rosen Penev
29ae84e199
manual braced init
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-22 23:30:04 -08:00
Rosen Penev
250011f016
return by braced init list
...
shorter
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-22 23:28:08 -08:00
Max Kellermann
e08c85ae2d
doc/mpd.conf.5.rst: move ReplayGain documentation to user.rst
2021-11-22 22:25:04 +01:00
Max Kellermann
dcb5ca203c
db/DatabasePlaylist: increment only one variable
...
Fixes "searchaddpl" bug emitting bogus error "Bad position".
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1338
2021-11-22 20:47:34 +01:00
Max Kellermann
77df5a8f24
lib/pcre: migrate to PCRE2
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1352
2021-11-22 19:32:45 +01:00
kaliko
d6bebd2507
doc/conf.py: Set sidebar width to 300px to limit wrapping
...
This enhances readability in sidebar, especially for "User’s Manual" and
"Protocol" pages
2021-11-20 10:49:15 +01:00
Max Kellermann
f74996c02f
Merge remote-tracking branches 'neheb/1', 'neheb/2', 'neheb/3', 'neheb/4' and 'neheb/5'
2021-11-20 07:55:24 +01:00
Max Kellermann
eea2d35d3a
util/AllocatedString, ...: add missing include for std::exchange()
...
Fixes building with GCC 12.
2021-11-19 16:06:20 +01:00
Max Kellermann
d94e8bd82d
queue/IdTable: include cleanup
2021-11-19 16:03:09 +01:00
Max Kellermann
b0c92e1a34
queue/IdTable: lazy-initialize the "data" array
...
With large "max_playlist_length" settings, the "data" array can be
very large, and initializing it during MPD startup causes page faults,
resulting in allocation of physical RAM. This commit postpones the
initialization until the queue is really large, to avoid wasting
memory.
2021-11-19 16:00:39 +01:00
Max Kellermann
ead5bcf048
queue/IdTable: make size const
2021-11-19 15:51:10 +01:00
kaliko
bdd268a524
doc/user.rst: update build dependencies on Debian Bullseye
2021-11-19 11:04:47 +01:00
Shen-Ta Hsieh
e783c2bd2c
util/LazyRandomEngine: use std::optional to avoid allocation
...
Signed-off-by: Shen-Ta Hsieh <ibmibmibm.tw@gmail.com >
2021-11-14 03:53:42 +08:00
Rosen Penev
837fc98638
use const references
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-11 17:18:33 -08:00
Rosen Penev
5deca66fdc
add various nodiscard
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-11 17:17:26 -08:00
Rosen Penev
cfe2dd4147
use nullptr
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-11 17:16:19 -08:00
Rosen Penev
00f8d65a17
remove std::move
...
clang-tidy reports this is trivially copyable and thus std::move has no
effect.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-11 17:15:21 -08:00
Rosen Penev
4e0e4c00bf
treewide: replace lock_guard with scoped_lock
...
SonarLint reports the latter to be better:
std::scoped_lock basically provides the same feature as std::lock_guard,
but is more generic: It can lock several mutexes at the same time, with a
deadlock prevention mechanism (see {rule:cpp:S5524}). The equivalent code
to perform simultaneous locking with std::lock_guard is significantly more
complex. Therefore, it is simpler to use std::scoped_lock all the time,
even when locking only one mutex (there will be no performance impact).
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-11 17:13:03 -08:00
Max Kellermann
a8c77a6fba
Merge branch '1' of git://github.com/neheb/MPD
2021-11-11 10:33:17 +01:00
Rosen Penev
31aa6d0c4f
use auto with make_unique
...
C arrays can be used with make_unique in C++17.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-11 01:33:03 -08:00
Max Kellermann
d051c4931d
Merge branch '2' of git://github.com/neheb/MPD
2021-11-11 10:32:45 +01:00
Rosen Penev
94b0baceb0
convert address_family_ranking to std::array
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-11-11 01:27:31 -08:00
Max Kellermann
16feb261e2
increment version number to 0.23.5
2021-11-11 10:18:19 +01:00
Max Kellermann
f084bf7872
release v0.23.4
2021-11-11 10:16:36 +01:00
Max Kellermann
1112d3907a
Revert "systemd: add "RuntimeDirectory" directive"
...
This reverts commit 552c30eae4 .
It has caused various problems; for example, MPD wasn't able to write
the pid_file (which was already mitigated by commit a4e4217204 ).
And apparently, the socket file created in the same directory by
mpd.socket disappears when mpd.service (re)creates the directory. I
could not reproduce this problem with 247.3, but maybe this is a bug
in older systemd versions?
Until we figure out why this happens, let's remove the
RuntimeDirectory directive. A future MPD version may be launched as
regular user, not as root, which will eliminate one major problem with
RuntimeDirectory.
2021-11-11 10:16:13 +01:00
Max Kellermann
3464497880
command/database: add optional position parameter to "searchaddpl"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1328
2021-11-11 09:52:49 +01:00
Max Kellermann
651f57bced
command/playlist: save only if at least one song was added
2021-11-11 09:50:31 +01:00
Max Kellermann
b4e72aba6c
command/playlist: move code to SearchInsertIntoPlaylist()
2021-11-11 09:40:41 +01:00
0xC0ncord
061dd2dfef
output/plugins: fix build error with clang and -stdlib=libc++
...
This fixes this build error observed with clang and -stdlib=libc++:
../mpd-0.23.3/src/output/plugins/PipeWireOutputPlugin.cxx:661:55: error: implicit instantiation of undefined template 'std::array<std::byte, 64>'
std::array<std::byte, MAX_CHANNELS * MAX_INTERLEAVE> buffer;
^
/usr/include/c++/v1/__tuple:219:64: note: template is declared here
template <class _Tp, size_t _Size> struct _LIBCPP_TEMPLATE_VIS array;
^
2021-11-10 15:35:56 -05:00
Max Kellermann
5f4ec7de5b
decoder/ffmpeg, lib/ffmpeg: make AVCodec pointers "const"
...
For libavcodec 59 support.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1333
2021-11-09 21:09:14 +01:00
Max Audron
6f81bb4b09
upnp: add option to configure interface for db plugin
...
Add an option to the UPnP database plugin to configure which interface
is used by upnp to discover servers.
upnp by default selects the first interface that is not loopback, which
in some cases might not be the desired interface. For example if wanting
to access a DLNA server over a VPN connection.
The "interface" option can now be set to the name of the desired
interface to achieve this.
The default behaviour remains unchanged.
2021-11-08 23:04:07 +01:00
Max Audron
4ed60a5711
upnp: expose interface configuration on UpnpInit2()
...
Adds the Interface Name as an argument to the *Init functions to make it
possible to select which interface is used by upnp to detect servers.
Currently "nullptr" is passed in to let the upnp library select an
interface, as before.
2021-11-08 22:53:01 +01:00
Max Kellermann
c93195c94b
NEWS: fix typo
2021-11-05 14:45:43 +01:00
Max Kellermann
f30adac4bb
doc/mpdconf.example: add comments recommending not to use log_file and pid_file
2021-11-05 09:06:27 +01:00
Max Kellermann
a4e4217204
Main: ignore the "pid_file" setting if started as systemd service
...
Commit 552c30eae caused problems for those people who still had a
"pid_file" setting (even though that is obsolete with systemd),
because now /run/mpd is owned by root:root (our mpd.service has no
User=mpd directive, so systemd starts MPD as root).
To work around this problem, and to be able to keep
RuntimeDirectory=mpd (which solved a problem of other MPD users), the
best compromise seems to just ignore the "pid_file" setting when it is
of no use.
2021-11-05 09:02:56 +01:00
Max Kellermann
8754d705a1
CommandLine: rename struct options
2021-11-05 08:57:12 +01:00
Max Kellermann
23d4a2d6a5
Main: pass struct options by reference
2021-11-05 08:56:05 +01:00
Max Kellermann
ce77b148d9
CommandLine: add option --systemd
...
This way, MPD can reliably detect whether it was started as systemd
service, which is better than checking sd_booted(), which only checks
whether systemd manages all services, but still MPD could be started
manually.
2021-11-05 08:51:49 +01:00
Max Kellermann
be3eca39e8
NEWS: add missing lines
2021-11-04 17:59:02 +01:00
Max Kellermann
3413b1aeb4
output/alsa: add option thesycon_dsd_workaround
2021-11-04 17:55:53 +01:00
Max Kellermann
356d13e9dd
lib/alsa/HwSetup: add missing include
2021-11-04 17:55:15 +01:00
Max Kellermann
fa34bf0aaf
Merge branch 'feature/win32-disable-openmpt123' of git://github.com/ibmibmibm/MPD
2021-11-04 15:11:26 +01:00
Max Kellermann
5d0941476a
lib/alsa/Error: a std::system_error category for libasound errors
2021-11-04 14:59:00 +01:00
Max Kellermann
5ff0bbd0f8
lib/fmt/AudioFormatFormatter: add formatter for SampleFormat
2021-11-04 14:55:01 +01:00
Shen-Ta Hsieh
a3764e533c
python/build/libs.py: disable building libopenmpt cli
...
Signed-off-by: Shen-Ta Hsieh <ibmibmibm.tw@gmail.com >
2021-11-04 21:54:12 +08:00
Shen-Ta Hsieh
3e05cba30e
python/build/libs.py: update libopenmpt configure flags
...
Signed-off-by: Shen-Ta Hsieh <ibmibmibm.tw@gmail.com >
2021-11-04 15:23:24 +08:00
Max Kellermann
14b3c0f0af
event/Loop: destruct the Uring::Manager in the destructor before assert()
...
Fixes assertion failure when the EventLoop gets destructed before
Run() was ever called.
Fixes https://bugs.debian.org/998310
2021-11-03 18:32:14 +01:00
Max Kellermann
67aff05051
increment version number to 0.23.4
2021-10-31 18:17:35 +01:00
Max Kellermann
19a101c3ac
release v0.23.3
2021-10-31 18:13:10 +01:00
Max Kellermann
8da17a8211
doc/user.rst: add optimized build options to examples
2021-10-31 17:09:16 +01:00
Max Kellermann
2748929039
doc/user.rst: add -Dwrap_mode=forcefallback to Android/Windows examples
2021-10-31 17:08:59 +01:00
Max Kellermann
0c900a4bfa
doc/user.rst: pass -Dandroid_debug_keystore=... to ./android/build.py
2021-10-31 17:03:37 +01:00
Max Kellermann
f1d5d70010
android/run-javac.sh: switch to Java 7
2021-10-31 16:55:40 +01:00
Max Kellermann
56ebc7637d
python/build/libs.py: update FFmpeg to 4.4.1
2021-10-31 16:44:11 +01:00
Max Kellermann
996dd9fc8b
python/build/libs.py: update libopenmpt to 0.5.12
2021-10-31 16:42:50 +01:00
Max Kellermann
056514d598
output/snapcast: reset unflushed_input after successful read
...
With the "wave" encoder, this has no effect, but it's more correct.
2021-10-31 16:35:42 +01:00
Max Kellermann
9a21bdfd6a
output/snapcast: implement Pause()
...
This uncomments the code which had been present already in the first
Snapcast commit (copied from the "httpd" output plugin), but I
commented it because I did not know whether I needed to send silence
samples to all Snapcast clients.
As a side effect, this fixes playback when no Snapcast client is
connected; this was broken because Pause() always returned a positive
value when there were no clients.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1310
2021-10-31 16:26:29 +01:00
Max Kellermann
03f99dd26e
db/update/Walk: use GetFilenameSuffix() instead of uri_get_suffix()
...
Unlike GetFilenameSuffix(), uri_get_suffix() removes the query string
first, which breaks file names with question marks in the name.
Therefore, uri_get_suffix() shall only be applied to remote URIs.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1316
2021-10-31 13:18:24 +01:00
Max Kellermann
bfb1b641f9
db/update/InotifyUpdate: fix use-after-free bug
...
Regression by commit 2d8847f428
2021-10-28 13:39:38 +02:00
Naglis Jonaitis
72ba98c464
doc/protocol.rst: add missing backtick
2021-10-27 02:11:39 +03:00
Max Kellermann
dcd19c0592
config/Path: use StringView::Split()
2021-10-26 12:55:01 +02:00
Max Kellermann
109159e0f7
Permission: use StringView::Split()
2021-10-26 12:25:47 +02:00
Max Kellermann
409b877eea
output/ao: include cleanup
2021-10-26 12:20:18 +02:00
Max Kellermann
c5bf7948ff
fs/StandardDirectory: use the RUNTIME_DIRECTORY environment variable
2021-10-26 09:30:16 +02:00
Max Kellermann
b9f7127691
fs/StandardDirectory: add GetAppRuntimeDir()
2021-10-26 09:30:16 +02:00
Max Kellermann
1e6f5f012c
fs/StandardDirectory: add GetUserRuntimeDir()
2021-10-26 09:30:16 +02:00
Max Kellermann
225d85fd9b
fs/StandardDirectory: use "if" with initializer
2021-10-26 09:29:57 +02:00
Max Kellermann
1bb22f118d
fs/StandardDirectory: add more pure/const attributes
2021-10-26 09:04:20 +02:00
Max Kellermann
552c30eae4
systemd: add "RuntimeDirectory" directive
2021-10-26 08:38:36 +02:00
Max Kellermann
48e8a26813
command/playlist: allow range in playlistdelete
2021-10-25 12:23:37 +02:00
Max Kellermann
ade847bc89
PlaylistFile: fold spl_move_index() into handle_playlistmove()
2021-10-25 12:13:45 +02:00
Max Kellermann
a6173e0eae
command/playlist: add position parameter to "playlistadd"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1106
2021-10-25 12:10:47 +02:00
Max Kellermann
4529bb4a83
doc/protocol.rst: add "since" version notes
2021-10-25 08:47:23 +02:00
Max Kellermann
258ecb764f
PlaylistFile: add class PlaylistFileEditor
2021-10-23 13:54:50 +02:00
Max Kellermann
6f595e9abb
command/queue: add optional position parameter to "add"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1285
2021-10-23 13:12:44 +02:00
Max Kellermann
35c4c7e8bf
command/queue: move #ifdef out of AddDatabaseSelection()
2021-10-23 13:09:04 +02:00
Max Kellermann
293ed924d1
command/queue: pass Partition to AddDatabaseSelection()
2021-10-23 13:06:31 +02:00
Max Kellermann
c8121176b3
output/alsa: add option "stop_dsd_silence" to work around DSD DAC noise
2021-10-23 12:25:32 +02:00
Max Kellermann
ee270f9b00
meson.build: log_dep is only needed internally
2021-10-23 12:08:43 +02:00
Max Kellermann
bf1d77a4d8
output/alsa: un-inline several methods
2021-10-23 12:02:27 +02:00
Max Kellermann
a9344fafe9
lib/alsa/AllowedFormat: use StringView::RemoveSuffix()
2021-10-23 11:43:31 +02:00
Max Kellermann
b8890726f2
lib/alsa/AllowedFormat: use std::string_view
2021-10-23 11:42:30 +02:00
Max Kellermann
0f84332654
output/alsa: make "mode" const
2021-10-23 11:39:59 +02:00
Max Kellermann
46c82259f7
output/Control: make config fields const
2021-10-22 20:22:22 +02:00
Max Kellermann
2d03823283
output/Control: fold Configure() into the constructor
2021-10-22 20:21:58 +02:00
Max Kellermann
bba144eca5
output/Control: use C++ initializers
2021-10-22 20:21:43 +02:00
Max Kellermann
9af73dad93
output/Multiple: remove unused method Add()
2021-10-22 20:21:35 +02:00
Max Kellermann
f0d66bf6a6
output/Control: pass rvalue reference to move constructor
2021-10-22 20:14:37 +02:00
Max Kellermann
5ad53a7554
output/Thread: remove duplicate code by calling InternalCloseOutput()
2021-10-22 19:54:47 +02:00
Max Kellermann
7b2e3331f2
output/Filtered: improve API docs
2021-10-22 19:54:38 +02:00
Max Kellermann
3cb44f6652
increment version number to 0.23.3
2021-10-22 12:50:11 +02:00
Max Kellermann
b7fdff46f2
release v0.23.2
2021-10-22 12:45:45 +02:00
Max Kellermann
e16109330d
input/last: clear "uri" in OnCloseTimer()
...
Without clearing the "uri" field, the next Open() call attempts to
reuse the old InputStream, but it has already been closed, so Open()
always returns nullptr.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1300
2021-10-22 12:45:18 +02:00
Max Kellermann
72621531e0
protocol/Result: convert to Client method
2021-10-22 11:55:39 +02:00
Max Kellermann
0a48146efc
client/Client: pass std::string_view to Write()
...
Almost all callers have string literal, and the length is known at
compile time.
2021-10-22 11:54:14 +02:00
Max Kellermann
0c4bf12bfd
player/CrossFade: fix inverted check and wrong variable
...
The inverted check was introduced by commit 46d00dd85f , and commit
8ad17d25ef added a check for the wrong variable. D'oh!
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1303
2021-10-22 11:49:38 +02:00
Max Kellermann
b8e0855ef3
output/pipewire: obey PipeWire's DSD bit order and interleave
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1297
2021-10-21 21:15:16 +02:00
Max Kellermann
6467502b9d
output/pipewire: restore SampleFormat::DSD after ToPipeWireAudioFormat() call
2021-10-21 21:15:13 +02:00
Max Kellermann
15b67f20e5
output/pipewire: un-inline ParamChanged()
2021-10-21 20:11:22 +02:00
Max Kellermann
0825179f00
output/pipewire: add local reference variables
2021-10-21 20:02:59 +02:00
Max Kellermann
97211d0aad
output/pipewire: rename field "buffer" to "pod_buffer"
2021-10-21 20:02:32 +02:00
Max Kellermann
029c499bfa
output/pipewire: use std::fill_n()
2021-10-21 20:01:44 +02:00
Max Kellermann
0ba867ec16
output/pipewire: use MAX_CHANNELS, not SPA_AUDIO_MAX_CHANNELS
...
MPD supports only 8 channels, so MAX_CHANNELS is enough, the array
doens't need to be SPA_AUDIO_MAX_CHANNELS (which is 64).
2021-10-21 20:01:01 +02:00
Max Kellermann
866d147122
output/pipewire: make field "channels" unsigned
2021-10-21 19:59:48 +02:00
Max Kellermann
32851d1bc7
output/pipewire: DSD support
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1297
2021-10-20 11:39:54 +02:00
Max Kellermann
78257408b4
output/pipewire: report errors from the "state_changed" callback
2021-10-20 11:24:57 +02:00
Max Kellermann
f447b7615e
output/pipewire: check pw_stream_connect() errors
2021-10-20 11:24:51 +02:00
Max Kellermann
1f780b7209
output/Thread: log exception details
2021-10-20 11:24:51 +02:00
Max Kellermann
04bf8a6b1a
output/pipewire: fix memory leak in SendTag()
2021-10-20 10:16:36 +02:00
Max Kellermann
c4c64854d4
output/pipewire: evaluate errno after libpipewire function calls
2021-10-20 10:13:27 +02:00
Max Kellermann
17562dc90b
output/pipewire: remove misplaced noexcept
2021-10-20 09:41:27 +02:00
Max Kellermann
7b24316734
output/pipewire: fix coding style
2021-10-20 09:41:10 +02:00
Max Kellermann
5fab107fd3
lib/nfs/FileReader: use the thread-safe InjectEvent
...
.. instead of DeferEvent, which is not thread-safe. This caused
various playback problems, which was initially caused by the
DeferEvent/InjectEvent split in commit 774b4313f2
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1298
2021-10-20 09:38:09 +02:00
Max Kellermann
f31920e092
event/Loop: add thread assert() to AddDefer()
...
Currently fails in class NfsFileReader due to
https://github.com/MusicPlayerDaemon/MPD/issues/1298
2021-10-20 09:26:27 +02:00
Max Kellermann
eb111a10e7
output/pipewire: remove redundant prefix and newline from log message
2021-10-19 14:38:37 +02:00
Max Kellermann
80b09360c6
NEWS: mention the previous commit
2021-10-19 14:38:37 +02:00
Nicolai Syvertsen
5ccf78855d
Implement SendTag for PipeWire output plugin
2021-10-19 14:31:40 +02:00
Max Kellermann
fd5a3b5880
client/Response: reimplement Error() without FmtError()
...
With libfmt versions older than 7, this leads to an endless recursion
between Error() and FmtError(), resulting in a crash due to stack
overflow. D'oh!
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1295
2021-10-19 13:40:11 +02:00
Max Kellermann
6120c1360c
neighbor/Glue: remove unreachable "throw" statement
...
Should have been removed by commit a8087dc12c
2021-10-19 13:40:11 +02:00
Max Kellermann
a8087dc12c
neighbor/Glue: mention failed plugin name in error message
2021-10-19 13:29:00 +02:00
Max Kellermann
070c03dbf7
event/Thread, ...: fix printf->libfmt remains
2021-10-19 13:19:07 +02:00
Max Kellermann
0a9bec3754
increment version number to 0.23.2
2021-10-19 10:29:49 +02:00
Max Kellermann
fff25ac753
release v0.23.1
2021-10-19 10:27:28 +02:00
Max Kellermann
4f1e79b6b8
filter/ReplayGain: emit "mixer" event when replay gain changes volume
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1294
2021-10-19 10:03:21 +02:00
Max Kellermann
aa9933c0b5
output/pipewire: add noexcept
2021-10-19 08:58:50 +02:00
Max Kellermann
0697d1f859
output/pipewire: include cleanup
2021-10-19 08:57:33 +02:00
Max Kellermann
df033fa4aa
NEWS: mention the previous commit
2021-10-19 08:56:32 +02:00
Nicolai Syvertsen
b941a7df83
Implement volume updates for pipewire output
2021-10-19 00:01:45 +02:00
Max Kellermann
31151cec3c
command/playlist: "load" supports relative positions
...
This commit also increases the PROTOCOL_VERSION so clients can detect
the availability of the feature.
2021-10-18 22:08:22 +02:00
Max Kellermann
07e8c338df
command/queue: move position parameter functions to separate library
2021-10-18 22:07:04 +02:00
Max Kellermann
b22d7218aa
command/player, ...: use decimal notation
...
During the libfmt migration, I converted "%1.3f" to just "{:1.3}"
without the "f" suffix, but libfmt defaults to scientific notation,
which can break some MPD clients.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1291
2021-10-18 16:54:53 +02:00
Max Kellermann
d5be8c74b0
output/pipewire: attempt to change the graph sample rate
...
Requires PipeWire 0.3.32.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1283
2021-10-18 16:46:23 +02:00
Max Kellermann
c112cb60da
output/snapcast: fix typo which caused "Failed to get chunk"
...
This bug caused a 9 second offset in all time stamps. Due to that,
the Snapcast server thought the chunks are too old and discarded them.
Fixes https://github.com/MusicPlayerDaemon/MPD/discussions/1287
2021-10-18 16:40:11 +02:00
Max Kellermann
677fa4f9bc
doc/plugins.rst: mention that the snapcast output requires a format
2021-10-17 20:01:21 +02:00
Max Kellermann
907af2ad02
Permission: refactor getPermissionFromPassword() to return std::optional
...
This replaces the output parameter (which is bad API design). As a
side effect, it fixes the bad [[gnu::pure]] attribute added by commit
a636d2127 which caused optimizing compilers to miscompile calls to
that function. "Pure" functions can be assumed to have no output
arguments, so the compiler can assume the function doesn't modify
them.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1282
2021-10-17 19:58:50 +02:00
Thomas Zander
6a2e7bbc02
protocol/ArgParser.cxx: Add missing #include <stdio.h>
...
Fixes a build problem on platforms where stdio.h is not included
transitively. snprintf() is defined in stdio.h.
2021-10-16 17:38:07 +02:00
Max Kellermann
771c46032f
meson.build: add missing libfmt dependencies
...
Fixes https://github.com/MusicPlayerDaemon/MPD/discussions/1281
The problem occurred when there was libfmt-dev installed, but it was
too old (e.g. on Debian Buster), and Meson used the wrap fallback.
Those internal MPD libraries where the libfmt dependency was not
declared were still using the old system libfmt headers, which are not
ABI-compatible with MPD's own libfmt build.
2021-10-15 14:26:59 +02:00
Max Kellermann
85611aa456
storage/smbclient: add StoragePlugin.prefixes
...
Should have been part of commit
ef24cfa523
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1279
2021-10-15 10:24:30 +02:00
Max Kellermann
466b5cb08d
neighbor/smbclient: FmtError() instead of FormatErrno()
...
Fixes part 2 of https://github.com/MusicPlayerDaemon/MPD/issues/1279
2021-10-15 09:40:36 +02:00
Max Kellermann
3f2f3251cb
neighbor/smbclient: use [[gnu::pure]]
...
Fixes part 1 of https://github.com/MusicPlayerDaemon/MPD/issues/1279
2021-10-15 09:39:34 +02:00
Max Kellermann
8ae85f3991
doc/protocol.rst: move POSITION from "search" to "findadd"
...
Whoops, I misplaced this one.
2021-10-14 15:36:25 +02:00
Max Kellermann
781fe4ff28
increment version number to 0.23.1
2021-10-14 15:36:16 +02:00
Max Kellermann
163c59128e
release v0.23
2021-10-14 15:25:21 +02:00
Max Kellermann
608896571c
command/queue: add position parameter to "load"
...
Another one from https://github.com/MusicPlayerDaemon/MPD/issues/888
2021-10-14 15:11:11 +02:00
Max Kellermann
2e5ca1cbd2
command/database: add "position" parameter to "findadd" and "searchadd"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/888
2021-10-14 15:03:02 +02:00
Max Kellermann
680fb51c37
Permission: add "player" to default permission set
...
Forgot that in commit 9a766f4cd9
2021-10-14 14:58:38 +02:00
Max Kellermann
77d74b404e
Permission: add option "host_permissions"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1115
2021-10-14 14:44:18 +02:00
Max Kellermann
a636d2127a
Permission: add "pure" attributes
2021-10-14 14:26:51 +02:00
Max Kellermann
9a766f4cd9
Permission: split permission "player" from "control"
...
Some users want certain clients to fully control playback, but do not
want them to be able to trigger database update.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1124
2021-10-14 14:19:51 +02:00
Max Kellermann
8ad17d25ef
player/CrossFade: do not cross-fade songs shorter than 20 seconds
...
From the feature request: "I generally like to have crossfade on, but
when it happens during such short tracks (e.g. 20 seconds or less) it
doesn't really sound good as those tracks are not really meant to be
crossfaded and intended to act as a bridge on their own."
Sounds reasonable. This commit doesn't add an option, but hard-codes
the limit to 20 seconds. If it turns out that users want to have it
configurable, we can still add the option.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1184
2021-10-14 13:47:24 +02:00
Max Kellermann
46d00dd85f
player/CrossFade: move code to CanCrossFadeSong()
2021-10-14 13:42:27 +02:00
Max Kellermann
ec52b13449
player/CrossFade: add method IsEnabled()
2021-10-14 13:41:50 +02:00
Max Kellermann
cf6ca1b0ba
player/CrossFade: use C++11 initializers
2021-10-14 13:38:42 +02:00
Max Kellermann
37bd6de658
db/simple: add option to hide CUE target songs
...
This reduces duplicates in the music database by hiding the original
song file when it is referenced by a CUE sheet.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1275
2021-10-14 13:28:37 +02:00
Max Kellermann
f7622ca332
db/update/Walk: move PurgeDanglingFromPlaylists() to Playlist.cxx
2021-10-14 13:12:10 +02:00
Max Kellermann
b82b56970b
db/simple/Song: reorder fields for better packing
2021-10-14 12:55:02 +02:00
Max Kellermann
e4eb5b79c9
output/shout: move shout_new() call to Enable()
...
Don't allocate any memory until the output is really enabled.
2021-10-14 12:28:36 +02:00
Max Kellermann
1cfea20b22
output/shout: remove the defunct "timeout" option
...
The implementation was removed 12 years ago in commit f6455d5f79 and
nobody missed it.
2021-10-14 12:04:13 +02:00
Max Kellermann
efa3ffa8d8
Revert "db/update/playlist: remove non-existent targets while scanning"
...
This reverts commit 9200fa6d06 . It was
wrong because it works only if the target song has already been
scanned.
2021-10-14 11:50:41 +02:00
Max Kellermann
1b8c94d6b9
db/update/Playlist: move code to another UpdatePlaylistFile() method
2021-10-14 11:36:45 +02:00
Max Kellermann
cd5c1f3f45
db/update/playlist: remove empty playlist directories
2021-10-13 19:23:24 +02:00
Max Kellermann
9200fa6d06
db/update/playlist: remove non-existent targets while scanning
2021-10-13 19:23:24 +02:00
Max Kellermann
1bbe9896f6
Main: make inotify errors non-fatal
2021-10-13 18:55:05 +02:00
Max Kellermann
2d8847f428
db/update/InotifyUpdate: convert to class, no global variables
2021-10-13 18:47:56 +02:00
Max Kellermann
72f6e018e7
Log: remove the obsolete printf-style functions
2021-10-13 17:41:19 +02:00
Max Kellermann
2fbbd540bb
more [[gnu::...]] attributes
2021-10-13 17:38:01 +02:00
Max Kellermann
18f64b5fb7
system/FatalError: remove obsolete library
2021-10-13 16:53:01 +02:00
Max Kellermann
d2a8b1e8a5
db/update/InotifySource: make errors non-fatal
2021-10-13 16:53:01 +02:00
Max Kellermann
184e8eca7c
win32/Win32Main: throw on error
2021-10-13 16:37:56 +02:00
Max Kellermann
0a8886704a
Main: move top-level exception handler to main()
...
Allows win32_main() to throw exceptions.
2021-10-13 16:37:34 +02:00
Max Kellermann
0712314d23
archive/{zzip,iso9660}: ignore file names which are invalid UTF-8
...
These malformed strings must not be transferred over the wire, because
the MPD protocol is defined to be UTF-8.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1274
2021-10-13 15:51:08 +02:00
Max Kellermann
f8cbba1850
util/Alloc: remove unused library
2021-10-13 14:48:16 +02:00
Max Kellermann
635ec3ce37
util/VarSize: use plain malloc()
2021-10-13 14:46:40 +02:00
Max Kellermann
8e71130e8a
tag/FixString: use class AllocatedArray
2021-10-13 14:40:33 +02:00
Max Kellermann
ed7baf3ae1
tag/Id3Scan: use StringView::Strip() instead of duplicating the string
2021-10-13 14:32:43 +02:00
Max Kellermann
1e159af2ce
tag/Id3Scan: merge duplicate code into InvokeOnTag()
2021-10-13 14:30:57 +02:00
Max Kellermann
dffed6e393
tag/Id3Scan: add class Id3String
2021-10-13 14:24:17 +02:00
Max Kellermann
bf656af555
playlist/SoundCloud: use AllocatedString for concatenation
2021-10-13 12:47:57 +02:00
Max Kellermann
d2b8852d19
playlist/SoundCloud: move code to TranslateSoundCloudUri()
2021-10-13 12:23:15 +02:00
Max Kellermann
7d4de71899
sticker/SongSticker: use AllocatedString for concatenation
2021-10-13 12:19:45 +02:00
Max Kellermann
e1c16d78e4
decoder/wavpack: use AllocatedString for concatenation
2021-10-13 12:15:57 +02:00
Max Kellermann
a49b49cba7
decoder/wavpack: fix WVC file support
...
The wrong variable was used. This has been broken by commit
4eeea640f4 seven years ago - and nobody as noticed, d'oh!
2021-10-13 12:11:39 +02:00
Max Kellermann
f510564d9d
more [[gnu::...]] attributes
2021-10-13 12:07:05 +02:00
Max Kellermann
1c4b484a56
avahi/Poll: use FineTimerEvent in AvahiTimeout
...
libavahi-client uses this one to schedule events immediately.
However, CoarseTimerEvent may be called too late, and cause timeouts.
2021-10-13 11:13:54 +02:00
Max Kellermann
b394d8d059
net/Resolver: include cleanup
2021-10-13 11:06:10 +02:00
Max Kellermann
a15c1c71d5
util/WritableBuffer: add WritableBuffer<void>::{FromVoid,ToVoid}()
2021-10-13 11:05:33 +02:00
Max Kellermann
8d679e7e00
util/IntrusiveList: add IntrusiveList::swap()
2021-10-13 11:04:42 +02:00
Max Kellermann
2b30ac2351
util/IntrusiveList: add another missing ToNode() call
2021-10-13 11:04:21 +02:00
Max Kellermann
1c97793b49
util/IntrusiveList: do not use the deprecated class std::iterator
...
Deprecated in C++17. Since C++17, one is supposed to declare those 5
types manually.
2021-10-13 11:03:49 +02:00
Max Kellermann
4dae8b41da
event/PipeEvent: new class wrapping SocketEvent
2021-10-13 10:45:55 +02:00
Max Kellermann
be8ed2f59e
tag/Settings: use [[gnu::const]]
2021-10-13 10:37:26 +02:00
Max Kellermann
08491fcd86
tag/Format: use [[gnu::pure]]
2021-10-13 10:37:26 +02:00
Max Kellermann
abed633fcb
tag/FixString: use [[gnu::pure]]
2021-10-13 10:37:26 +02:00
Max Kellermann
db2a9cb6d5
tag/Builder: use [[gnu::pure]]
2021-10-13 10:37:26 +02:00
Max Kellermann
7caeb3b0d8
tag/ParseName: use [[gnu::pure]]
2021-10-13 10:32:22 +02:00
Max Kellermann
08500be239
tag/VorbisComment: use [[gnu::pure]]
2021-10-13 10:31:51 +02:00
Max Kellermann
3ef7d8fecb
tag/Tag: use [[gnu::pure]]
2021-10-13 10:31:51 +02:00
Max Kellermann
ffde7223b9
tag/Table: use [[gnu::pure]]
2021-10-13 10:31:51 +02:00
Max Kellermann
4e84fa4a00
RemoteTagCache: use [[gnu::pure]]
2021-10-13 10:31:51 +02:00
Max Kellermann
78e49928b6
command/QueueCommands: disallow moving the current song relative to itself
...
This was a no-op previously, but this operation makes no sense.
2021-10-07 22:55:41 +02:00
Max Kellermann
c0bcfe244c
command/QueueCommands: reimplement relative "move"/"moveid" offsets
...
The existing implementation has been utterly broken forever; I cannot
explain what it actually does, but it doesn't do what the
documentation says.
2021-10-07 22:49:38 +02:00
Max Kellermann
e63ecd81ec
command/QueueCommands: eliminate id lookup from handle_addid()
...
Use MoveRange() instead of MoveId().
2021-10-07 22:44:06 +02:00
Max Kellermann
c47a858d15
command/QueueCommands: move code to RequireCurrentPosition()
2021-10-07 22:21:00 +02:00
Max Kellermann
076c9a0dd9
command/QueueCommands: offset relative "addid" positions by one
...
Now, "+0" means "right after the current song" and "-0" means "right
before the current song". Mnemonic: there are zero songs between the
current song and the newly added song.
2021-10-07 22:12:10 +02:00
Max Kellermann
3993176b76
command/QueueCommands: support relative offsets in "addid"
...
A similar feature was present long ago in MPD, but was deprecated in
version 0.16 because the implementation was broken. This commit
re-adds the feature in a way that's well-defined and not broken.
Close https://github.com/MusicPlayerDaemon/MPD/issues/1221
2021-10-07 21:55:56 +02:00
Max Kellermann
16cad48641
command/QueueCommands: validate the "addid" position before adding the song
...
Validate early, so we avoid the rollback if an error occurs.
2021-10-07 21:27:07 +02:00
Max Kellermann
7a6d0c2efc
command/Queue: move LookupRemoteTag() to the end
...
Skip the LookupRemoteTag() call if the MoveId() call fails.
2021-10-07 21:13:45 +02:00
Max Kellermann
f6035f2dda
util/UriRelative: use std::string_view
...
Eliminates lots of implicit std::string temporaries.
2021-10-07 14:49:53 +02:00
Max Kellermann
c34a1e29de
util/UriRelative: fix variable mixup
2021-10-07 14:44:41 +02:00
Max Kellermann
41a69027c2
test/util/TestUriRelative: add failing test for "./" prefix
2021-10-07 14:44:30 +02:00
Max Kellermann
711c614528
python/build/libs.py: update WildMidi to 0.4.4
2021-10-07 13:34:04 +02:00
Max Kellermann
6acb240f69
python/build/libs.py: update CURL to 7.79.1
2021-10-07 13:31:00 +02:00
Max Kellermann
45f3dd8b7a
Revert "python/build/libs.py: remove flac, switch to Meson wrap"
...
This reverts commit 6ed4aff4d3 . The
Meson wrap is broken on non-x86, because it unconditionally includes
<cpuid.h> which is an x86 only header.
2021-10-07 13:28:17 +02:00
James D. Smith
acc1bd6297
playlist/PlaylistSong: Remove dots from playlist file paths.
2021-10-07 13:15:40 +02:00
James D. Smith
49ed9dae34
util/UriUtil: New uri_squash_dot_segments.
2021-10-07 13:14:54 +02:00
Max Kellermann
cf554d306d
LocateUri: implement UriPluginKind::STORAGE properly
...
This way, URI schemes supported by arbitrary storage plugins are
allowed.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1270
2021-10-06 20:36:39 +02:00
Max Kellermann
ef24cfa523
storage/Plugin: add "prefixes"
2021-10-06 20:14:01 +02:00
Max Kellermann
5d35983298
decoder/openmpt: catch libopenmpt exceptions in scan_stream()
...
Fixes crash bug.
2021-10-06 20:14:01 +02:00
Max Kellermann
2dacb36789
LocateUri: throw std::invalid_argument instead of std::runtime_error
...
This should translate to ACK_ERROR_ARG instead of ACK_ERROR_UNKNOWN.
2021-10-06 19:26:33 +02:00
Max Kellermann
57a1403f08
output/pipewire: implement Delay(), fix busy loop while paused
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1265
2021-09-24 11:33:35 +02:00
Max Kellermann
bad3283182
output/pipewire: add flag "active", replaces some uses of "paused"
...
This way, we know whether we're explicitly "paused" or "not yet
activated because the ring buffer hasn't been filled yet".
2021-09-24 11:33:30 +02:00
Max Kellermann
6ed4aff4d3
python/build/libs.py: remove flac, switch to Meson wrap
2021-09-21 16:44:51 +02:00
Max Kellermann
e525465592
python/build/verify.py: support SHA256
2021-09-21 16:22:21 +02:00
Max Kellermann
10782f4c84
{android,win32}/build.py: use makedirs(exist_ok)
2021-09-21 16:04:31 +02:00
Max Kellermann
2a02576d6d
python/build/meson.py: move c_args, ... to [built-in options]
...
As per Meson 0.56.0:
https://mesonbuild.com/Machine-files.html#properties
2021-09-21 14:57:55 +02:00
Max Kellermann
9ea1578a97
lib/expat/meson.build: propagate the libexpat dependency
...
Fixes the build with libexpat from Meson wrap.
2021-09-21 14:38:00 +02:00
Max Kellermann
520028dcfc
python/build/libs.py: remove libexpat, switch to Meson wrap
2021-09-21 14:08:23 +02:00
Max Kellermann
e98cef06c7
python/build/meson.py: remove --libdir=lib MultiArch workaround
...
Not necessary anymore since Meson 0.50.0:
https://mesonbuild.com/Release-notes-for-0-50-0.html#libdir-defaults-to-lib-when-cross-compiling
2021-09-21 13:58:45 +02:00
Max Kellermann
aef0535c55
python/build/libs.py: remove libvorbis, switch to Meson wrap
2021-09-21 13:49:50 +02:00
Max Kellermann
6b1d0cb01d
meson.build: disable compiler warnings for subprojects
...
Requires Meson 0.56.0:
https://mesonbuild.com/Release-notes-for-0-56-0.html#per-subproject-warning_level-option
2021-09-21 13:48:16 +02:00
Max Kellermann
f23ecf00da
meson.build: set per-subproject "default_library"
...
Requires Meson 0.54.0:
https://mesonbuild.com/Release-notes-for-0-54-0.html#per-subproject-default_library-and-werror-options
2021-09-21 13:41:45 +02:00
Max Kellermann
a1c1e26875
meson.build: require Meson 0.56.0
...
I want to use per-subproject warning_level (0.56.0), default_library
(0.54.0).
2021-09-21 13:39:44 +02:00
Max Kellermann
410b8711f2
lib/curl/meson.build: add -DCURL_STATICLIB on Windows
...
Necessary since commit 6acf81d5ae
2021-09-21 13:24:35 +02:00
Max Kellermann
6acf81d5ae
python/build/libs.py: build CURL with cmake
2021-09-21 12:30:39 +02:00
Max Kellermann
4eb56d844e
python/build/libs.py: update Boost to 1.77.0
2021-09-21 12:22:17 +02:00
Max Kellermann
5faf6d061f
python/build/libs.py: build expat with cmake
2021-09-20 23:23:20 +02:00
Max Kellermann
d5a9f6d79d
python/build/libs.py: build libogg, libvorbis with cmake
2021-09-20 23:23:20 +02:00
Max Kellermann
2699889342
python/build/cmake.py: use CMAKE_TOOLCHAIN_FILE
...
Let cmake know that we're cross-crompiling.
2021-09-20 23:14:13 +02:00
Max Kellermann
e4f933361e
python/build/libs.py: update OpenSSL to 3.0.0
2021-09-20 22:54:02 +02:00
Max Kellermann
6f278977e9
build/python/project: add build(), calls _build()
...
Prepare to add some code around the _build() call.
2021-09-20 22:54:02 +02:00
Max Kellermann
4f2f705dca
build/python/make: rename build() to build_make()
...
Eliminate conflict with other Project classes.
2021-09-20 22:54:02 +02:00
Max Kellermann
f31e38145d
python/build/cmake.py: some ccache support
2021-09-20 22:54:02 +02:00
Max Kellermann
0231622169
build/python/cmake: add "windows_configure_args"
2021-09-20 22:46:54 +02:00
Max Kellermann
937423dbcf
event/Loop: check the quit flag after RunDeferred()
...
Allow DeferredEvents to call EventLoop::Break().
2021-09-10 12:14:18 +02:00
Rosen Penev
40483d8478
fix wrong emplace usage
...
emplace already calls std::pair. No need for it again.
No need to emplace when calling std::make_shared.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-09-07 21:14:37 -07:00
Rosen Penev
6ec5089cc9
remove std::make_pair
...
make_pair is an old C++98 function that can be replaced by modern
shorter constructs.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-09-07 21:13:22 -07:00
iconoclasthero
15f419e1cb
Update user.rst
...
NB: Check the sysconfdir setting to determine where mpd will look for mpd.conf; if you expect mpd to look for /etc/mpd.conf the sysconfdir must be '/etc' (i.e., not 'etc' which will result in mpd looking for /usr/local/etc/mpd.conf):
.. code-block:: none
meson configure output/release |grep sysconfdir
If this is not /etc (or another path you wish to specify):
.. code-block:: none
$ meson configure output/release -Dsysconfdir='/etc' ; meson configure output/release |grep syscon
sysconfdir /etc Sysconf data directory
2021-09-06 12:41:41 -04:00
Max Kellermann
bdd8c34c67
Merge branch 'move' of git://github.com/neheb/MPD
2021-08-29 06:47:05 +02:00
Max Kellermann
c9a9248c9f
java/Class: use Java::LocalObject
...
This eliminates all but one DeleteLocalRef() call.
2021-08-28 08:09:54 +02:00
Max Kellermann
31f7fede30
java/GlobalRef: remove method Set(), always require initialization
2021-08-28 08:08:30 +02:00
Max Kellermann
917fe549b0
java/Object: use type aliases
2021-08-28 08:05:57 +02:00
Max Kellermann
8e430e55af
Java/GlobalRef: add LocalRef cast constructor
2021-08-28 08:04:20 +02:00
Max Kellermann
9e61bda592
java/String: add class StringUTFChars()
2021-08-27 12:30:43 +02:00
Max Kellermann
56997290d7
io/BufferedOutputStream: add method Discard()
2021-08-27 12:06:36 +02:00
Max Kellermann
d2f84f3df8
io/BufferedOutputStream: allow specifying the buffer size
2021-08-27 12:06:20 +02:00
Max Kellermann
9da28e5c73
io/BufferedOutputStream: more API documentation
2021-08-27 12:06:02 +02:00
Max Kellermann
d1f9b06f84
io/BufferedOutputStream: add WriteT()
2021-08-27 12:05:26 +02:00
Max Kellermann
f9f3306db9
io/BufferedOutputStream: use std::size_t
2021-08-27 12:05:06 +02:00
Max Kellermann
19d19cd737
fs/io/BufferedOutputStream: avoid including windows.h
...
Include the most specific header documented by MSDN instead.
2021-08-27 12:04:44 +02:00
Max Kellermann
b1175acb59
util/StringView: hard-code C++17
2021-08-27 12:01:31 +02:00
Max Kellermann
672278e5fd
util/StringView: use [[gnu::]] attributes
2021-08-27 11:59:37 +02:00
Max Kellermann
da155f8822
util/StringCompare: use [[gnu::]] attributes
2021-08-27 11:58:25 +02:00
Max Kellermann
4026ef63b6
util/StringAPI: use [[gnu::]] attributes
2021-08-27 11:57:56 +02:00
Max Kellermann
b282682ba5
use using instead of typedef
2021-08-27 11:57:33 +02:00
Max Kellermann
ad00926e1b
util/AllocatedArray: add method release()
2021-08-27 11:24:50 +02:00
Rosen Penev
0b774df375
prevent use after move
...
These should be equivalent anyway.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-08-26 13:38:36 -07:00
Rosen Penev
53ffcf455c
make several member functions const
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-08-26 13:15:52 -07:00
Max Kellermann
9ca64d5fb3
filter/Chain: eliminate, just use a chain of TwoFilters instead
...
The ChainFilter class is extremely complicated code, and will grow to
be even more complicated when the Filter interface gets extended.
Let's just remove it; we can easily chain many TwoFilters instead.
2021-08-26 17:45:23 +02:00
Max Kellermann
bd79354f32
filter/TwoFilters: add ChainFilters()
2021-08-26 17:42:25 +02:00
Max Kellermann
49dcac5c21
filter/TwoFilters: add class PreparedTwoFilters
2021-08-26 17:36:19 +02:00
Max Kellermann
38a4b0d8d5
filter/TwoFilters: fix include guard
2021-08-26 14:36:52 +02:00
Max Kellermann
a224225e48
pcm/AudioFormat: use std::size_t
2021-08-26 13:42:15 +02:00
Max Kellermann
7d7fe756b3
pcm/AudioFormat: use [[gnu::pure]]
2021-08-26 13:42:15 +02:00
Max Kellermann
1cb7fe12ff
pcm/AudioFormat: add noexcept
2021-08-26 13:37:36 +02:00
Max Kellermann
8a29805767
Merge tag 'v0.22.11'
...
release v0.22.11
2021-08-24 22:19:38 +02:00
Max Kellermann
94c196108d
release v0.22.11
2021-08-24 22:15:22 +02:00
Max Kellermann
263d1ba002
Main: playlist_directory defaults to "/sdcard/Android/data/org.musicpd/files/playlists"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1233
2021-08-24 22:12:27 +02:00
Max Kellermann
2dba06dc34
android/Context: add GetExternalFilesDir()
2021-08-24 22:03:53 +02:00
Max Kellermann
811860c3b4
android/Context: use [[gnu::pure]]
2021-08-24 21:54:22 +02:00
Max Kellermann
8439119e24
filter/ffmpeg: support double-precision samples
...
Insert an "aformat" filter which converts double-precision to
single-precision.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1235
2021-08-24 13:45:57 +02:00
Max Kellermann
b5b40d8235
filter/ffmpeg: automatically retry with "aformat"
...
If DetectFilterOutputFormat() fails to determine the output format,
insert an "aformat" filter which attempts to force a specific output
format.
Fixes part 2 of of https://github.com/MusicPlayerDaemon/MPD/issues/1235
2021-08-24 13:31:13 +02:00
Max Kellermann
b904f8af03
lib/ffmpeg/Filter: add FilterContext::MakeAformat()
2021-08-24 13:30:17 +02:00
Max Kellermann
ebfbb74f9e
lib/ffmpeg/DetectFilterFormat: return AudioFormat::Undefined() on EAGAIN
2021-08-24 13:30:03 +02:00
Max Kellermann
7b4225aa1f
lib/ffmpeg/Filter: add ParseSingleInOut()
...
Merge some duplicate code.
2021-08-24 13:29:08 +02:00
Max Kellermann
71a5311b06
lib/ffmpeg/Filter: eliminate class FilterContext
...
Since AVFilterContext are freed automatically, this wrapper class
serves no purpose. Let's remove it.
2021-08-24 13:04:34 +02:00
Max Kellermann
a62a35e1db
lib/ffmpeg/Filter: remove FilterContext destructor
...
Fixes potential double-free bugs which currently did not occur because
the destructors happened to be called in the right order.
2021-08-24 12:56:05 +02:00
Max Kellermann
ca2439f595
filter/ffmpeg: pass "channel_layout" instead of "channels" to buffersrc
...
Fixes part 1 of https://github.com/MusicPlayerDaemon/MPD/issues/1235
2021-08-23 21:38:13 +02:00
Max Kellermann
f9a0db716a
android: build with NDK r23
2021-08-23 20:58:19 +02:00
Max Kellermann
34aa67ea87
Merge remote-tracking branches 'neheb/6', 'neheb/5', 'neheb/3', 'neheb/2' and 'neheb/1'
2021-08-23 20:36:26 +02:00
Dave Hocker
18be8c3318
Fix compile error on macOS 11.15.2 (introduced by commit 30e3ef4)
2021-08-21 11:16:22 -05:00
Rosen Penev
1d7a8f992f
clang-tidy: use auto
...
The type is duplicated otherwise
Found with modernize-use-auto
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-08-21 00:53:23 -07:00
Rosen Penev
da1783cdff
clang-tidy: remove pointless const
...
Found with readability-const-return-type
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-08-21 00:51:21 -07:00
Rosen Penev
20d74bb07e
clang-tidy: replace loop with std::all_of
...
Found with readability-use-anyofallof
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-08-21 00:49:36 -07:00
Rosen Penev
0f7a0b04ca
replace loop with find_if
...
loop is wrong anyway. It's missing a break;
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-08-21 00:48:30 -07:00
Rosen Penev
40c6a214e3
unique_ptr/new to make_unique
...
The latter is easier to read and is the "correct" thing to do.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-08-20 23:54:14 -07:00
Samir Benmendil
cfe024ea13
command/file: return directory_uri if real_uri is unset
...
Prevent a segfault when accessing album art.
Fix #1224 #1225
2021-08-17 10:55:43 +02:00
Max Kellermann
993d85125e
increment version number to 0.22.11
2021-08-17 10:55:10 +02:00
Max Kellermann
bedcf1cce5
Merge branch 'exp2' of git://github.com/neheb/MPD
2021-08-17 10:53:36 +02:00
Rosen Penev
30e3ef4c8e
constexpr/std::array conversions
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-08-16 21:05:56 -07:00
Rosen Penev
4c5fea96e4
constexpr global variable conversion
...
Found with cppcoreguidelines-avoid-non-const-global-variables
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-08-16 20:58:21 -07:00
Rosen Penev
46600931e4
clang-tidy: use default
...
Found with modernize-use-default
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-08-16 20:48:28 -07:00
Max Kellermann
a2387210bf
time/FileTime: move code to SystemClock.hxx
2021-08-10 19:53:53 +02:00
Max Kellermann
d7e7adb496
time/FileTime: add ChronoToFileTime()
2021-08-10 16:16:15 +02:00
Max Kellermann
45354a421c
time/FileTime: preserve the FILETIME resolution
...
Don't truncate the FILETIME to second resolution to pass it to
std::chrono::system_clock::from_time_t(); instead, calculate the
offset between the FILETIME epoch and the
std::system_clock::time_point epoch, and use that to initialize the
time_point directly.
2021-08-10 15:16:59 +02:00
Max Kellermann
9fc3c60910
time/FileTime: add FileTimeToChronoDuration()
2021-08-10 15:13:22 +02:00
Max Kellermann
1976003e91
time/FileTime: allow negative times
2021-08-10 15:13:16 +02:00
Max Kellermann
488afc47d4
time/FileTime: use uint_least64_t
2021-08-10 15:12:49 +02:00
Max Kellermann
017814adc7
test/time/TestFileTime: new unit test
2021-08-10 15:12:34 +02:00
Max Kellermann
7f94af8b2c
test/time/TestISO8601: disable on Windows for now
2021-08-10 15:07:19 +02:00
Max Kellermann
09d74f05c3
python/meson: set exe_wrapper=wine for Windows builds
...
Allows running the unit tests on Linux.
2021-08-10 15:04:54 +02:00
Max Kellermann
1af8694ef6
python/meson: set needs_exe_wrapper=true only for Android targets
2021-08-10 15:00:58 +02:00
Max Kellermann
b8eb9b466a
python/meson: split the f.write() call and use f-strings
2021-08-10 15:00:58 +02:00
Max Kellermann
bd9e449b69
python/project: re-add support for version suffix
...
Got lost in commit 0f56ddb805
2021-08-10 15:00:58 +02:00
Max Kellermann
f3d67115d7
output/wasapi: check ENABLE_DSD before setting dsd_mode
2021-08-10 15:00:58 +02:00
Max Kellermann
ee6603ed38
test/meson.build: add missing dependencies on libfmt
2021-08-10 14:31:49 +02:00
Max Kellermann
0dacde32f2
output/pipewire: append output name to PW node name
2021-08-10 11:30:25 +02:00
Max Kellermann
528e05f025
output/pipewire: add config option "remote"
2021-08-10 11:28:29 +02:00
Max Kellermann
269583f5dd
output/pipewire: allow specifying a target by its name
2021-08-10 11:17:16 +02:00
Max Kellermann
7c9f4f7e4f
output/pipewire: create inactive stream, fill ring_buffer first
...
This avoids underruns at the start of playback.
2021-08-10 10:50:42 +02:00
Max Kellermann
00fd692eba
output/pipewire: wait for buffer to fill before resuming
2021-08-10 10:48:25 +02:00
Max Kellermann
668c3782b2
output/pipewire: smaller ring buffer, 500ms should be enough
2021-08-10 10:43:56 +02:00
Max Kellermann
1e0af2dadf
output/pipewire: add type alias for boost::lockfree::spsc_queue
2021-08-10 10:43:54 +02:00
Max Kellermann
4ea2ea2a52
output/pipewire: update nbytes after calling PcmSilence()
...
This was missing in commit 8a243e6e28
2021-08-10 10:43:28 +02:00
Max Kellermann
8a243e6e28
output/pipewire: call pw_stream_flush() only if really draining
...
If draining was not requested, generate silence instead if there is no
data in the ring buffer.
The problem is that pw_stream_flush() appears to disable the stream
permanently, even though there is no state_changed callback - the
stream state remains at PW_STREAM_STATE_STREAMING, but the stream is
defunct. I have no idea why and I havn't found any documentation
about it.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1219
2021-08-10 06:30:58 +02:00
Max Kellermann
d33aa01000
output/pipewire: reset the "paused" flag
...
This was missing in commit 4d1ce7023b
2021-08-09 19:31:22 +02:00
Max Kellermann
bd893e6336
Merge tag 'v0.22.10'
...
release v0.22.10
2021-08-06 18:21:59 +02:00
Max Kellermann
64c39af556
release v0.22.10
2021-08-06 18:16:59 +02:00
Max Kellermann
04eb911a51
mixer/alsa: use cached values to work around rounding errors
...
This replaces 967af60327 with a more
effective workaround.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/822
2021-08-06 18:16:37 +02:00
Max Kellermann
351b39e0c5
mixer/alsa: skip the snd_mixer_handle_events() call in alsa_mixer_elem_callback()
...
snd_mixer_handle_events() has already been called by
DispatchSockets(). This way, we can also skip the exception handler.
2021-08-06 18:03:36 +02:00
Max Kellermann
3b6d4e6673
mixer/alsa: move alsa_mixer_elem_callback() into the AlsaMixer class
2021-08-06 18:01:19 +02:00
Max Kellermann
e8f328d8ad
mixer/alsa: move code to GetPercentVolume()
2021-08-06 17:56:30 +02:00
Max Kellermann
5f5b5f63af
mixer/alsa: move code to NormalizedToPercent()
2021-08-06 17:55:59 +02:00
Max Kellermann
ad6e303047
mixer/alsa: move code to GetNormalizedVolume()
2021-08-06 17:53:45 +02:00
Max Kellermann
b0e9538855
build/openssl: pass --cross-compile-prefix to ./Configure
2021-08-06 17:30:47 +02:00
Max Kellermann
694debd4cc
build/openssl: pass RANLIB=... to "make install"
...
The "install_dev" target runs ranlib during installation, and this
can break the Android build.
2021-08-06 17:28:28 +02:00
Max Kellermann
0f56ddb805
python/build/libs.py: update OpenSSL to 3.0.0-beta2
2021-08-06 17:22:41 +02:00
Max Kellermann
dde77ec6bd
python/build/libs.py: update CURL to 7.78.0
2021-08-06 17:20:52 +02:00
Max Kellermann
5d73eda115
doc/plugins.rst: move filter graph URL to ffmpeg.org
2021-08-06 17:20:52 +02:00
Max Kellermann
1985786ed2
db/simple: prune CUE entries from database for non-existent songs
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1019
2021-08-05 20:26:21 +02:00
Max Kellermann
8e0d39ae94
db/update/Playlist: prepend "../" only for relative URIs
...
Prepending "../" to absolute URIs would break them.
2021-08-05 20:19:33 +02:00
Max Kellermann
1761fb14af
fs/Traits: add PathTraitsUTF8::IsAbsoluteOrHasScheme()
2021-08-05 20:09:06 +02:00
Max Kellermann
ef2fc4e6f6
db/simple/Directory: remove obsolete API doc
2021-08-05 19:05:03 +02:00
Max Kellermann
b979245d6c
decoder/Bridge: call UpdateStreamTag() only if there is no pending seek
...
If UpdateStreamTag() gets called while an initial seek is pending, the
result will never be submitted to a MusicChunk. By avoiding the
UpdateStreamTag() call in that case (by moving UpdateStreamTag() to
after the PrepareInitialSeek() check), the song_tag is preserved until
UpdateStreamTag() is called again from SubmitData().
This fixes missing tags in the "httpd" output.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1137
2021-08-05 18:02:45 +02:00
Max Kellermann
a74b07728e
tag/Tag: add Merge() which takes Tag pointers
2021-08-05 17:36:14 +02:00
Max Kellermann
7d69cbbda7
tag/Tag: Merge() returns Tag, MergePtr() returns std::unique_ptr<Tag>
2021-08-05 17:32:23 +02:00
Constantin Fuerst
955502f881
output/oss: enable DoP
...
Explanation
This adds support for DOP using the PcmExport function if the macro
ENABLE_DSD is defined. If enabled within the config-file using "dop",
the boolean dop_setting will be true. If DSD input is encountered and
the setting is on, it is checked whether the oss-device supports the
required samplerate. If that is the case, dop_active is set to true
and conversion of the input is prevented. If the sample rate is not
supported, conversion to S32 is requested. When playing back, the
PcmExport is used to pack the incoming stream into PCM. Reasoning
This is required for OSs without the required driver support for
native DSD playback that also have no ALSA. Mainly *BSD users are the
target audience for this functionality, as ALSA here is only a proxy
without full functionality. Requirements
DAC that supports the DOP standard
Building with OSS, DSD and S32-Format
Supported Formats / Required PCM Formats
DSF, DFF and WavPack-DSD will work.
DSD64, 1 Channel -> S24:176.4kHz (untested, lack of time / missing samples)
DSD64, 2 Channel -> S24:352.8kHz
DSD64, 4 Channel -> S24:705.6kHz (untested, lmissing equipment)
DSD128, 1 Channel -> S24:352.8kHz (untested, lack of time / missing samples)
DSD128, 2 Channel -> S24:705.6kHz
DSD256, 1 Channel -> S24:705.6kHz (untested, lack of time / missing samples)
Changes
inclusion of required files
adding new domain for logging
adding dop_satisfied private function
adding required member variables for storing dop state and for dop-packing
adding dop boolean parameter to many functions that are required to act a little differently when dop is active
Testing
This has been tested to work with a Sabaj Da2 on FreeBSD, where the
red status indicator LED clearly shows that DSD playback is taking
place, instead of purple for "hi-res" which is seen when converting.
Issues
I have not tested this with S24 and right now AFMT_S32_NE is
required. If not defined, ENABLE_DSD will be undef'ed. This will be
addressed in a bit, however no DAC which supports DOP but not 32Bit is
known to me. Also, AFMT_S32_NE is not defined when building on FreeBSD
which is why this is just blatantly defined in the file at the moment.
Additionally, the new dop-option is not added into any documentation
whatsoever.
2021-08-05 16:21:43 +02:00
Max Kellermann
dee5d1b87b
output/oss: replace the AudioFormat field with 3 raw OSS integers
...
This simplifies Reopen().
2021-08-05 16:03:53 +02:00
Max Kellermann
d42342e0ba
output/oss: check returned value in oss_try_ioctl()
2021-08-05 15:53:30 +02:00
Max Kellermann
8da3f8c6a7
output/oss: oss_try_ioctl() throws on EINVAL
...
Eliminate some duplicate code.
2021-08-05 15:47:11 +02:00
Max Kellermann
c8c553c75c
pcm/Export: add method IsDopEnabled()
2021-08-05 15:35:11 +02:00
Max Kellermann
c97aabe43a
Merge branch 'v0.22.x'
2021-08-05 15:17:07 +02:00
Max Kellermann
17b0ac75ca
output/oss: always enable PcmExport for alsa_channel_order
...
We need this even when AFMT_S24_PACKED is not available, for the
correct channel order in multi-channel files. Internally, MPD uses
FLAC channel order, but OSS uses the same channel order as ALSA.
2021-08-05 15:11:54 +02:00
Max Kellermann
bde64a13e2
tag/Builder: do not acquire tag_pool_lock if TagItem list is empty
2021-08-05 14:32:58 +02:00
Max Kellermann
96875921b7
tag/Builder: use std::swap() in move operator
...
This way, we save the overhead for acquiring the tag_pool_lock.
2021-08-05 14:28:37 +02:00
Cebtenzzre
551c941b5a
tag/Builder: don't ignore the result of tag_pool_dup_item
...
Also, use RemoveAll() instead of directly clearing TagBuilder::items in
most cases, as its elements represent references that must be released.
Closes #1023
2021-08-05 14:25:55 +02:00
Cebtenzzre
624c77ab43
tag/Builder: another missing RemoveAll() call
2021-08-05 14:25:05 +02:00
Cebtenzzre
ba13b4b5d6
tag/Builder: use RemoveAll() to give up references
2021-08-05 14:23:48 +02:00
Cebtenzzre
4b2d9e544c
tag/Pool: add [[nodiscard]]
2021-08-05 14:20:59 +02:00
Max Kellermann
97c43954e8
input/tidal: remove defunct unmaintained plugin
...
This plugin has been defunct for several years. Tidal has not ever
replied to any of my emails, so they're apparently not interested in
MPD support.
2021-08-05 13:52:05 +02:00
Max Kellermann
b77acd35f7
output/winmm: fix struct/class mismatch
2021-08-05 11:40:47 +02:00
Max Kellermann
4873159872
meson.build: add "fallback" option to fmt dependency (for older Meson versions)
2021-08-05 11:28:23 +02:00
Max Kellermann
968624035c
mixer/pipewire: new plugin
2021-08-05 10:57:37 +02:00
Max Kellermann
b838bf3109
output/pipewire: un-inline StateChanged()
2021-08-05 10:48:17 +02:00
Max Kellermann
4d1ce7023b
output/pipewire: implement Pause()
2021-08-04 17:26:54 +02:00
Max Kellermann
52577ac87a
output/pipewire: implement Cancel() properly
2021-08-04 17:24:49 +02:00
Max Kellermann
9fa3984a2f
input/icy: adjust offset at end of stream in Read()
...
ProxyInputStream::Read() assigns the `offset` field, which is the
wrong offset because it does not consider Icy metadata removed from
the stream. Therefore, after every ProxyInputStream::Read() call,
IcyInputStream::Read() needs to override this offset. This was
missing at the end of the stream, when Read()==0.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1216
2021-08-02 16:40:04 +02:00
Max Kellermann
239698cb5a
output/pipewire: set channel positions
2021-07-30 15:55:37 +02:00
Max Kellermann
e55de6e9f0
output/pipewire: implement Drain()
2021-07-30 15:28:01 +02:00
Max Kellermann
cfaf2ed03c
output/pipewire: move code to CheckThrowError()
2021-07-30 15:24:20 +02:00
Max Kellermann
6015960871
output/pipewire: reset the "interrupted" flag in Cancel()
...
This fixes seeking.
2021-07-30 15:20:32 +02:00
Max Kellermann
26328cc915
output/pipewire: detect connection errors
2021-07-30 14:31:06 +02:00
Max Kellermann
cd512f0b40
output/pipewire: replace usleep() with with pw_thread_loop_wait()
2021-07-30 14:31:04 +02:00
Max Kellermann
be14dd59a8
output/pipewire: remove obsolete TODO comment
2021-07-30 13:50:55 +02:00
Max Kellermann
97e5787ff7
output/pipewire: call libpipewire only while holding the lock
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1210
2021-07-30 13:49:22 +02:00
Max Kellermann
6975d3ca4b
output/pipewire: switch from pw_main_loop to pw_thread_loop
...
We need this for pw_thread_loop_lock().
2021-07-30 13:42:59 +02:00
Max Kellermann
cdca27e6bb
decoder/Bridge: fix libfmt string
2021-07-30 13:32:27 +02:00
Max Kellermann
5355335f19
db/simple/ExportedSong: check src.OwnsTag(), not this->OwnsTag()
...
this->OwnsTag() accesses fields that are not yet initialized.
2021-07-30 13:10:09 +02:00
Sam Bazley
5b775ca5b4
decoder/ffmpeg: check if long_name is not null
2021-07-28 16:05:15 +01:00
Jacob Vosmaer
ea95da3b1a
archive/meson.build: add missing libfmt dependency
2021-07-26 23:26:07 +02:00
Sam Bazley
57687779be
Android: add option to pause MPD when headphones disconnect
2021-07-26 19:02:47 +01:00
Max Kellermann
64fa76c568
command/file: support "albumart" for virtual tracks in CUE sheets
...
Instead of checking for "cover.jpg" in the virtual directory
representing the CUE sheet, check its enclosing directory.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1206
2021-07-16 09:04:35 +02:00
Max Kellermann
19a44076cf
command/file: pass directory uri to read_stream_art()
2021-07-16 08:31:58 +02:00
Max Kellermann
809a18913a
fs/Traits: add overload GetParent(string_view)
2021-07-16 08:30:34 +02:00
Max Kellermann
5eab2d96f4
output/winmm: fix struct/class mismatch
2021-07-16 08:30:34 +02:00
Max Kellermann
716784f632
increment version number to 0.22.10
2021-07-16 07:23:00 +02:00
Khem Raj
d39b11ba5d
include <utility> for std::forward
...
Fixes
../git/src/Log.hxx:121:42: error: no member named 'forward' in namespace 'std'
LogFormat(LogLevel::ERROR, e, fmt, std::forward<Args>(args)...);
Signed-off-by: Khem Raj <raj.khem@gmail.com >
2021-06-29 19:34:28 -07:00
Max Kellermann
b29a43b4d7
decoder/mad, ...: more libfmt logging
2021-06-25 20:52:08 +02:00
Max Kellermann
f60a42e0b6
Log, client/Response: adapt to libfmt 8.0.0 API changes
2021-06-25 20:29:25 +02:00
Max Kellermann
85b0029ba2
meson.build: add missing dependencies on libfmt
2021-06-25 20:28:54 +02:00
Max Kellermann
0e0f46a1e0
Log: remove unused Format functions
2021-06-24 21:40:12 +02:00
Max Kellermann
6f539cfcd6
Partition, ...: use libfmt for logging
2021-06-24 21:40:11 +02:00
Max Kellermann
0185d58a2b
Log: add libfmt support
2021-06-24 21:14:42 +02:00
Naglis Jonaitis
eb630ca655
doc/user.rst: rectify admin permission
...
Updating the database no longer requires the `admin` permission, only
`control` is needed (changed in 2abad0f479 ).
See also: #1124
2021-06-24 16:44:38 +02:00
Max Kellermann
d7df5e1c90
LogBackend: pass std::string_view to Log()
2021-06-24 13:43:13 +02:00
Max Kellermann
e4e4576a39
Merge tag 'v0.22.9'
...
release v0.22.9
2021-06-23 21:02:06 +02:00
Max Kellermann
18628bf89e
release v0.22.9
2021-06-23 20:56:13 +02:00
Yetangitu
2052b461af
Fix android build error when confronted with package versions ending in +revision_information
...
The script seems to assume package version numbers always end in numeric versions with an optional alpha-suffix. Alas, were it only so simple... Sometimes the package is called fizzbang-1.2.3+release_info in which case the build fails. No more!
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1177
2021-06-23 20:53:46 +02:00
Max Kellermann
5019bdcd52
TagAny: invoke ScanGenericTags() on remote files
...
This fixes reading ID3 tags on remote files with the commands
"readcomments" and "readpicture".
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1180
2021-06-23 20:49:30 +02:00
Naglis Jonaitis
8be0bcbdb9
doc/plugins.rst: mention default libsamplerate type
2021-06-23 15:51:31 +02:00
Naglis Jonaitis
af72a22ed8
doc/user.rst: document restore_paused
2021-06-23 15:50:41 +02:00
Naglis Jonaitis
6ed9668fea
doc, README.md: update IRC server name/URL
2021-06-23 15:48:42 +02:00
Max Kellermann
175d2c6d29
Main: use AtScopeExit() to call ZeroconfDeinit()
...
Make sure that ZeroconfDeinit() gets called even if startup fails with
an exception. Fixes an assertion failure because an Avahi TimerEvent
is still active.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1192
2021-06-22 20:31:45 +02:00
Naglis Jonaitis
f789451007
doc/plugins.rst: fix PipeWire link
2021-06-19 21:29:37 +03:00
Max Kellermann
36680607d0
meson.build: use some warning options for plain C as well
2021-06-01 11:14:28 +02:00
Max Kellermann
fc54877c6b
meson.build: merge duplicate warning flags to test_common_flags
2021-06-01 11:04:27 +02:00
Rosen Penev
6af7be4a45
add constexpr
...
Found with cppcoreguidelines-interfaces-global-init
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-05-31 13:45:39 -07:00
Max Kellermann
ab487b9a99
Android: use startForegroundService() in Android 8+
...
Fixes the error:
IllegalStateException: Not allowed to start service Intent { cmp=org.musicpd/.Main (has extras) }: app is in background
2021-05-31 20:45:31 +02:00
Max Kellermann
ac59ec34f9
decoder/ffmpeg: fix build failure with FFmpeg 3.4
...
av_demuxer_iterate() was added in libavformat 58.9.100.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1178
2021-05-31 18:10:06 +02:00
Max Kellermann
82da57b7ce
decoder/ffmpeg: suppress -Wunused with libavformat<58.6.100
2021-05-31 16:49:48 +02:00
Max Kellermann
aa6dac9bd2
db/proxy: suppress -Wunused with libmpdclient<2.12
2021-05-31 16:49:08 +02:00
Rosen Penev
220d2bf026
clang-tidy: add explicit deleted constructors
...
Found with cppcoreguidelines-special-member-functions
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-05-30 22:47:20 -07:00
Rosen Penev
9ef1cf15a9
clang-tidy: default virtual destructors
...
Found with cppcoreguidelines-special-member-functions
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-05-30 22:46:46 -07:00
Max Kellermann
679b3bc00f
output/print, command/player: print bool as integer
...
Fixes protocol breakage after commit 0440c41cba
libfmt is too clever for the MPD protocol!
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1175
2021-05-28 18:02:00 +02:00
Max Kellermann
1f9e32c35e
NEWS: fix typo
2021-05-28 15:46:38 +02:00
Max Kellermann
36410daaa4
queue/PlaylistEdit: fix inverted check
...
Regression by commit 471c37be59
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1135
2021-05-28 13:56:01 +02:00
Max Kellermann
38bfef7d0b
Merge branch 'add-openmpt-decoder' of git://github.com/GrimReaperFloof/MPD
2021-05-28 13:53:43 +02:00
GrimReaperFloof
724754f16c
Fix std::to_string warning for booleans in openmpt decoder
2021-05-27 20:47:45 +02:00
Max Kellermann
4d32454697
android/LogListener: pass formatted message to OnLog()
2021-05-27 16:21:36 +02:00
Max Kellermann
4db882f666
android/LogListener: cache the jmethodID
2021-05-27 16:14:43 +02:00
Max Kellermann
a83bf97b98
android/LogListener: un-inline the constructor
2021-05-27 16:13:22 +02:00
Max Kellermann
262e1957b7
lib/icu/Converter: use libfmt
2021-05-27 16:09:56 +02:00
Max Kellermann
792411384d
protocol/ArgParser: add function MakeArgError()
...
Replaces FormatProtocolError().
2021-05-27 16:01:44 +02:00
Max Kellermann
78b0ff83e8
client/Response: include cleanup
2021-05-27 15:59:06 +02:00
Max Kellermann
23613355f3
client/Response: remove unused method FormatV()
2021-05-27 15:16:35 +02:00
Max Kellermann
0d97eba7a5
client/Response: refactor FormatError() to use libfmt
2021-05-27 15:15:47 +02:00
Max Kellermann
18efda719e
client/Response: remove unused method Format()
2021-05-27 15:14:54 +02:00
Max Kellermann
42239a30eb
client/Response: use Fmt() in FormatError()
2021-05-27 15:05:42 +02:00
Max Kellermann
a26bf261a9
input/last: call Close() in Open()
...
Prevents a possible bug which occurs when the caller-provided open()
function throws; then the "uri" field is never set.
2021-05-27 14:04:28 +02:00
Max Kellermann
c692286c67
input/last: clear "uri" field in Close()
...
Prevent false negative after the stream was closed automatically after
20 seconds.
2021-05-27 14:03:33 +02:00
GrimReaperFloof
43a9dc7082
Add note about emulate_amiga_type requiring libopenmpt 0.5
2021-05-26 23:43:38 +02:00
GrimReaperFloof
6f64fa070d
Add repeat count setting to openmpt decoder
2021-05-26 23:43:38 +02:00
GrimReaperFloof
dc5b9d989b
Backwards compatibility with older libopenmpt versions than 0.5
2021-05-26 23:43:38 +02:00
GrimReaperFloof
9e407f5989
Change WritableBuffer<uint8_t> to AllocatedArray<std::byte>
2021-05-26 23:43:38 +02:00
GrimReaperFloof
fec6aac0f1
Code deduplication: move mod_loadfile() into ModCommon.cxx
2021-05-26 23:43:38 +02:00
GrimReaperFloof
541c31c879
Add openmpt decoder plugin
2021-05-26 23:43:38 +02:00
Max Kellermann
4ee0a06e18
Merge branch 'v0.22.x'
2021-05-26 13:15:29 +02:00
Max Kellermann
3775766605
NEWS: mention new FFmpeg/ID3v2 tags
2021-05-26 13:07:03 +02:00
Max Kellermann
38e24208f6
decoder/ffmpeg: support the tags "album-sort", "artist-sort"
2021-05-26 13:04:47 +02:00
Max Kellermann
fbaedf2262
decoder/ffmpeg: support the "sort_album" tag
...
From libavformat/mov.c.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1173
2021-05-26 13:03:47 +02:00
Max Kellermann
8f3341cefb
decoder/ffmpeg: add comment
2021-05-26 13:03:41 +02:00
Max Kellermann
4ec4bab3a9
decoder/ffmpeg: remove "year" tag
...
This mapping was added 11 years ago in commit 766b9fd453 , but FFmpeg
doesn't appear to support it.
2021-05-26 13:03:27 +02:00
Max Kellermann
6d567bcd35
decoder/ffmpeg: fix ArtistSort and AlbumArtistSort mapping
...
These were added 11 years ago in commit 766b9fd453 , but I cannot find
any evidence in the FFmpeg repository that these names were ever
supported. This commit adds the tags as they are currently present in
libavformat/mov.c.
2021-05-26 13:03:26 +02:00
Max Kellermann
4f75eb9bfe
output/pipewire: remove unreachable "return" statement
2021-05-26 11:57:57 +02:00
Max Kellermann
d2bd12822f
Merge branch 'v0.22.x'
2021-05-26 11:57:41 +02:00
Max Kellermann
363d9f0180
db/update/Walk: load all .mpdignore files of all parent directories
...
When updating everything, this did work, but if updating only a
subdirectory, the ".mpdignore" in the parents were not used.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1172
2021-05-25 22:42:44 +02:00
Max Kellermann
db0682a469
db/update/Walk: move code to LoadExcludeList()
2021-05-25 22:38:01 +02:00
Max Kellermann
7a6823dcdf
zeroconf/AvahiPoll: the struct timeval is an absolute time point
...
Fixes broken libavahi-client timeouts.
2021-05-25 22:25:45 +02:00
Max Kellermann
bce144a232
zeroconf/AvahiPoll: move code to Schedule()
2021-05-25 22:23:55 +02:00
Max Kellermann
0cef84cac6
zeroconf/AvahiPoll: rename "timer" to "event"
2021-05-25 22:23:55 +02:00
Max Kellermann
56c0733b42
meson.build: disable -Wsuggest-override with GCC 8
2021-05-25 22:23:55 +02:00
Max Kellermann
0b0acb3981
meson.build: add more C++ warning flags
2021-05-25 22:03:49 +02:00
Max Kellermann
1375dcc4ec
meson.build: sort warning options
2021-05-25 21:49:03 +02:00
Max Kellermann
6aeb0e335b
meson.build: add comment for -Wno-non-virtual-dtor
2021-05-25 21:48:19 +02:00
Max Kellermann
c1e2537851
meson.build: add comment for clang-only warning options
2021-05-25 21:45:39 +02:00
Max Kellermann
8c690fb737
decoder/mad: move variable declaration into "case"
2021-05-25 21:34:09 +02:00
Max Kellermann
dad1c21b59
zeroconf/avahi: move variable declaration into "case"
2021-05-25 21:34:09 +02:00
Max Kellermann
dd10b2bd61
meson.build: remove warning options implied by -Wall -Wextra
2021-05-25 21:24:44 +02:00
Max Kellermann
48c7c540df
meson.build: use add_project_arguments() instead of add_global_arguments()
...
Don't propagate MPD-specific compiler flags to subprojects.
2021-05-25 21:08:06 +02:00
Max Kellermann
281270cd2a
meson.build: remove unused variables common_cflags, common_cxxflags
2021-05-25 21:07:05 +02:00
Max Kellermann
02502514f6
meson.build: require clang 7 (remove bug workaround)
2021-05-25 21:06:55 +02:00
Max Kellermann
1bc02123f9
meson.build: remove "-pedantic", implied by Meson
...
Meson adds "-Wpedantic" in warning_level 3 (which is MPD's default).
2021-05-25 21:01:15 +02:00
Max Kellermann
3488a47c41
subprojects/sqlite3.wrap: add SQLite wrap
2021-05-25 20:51:03 +02:00
Max Kellermann
fd82d67678
sticker/Database: pass NarrowPath to sqlite3_open()
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1171
2021-05-25 18:45:45 +02:00
Max Kellermann
e66c12105b
lib/sqlite/meson.build: add missing external dependency on libsqlite
2021-05-25 18:41:43 +02:00
Max Kellermann
8a9d678bac
Merge branch 'v0.22.x'
2021-05-25 18:21:42 +02:00
Namkhai B
dbe12a6b90
util/RuntimeError: Disable format-security for gcc
...
Fixes building under GCC 11
2021-05-25 18:19:19 +02:00
Max Kellermann
0440c41cba
client/Response: add method Fmt() based on libfmt
2021-05-25 16:01:56 +02:00
Max Kellermann
a9c704b76e
meson.build: libfmt integration
2021-05-25 15:48:49 +02:00
Philippe Antoine
d3a680cc87
meson: set only sanitizers for fuzzer when unspecified
...
That is when meson option b_sanitize is not used
2021-05-24 09:03:16 +02:00
Max Kellermann
62fc4d5cf4
increment version number to 0.22.9
2021-05-24 09:03:07 +02:00
Max Kellermann
0cca1b138c
Merge tag 'v0.22.8'
...
release v0.22.8
2021-05-22 17:35:30 +02:00
Max Kellermann
14465be847
release v0.22.8
2021-05-22 17:33:36 +02:00
Max Kellermann
0e49de867d
input/last: add nullptr check to Open(), fixes assertion failure
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1168
2021-05-22 17:33:25 +02:00
Max Kellermann
f2e4529707
increment version number to 0.22.8
2021-05-22 17:32:00 +02:00
Max Kellermann
d3576a1b71
input/last: add nullptr check to Open(), fixes assertion failure
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1165
2021-05-21 19:30:36 +02:00
Max Kellermann
96707c0426
Merge tag 'v0.22.7'
...
release v0.22.7
2021-05-19 18:43:19 +02:00
Max Kellermann
3547fc7e61
release v0.22.7
2021-05-19 18:13:26 +02:00
Max Kellermann
466a05bc52
CommandLine: update copyright year in --version output
2021-05-19 18:09:38 +02:00
Max Kellermann
6de4064cca
client/Response, command/file: use %lu instead of %zu on Windows
...
Fixes -Wformat warnings.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1150
2021-05-19 18:06:40 +02:00
Max Kellermann
bcf0fdd3a8
meson.build: define NOUSER on Windows for lighter windows.h
...
A few exceptions are needed for sources which include COM header
(directly or indirectly).
This fixes lots of shadow warnings, see
https://github.com/MusicPlayerDaemon/MPD/issues/1150
2021-05-19 18:02:49 +02:00
Max Kellermann
a8f05a7efc
win32/HResult: un-inline HRESULTToString() to reduce header dependencies
2021-05-19 17:48:42 +02:00
Max Kellermann
c64a3b5dbb
fs/Glob: un-inline the Windows version to reduce header dependencies
2021-05-19 17:41:23 +02:00
Max Kellermann
16c38c438f
fs/Glob: use defaulted move constructor
2021-05-19 17:40:23 +02:00
Max Kellermann
48cc4a6ced
fs/Glob: remove redundant #ifdefs
2021-05-19 17:40:03 +02:00
Max Kellermann
a169a05e41
win32, ...: avoid including windows.h
...
Include the most specific header documented by MSDN instead.
2021-05-19 17:25:32 +02:00
Max Kellermann
a6cb3139db
meson.build: disable Windows header features not needed by MPD
2021-05-19 17:16:16 +02:00
Max Kellermann
239a83324e
meson.build: document Windows definitions
2021-05-19 17:15:25 +02:00
Max Kellermann
8efa5c7641
output/wasapi: use "%lu" in log calls
...
"%lu" is portable - it works with both POSIX and Microsoft flavors.
Fixes a part of https://github.com/MusicPlayerDaemon/MPD/issues/1150
2021-05-19 17:10:49 +02:00
Max Kellermann
28e7be248f
util/RuntimeError: disable -Wformat-security as a kludge
2021-05-19 14:57:20 +02:00
Max Kellermann
e016cc8940
lib/upnp/meson.build: auto-disable UPnP without CURL/expat
2021-05-19 14:37:13 +02:00
GrimReaperFloof
34f636ffc3
Change WritableBuffer<uint8_t> to AllocatedArray<std::byte>
2021-05-19 09:54:06 +02:00
GrimReaperFloof
a134f692bf
Code deduplication: move mod_loadfile() into ModCommon.cxx
2021-05-19 09:53:39 +02:00
Max Kellermann
d747576793
Merge branch 'npu' of git://github.com/neheb/MPD
2021-05-19 09:48:12 +02:00
Max Kellermann
d9578f6427
Merge branch 'flac-ogg' of git://github.com/jprjr/VGMPD
2021-05-19 09:33:42 +02:00
Max Kellermann
b2cec7a0a3
Merge branch 'v0.22.x'
2021-05-19 08:09:05 +02:00
Max Kellermann
85db2d6704
db/proxy: split search into chunks to avoid exceeding the output buffer
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1130
2021-05-19 08:04:50 +02:00
Max Kellermann
22ebb2bdd5
db/proxy: send "window" as separate parameter to SendConstraints()
2021-05-19 07:51:48 +02:00
Max Kellermann
e108568082
db/proxy: require libmpdclient 2.11 or later
...
Remove lots of #ifdefs.
2021-05-19 07:46:42 +02:00
Max Kellermann
360381e65d
doc/plugins.rst: mention the minimum MPD version
2021-05-19 07:46:42 +02:00
Max Kellermann
3ead778664
doc/plugins.rst: add libmpdclient website link
2021-05-19 07:45:47 +02:00
Max Kellermann
4fc08e39b4
db/proxy: require MPD 0.20 or later
...
Allows using ranges, always. This is required to fix
https://github.com/MusicPlayerDaemon/MPD/issues/1130 without adding
more runtime conditionals.
2021-05-19 07:41:04 +02:00
Max Kellermann
c3f9b38c97
command/PlaylistCommands: pass real_uri to LookupRemoteTag()
...
For querying tags, the real song URI should be used, because if the
(display) URI is different, requesting it will not produce a usable
response. This is a theoretical problem because none of the existing
playlist plugins sets the real_uri.
This requires changing the URI comparison in playlist::TagModified().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1154
2021-05-18 21:35:09 +02:00
Max Kellermann
dbb18a401b
command/file: cache the last "albumart" file
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1156
2021-05-18 17:04:09 +02:00
Max Kellermann
e1e41708af
input/LastInputStream: new class
2021-05-18 17:04:09 +02:00
Max Kellermann
a2bdac571a
Merge branch 'v0.22.x'
2021-05-17 19:33:15 +02:00
Max Kellermann
638dfc3981
{input,storage}/curl: set CURLOPT_HTTPAUTH=CURLAUTH_BASIC
...
With the default value CURLAUTH_ANY, libcurl needs to probe for
authentication methods first, and only the second request will have an
Authorization header.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1155
2021-05-17 19:26:05 +02:00
Max Kellermann
7c09e44ad4
python/build/libs.py: update OpenSSL to 3.0.0-alpha16
2021-05-17 18:42:05 +02:00
Max Kellermann
365b798f33
python/build/libs.py: update FFmpeg to 4.4
2021-05-17 18:42:05 +02:00
Max Kellermann
6f51d910ee
python/build/libs.py: update CURL to 7.76.1
2021-05-17 18:42:05 +02:00
Max Kellermann
1215818572
doc/meson.build: remove "upload" target
...
Since we migrated to readthedocs.io, we don't need this target
anymore. And Meson 0.58.0 apparently has a change breaking this
target.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1161
2021-05-17 18:33:00 +02:00
John Regan
87fa6bca54
flac encoder: enable Ogg FLAC and Ogg chaining
...
refactors GenerateOggSerial into a generic GenerateSerial
utility, under the util lib.
libFLAC may be encoded without Ogg support. If Ogg support is disabled,
libFLAC will still export Ogg-related methods (like setting a serial
number), and throw a runtime error when initializing an Ogg stream.
GenerateOggSerial does not depend on libogg. Refactoring it into
a generic GenerateSerial prevents having to add build-time checks
for libogg within the FLAC encoder plugin.
2021-05-15 11:31:01 -04:00
Max Kellermann
c3226a3195
doc/conf.py: Copyright 2021
2021-05-11 17:57:14 +02:00
Max Kellermann
51671af5a4
doc/conf.py: move "~git" suffix to release
2021-05-11 17:52:24 +02:00
Max Kellermann
2908f6565b
doc/conf.py: update version number to 0.23~git
2021-05-11 17:49:26 +02:00
skidoo23
514ed33a02
python/build: update Boost URL and version
2021-05-11 13:11:16 +02:00
GrimReaperFloof
a0334d1d94
Add resampling mode setting to modplug decoder
2021-05-07 19:48:52 +02:00
Max Kellermann
bfed47b82d
.travis.yml: switch the OSX build to xcode11.6
...
The clang/libc++ version in xcode10.3 does not support C++17 properly
and cannot build MPD.
2021-04-28 13:40:36 +02:00
Max Kellermann
8c51440057
test/test_mixramp: workaround for -Wdouble-promotion
2021-04-28 13:00:42 +02:00
Max Kellermann
018858ec97
.travis.yml: install standard Homebrew GTest formula
2021-04-27 16:23:23 +02:00
Max Kellermann
3c1988b68f
.travis.yml: switch from Ubuntu Bionic to Ubuntu Focal (20.04)
2021-04-27 16:23:23 +02:00
Max Kellermann
5452428d69
.travis.yml: switch to ppa:ricotz/toolchain for ninja 1.8 on Ubuntu Trusty
...
The old "ppa:mstipicevic/ninja-build-1-7-2" just provides ninja 1.7
which is too old and breaks the build.
2021-04-27 16:23:23 +02:00
Max Kellermann
d6bf6e161a
.travis.yml: remove obsolete comment
2021-04-27 15:48:19 +02:00
Max Kellermann
a71b76bb3c
test/test_pcm_format: another workaround for -Wdouble-promotion
2021-04-26 23:25:36 +02:00
Max Kellermann
c1429500b2
test/test_pcm_format: work around -Wdouble-promotion
2021-04-26 22:21:12 +02:00
Max Kellermann
0f02bbc2fe
output/jack: enable on Windows
...
This enables the JACK output plugin on Windows, but doesn't link
against libjack64.dll, instead loads the DLL at runtime with
LoadLibrary(). This kludge avoids the extremely fragile JACK shared
memory protocol by using the system's libjack64.dll, without requiring
the same DLL at build time.
2021-04-26 21:47:20 +02:00
Max Kellermann
b885f358a5
output/control: add missing nullptr checks
...
Fixes crash when pausing the default partition after an output was
moved to another partition.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1147
2021-04-26 21:34:58 +02:00
Max Kellermann
423f2df5e0
pcm/Volume: drop support for GCC older than 8
2021-04-20 20:01:43 +02:00
Max Kellermann
0122dc8452
util/BindMethod: drop support for GCC older than 7
2021-04-20 20:01:08 +02:00
Max Kellermann
650a30d794
Revert "tag/Pool: use strncmp() without strlen() to compare strings"
...
This reverts commit 1532983fb5 . This
optimization was bad because now all strings match if they are a
prefix of another string, and this caused collisions in the tag string
pool, corrupting the database.
2021-04-15 16:15:44 +02:00
Max Kellermann
1dc71f383a
python/build/boost.py: touch boost/version.hpp to avoid reinstalling all the time
2021-04-07 13:50:05 +02:00
Max Kellermann
95ad1b0cc6
use [[gnu::pure]] instead of gcc_pure
...
This is semi-standard and doesn't require the util/Compiler.h header.
2021-04-06 14:09:21 +02:00
Max Kellermann
52f46b94e9
util/AllocatedString: add concatenating constructor
2021-04-06 14:06:16 +02:00
Max Kellermann
e07e0bc9c1
util/AllocatedArray: include cleanup
2021-04-06 14:05:29 +02:00
Max Kellermann
4a1c231734
net/SocketError: use constexpr
2021-04-06 13:59:58 +02:00
Max Kellermann
fd0e958e95
net/SocketError: use auto
2021-04-06 13:58:46 +02:00
Max Kellermann
3d814115c8
net/SocketError: change "const" to "pure"
2021-04-06 13:58:32 +02:00
Max Kellermann
ca726a0110
util/StringBuffer: make capacity() static
...
This allows using it in constant expressions.
2021-04-06 13:46:07 +02:00
Max Kellermann
e01710cbd1
util/DereferenceIterator: simplify operator->()
...
This makes it compatible with containers storing std::unique_ptr.
2021-04-06 13:45:32 +02:00
Max Kellermann
c87a4a7d08
util/DereferenceIterator: fix static_cast in operator->()
2021-04-06 13:45:10 +02:00
Max Kellermann
b59170b702
Java/Exception: simplify RethrowException()
2021-04-06 13:35:59 +02:00
Max Kellermann
a237db556a
java/File: add non-static GetAbsolutePath() overload
2021-04-06 13:35:59 +02:00
Max Kellermann
285ba54fe5
java/String: remove unnecessary env parameter
2021-04-06 13:35:59 +02:00
Max Kellermann
ee86434a89
java/String: add const
2021-04-06 13:35:59 +02:00
Max Kellermann
95d5efbfe6
java/Ref: add nullptr comparison
2021-04-06 13:35:59 +02:00
Max Kellermann
c33f206ce8
java/Ref: add nullptr constructor
2021-04-06 13:29:35 +02:00
Max Kellermann
2d95ac2e94
Java/String: inherit the super class constructor
2021-04-06 13:29:24 +02:00
Max Kellermann
f58c14a74a
Java: no namespace indent
2021-04-06 13:29:13 +02:00
Max Kellermann
a52ce7bb7b
java/Ref: add move operator
2021-04-06 13:27:11 +02:00
Max Kellermann
16d187b7ed
java/Ref: remove const, add default initialiser
2021-04-06 13:26:54 +02:00
Max Kellermann
296ec4d07c
java/Ref: add nullptr check to destructor
...
May allow the compiler to optimize calls away.
2021-04-06 13:26:29 +02:00
Max Kellermann
6e58fd1583
lib/curl/Multi: reword API documentation
2021-03-29 20:19:21 +02:00
Max Kellermann
c5fec4ac2a
lib/curl/Multi: move operator bool() down
2021-03-29 20:19:21 +02:00
Max Kellermann
fe2ca1ddef
lib/curl/Multi: rename parameters
2021-03-29 20:19:19 +02:00
Jean-Francois Dockes
e960626804
Add npupnp support
...
libnpupnp is a C++ modification of libupnp.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-03-26 14:14:58 -07:00
Simon Persson
7dd2dce6ad
Support new tags in proxy plugin
...
Add support for the following tags when using the proxy database plugin:
WORK
CONDUCTOR
LABEL
GROUPING
MUSICBRAINZ_WORKID
COMPOSERSORT
ENSEMBLE
MOVEMENT
MOVEMENTNUMBER
LOCATION
2021-03-24 20:59:54 +01:00
Max Kellermann
a7ba10423d
Merge branch 'v0.22.x'
2021-03-13 08:41:10 +01:00
John Regan
6dfebf7df9
gme: add support for rsn files
...
Upcoming release of game-music-emu will support it, details here: https://bitbucket.org/mpyne/game-music-emu/pull-requests/23/rsn-support
2021-03-13 08:40:25 +01:00
Shen-Ta Hsieh
4bcdcca7f5
output/wasapi: use calculated new buffer instead old one
2021-03-13 08:39:56 +01:00
bitkeeper
c08a8581ee
Added cross-origin header to http headers of the http output.
...
The current http output doesn't provide a header for cross-origin support. This prevents to use the mpd http stream directly from an other webapplication due the origin from the webpage differs from then the audio stream.
The fix is to add the following header to the http response:
Access-Control-Allow-Origin: *
2021-03-10 21:27:19 +01:00
Simon Persson
8f1e7385b7
Add tags relevant to classical music.
...
This commit adds some tags that are (mostly) interesting for listeners
of classical music.
Ensemble
--------
This is an ensemble that is playing the music, such as Wiener
Philharmoniker. The tag can be used to distinguish the ensemble from the
conductor, composer, soloist, and ensemble, that are generally all in
the "ARTIST" tag.
Movement
-------
The movement number and movement (name) of this track, i.e. "II" and
"Allegro".
ComposerSort
------------
Allows us to look for Beethoven's 9th under B, for Beethoven, not L for
Ludwig.
Location
--------
This is the location of the recording, e.g. "Wiener Musikverein".
2021-03-10 21:24:25 +01:00
Max Kellermann
25354b9d8c
Merge branch 'v0.22.x'
2021-03-10 21:06:12 +01:00
Max Kellermann
25b0194036
output/wasapi: implement Drain()
2021-03-10 21:05:48 +01:00
Max Kellermann
77fe727e69
output/wasapi: move the "is_started" flag to class WasapiOutputThread
2021-03-10 20:43:28 +01:00
Max Kellermann
73f9824ddf
output/wasapi: eliminate friend declaration
2021-03-10 20:38:41 +01:00
Max Kellermann
1fe0c673bc
output/wasapi: implement Cancel() properly
...
Calling consume_all() is illegal in the producer thread.
2021-03-10 20:38:27 +01:00
Max Kellermann
8a045207a7
output/wasapi: add field paused
...
Fixes bogus Delay() results at the start of playback, because Delay()
thinks the output is paused.
2021-03-10 20:09:37 +01:00
Max Kellermann
fe7c5a4208
output/wasapi: initialize is_started in Open()
2021-03-10 20:07:22 +01:00
Max Kellermann
8024f7e84d
output/wasapi: move the thread->Play() call right before the consumed_size check
...
Fixes a bogus assertion failure (which can now be removed).
2021-03-10 20:07:19 +01:00
Max Kellermann
14f0134097
output/wasapi: make device_config const
2021-03-10 20:05:14 +01:00
Max Kellermann
1da27be84d
output/wasapi: move runtime fields below configuration fields
2021-03-10 20:00:08 +01:00
Max Kellermann
08135f2cb7
output/wasapi: make configuration fields const
2021-03-10 19:58:33 +01:00
Max Kellermann
5907656bbb
output/wasapi: stop the IAudioClient while paused
...
Instead of generating silence, do nothing, don't waste CPU time.
2021-03-10 17:48:49 +01:00
Max Kellermann
2ac2bd26f8
output/wasapi: combine two if statements to one switch
2021-03-10 17:45:54 +01:00
Max Kellermann
a2be91aea5
output/wasapi: add method WasapiOutputThread::InterruptWaiter()
2021-03-10 17:42:26 +01:00
Max Kellermann
579428172e
output/wasapi: remove the broken Delay() calculation code
...
This code is complicated - and broken: the producer thread is not
allowed to call consumer methods. Also the code is not necessary
because this plugin implements Interrupt().
2021-03-10 17:39:07 +01:00
Max Kellermann
3e484637f9
output/wasapi: rename OpenDevice() to ChooseDevice()
...
OpenDevice was a confusing name because it does not actually open a
device.
2021-03-10 17:34:10 +01:00
Max Kellermann
3e93c392d7
output/wasapi: make enumerator a local variable
2021-03-10 17:23:41 +01:00
Max Kellermann
0a97e68aa9
output/wasapi: start after the buffer has been filled
...
Postpone the Start() call until there is something to be played.
2021-03-08 23:03:25 +01:00
Max Kellermann
69783a44c8
output/wasapi: move Start()/Stop() calls to WasapiOutputThread::Work()
2021-03-08 22:58:20 +01:00
Max Kellermann
d72263d28d
win32/HResult: support AUDCLNT_E_NOT_{INITIALIZED,STOPPED}
2021-03-08 22:57:44 +01:00
Max Kellermann
24a205a1aa
win32/HResult: try to use FormatMessage()
2021-03-08 22:54:46 +01:00
Max Kellermann
3a948515ce
output/wasapi: check for exceptions after Wait()
...
This finishes problems which occur early in the WasapiOutputThread;
previously, the error was ignored and the output blocked forever
without doing anything (and without reporting the error).
2021-03-08 22:46:40 +01:00
Max Kellermann
9ade93983c
output/wasapi: rename method WaitDataPoped() to Wait()
2021-03-08 22:44:49 +01:00
Max Kellermann
6931ce9558
output/wasapi: make the Thread a field, not a base class
2021-03-08 22:30:19 +01:00
Max Kellermann
d6fb07a3e4
output/wasapi: start the WasapiOutputThread in its constructor
2021-03-08 22:29:33 +01:00
Max Kellermann
01d3c2705e
output/wasapi: Finish() calls Join()
2021-03-08 22:28:36 +01:00
Max Kellermann
29346dc9c5
output/wasapi: remove the thread management code from DoDisable()
...
This is duplicate; this has already been done in Close().
2021-03-08 22:27:46 +01:00
Max Kellermann
d19b3df3b0
test/run_output: call AudioOutput::Drain()
2021-03-08 22:20:55 +01:00
Max Kellermann
798e68ef62
output/wasapi: don't clear the exception in CheckException()
...
This is pointless; the method cannot be called again anyway.
2021-03-08 22:18:48 +01:00
Max Kellermann
79397db5b4
output/wasapi: remove the "thrown" field
...
It is pointless to let WasapiOutputThread wait for the
CheckException() call.
2021-03-08 22:17:45 +01:00
Max Kellermann
9256190a9b
output/wasapi: move catch block to the Work() function level
...
If an exception has been caught, the method cannot continue playback,
therefore it doesn't make sense to have the "catch" block inside the
"while" block (and not break the loop after catching an exception).
2021-03-08 22:15:36 +01:00
Max Kellermann
3a0dbb0a67
output/wasapi: make WasapiOutputThread::is_exclusive const
2021-03-08 22:09:23 +01:00
Max Kellermann
3d6c9d1b88
output/wasapi: catch all exception
2021-03-08 22:06:29 +01:00
Max Kellermann
5823e79fe7
output/wasapi: remove broken Drain() implementation
...
The current Drain() implementation does what Cancel() should do; it
does not wait for completion, but instead discards the buffer.
2021-03-08 21:41:34 +01:00
Max Kellermann
5f656dffda
output/wasapi: implement Cancel()
2021-03-08 19:58:15 +01:00
Max Kellermann
34d4d9157a
output/wasapi: add inline
2021-03-08 19:57:40 +01:00
Max Kellermann
22c329cdb4
output/wasapi: convert pointer to reference
2021-03-08 19:56:56 +01:00
Max Kellermann
980ef82216
output/wasapi: move SetEventHandle() call to thread constructor
2021-03-08 17:52:44 +01:00
Max Kellermann
84a06a72df
output/wasapi: fix coding style
2021-03-08 17:52:43 +01:00
Max Kellermann
4833d0891d
output/wasapi: eliminate kErrorId
2021-03-08 17:47:07 +01:00
Max Kellermann
cd53ca22c6
output/wasapi: remove unused function SafeTry()
2021-03-08 17:43:36 +01:00
Max Kellermann
4d9af9a81b
test/run_{input,output,convert}: switch file descriptors to binary mode
...
Fixes those programs on Windows.
2021-03-08 17:27:23 +01:00
Max Kellermann
d61341c0e3
io/FileDescriptor: add method SetBinaryMode()
2021-03-08 17:25:36 +01:00
Max Kellermann
eff50b263a
test/run_output: use class StaticFifoBuffer
2021-03-08 17:01:48 +01:00
Max Kellermann
2bebc79363
test/run_convert: use std::byte
2021-03-08 16:58:43 +01:00
Max Kellermann
e777fb4edb
test/run_convert: pass FileDescriptor to RunConvert()
2021-03-08 16:51:57 +01:00
Max Kellermann
3fb25d4062
test/run_convert: move code to RunConvert()
2021-03-08 16:46:21 +01:00
Max Kellermann
e227596c20
test/run_output: pass FileDescriptor to run_output()
2021-03-08 16:44:15 +01:00
Max Kellermann
ec76583c33
win32/Com: add COINIT_DISABLE_OLE1DDE
...
MSDN documentation suggests always passing this flag to reduce
overhead for an "obsolete technology".
2021-03-08 14:03:33 +01:00
Max Kellermann
927f1e03a3
win32/Com: make COINIT_APARTMENTTHREADED the default constructor
2021-03-08 14:02:49 +01:00
Max Kellermann
f2c679cfec
win32/Com: remove the unused COINIT_MULTITHREADED constructor
2021-03-08 14:02:49 +01:00
Max Kellermann
6a75c48dba
win32/HResult: add MakeHResultError()
...
None of the current FormatHResultError() callers need the format string.
2021-03-08 13:46:36 +01:00
Max Kellermann
48bdd09f64
win32/ComWorker: fold class COMWorkerThread into class COMWorker
2021-03-07 18:22:59 +01:00
Max Kellermann
cf108c389f
win32/ComWorker: remove parameter passing from Async()
...
Parameters should better be captured. This removes some complexity
from Async().
2021-03-07 18:20:59 +01:00
Max Kellermann
90d97053a8
win32/ComWorker: make COMWorker a real class, no static members
2021-03-06 20:46:29 +01:00
Max Kellermann
ee720064a7
Merge branch 'v0.22.x'
2021-03-05 19:41:17 +01:00
Shen-Ta Hsieh
e1fe9ebcd6
output/wasapi: Add dop support for WASAPI
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1102
2021-03-05 19:40:32 +01:00
Max Kellermann
e1b62fb90d
Merge branch 'v0.22.x'
2021-03-05 19:33:46 +01:00
Max Kellermann
93016ac6ab
output/wasapi: check AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED
...
Stop early, don't try more formats if it is clear that we have no
chance.
2021-03-05 19:33:38 +01:00
Max Kellermann
fc20a1f10a
output/wasapi: EnumerateDevices() logs, no std::vector
2021-03-05 19:27:52 +01:00
Max Kellermann
a4257e51d5
output/wasapi: reimplement SearchDevice() without EnumerateDevices()
2021-03-05 19:25:42 +01:00
Max Kellermann
2f2b3f1cdc
output/wasapi: SearchDevice() returns IMMDevice
2021-03-05 19:25:42 +01:00
Max Kellermann
2ff6a9ad2b
output/wasapi: GetDevice() returns IMMDevice
2021-03-05 19:25:42 +01:00
Max Kellermann
17d4873b60
output/wasapi: use default device only if none was configured
2021-03-05 19:25:42 +01:00
Max Kellermann
8b41c4f384
output/wasapi: release the COMWorker if OpenDevice() fails
...
Fixes assertion failure in the Thread destructor.
2021-03-05 19:25:42 +01:00
Max Kellermann
17f7098e27
output/wasapi: SafeTry() catches all exceptions
...
Fixes crash due to std::stoul() throwing std::invalid_argument.
2021-03-05 19:12:22 +01:00
Max Kellermann
9ff790b7bb
output/wasapi: move COM utilities to separate headers
2021-03-05 18:33:31 +01:00
Max Kellermann
ebc1fe2821
win32/ComPtr: operator*() returns reference
2021-03-05 17:39:48 +01:00
Max Kellermann
bc2988144e
test/run_output: use OptionParser, add option "--verbose"
2021-03-05 17:39:48 +01:00
Max Kellermann
b1a9958c66
test/run_output: add struct CommandLine
2021-03-05 17:39:48 +01:00
Max Kellermann
e6a81bb95c
output/wasapi: split the header
...
Reduce header dependencies.
2021-03-05 16:43:44 +01:00
Max Kellermann
9521c1ad58
output/wasapi: use forward declarations in the header
2021-03-05 16:42:38 +01:00
Max Kellermann
6d65cc48d7
output/wasapi: use [[gnu::pure]]
2021-03-05 16:42:15 +01:00
Max Kellermann
681956a963
output/wasapi: include cleanup
2021-03-05 16:42:14 +01:00
Max Kellermann
052f64d648
output/wasapi: include config.h for ENABLE_DSD
2021-03-05 16:35:21 +01:00
Max Kellermann
afe621c25c
output/wasapi: move to separate directory
2021-03-05 16:28:36 +01:00
Max Kellermann
422cf5f182
Merge branch 'v0.22.x'
2021-03-05 16:05:56 +01:00
Max Kellermann
637cf8a039
win32/WinEvent: add default value to Wait()
2021-03-05 16:05:32 +01:00
Max Kellermann
2011a6e2ee
win32/WinEvent: un-inline the constructor
...
Reduce header dependencies.
2021-03-05 16:01:23 +01:00
Max Kellermann
d54830de12
thread/WindowsFuture: include cleanup
2021-03-05 13:50:16 +01:00
Max Kellermann
a7e7312cca
win32/HResult: un-inline HResultCategory::message()
2021-03-05 13:40:40 +01:00
Max Kellermann
6b83fc6b57
win32/HResult: un-inline FormatHResultError()
...
Reduce header dependencies.
2021-03-05 13:40:38 +01:00
Max Kellermann
74f9e07151
win32/HResult: include cleanup
2021-03-05 13:40:37 +01:00
Max Kellermann
82a61ab3be
win32/meson.build: fix syntax error
2021-03-05 13:40:34 +01:00
Max Kellermann
54c1794cee
win32: build static library
...
Fixes linker failure on test/run_output.exe
2021-03-05 13:32:58 +01:00
Max Kellermann
c962a6be76
test/run_convert: fix Windows compiler errors
2021-03-05 13:24:28 +01:00
Max Kellermann
922c4bf3f0
test/TestLookupFile: fix Windows compiler errors
2021-03-05 13:22:34 +01:00
Max Kellermann
932756efce
win32/ComWorker: fix the FormatHResultError() return type
...
Casting to std::runtime_error loses information (and prevents RVO).
2021-03-05 13:17:40 +01:00
Max Kellermann
7838265482
win32/ComWorker: remove debug log messages
2021-03-05 13:16:09 +01:00
Max Kellermann
b14b0e5634
win32/ComWorker: reorder includes
2021-03-05 13:15:45 +01:00
Max Kellermann
4d2d0e7bb8
win32/ComWorker: include cleanup
2021-03-05 13:15:21 +01:00
Rosen Penev
44378b7dbe
use structured binding declarations
...
Shorter.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-03-04 20:28:02 +01:00
Max Kellermann
ef1acb4e2f
Merge branch 'v0.22.x'
2021-03-04 18:56:29 +01:00
Shen-Ta Hsieh
da642b2890
src/output: add algorithm for finding usable AudioFormat
...
* Use PcmExport for 24bit packed output
2021-03-04 18:53:58 +01:00
Shen-Ta Hsieh
6f77af20d0
src/output: Set fallback setting for DSD
2021-03-04 18:50:56 +01:00
Shen-Ta Hsieh
010f65a1d6
src/output: Add Interrupt interface
2021-03-04 18:50:09 +01:00
Shen-Ta Hsieh
c46f97454a
src/output: Reopen device on error
2021-03-04 18:49:28 +01:00
Shen-Ta Hsieh
844dbd2ec5
src/output: Use WinEvent for as a condition_variable without lock
2021-03-04 18:46:26 +01:00
Shen-Ta Hsieh
db7caa2dac
src/output: Move event and spsc_queue into thread object
2021-03-04 18:45:56 +01:00
Shen-Ta Hsieh
2974737746
src/win32: Add ComWorker to run all COM function on same thread
2021-03-04 18:43:43 +01:00
Shen-Ta Hsieh
b1d7567226
win32: Add ComWorker to run all COM function on same thread
2021-03-04 18:43:16 +01:00
Max Kellermann
5103eb3039
meson.build: compile Win32Main.cxx only on Windows
2021-03-04 18:43:00 +01:00
Shen-Ta Hsieh
0cccdcf9b2
src/win32: Add support for COINIT_APARTMENTTHREADED
2021-03-04 18:37:56 +01:00
Shen-Ta Hsieh
22b840c2f1
win32/Com: use if with init-statement
2021-03-04 18:37:35 +01:00
Shen-Ta Hsieh
ed1a995bff
thread: Add Future implement for mingw32 without pthread
2021-03-04 18:26:46 +01:00
Shen-Ta Hsieh
0f39dc1edb
output/wasapi: use AUDCLNT_BUFFERFLAGS_SILENT for paused output
2021-03-04 18:17:57 +01:00
Max Kellermann
dc9103befe
util/AllocatedString: remove Null(), IsNull()
2021-03-04 18:05:29 +01:00
Max Kellermann
67760f5283
util/AllocatedString: support casting a nulled instance to string_view
2021-03-04 18:05:29 +01:00
Max Kellermann
99405a4c93
util/AllocatedString: add operator=()
2021-03-04 18:05:26 +01:00
Max Kellermann
b833c5d2c7
util/AllocatedString: replace Clone() with copy constructor
2021-03-04 18:04:21 +01:00
Max Kellermann
bca5d79f88
util/AllocatedString: add const_pointer constructor
2021-03-04 18:04:17 +01:00
Max Kellermann
6e1c8edf09
util/AllocatedString: add string_view constructor
...
Replaces the static Duplicate() method.
2021-03-04 18:04:11 +01:00
Max Kellermann
32b7b2e2fa
util/AllocatedString: add default constructor
2021-03-04 18:04:06 +01:00
Max Kellermann
cfb7f8ab84
util/AllocatedString: rename to BasicAllocatedString
...
To make things simpler, AllocatedString is now a non-template class.
2021-03-04 18:03:56 +01:00
Max Kellermann
d4bbb8c851
Merge branch 'struc' of git://github.com/neheb/MPD
2021-03-04 17:50:53 +01:00
Érico Rolim
8d80280ab9
time/ISO8601: don't use glibc extension in strptime.
...
Per the manual for strptime, %F is equivalent %Y-%m-%d, so use that
directly.
2021-03-04 17:49:51 +01:00
Érico Rolim
c95e3dc065
storage/plugins/CurlStorage: don't use glibc extension in
...
ParseTimePoint.
%Z is a glibc extension to strptime, and is a no-op there, due to the
mapping between timezone names and their definition (especially when the
name comes from a different machine) being ambiguous / impossible. Time
in HTTP headers is guaranteed to be UTC.
Passing an unknown format to strptime() implementations that don't
support it will generally cause them to return NULL, which will lead to
ParseTimePoint throwing an exception and ParseTimeStamp using an
unnecessary fallback.
Since the timezone name goes at the end of the string, we don't need to
use %Z to skip it (could be an issue in a different time stamp format),
so simply removing %Z works best.
2021-03-04 17:48:23 +01:00
Max Kellermann
428f769c38
output/pipewire: new output plugin
...
Very rough draft. Barely works.
2021-03-03 18:44:39 +01:00
Max Kellermann
133c8834df
output/httpd: update API documentation
2021-03-02 18:24:57 +01:00
Max Kellermann
99217593bf
test/util/TestIntrusiveList: add AutoUnlink test
2021-03-02 18:15:37 +01:00
Max Kellermann
1c6e4a2b18
test/util/TestIntrusiveList: new unit test
2021-03-02 18:12:15 +01:00
Max Kellermann
a6eb264770
util/IntrusiveList: add type alias "Hook"
...
By casting to SafeLinkIntrusiveListHook if appropriate, this fixes a
bug in the erase() method, where erase() calls
IntrusiveListHook::unlink() instead of
SafeLinkIntrusiveListHook::unlink().
2021-03-02 17:51:50 +01:00
Max Kellermann
f5f296b13a
event/TimerWheel: add a "ready" list as a special case
...
This reduces delays of zero-duration timers from up to 1 second to
zero. libavahi-client schedules zero-duration timers often.
2021-03-02 17:14:33 +01:00
Max Kellermann
0091c4e12b
util/Exception: add FindNested()
2021-03-02 17:13:29 +01:00
Max Kellermann
80172e17ac
util/Exception: remove redundant std::exception catch clause
...
The "std::nested_exception" catch block already covers this perfectly.
2021-03-02 17:13:21 +01:00
Max Kellermann
2d96b05403
test/util/TestException: add CheckFindRetrowNested() unit test
2021-03-02 17:12:43 +01:00
Max Kellermann
ec0c1f0d02
util/Exception: fix comment typo
2021-03-02 17:12:20 +01:00
Max Kellermann
00a520a4c3
doc/user.rst: update Windows&Android build dependencies
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1112
2021-02-26 00:59:10 +01:00
Max Kellermann
946b3c1f80
util/IntrusiveList: add method erase_and_dispose()
2021-02-25 14:12:47 +01:00
Max Kellermann
a0dc398f36
util/IntrusiveList: erase() returns an iterator
2021-02-25 14:12:39 +01:00
Max Kellermann
b54d2d984a
util/IntrusiveList: use ToHook() in erase()
2021-02-25 14:12:10 +01:00
Max Kellermann
4ab73f9de9
util/IntrusiveList: add missing ToNode() cast in iterator_to()
2021-02-25 14:10:55 +01:00
Max Kellermann
5ebe23e4bb
db/upnp/Discovery: use class IntrusiveList
2021-02-24 20:39:42 +01:00
Max Kellermann
aa227cded1
input/qobuz: use class IntrusiveList
2021-02-24 20:31:47 +01:00
Max Kellermann
e406bdbb80
input/tidal: use class IntrusiveList
2021-02-24 20:31:13 +01:00
Max Kellermann
1048f23680
util/IntrusiveList: add hook class SafeLinkIntrusiveListHook
...
Similar to boost::intrusive::safe_link.
2021-02-24 20:29:16 +01:00
Max Kellermann
8fe8f09027
util/IntrusiveList: add noexcept
2021-02-24 20:17:28 +01:00
Max Kellermann
78670c0941
util/IntrusiveList: add constexpr
2021-02-24 20:16:54 +01:00
Max Kellermann
34f735890e
output/snapcast: remove obsolete TODO comment
2021-02-24 17:05:14 +01:00
Max Kellermann
f08810b202
output/snapcast: add missing #ifdef HAVE_ZEROCONF
2021-02-24 17:04:15 +01:00
Max Kellermann
7a68775e6c
output/snapcast: Zeroconf support
2021-02-24 17:03:30 +01:00
Max Kellermann
e4fccc85c8
Main: move Zeroconf to the I/O thread
...
This will allow using Zeroconf in output plugins (preparing for
Snapcast with Zeroconf).
2021-02-24 16:29:33 +01:00
Max Kellermann
2efa142ec9
output/init: use the real-time I/O thread only for the ALSA plugin
2021-02-24 16:09:11 +01:00
Max Kellermann
29b49dd630
zeroconf/{bonjour,avahi}: pass service_type as parameter
2021-02-24 15:11:11 +01:00
Max Kellermann
9d6bf7e720
test/run_avahi: refactor to RunZeroconf (both avahi and bonjour)
2021-02-24 15:09:10 +01:00
Max Kellermann
5f34508aae
zeroconf/Glue: move code to the ZeroconfHelper constructor
2021-02-24 15:09:10 +01:00
Max Kellermann
2d8ecd561b
zeroconf: return a publisher object
2021-02-24 15:09:10 +01:00
Max Kellermann
2059195ae9
zeroconf: add dependency on event_dep
2021-02-24 15:09:10 +01:00
Max Kellermann
d89856f77b
zeroconf/avahi/Helper: make class SharedAvahiClient final
2021-02-24 15:09:10 +01:00
Max Kellermann
975d5be046
zeroconf/avahi/Init: return a std::unique_ptr<AvahiHelper>
2021-02-24 14:41:37 +01:00
Max Kellermann
b01ef1b9a6
zeroconf/Bonjour: return a std::unique_ptr<BonjourHelper>
2021-02-24 14:25:06 +01:00
Max Kellermann
ceb76b6a82
zeroconf/Bonjour: pass a context pointer to the callback
2021-02-24 14:18:35 +01:00
Max Kellermann
a7e697b588
zeroconf/Bonjour: add const
2021-02-24 14:18:17 +01:00
Max Kellermann
3ecd918442
zeroconf/Bonjour: move the DNSServiceRegister() call to the constructor
2021-02-24 14:17:59 +01:00
Max Kellermann
4fbdb3a2d5
zeroconf/Bonjour: convert the callback function to a method
2021-02-24 14:15:26 +01:00
Max Kellermann
0157643667
zeroconf/Glue: add noexcept
2021-02-24 14:15:26 +01:00
Max Kellermann
fe741bd767
zeroconf/Glue: allow ZeroconfInit() to throw
2021-02-24 14:15:04 +01:00
Max Kellermann
06b9bdba2c
zeroconf/Bonjour: disallow copying
2021-02-24 13:53:36 +01:00
Max Kellermann
bd0aa74bdd
zeroconf/Bonjour: rename class BonjourMonitor to BonjourHelper
2021-02-24 13:53:35 +01:00
Max Kellermann
47461df59c
zeroconf/Bonjour: don't call DNSServiceRefDeallocate() if DNSServiceRegister() fails
...
According to
https://developer.apple.com/documentation/dnssd/1804733-dnsserviceregister
the DNSServiceRef is initialized only if DNSServiceRegister() returns
kDNSServiceErr_NoError. The faulty error handling code could
therefore crash.
2021-02-24 13:49:03 +01:00
Max Kellermann
04d5588fe5
zeroconf/Zeroconf*: drop prefix from file names
2021-02-24 13:33:59 +01:00
Max Kellermann
40d061621b
zeroconf/Avahi: remove useless log messages
2021-02-24 13:33:58 +01:00
Max Kellermann
a312629aad
zeroconf: pass global port to init function
2021-02-24 06:40:26 +01:00
Max Kellermann
d527d4b530
zeroconf/avahi/Publisher: new class, replacing lots of code from ZeroconfAvahi.cxx
2021-02-23 22:07:57 +01:00
Max Kellermann
978d2638d8
zeroconf/avahi/Client: new class, replacing lots of code from ZeroconfAvahi.cxx
2021-02-23 21:53:07 +01:00
Max Kellermann
cfcafdf822
zeroconf/avahi: add class AvahiGlue
2021-02-23 21:53:00 +01:00
Max Kellermann
07865d0707
zeroconf/avahi/Poll: move to namespace Avahi
2021-02-23 21:41:16 +01:00
Max Kellermann
1ac16516a1
event/TimerList: add option to avoid the Boost dependency
2021-02-22 23:35:16 +01:00
Max Kellermann
75e8795e3f
util/IntrusiveList: add method insert()
2021-02-22 23:32:51 +01:00
Max Kellermann
4912466d50
util/IntrusiveList: add method erase()
2021-02-22 23:32:47 +01:00
Max Kellermann
664674913e
event/Loop: include cleanup
2021-02-22 23:32:39 +01:00
Max Kellermann
31e3658823
Merge branch 'v0.22.x'
2021-02-22 23:25:07 +01:00
Max Kellermann
abd416735d
output/snapcast: implement SendTag()
2021-02-22 23:20:56 +01:00
Max Kellermann
6090bd2095
lib/yajl/Gen: new class
2021-02-22 23:12:08 +01:00
Max Kellermann
1777592ec0
lib/yajl/Handle: fix API documentation
2021-02-22 22:56:52 +01:00
Max Kellermann
8e8fbe14b1
output/snapcast: implement Drain()
2021-02-22 22:49:32 +01:00
Max Kellermann
a8a39b6a38
output/snapcast: queue chunks
2021-02-22 22:41:31 +01:00
Max Kellermann
f84cb6de5e
output/snapcast/client: remove obsolete TODO comment
...
See commit dfc67c45c7
2021-02-22 22:39:32 +01:00
Max Kellermann
dfc67c45c7
output/snapcast: calculate the latency for TIME responses
2021-02-22 21:57:20 +01:00
Max Kellermann
e875da5d38
output/snapcast/protocol: swap "received" and "sent"
...
Snapcast's protocol documentation is wrong, see
https://github.com/badaix/snapcast/pull/811
2021-02-22 21:42:42 +01:00
Max Kellermann
9b9522e3f5
zeroconf/avahi/Poll: rename internal variables
2021-02-22 15:01:01 +01:00
Max Kellermann
87963685fb
zeroconf/avahi/Poll: use C++11 initializer
2021-02-22 15:00:20 +01:00
Max Kellermann
0405a57f26
zeroconf/avahi/Poll: make EventLoop the first parameter
2021-02-22 14:52:21 +01:00
Max Kellermann
f29c69d6a9
zeroconf/avahi/Poll: rename timer to event
2021-02-22 14:39:28 +01:00
Max Kellermann
7ec4de841e
zeroconf/avahi/Poll: add constexpr
2021-02-22 14:34:32 +01:00
Max Kellermann
1f08d2d03c
zeroconf/avahi/Poll: add noexcept
2021-02-22 14:31:37 +01:00
Max Kellermann
c1a695d1ac
zeroconf/avahi/Poll: add method GetEventLoop()
2021-02-22 14:31:10 +01:00
Max Kellermann
ec05056e38
zeroconf/avahi/Poll: forbid copying
2021-02-22 14:26:08 +01:00
Max Kellermann
c0b9339d31
zeroconf/AvahiPoll: move to lib/avahi/
2021-02-22 14:24:00 +01:00
Max Kellermann
6eba621045
decoder/ffmpeg: fix build problem with FFmpeg 3.4
...
Regression by commit a22d1c88d7
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1097
2021-02-22 13:36:46 +01:00
Max Kellermann
a9ad8fa505
decoder/ffmpeg: move code to IsSeekable(AVFormatContext)
2021-02-22 13:33:25 +01:00
Max Kellermann
00a1731085
Merge branch 'timeout_in_second' of git://github.com/mxjeff/MPD
2021-02-20 20:11:38 +01:00
kaliko
6e3da00874
MPD_TIMEOUT is in seconds
...
At least I believe libmpdclient is reading env. var. as second:
https://github.com/MusicPlayerDaemon/libmpdclient/blob/master/src/settings.c#L142
ncmpc manual also mentions MPD_TIMEOUT being is second.
2021-02-20 15:22:18 +01:00
kaliko
38df01b266
Add password use with MPD_HOST
2021-02-20 15:21:15 +01:00
Max Kellermann
c729f16dcd
song/DetachedSong: copy the AudioFormat from LightSong
...
Enables the "Format" row in "playlistinfo" responses.
https://github.com/MusicPlayerDaemon/MPD/issues/1094
2021-02-18 22:16:11 +01:00
Max Kellermann
81d0c04ed4
song/DetachedSong: add noexcept
2021-02-18 22:01:52 +01:00
Max Kellermann
0924b63e10
event/TimerWheel: add empty flag to optimize a common case
2021-02-17 19:52:45 +01:00
Max Kellermann
ce6afe9379
output/httpd/Page: convert to type alias on AllocatedArray
2021-02-17 18:01:27 +01:00
Max Kellermann
6f04b2230a
output/httpd/Page: use std::byte
2021-02-17 17:54:38 +01:00
Max Kellermann
8d90b831e1
output/snapcast/Timestamp: drop static
2021-02-17 14:39:20 +01:00
Max Kellermann
d4710604c4
doc/plugins.rst: fix typo
2021-02-17 14:39:06 +01:00
Max Kellermann
85427826aa
increment version number to 0.22.7
2021-02-17 14:36:06 +01:00
Max Kellermann
9c8da03c5c
output/snapcast: new output plugin
...
New experimental code, first draft - it works, but there's a lot left
to do. Just look at all the TODO comments.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/975
2021-02-17 14:25:23 +01:00
Max Kellermann
85adefd9a4
encoder/wave: remove constexpr because memcpy() is not allowed
2021-02-17 14:19:02 +01:00
Max Kellermann
22804cfbe8
Merge branch 'patch-2' of git://github.com/fschlich/MPD
2021-02-17 07:25:06 +01:00
Florian Schlichting
25e0a90402
fix typo in protocol.rst
...
Exmaple -> Example
2021-02-17 03:18:23 +01:00
Max Kellermann
8a4b88a59d
encoder/wave: use the structs from RiffFormat.hxx
2021-02-16 19:50:52 +01:00
Max Kellermann
d2371af120
encoder/wave: add static_assert on sizeof(WaveHeader)
2021-02-16 19:50:46 +01:00
Max Kellermann
aa2e1bb310
encoder/wave: refactor fill_wave_header() to function
2021-02-16 19:50:43 +01:00
Max Kellermann
6153fca4fc
tag/RiffFormat: add struct RiffFmtChunk
2021-02-16 19:50:40 +01:00
Max Kellermann
f090af0a22
tag/RiffFormat: add static_asserts on sizeof()
2021-02-16 19:50:25 +01:00
Max Kellermann
58f420fdca
tag/RiffFormat: use CamelCase
2021-02-16 19:24:51 +01:00
Max Kellermann
ded2b31fbc
tag/Riff: split into RiffId3.?xx and RiffFormat.hxx
2021-02-16 19:23:01 +01:00
Max Kellermann
75c8d2235b
util/ByteOrder: add classes PackedBE16, PackedLE16, PackedLE32
2021-02-16 17:37:25 +01:00
Max Kellermann
f679961564
Merge tag 'v0.22.6'
...
release v0.22.6
2021-02-16 13:58:47 +01:00
Max Kellermann
938728820b
release v0.22.6
2021-02-16 13:56:14 +01:00
Max Kellermann
80531ef8d8
db/simple: fix ExportedSong move constructor for non-owning sources
...
If the constructor moves from an ExportedSong instance which refers to
somebody else's "Tag" instance, the newly constructed instance will
instead refer to its own empty "tag_buffer" field. This broke
SimpleDatabase::GetSong(), i.e. all songs on the queue restored from
the state file or added using the "addid" command.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1089
2021-02-16 13:52:25 +01:00
Max Kellermann
a91fba6a3d
increment version number to 0.22.6
2021-02-16 13:47:33 +01:00
Max Kellermann
471c37be59
queue/PlaylistEdit: convert start/end parameters to RangeArg
2021-02-15 22:51:09 +01:00
Max Kellermann
157ddcbab1
protocol/RangeArg: add methods ClipRelaxed(), CheckClip(), CheckAdjustEnd()
2021-02-15 22:50:49 +01:00
Max Kellermann
ab160aa359
queue/PlaylistEdit: check "current>=0" before updating it
2021-02-15 22:50:37 +01:00
Max Kellermann
ecc07e4e98
Merge tag 'v0.22.5'
...
release v0.22.5
2021-02-15 22:50:16 +01:00
Max Kellermann
f8be403c34
release v0.22.5
2021-02-15 21:18:18 +01:00
Max Kellermann
28a5cdf319
android/meson.build: update the SDK platform to 29
...
Needed for `requestLegacyExternalStorage` (commit ca02fb7782 ).
2021-02-15 21:17:26 +01:00
Max Kellermann
6b1d264b35
command/queue: better error message for open-ended range with "move"
...
The "move" command doesn't allow open-ended ranges because they don't
make a lot of sense; moving an open-ended range is only possible if
the destination index is before the range, and in that case, the
client should be well aware how many songs there are.
Closes https://github.com/MusicPlayerDaemon/MPD/pull/1057
2021-02-15 20:57:22 +01:00
Max Kellermann
a6c10e9a1c
protocol/ArgParser: check for invalid ranges
...
Catch errors like that early, before invalid ranges get passed to
internal MPD subsystems.
2021-02-15 20:55:30 +01:00
Max Kellermann
19a46064e9
protocol/RangeArg: add methods IsWellFormed(), IsEmpty(), HasAtLeast(), Count()
2021-02-15 20:54:51 +01:00
Max Kellermann
b57eeaa720
protocol/RangeArg: add static method Single()
2021-02-15 20:29:37 +01:00
Max Kellermann
ad059d5804
protocol/RangeArg: add method IsOpenEnded()
2021-02-15 20:29:35 +01:00
Max Kellermann
6e1940e930
protocol/RangeArg: add static method OpenEnded()
2021-02-15 20:29:34 +01:00
Max Kellermann
103194e32d
protocol/RangeArg: add missing noexcept
2021-02-15 19:56:02 +01:00
Naglis Jonaitis
cbc830fd65
doc/client.rst: fix typo
2021-02-15 20:23:32 +02:00
Shen-Ta Hsieh
481c330c17
src/output: Set thread name for Wasapi output thread
2021-02-15 17:51:49 +01:00
Shen-Ta Hsieh
7ef489e057
src/win32: run clang-format
2021-02-15 17:50:51 +01:00
Shen-Ta Hsieh
d9e5d5ff5b
src/win32: Add error message for NO_ERROR
2021-02-15 17:45:25 +01:00
Max Kellermann
ca02fb7782
android/AndroidManifest.xml: enable requestLegacyExternalStorage
...
This is a workaround for the new scoped storage design in Android 11:
https://developer.android.com/about/versions/11/privacy/storage
This needs a proper solution eventually, but this quick fix will do
until we change "targetSdkVersion" to 30.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1061
2021-02-15 17:43:05 +01:00
Max Kellermann
d4d06da2f8
db/simple: fix dangling LightSong::tag reference in moved ExportedSong
...
After commit 1afa33c3c7 , an old bug was revealed:
SimpleDatabase::GetSong() constructs an ExportedSong instance by
moving the return value of Song::Export(), which causes the
LightSong::tag field to be dangling on the moved-from
ExportedSong::tag_buffer. This broke tags from CUE sheets.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1070
2021-02-15 17:38:37 +01:00
Max Kellermann
efde78db77
output/Thread: skip drain calls if there is no data to be played
...
Keep track of whether there is data being played, and don't call
AudioOutput::Drain() after Cancel() has been called already.
2021-02-15 16:39:13 +01:00
Max Kellermann
f1b8bcd6b2
output/pulse: don't drain if stream is suspended or corked
...
In this state, we can't make any progress.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1084
2021-02-15 16:07:16 +01:00
Max Kellermann
c2bc3704e1
output/pulse: move code to virtual method Drain()
...
Drain only if it was requested explicitly.
2021-02-15 15:59:54 +01:00
Max Kellermann
def120aca4
output/pulse: eliminate the pause field
...
It is useless, because we're always checking pa_stream_is_corked().
2021-02-15 15:59:46 +01:00
Max Kellermann
6d2b09ac2b
doc/developer.rst: update branch names
2021-02-15 13:41:46 +01:00
Max Kellermann
98a9f81d61
doc/client.rst: new chapter about client development
2021-02-15 13:26:25 +01:00
Max Kellermann
78b43a9930
doc/protocol.rst: document add on local socket
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1022
2021-02-15 13:00:18 +01:00
AndriiZ
f5460b35a3
Add cacert option for Curl plugin. Allows to set cacert for curl lib ( #3 )
...
Add cacert option for curl plugin
add cacert option for Curl plugin. Allows to set cacert for curl lib
Added documentation line into doc/plugins.rst with explanation for cacert option
2021-02-13 13:49:15 +02:00
Max Kellermann
3456b1e50d
use std::size_t
2021-02-12 18:39:28 +01:00
Max Kellermann
fe6abe1750
zlib/Error: add noexcept
2021-02-12 18:37:32 +01:00
Max Kellermann
6cdb3ff21e
use [[gnu::pure]] instead of gcc_pure
...
This is semi-standard and doesn't require the util/Compiler.h header.
2021-02-12 18:34:16 +01:00
Max Kellermann
01af2778ab
time/ISO8601: throw std::invalid_argument on error
...
Throwing std::runtime_error was slightly wrong.
2021-02-12 18:31:56 +01:00
Max Kellermann
ad03c70753
event/TimerWheel: workaround for GCC9 bug
2021-02-12 18:29:02 +01:00
Max Kellermann
7fe0095fa7
util/IntrusiveList: add noexcept to defaulted constructor
2021-02-11 21:22:15 +01:00
Max Kellermann
a4b236348f
Merge branch 'v0.22.x'
2021-02-07 22:04:07 +01:00
Max Kellermann
da5ff779c6
python/build/libs.py: enable CURL/schannel support on Windows
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1031
2021-02-07 21:58:08 +01:00
Max Kellermann
e7da5b104d
archive/iso9660: another fix for unaligned reads
...
Commit 79b2366387 added the field `skip`
to support unaligned reads, but set the `offset` field to a wrong
value. This resulted in miscalculation of `remaining`, causing
an assertion failure.
The fix is to assign `offset` the correct value, but consider the
`skip` value in the assertion.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1067
2021-02-07 21:41:51 +01:00
Max Kellermann
aa40aae5bd
doc/user.rst: add section about profiling MPD
2021-02-07 21:38:24 +01:00
Max Kellermann
4be76f3c8f
archive/iso9660: check "skip==0" before doing optimized large read
...
After a Seek() to an odd offset, some data needs to be skipped from
the start of the block, and reading right into the given buffer
doesn't work.
2021-02-07 21:38:13 +01:00
Max Kellermann
c58c53293c
test/run_input: add option --seek
2021-02-07 21:20:17 +01:00
Max Kellermann
8695a2806a
test/run_input: document more options
2021-02-07 21:17:10 +01:00
vkostas
a59f1b21a6
Fix: Separate Conductor from Performer
...
Conductor was incorrectly saved to Performer tag in MPD database
2021-02-07 20:45:01 +01:00
Max Kellermann
5a16e3ffa3
event/TimerWheel: optimized container for CoarseTimerEvent
2021-02-05 18:24:25 +01:00
Max Kellermann
d1957b83c8
event/Chrono: add type alias TimePoint
2021-02-05 18:19:23 +01:00
Max Kellermann
1b4fd74575
event/TimerEvent: rename to FineTimerEvent
...
... and make TimerEvent a type alias for FineTimerEvent (i.e. swap
names).
2021-02-05 18:18:05 +01:00
Max Kellermann
def962b6cb
event/{Coarse,Fine,Far}TimerEvent: aliases for TimerEvent
...
Preparing for a variant of TimerEvent with coarse 1-second
granularity, but cheaper (with a timer wheel).
2021-02-05 18:16:05 +01:00
Max Kellermann
e802f1f61a
event/Loop: move TimerSet to separate class
2021-02-05 18:09:21 +01:00
Max Kellermann
271b287356
event/TimerEvent: assign due in Schedule()
2021-02-05 17:57:05 +01:00
Max Kellermann
2a30acd99c
event/Loop: use [[gnu::pure]]
2021-02-05 17:55:33 +01:00
Max Kellermann
a8e70f18fd
event/*: use using instead of typedef
2021-02-05 17:54:16 +01:00
Max Kellermann
ddd9f20a0b
fs/io/GunzipReader: document that the constructor throws
2021-02-04 17:29:00 +01:00
Max Kellermann
f4a5d671fe
util/{Const,Writable}Buffer: include cleanup
2021-02-04 17:27:48 +01:00
Richard Backhouse
c72006dbcc
zeroconf/ZeroconfBonjour: Cleanup formatting from previous commit
2021-01-23 06:13:05 -05:00
Richard Backhouse
06fe30e2bd
zeroconf/ZeroconfBonjour: Fix compile errors resulting from "refactor to SocketEvent" and reenable bonjour for darwin build
2021-01-23 06:06:49 -05:00
Max Kellermann
08e76815ba
io/FileDescriptor: use std::byte
2021-01-22 12:50:16 +01:00
Max Kellermann
33ac3eb551
lib/curl/Easy: add methods SetVerify{Host,Peer}()
2021-01-22 12:34:04 +01:00
Max Kellermann
d56a51cb5e
Merge branch 'v0.22.x'
2021-01-21 22:28:11 +01:00
Max Kellermann
9e2d09dabc
net/SocketError: add syscall specific check functions
...
Fixes Windows compatibility.
2021-01-21 22:05:21 +01:00
Max Kellermann
2719f62feb
net/SocketError: relicense to BSD-2
2021-01-21 21:31:02 +01:00
Max Kellermann
065a0c09f8
fs/io/StdioOutputStream: include cleanup
2021-01-21 21:13:40 +01:00
Max Kellermann
04731fb7cc
util/StringPointer: add operator==(std::nullptr_t)
2021-01-21 21:08:52 +01:00
Max Kellermann
12ff5a547f
fs/io/FileOutputStream: add noexcept
2021-01-21 21:04:19 +01:00
Max Kellermann
9b2eb74f95
util/AllocatedString: fix operator= parameter type
2021-01-21 20:44:07 +01:00
Max Kellermann
84084baa65
util/AllocatedString: remove wrong std:: prefix
2021-01-21 20:16:32 +01:00
Max Kellermann
3bc45fbf68
util/AllocatedString: remove Null(), IsNull()
2021-01-21 20:12:05 +01:00
Max Kellermann
36168a24f5
util/AllocatedString: support casting a nulled instance to string_view
2021-01-21 20:06:01 +01:00
Max Kellermann
5e67443a1a
util/{Const,Writable}Buffer: always enable assertions
2021-01-21 20:04:00 +01:00
Max Kellermann
17858143b3
util/{Const,Writable}Buffer: enable constexpr on more methods
2021-01-21 20:03:53 +01:00
Max Kellermann
c44a7b2705
util/AllocatedArray: add operator=(nullptr)
2021-01-21 20:03:38 +01:00
Max Kellermann
0ded23591b
util/AllocatedString: add operator=()
2021-01-21 20:02:52 +01:00
Max Kellermann
c1a7aa652d
util/AllocatedString: replace Clone() with copy constructor
2021-01-21 20:02:41 +01:00
Max Kellermann
8d47f51399
util/AllocatedString: add const_pointer constructor
2021-01-21 18:06:10 +01:00
Max Kellermann
a81c9bfb81
util/AllocatedString: add string_view constructor
...
Replaces the static Duplicate() method.
2021-01-21 18:05:51 +01:00
Max Kellermann
1caf57644f
util/AllocatedString: add default constructor
2021-01-21 18:05:50 +01:00
Max Kellermann
c70b63c183
util/AllocatedString: rename to BasicAllocatedString
...
To make things simpler, AllocatedString is now a non-template class.
2021-01-21 18:04:03 +01:00
Max Kellermann
1b89b4ef83
Merge branch 'v0.22.x'
2021-01-21 17:45:15 +01:00
Max Kellermann
234cedd6c6
increment version number to 0.22.5
2021-01-21 17:43:25 +01:00
Max Kellermann
8279cafd6d
Merge tag 'v0.22.4'
...
release v0.22.4
2021-01-21 17:42:26 +01:00
Max Kellermann
5b946e9d95
android/AndroidManifest.xml: android release 0.22.4
2021-01-21 17:36:00 +01:00
Max Kellermann
b46ca50dcc
android/AndroidManifest.xml: raise targetSdkVersion to 29
...
The Google overlords require me to change to 29 or else I can't upload
new releases to Google Play.
https://developer.android.com/distribute/best-practices/develop/target-sdk
2021-01-21 17:35:59 +01:00
Max Kellermann
a0d76c3be9
release v0.22.4
2021-01-21 17:21:20 +01:00
Max Kellermann
995aafe9cc
protocol: add command "binarylimit"
...
Increasing the protocol version to 0.22.4 to allow clients to detect
this feature.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1038
2021-01-21 17:17:10 +01:00
Max Kellermann
6e33566cee
client/FileCommands: validate the given offset
2021-01-21 16:57:38 +01:00
Max Kellermann
3b3c1d466d
event/FullyBufferedSocket: add method GetOutputMaxSize()
2021-01-21 16:49:38 +01:00
Max Kellermann
056ab199ab
util/PeakBuffer: add method max_size()
2021-01-21 16:45:56 +01:00
Max Kellermann
eea0e084af
util/PeakBuffer: use std::byte instead of std::uint8_t
2021-01-21 16:45:31 +01:00
Max Kellermann
fa82f558be
util/PeakBuffer: add noexcept
2021-01-21 16:45:17 +01:00
Max Kellermann
6b555b7017
util/PeakBuffer: use std::size_t
2021-01-21 16:45:14 +01:00
Max Kellermann
dafba203e7
util/ForeignFifoBuffer: use auto
2021-01-21 16:38:32 +01:00
Max Kellermann
a5d382348e
command/Request: ParseUnsigned() returns unsigned
...
Of course, it should do that!
2021-01-21 16:33:17 +01:00
Max Kellermann
74396448df
input/curl: disable verify_peer on Android by default
...
I havn't yet figured out how to use Android's system CA certificates
with CURL/OpenSSL, so a temporary workaround is to disable verify_peer
by default. The data MPD transfers isn't extremely important, so the
servers's authenticity isn't extremely important either.
2021-01-21 14:55:09 +01:00
Max Kellermann
168d6257b4
python/build/libs.py: build CURL with OpenSSL support
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1059
2021-01-21 14:33:14 +01:00
Max Kellermann
014c2a82bd
event/SignalMonitor: fix non-Linux build failure
...
Regression by commit cd4b673b6c
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1060
2021-01-21 14:05:23 +01:00
Max Kellermann
1afa33c3c7
db/simple/Song: Export() merges tags with "target"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1048
2021-01-21 13:57:59 +01:00
Max Kellermann
3a7c9c7c84
db/simple/ExportedSong: add option to own a Tag
2021-01-21 13:52:01 +01:00
Max Kellermann
6d08e761c8
db/simple/ExportedSong: new class
2021-01-21 13:52:01 +01:00
Max Kellermann
fee282f49c
SongPrint: use LightSong::GetDuration()
...
This properly prints the "Time"/"duration" values for songs in virtual
CUE folders.
This is loosely related to
https://github.com/MusicPlayerDaemon/MPD/issues/1048
2021-01-21 13:52:00 +01:00
Max Kellermann
07d2bc6898
util/StringView: add method SplitLast()
2021-01-21 13:20:01 +01:00
Max Kellermann
9551166f27
command/file: use %zu to format a size_t
...
`PRIoffset` was wrong, because it expects an `offset_type`
(i.e. `uint64_t`). This broke on 32 bit machines where `size_t` has
32 bits.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1058
2021-01-20 20:44:47 +01:00
Max Kellermann
2a8c420cff
client/Response: add printf attribute
2021-01-20 20:43:16 +01:00
Max Kellermann
ec1e04a65d
Merge branch 'bugfix/1043/remove-basepath-handling' of git://github.com/PVince81/MPD into v0.22.x
2021-01-20 20:02:31 +01:00
Max Kellermann
97a2122f41
doc/mpd.conf.5.rst: updated ReplayGain website links
...
"The documentation for mpd.conf still links to https://replaygain.org
– according to archive.org, this domain has been defunct since
2014-09-14, shortly after got domain squatted and ever since hosts
dubious content."
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1050
2021-01-20 14:58:35 +01:00
Max Kellermann
3825175bfc
python/build/ffmpeg.py: remove obsolete -no-integrated-as workaround
2021-01-19 20:17:47 +01:00
Max Kellermann
68f4be323c
doc/user.rst: require Android NDK r22
2021-01-19 20:17:36 +01:00
Max Kellermann
4949cd98f3
output/sles: add missing include for assert()
2021-01-19 20:17:17 +01:00
Max Kellermann
a14ce4c7cb
lib/pcre/RegexPointer: work around bogus -Wmaybe-uninitialized with GCC 11
2021-01-19 19:58:04 +01:00
Max Kellermann
85a5b7dec4
python/build/libs.py: update CURL to 7.74.0
2021-01-19 18:08:17 +01:00
Max Kellermann
153d464ce8
python/build/libs.py: update Boost to 1.75.0
2021-01-19 18:05:17 +01:00
Itai Y. Efrat
83391e2bd9
doc/protocol.rst: fix playlist(find|search)
...
The `{TAG} {NEEDLE}` input format documented seems to be a holdover
of pre-0.21 filters, and the commands support the new format.
2021-01-19 17:27:14 +01:00
Rosen Penev
594dfe572b
clang-tidy: mark a bunch of variables constexpr
...
Found with cppcoreguidelines-interfaces-global-init
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2021-01-16 18:35:31 -08:00
Max Kellermann
906e82f600
event/Loop: fix assertion failure due to wrong "busy" value
...
If an InjectEvent callback schedules a timer, the loop will restart,
but the "busy" flag is still false. The fix is to move the "again"
check before the "busy" setting.
2021-01-12 17:28:42 +01:00
Max Kellermann
bcb7e954e9
net/Resolver: add simple getaddrinfo() wrapper
2021-01-12 15:43:26 +01:00
Max Kellermann
866c87c65e
net/ToString: include cleanup
2021-01-12 12:22:44 +01:00
Max Kellermann
4ba36d7cb9
net/SocketError: relicense to BSD-2
2021-01-11 22:31:46 +01:00
Max Kellermann
13f8a912e3
event/Loop: simplify wake_event initializer
2021-01-11 20:14:20 +01:00
Max Kellermann
51f110a990
system/EventPipe: use class Unique{Socket,File}Descriptor
2021-01-11 17:51:22 +01:00
Max Kellermann
17eae74c1c
system/EventFD: Get() returns FileDescriptor
2021-01-11 17:38:30 +01:00
Max Kellermann
cd4b673b6c
event/WakeFD: convert macro to class with a GetSocket() method
2021-01-11 17:02:54 +01:00
Ethan Halsall
0d606c743b
add additional opus encoder options
2021-01-09 22:04:00 -06:00
Vincent Petry
ec0d3ac95d
Remove relative path handling which was not needed
...
The original base relative path was introduced due to an erroneous test
where the URL started with three slashes: "https:/// " instead of two,
which led to implementing handling for such cases but broke the two
slashes case.
This fix removes the base relative path handling because with two
slashes the path is anyway always relative to the host (aka absolute
URI, without host).
This reverts 216f62ea14 and part of 74b2fc7fdc
Signed-off-by: Vincent Petry <PVince81@yahoo.fr >
2021-01-08 16:50:27 +01:00
Max Kellermann
81ea749248
Merge branch 'v0.22.x'
2021-01-05 13:11:29 +01:00
Max Kellermann
e99f6b5b38
Merge branch 'bugfix/1039/fix-webdav' of git://github.com/PVince81/MPD into v0.22.x
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1039
2021-01-05 13:09:15 +01:00
Vincent Petry
74b2fc7fdc
Use uri_has_scheme for Webdav response href
...
Use uri_has_scheme to find out if the href in Webdav responses is absolute
to use the matching base path extraction.
Signed-off-by: Vincent Petry <PVince81@yahoo.fr >
2021-01-05 12:04:08 +01:00
Vincent Petry
216f62ea14
Webdav href in response can be relative
...
Fixed Webdav base path stripping in cases where href is a relative path.
Signed-off-by: Vincent Petry <PVince81@yahoo.fr >
2021-01-04 21:50:03 +01:00
Vincent Petry
b7d0001390
Fix parsing propstat blocks
...
There can be more than one propstat block each with their own status
code. We're only interested in the one with the 200 status, the found
properties.
This fixes parsing to make sure we process all propstat blocks instead
of just the last one, which might have a 404 status for not-found
properties.
Signed-off-by: Vincent Petry <PVince81@yahoo.fr >
2021-01-04 21:49:38 +01:00
Vincent Petry
687788e4d3
Fix Webdav storage PROPFIND request
...
Remove additional "a:prop" in PROPFIND request to match RFC 4918 section 9.1.3.
Added Content-Type header as the body is not a true multipart POST.
Signed-off-by: Vincent Petry <PVince81@yahoo.fr >
2021-01-04 14:28:42 +01:00
Max Kellermann
e009ad1a72
thread/Id: relicense to BSD-2
2021-01-03 19:25:20 +01:00
Max Kellermann
abbd980671
Merge branch 'v0.22.x'
2021-01-01 19:59:15 +01:00
Max Kellermann
5348f8c9c8
copyright year 2021
2021-01-01 19:54:28 +01:00
Max Kellermann
5a4ebf8291
doc/protocol.rst: document that tag changed trigger "player" idle event
2020-12-18 20:41:43 +01:00
Itai Y. Efrat
7ae3664c91
doc/protocol.rst: fix MPD version on oneshot
2020-12-16 19:36:16 +02:00
Itai Y. Efrat
1caed3e390
doc/protocol.rst: fix mistake in footnotes
2020-12-16 19:06:47 +02:00
Max Kellermann
937da63ba6
util/StringView: add {Starts,Ends}With(char)
2020-12-15 17:04:39 +01:00
Max Kellermann
1f312b2e42
curl/Handler: disallow OnData() to throw
...
This eliminates some complexity from class CurlRequest.
2020-12-15 17:03:24 +01:00
Max Kellermann
1e3089ffb7
curl/Request: move struct Pause to class CurlResponseHandler
2020-12-15 17:01:18 +01:00
Max Kellermann
5d7ff150dd
curl/Request: add more wrapper methods
2020-12-15 16:56:20 +01:00
Max Kellermann
c767501c12
Merge branch 'v0.22.x'
2020-12-15 14:11:06 +01:00
EdJoPaTo
7adb907a55
doc/protocol.rst: ensure all commands have targets
2020-12-15 14:10:28 +01:00
EdJoPaTo
00602d28a4
doc/protocol.rst: ensure all commands have targets
2020-12-15 13:49:57 +01:00
Max Kellermann
7a56837141
odbus/Watch: support DBUS_WATCH_{ERROR,HANGUP}
2020-12-14 15:10:19 +01:00
Max Kellermann
ed1caffc79
odbus/Watch: use SocketEvent::ReleaseSocket() to allow another Open()
2020-12-14 15:10:15 +01:00
Max Kellermann
65473b5113
lib/dbus/FilterHelper: new class
2020-12-14 15:07:12 +01:00
Max Kellermann
178d115ccb
lib/dbus/Glue: add noexcept
2020-12-14 13:19:51 +01:00
kaliko
af2896547a
doc/protocol.rst: Add missing "originaldate" to the list of supported tags
2020-12-14 13:03:30 +01:00
Max Kellermann
10e5b0759c
lib/dbus/Glue: relicense to BSD-2
2020-12-14 13:02:37 +01:00
arcnmx
0a81e462db
event/SocketEvent: remove FD before closing socket
...
SocketEvent knows the FD is still open and is about to close it, so
it's unnecessary to rely on the kernel (via AbandonFD) to clean up the
epoll_wait list.
### Why this is relevant
- `AbandonFD` assumes that upon closing the socket, the FD will be automatically removed from the epoll list. That fd is associated with a reference to the `SocketEvent`, so this is an important and dangerous assumption to get wrong. In the case that the FD isn't immediately removed from the list by the kernel, the event loop can crash due to the `SocketEvent` being destroyed and it being a use-after-free bug at that point.
- If a socket FD happens to be duplicated, then closing the SocketEvent FD will not automatically remove it from epoll, and will trigger said bug/crash. It is only automatically removed when all FD references to the underlying socket/resource are closed?
- A `fork()` is one example where a socket FD can be duplicated and result in this situation.
- `CLOEXEC` might be considered mitigation for this but also introduces a race condition where the crash can occur between a `fork()` and `exec()` without additional synchronization to freeze the event loop.
One could argue the mpd event loop isn't fork-safe, and thus should be allowed to use `AbandonFD` however it likes. A decision on whether this is intended should probably be declared; but either way this fix seems appropriate in cases where `Abandon` isn't actually necessary. It also might be possible to fix `AbandonFD` to mark the `SocketEvent` as removed without using `EPOLL_CTL_DEL`?
[edit: made this dependent on HAVE_THREADED_EVENT_LOOP which is always
true for MPD, but not for ncmpc, for example - mk]
2020-12-04 10:32:46 +01:00
Max Kellermann
5cbbe8ae2e
event/TimerEvent: update API documentation
2020-12-04 09:57:19 +01:00
Max Kellermann
00fafa16c7
event/SocketEvent: remove assert(), reduce header dependencies
2020-12-04 09:56:28 +01:00
Max Kellermann
cea8db7eaa
event/SocketEvent: add comment
2020-12-04 09:55:08 +01:00
Max Kellermann
b56c0e69e4
event/SocketEvent: add another assert() to Open()
2020-12-04 09:24:02 +01:00
Max Kellermann
b27e82e4a9
event/SocketEvent: allow Schedule() with IMPLICIT_FLAGS
...
Relax the API (instead of tightening it further like commit
7bc1c9925b tried to do unsuccessfully).
2020-12-04 09:17:45 +01:00
Max Kellermann
ad48834469
Revert "event/SocketEvent: add assert()"
...
This reverts commit 7bc1c9925b . It
caused a crash with the ALSA plugin family (through
MultiSocketMonitor::ReplaceSocketList() and
MultiSocketMonitor::AddSocket()). Until we have a proper fix, the
assertion patch is reverted.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1020
2020-12-02 20:43:29 +01:00
Max Kellermann
9d6b5e2ba1
event/TimerEvent: rename IsActive() to IsPending()
2020-12-02 15:41:11 +01:00
Max Kellermann
33ba190bec
event/TimerEvent: add ScheduleEarlier()
2020-12-02 15:30:37 +01:00
Max Kellermann
3783350d25
event/SocketEvent: document Dispatch()
2020-12-02 15:24:23 +01:00
Max Kellermann
173405a343
event/SocketEvent: make Dispatch() private
2020-12-02 15:14:51 +01:00
Max Kellermann
7bc1c9925b
event/SocketEvent: add assert()
2020-12-02 15:12:30 +01:00
Max Kellermann
ce4c69dd95
test/util/TestException: new unit test
2020-12-02 15:09:47 +01:00
Max Kellermann
8eea825462
test/util/TestTemplateString: new unit test
2020-12-02 15:03:51 +01:00
Max Kellermann
49e1ce7c43
test/TestUtil: move to test/util/
2020-12-02 15:02:45 +01:00
Max Kellermann
618f94f589
util/TemplateString: add StringView cast operator
2020-12-02 15:00:49 +01:00
Max Kellermann
ad2c22844c
util/TemplateString: add FromLiteral()
2020-12-02 15:00:39 +01:00
Max Kellermann
b8df851414
io/FileDescriptor: use std::size_t
2020-12-02 14:56:00 +01:00
Max Kellermann
a584141cae
io/Open: add flags parameter to OpenReadOnly()
2020-12-02 14:52:51 +01:00
Max Kellermann
4e88f95f94
event/Loop: move the "again" check out of the mutex scope
2020-12-01 20:29:21 +01:00
Max Kellermann
790e540c19
event/Loop: use ClockCache
2020-12-01 20:25:42 +01:00
Max Kellermann
16074c565f
time/ClockCache: new library
2020-12-01 20:22:26 +01:00
Max Kellermann
2a1dd55b11
event/Loop: include cleanup
2020-12-01 20:19:40 +01:00
Max Kellermann
be20f760ab
event/Loop: disallow copying
2020-12-01 20:18:33 +01:00
Max Kellermann
8050394003
event/Loop: add noexcept
2020-12-01 20:10:53 +01:00
Max Kellermann
ff8b5bc61b
event/Loop: reorder methods
2020-12-01 20:09:25 +01:00
Max Kellermann
ef8797821f
event/Loop: inline field initializers
2020-12-01 20:07:35 +01:00
Max Kellermann
5f2797e7cc
event/Loop: add more assertions to dtor
2020-12-01 20:05:54 +01:00
Max Kellermann
e286702f4c
event/Loop: rename AddDeferred() to AddDefer()
2020-12-01 17:26:39 +01:00
Max Kellermann
c58aaf545f
event/IdleEvent: make a special case of DeferEvent
2020-12-01 17:14:24 +01:00
Max Kellermann
990f2dc1cf
event/DeferEvent: use class IntrusiveList instead of boost::intrusive::list
2020-12-01 17:14:24 +01:00
Max Kellermann
774b4313f2
event/DeferEvent: split the thread-safe version into new class InjectEvent
2020-12-01 17:14:24 +01:00
Max Kellermann
1ecbc2ff0f
event/DeferEvent: explicitly forbid copying
2020-12-01 17:14:24 +01:00
Max Kellermann
fd8e38f8cd
event/DeferEvent: use using instead of typedef
2020-12-01 17:14:24 +01:00
Max Kellermann
e86d4db55c
Merge branch 'v0.22.x'
2020-12-01 17:14:21 +01:00
Max Kellermann
d9583faf06
input/{tidal,qobus}: add missing includes for assert()
2020-12-01 17:14:11 +01:00
Max Kellermann
2788cf9330
input/tidal: add missing include for assert()
2020-12-01 17:13:13 +01:00
Max Kellermann
9420c74101
util/AllocatedArray: add nullptr constructor
2020-11-30 22:30:57 +01:00
Max Kellermann
b1bef9c21d
util/AllocatedArray: add method data()
2020-11-30 22:30:28 +01:00
Max Kellermann
5b0ef7ea98
util/AllocatedArray: add types pointer, const_pointer
2020-11-30 22:30:25 +01:00
Max Kellermann
ab53c414bc
util/StringView: add method SplitLast()
2020-11-30 22:29:38 +01:00
Max Kellermann
d547ace749
io/FileDescriptor: use std::size_t
2020-11-30 22:27:16 +01:00
Max Kellermann
b47e0cffdd
util/TemplateString: rename CharAsString() to FromChar()
2020-11-30 22:23:28 +01:00
Max Kellermann
3af35aee9e
util/TemplateString: add cast operators
2020-11-30 22:22:24 +01:00
Max Kellermann
02314ac7dd
util/TemplateString: rewrite as constexpr functions
...
Hooray C++17!
2020-11-30 22:19:57 +01:00
Max Kellermann
e7c4e87ac4
util/TemplateString: remove unnecessary implementation for static variable
...
This is obsolete since C++17.
2020-11-30 22:13:13 +01:00
Max Kellermann
de58bfbb7f
util/TemplateString: use std::size_t
2020-11-30 22:13:08 +01:00
Max Kellermann
0dda4c06b1
util/TemplateString: no indent after namespace
2020-11-30 22:13:04 +01:00
Max Kellermann
79fd6143ec
lib/dbus/Values: use T::Traits, not T
...
This template was never instantiated, so the problem never occurred.
2020-11-30 22:11:18 +01:00
Max Kellermann
8f89e3f7f4
lib/dbus/Values: use using instead of typedef
2020-11-30 22:11:14 +01:00
Max Kellermann
fc01d11b8d
odbus/Types: use using instead of typedef
2020-11-30 22:08:37 +01:00
Max Kellermann
0c28d8dcbe
time/ISO8601: support YYYY-MM (without day of month)
2020-11-30 21:55:12 +01:00
Max Kellermann
764eaadd25
time/Math: new library
2020-11-30 21:55:05 +01:00
Max Kellermann
273771ffec
net/SocketAddress: add CastTo()
2020-11-30 21:51:07 +01:00
Max Kellermann
32ce9ce919
net/IPv[46]Address: pass SocketAddress by value to Cast()
2020-11-30 21:49:07 +01:00
Max Kellermann
34a070f5a6
net/IPv[46]Address: add Cast(const sockaddr_in&)
2020-11-30 21:49:02 +01:00
Danilo Spinella
92bfdffa42
lib/ffmpeg/Filter: Add define required for avutil
2020-11-30 20:06:21 +01:00
Max Kellermann
ac4975cd7a
util/MimeType: relicense to BSD-2
2020-11-18 15:28:21 +01:00
Max Kellermann
fbbbfb9668
Merge branch 'v0.22.x'
2020-11-16 09:41:20 +01:00
Max Kellermann
38b41fc3fd
filter/ffmpeg: detect the output sample format
...
Some FFmpeg filters change the sample format, and since MPD assumes
this never happens, this results in loud noise instead of music. This
commit finally implements the TODO comment by sending one frame of
silence to the filter and checking the output frame's format.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1009
2020-11-16 09:39:34 +01:00
Max Kellermann
394f69bee1
output/Control: allow copy elision (fix -Wpessimizing-move)
2020-11-15 19:55:11 +01:00
Stapper
ba5531f9dd
Fixes #994 - moveoutput: new AudioOutputControl created from copyMoving an output to a partition is now done via MultipleOutputs::AddCopy(),using a new AudioOutputControl constructor. Tags and always_on settings willpersist when moving outputs between partitions.
2020-11-15 19:47:53 +01:00
Max Kellermann
eb9f5339b6
Merge branch 'v0.22.x' into master
2020-11-11 12:43:50 +01:00
Max Kellermann
60d19b2380
doc/plugins.rst: add missing list-table declaration
2020-11-11 12:28:15 +01:00
Max Kellermann
a9714e73c8
Merge branch 'bind' of git://github.com/neheb/MPD into master
2020-11-10 16:02:34 +01:00
kaliko
004d6a3b66
doc/mpd.1.rst: Update config file documentation.
...
Have similar information about config file in both mpd.1 ans mpd.conf.5
2020-11-10 15:58:34 +01:00
kaliko
3e79e62c17
doc/mpd.conf.5.rst: Update mpd.conf manual
...
Update description with content from user manual [0].
Remove obsolete information regarding "required parameters" and log_level
[0] https://www.musicpd.org/doc/html/user.html#the-configuration-file
2020-11-10 15:58:30 +01:00
kaliko
27b69330f4
doc/mpdconf.example: add database exemples
2020-11-10 15:58:10 +01:00
kaliko
6b50b67339
doc/mpdconf.example: add available log levels
2020-11-10 15:58:03 +01:00
kaliko
51ca775a1c
doc/mpdconf.example: Strip trailing space, fixed typo.
2020-11-10 15:57:54 +01:00
Max Kellermann
1092882f38
decoder/dsdiff: apply padding to odd-sized chunks
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1001
2020-11-10 15:55:33 +01:00
Max Kellermann
8a7986c3bf
doc/plugins.rst: add DSD spec links
2020-11-10 15:53:35 +01:00
Max Kellermann
a99bc91eb0
Merge tag 'v0.22.3' into master
...
release v0.22.3
2020-11-06 16:14:46 +01:00
Max Kellermann
c7bd8c663d
increment version number to 0.22.4
2020-11-06 16:14:23 +01:00
Max Kellermann
f6c65cba58
release v0.22.3
2020-11-06 16:12:54 +01:00
Max Kellermann
f849b07766
storage/curl: fix nullptr dereference
...
Pass a std::string to PathTraitsUTF8::Relative(), implicitly casting
it to std::string_view. This selects the right overload which returns
std::string_view instead of `const char *`; the latter could return
`nullptr` which would cause the implicit conversion of the return
value to std::string_view to crash.
Regression caused by commits ead208987d and a98d627c0b .
Closes https://github.com/MusicPlayerDaemon/MPD/issues/995
2020-11-06 15:35:47 +01:00
Rosen Penev
071d3c71d8
clang-tidy: replace std::bind with lambdas
...
Found with modernize-avoid-bind
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-11-05 18:09:30 -08:00
Max Kellermann
afbcac9fb1
util/MimeType: use IterableSplitString() in ParseMimeTypeParameters()
2020-11-04 21:29:42 +01:00
Max Kellermann
51e5b56b3a
playlist/registry: remove duplicate function ExtractMimeTypeMainPart()
...
This is the same as GetMimeTypeBase(), which has already been applied.
2020-11-04 21:20:43 +01:00
Max Kellermann
bb07fd42ce
util/MimeType: migrate GetMimeTypeBase() to std::string_view
2020-11-04 21:20:03 +01:00
Max Kellermann
bab626c325
util/UriExtract: remove the query string at the beginning of uri_get_suffix()
2020-11-04 21:15:41 +01:00
Max Kellermann
2a9131498f
util/UriExtract: pass std::string_view to uri_get_suffix()
2020-11-04 21:13:57 +01:00
Max Kellermann
35a232105e
util/UriExtract: uri_get_suffix() returns std::string_view
...
No need to copy it to a buffer.
2020-11-04 21:08:26 +01:00
Max Kellermann
19dd1a25d7
{decoder,archive,playlist}/plugin: pass std::string_view to SupportsMimeType()
2020-11-04 21:00:49 +01:00
Max Kellermann
53396c0e50
Merge branch 'v0.22.x' into master
2020-11-04 20:37:25 +01:00
Max Kellermann
0b8208fe7f
Merge branch 'clng11' of git://github.com/neheb/MPD into master
2020-11-04 20:34:55 +01:00
Max Kellermann
2da3cff1e8
filter/LoadChain: use the AutoConvertFilter
...
This adds support for input samples other than 16 bit to the FFmpeg
filter plugin.
2020-11-04 20:15:19 +01:00
Max Kellermann
0c965d0573
filter/AutoConvert: move the Filter class to TwoFilters.cxx
2020-11-04 20:15:19 +01:00
Max Kellermann
77c14692c9
filter/AutoConvert: eliminate AutoConvertFilter if possible
...
If no conversion is necessary, return the child Filter as-is. This
allows removing all nullptr checks from AutoConvertFilter.
2020-11-04 20:15:19 +01:00
Max Kellermann
226eb26300
filter/ffmpeg: interleave the output AVFrame
...
If the FFmpeg filter outputs planar data, interleave it, just like the
FFmpeg decoder plugin does.
2020-11-04 20:15:19 +01:00
Max Kellermann
2d606fa989
decoder/ffmpeg: move code to lib/ffmpeg/Interleave.cxx
...
To be reused by the FFmpeg filter plugin.
2020-11-04 20:15:19 +01:00
Max Kellermann
7a0342c8bb
decoder/ffmpeg: use AVFrame fields instead of AVCodecContext fields
2020-11-04 20:06:45 +01:00
Max Kellermann
42c9d765cf
lib/ffmpeg/Buffer: add missing include
2020-11-04 20:06:41 +01:00
Max Kellermann
a8a80ee689
lib/ffmpeg/Buffer: disallow copying
2020-11-04 19:51:21 +01:00
Max Kellermann
f9bdb4b0b8
lib/ffmpeg/Buffer: add noexcept
2020-11-04 19:50:38 +01:00
Max Kellermann
9332527872
lib/ffmpeg/{Buffer,Time}: remove obsolete "#undef SampleFormat"
...
This compatibility macro has been removed from FFmpeg long ago.
2020-11-04 19:50:33 +01:00
Max Kellermann
84f772357e
filter/convert: convert_filter_new() returns std::unique_ptr
2020-11-04 16:47:11 +01:00
Max Kellermann
f2b9785a67
filter/chain: pass std::string_view to filter_chain_append()
2020-11-04 16:37:53 +01:00
Max Kellermann
eeaec99c59
filter/LoadChain: use IterableSplitString()
2020-11-04 16:36:11 +01:00
Max Kellermann
b0002e3b73
filter/chain: copy the child name
...
filter_chain_parse() passes a temporary string pointer which results
in a use-after-free in the PreparedChainFilter::Child::Open() error
message.
2020-11-04 16:34:38 +01:00
Max Kellermann
27c589da97
filter/chain: remove unused field ChainFilter::Child::name
2020-11-04 16:26:50 +01:00
Max Kellermann
6484af472b
increment version number to 0.22.3
2020-11-04 16:14:40 +01:00
Max Kellermann
92a218b7a9
playlist/registry: add option "as_directory"
...
This allows users to disable the "CUE files as directories" feature
without having to disable the CUE playlist plugin completely. This
feature has been annoying some users.
2020-11-04 16:13:12 +01:00
Max Kellermann
d69a1f98af
doc/plugins.rst: more markup
2020-11-04 16:11:26 +01:00
Max Kellermann
23a6f62ea3
doc/user.rst: fix typo
2020-11-04 15:59:40 +01:00
Max Kellermann
e0d3ca71b3
meson.build: switch to C11
...
It's been 9 years already, and there's no point in insisting on the 21
year old C standard. MPD doesn't have a lot of C code left, but why
not compile it with the latest language revision.
2020-11-04 14:38:58 +01:00
Max Kellermann
4f40b9f7cf
meson.build: disable ld.so lazy binding and enable relro
...
Since MPD is a long-running daemon, it doesn't make sense to use
dynamic binding. That allows the relocations to be read-only
("relro"), which a hardening feature.
2020-11-04 13:43:21 +01:00
Max Kellermann
bb009daf66
playlist/registry: simplify ExtractMimeTypeMainPart()
2020-11-04 13:34:04 +01:00
Max Kellermann
3d276d50b4
event/PollBackend: use vector::push_back() instead of resize()
2020-10-30 16:35:20 +01:00
Max Kellermann
b1b731340e
event/PollBackend: add Item constructor
2020-10-30 16:32:45 +01:00
Max Kellermann
b9b02b4ff2
event/PollBackend: use unordered_map::find() instead of operator[]
...
The latter creates a new object, but we know that the key already
exists.
2020-10-30 16:25:41 +01:00
Max Kellermann
ab5d23da11
event/PollBackend: use unordered_map::emplace() in Add()
2020-10-30 16:24:32 +01:00
Max Kellermann
0554fe3652
event/PollBackend: use std::size_t
2020-10-30 16:09:29 +01:00
Max Kellermann
b0282fe36f
event/PollGroupWinSelect: add Item constructor
2020-10-30 16:07:23 +01:00
Max Kellermann
69b45e693b
event/WinSelect: use unordered_map::find() instead of operator[]
...
The latter creates a new object, but we know that the key already
exists.
2020-10-30 16:05:25 +01:00
Max Kellermann
9e97acc28d
event/WinSelect: merge duplicate code into ApplyReady()
2020-10-30 15:55:23 +01:00
Max Kellermann
b1e446a931
event/WinSelect: add missing const to deleted copy ctor/operator
2020-10-30 15:45:29 +01:00
Max Kellermann
938319cd44
event/WinSelect: reorder method prototypes
2020-10-30 15:45:12 +01:00
Max Kellermann
fee29001fa
event/WinSelect: use unordered_map::emplace() in Add()
...
This allow using erase() with iterator, without a key lookup.
2020-10-30 15:32:11 +01:00
Max Kellermann
6d894a1806
event/WinSelect: use SOCKET as std::unordered_map key
2020-10-30 15:25:09 +01:00
Rosen Penev
f1fc5d79ca
clang-tidy: convert to all/any_of
...
Found with readability-use-anyofallof
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-10-28 15:51:21 -07:00
Rosen Penev
0fd2c74a66
use structured binding declarations
...
Shorter.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-10-28 15:41:31 -07:00
Max Kellermann
bb99cf37e3
Merge tag 'v0.22.2' into master
...
release v0.22.2
2020-10-28 17:33:10 +01:00
Max Kellermann
dc432f3ffa
release v0.22.2
2020-10-28 17:25:33 +01:00
Max Kellermann
37710195ca
meson_options.txt: disable the "smbclient" plugin by default
...
The bug https://bugzilla.samba.org/show_bug.cgi?id=11413 makes MPD
crash after at most a minute of using the plugin. Since this bug is
five years old already and it doesn't look like it will ever be fixed,
all libsmbclient code in MPD is scheduled for removal. For now, the
plugin is disabled by default so people are less likely to hit the
crash bug.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/991
2020-10-28 17:21:27 +01:00
Max Kellermann
7b9295ff99
lib/yajl/Handle: strip newlines from error messages
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/981
2020-10-28 16:06:52 +01:00
Max Kellermann
5f61d440eb
lib/yajl/Handle: un-inline the throwing code
...
Reduces header dependencies.
2020-10-28 16:02:14 +01:00
Max Kellermann
6bc73a9ebe
util/FormatString: update API documentation
2020-10-28 15:48:42 +01:00
Max Kellermann
1195eb266e
protocol/Ack: remove unused variable ack_domain
2020-10-28 15:47:05 +01:00
Max Kellermann
3562a3e51e
Main: save the state_file on shutdown
...
This got lost in commit 5d597a3646 (v0.21.19), but it was never
noticed because the state_file_interval was way too short due to
commit 3413d1bf23 , fixed recently by commit 27cc7b352d
2020-10-28 15:29:47 +01:00
Max Kellermann
7c47fe746c
event/Loop: AbandonFD() unlinks the SocketEvent
...
Fixes use-after-free bugs causing assertion failures at shutdown,
because all "abandoned" SocketEvents are still in the linked list.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/986
Closes https://github.com/MusicPlayerDaemon/MPD/issues/987
2020-10-28 15:01:32 +01:00
Max Kellermann
65a1c4a016
event/Loop: pass SocketEvent& to AbandonFD()
2020-10-28 14:59:28 +01:00
Max Kellermann
46418d0f2d
event/ServerSocket: remove obsolete API documentation
2020-10-28 14:52:31 +01:00
Max Kellermann
bbfa6fe632
db/simple: purge songs for unavailable decoder plugins on update
2020-10-28 14:36:20 +01:00
Max Kellermann
bf97d13d0b
fs/Traits: add GetPathSuffix()
2020-10-28 14:29:46 +01:00
Max Kellermann
b5673b6333
db/simple/Directory: add pure attribute
2020-10-28 14:24:58 +01:00
Max Kellermann
ee802867df
db/update/Walk: add code comments
2020-10-28 14:23:39 +01:00
Max Kellermann
ecaa51e322
db/simple: purge special directories for unavailable plugins on update
2020-10-27 19:14:31 +01:00
Max Kellermann
0779333064
db/update/Walk: adjust lamba indent
2020-10-27 19:14:31 +01:00
Max Kellermann
6f1a4a73b7
fs/Traits: add GetFilenameSuffix()
2020-10-27 19:14:31 +01:00
Max Kellermann
945ed2610a
increment version number to 0.22.2
2020-10-27 18:34:39 +01:00
arcnmx
ad585e179f
system/FileDescriptor: fix Duplicate result
...
dup2 returns new_fd on success, not 0
2020-10-20 09:32:43 -07:00
Max Kellermann
8348a1ec8f
event/PollGroup: rename to PollBackend
2020-10-19 14:52:59 +02:00
Max Kellermann
c18e00daa4
event/PollGroup: move event flags to a separate header
...
Reduce header dependencies for SocketEvent.hxx.
2020-10-19 14:48:41 +02:00
Max Kellermann
418ba96334
event/SocketEvent: forbid copying
2020-10-18 20:07:49 +02:00
Max Kellermann
a60e782959
event/Loop: reorder assertions
2020-10-18 20:05:22 +02:00
Max Kellermann
8bab5733d7
event/Loop: add assertions
2020-10-18 20:04:16 +02:00
Max Kellermann
e3270dfd68
event/SocketEvent: use class IntrusiveList<>
2020-10-18 20:02:47 +02:00
Max Kellermann
a14997ffb8
event/Loop: manage all SocketEvents in a linked list
...
Not only those which are "ready".
2020-10-18 20:01:38 +02:00
Max Kellermann
dd94f97572
event/Loop: un-inline AddFD(), ModifyFD()
...
Prepare for adding more code here.
2020-10-18 19:58:42 +02:00
Max Kellermann
7d502fb448
event/Loop: round epoll_wait() timeout up
...
This implements proper rounding, amending commit dcbb9fe07c
2020-10-18 19:58:42 +02:00
Max Kellermann
3ac87bbcda
io/uring/Queue: use IntrusiveList<>
2020-10-18 19:37:54 +02:00
Max Kellermann
f64799622d
event/IdleEvent: use class IntrusiveList<>
2020-10-18 19:28:12 +02:00
Max Kellermann
6f0ad2b6c5
util/IntrusiveList: replacement for boost::intrusive::list
2020-10-18 19:23:34 +02:00
Max Kellermann
b5750afb24
event/IdleEvent: use auto
2020-10-18 19:23:34 +02:00
Max Kellermann
442dd5e955
event/IdleEvent: forbid copying
2020-10-18 19:23:25 +02:00
Max Kellermann
172c2ae1aa
Merge tag 'v0.22.1' into master
...
release v0.22.1
2020-10-17 13:58:36 +02:00
Max Kellermann
d7fcaf33b9
release v0.22.1
2020-10-17 13:56:12 +02:00
Max Kellermann
6a65b4c305
lib/nfs/patches: disable the snprintf->sprintf_s alias
...
snprintf() is available on mingw, and the libnfs kludge broke the
build with mingw, because sprintf_s() was now both an inline function
and a "dllimport" function (because the macro renamed the inline
function snprintf() to sprintf_s() in mingw's stdio.h).
2020-10-17 13:56:02 +02:00
Max Kellermann
4f0e0af319
Merge branch 'v0.22.x' into master
2020-10-16 19:02:03 +02:00
Max Kellermann
cb382b1e7d
event/PollGroupWinSelect: add missing return value
...
Fixes regression from commit 1473d8474f
2020-10-16 19:02:00 +02:00
Max Kellermann
a163beee69
python/build/libs.py: update CURL to 7.73.0
2020-10-16 18:53:47 +02:00
Max Kellermann
31268ad7cd
decoder/opus: fix track/album ReplayGain fallback
...
Fixes regression by commit 23d5a2b862 -
that commit always pretended that any Opus file has both track and
album gain, and thus disabled the fallback to the other if one is not
set.
This patch changes the logic to only submit ReplayGain if at least one
value is set, and apply the offset only to that value. If none is
available, then the new check in HandleAudio() will submit only the
output gain.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/977
2020-10-16 18:45:18 +02:00
Max Kellermann
a0d43dd87f
decoder/opus: submit output_gain even if there is no OpusTags packet
2020-10-16 18:41:16 +02:00
Max Kellermann
1db533c8cf
decoder/opus: move formula to EbuR128ToReplayGain()
2020-10-16 18:39:29 +02:00
Max Kellermann
78ee663660
decoder/opus: move comment to output_gain field
2020-10-16 18:30:51 +02:00
Max Kellermann
c32a809d38
decoder/opus: convert field output_gain to float
2020-10-16 18:28:57 +02:00
Max Kellermann
871bf3b88f
command: add command "getvol"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/979
2020-10-16 17:51:51 +02:00
Max Kellermann
08360e401d
meson.build: increment protocol version to 0.23
2020-10-16 17:46:47 +02:00
Max Kellermann
b611b1824a
event/Loop: move code to Wait()
2020-10-15 20:21:00 +02:00
Max Kellermann
1473d8474f
event/PollGroup: ReadEvents() returns PollResult
2020-10-15 20:15:09 +02:00
Max Kellermann
0ecc3394c3
Merge branch 'v0.22.x' into master
2020-10-15 20:14:36 +02:00
Max Kellermann
725985379a
event/SocketEvent: add ScheduleImplicit(), Is{Read,Write}Pending()
2020-10-15 17:01:30 +02:00
Max Kellermann
8849b9b62c
event/SocketEvent: move Abandon() up
2020-10-15 16:59:45 +02:00
Max Kellermann
caa2611ad5
event/SocketEvent: add Abandon()
2020-10-15 16:57:55 +02:00
Max Kellermann
f8ff597963
event/SocketEvent: document Close()
2020-10-15 16:55:31 +02:00
Max Kellermann
ff6e434caf
event/SocketEvent: rename Steal() to ReleaseSocket()
2020-10-15 16:54:33 +02:00
Max Kellermann
95bb12880d
net/UniqueSocketDescriptor: add noexcept
2020-10-15 16:46:29 +02:00
Max Kellermann
257196664a
net/SocketAddress: add missing include
2020-10-15 16:45:50 +02:00
Max Kellermann
643bf95366
util/OffsetPointer: use std::ptrdiff_t
2020-10-15 16:41:39 +02:00
Max Kellermann
36a187da39
util/Cast: include cleanup
2020-10-15 16:40:26 +02:00
Max Kellermann
fec80f2835
util/Cast: use std::ptrdiff_t
2020-10-15 16:40:18 +02:00
Max Kellermann
4e47653cf6
lib/curl/Global: ignore curl_multi_socket_action() errors
...
Keep the logging library out of this low-level libcurl wrapper.
2020-10-15 16:31:31 +02:00
Max Kellermann
c13004f985
lib/curl/Multi: add Add(), Remove(), ...
2020-10-15 16:25:57 +02:00
Max Kellermann
baba41e304
lib/curl/Global: adjust parameter name
2020-10-15 16:16:02 +02:00
Max Kellermann
d87e09a8b4
lib/dbus/ReadIter: remove obsolete GCC warning workaround
...
We need at least GCC 8 anyway.
2020-10-15 16:08:29 +02:00
Max Kellermann
33146ac353
lib/dbus/Watch: adjust parameter name
2020-10-15 16:06:19 +02:00
Max Kellermann
1406144210
lib/dbus/Watch: add missing include for assert()
2020-10-15 16:05:05 +02:00
Max Kellermann
bb6ab67175
output/osx: fix several -Wdouble-promotion warnings
2020-10-15 15:01:28 +02:00
Max Kellermann
ed3d8222d6
net/SocketAddress: include cleanup
2020-10-15 15:01:19 +02:00
Max Kellermann
bb20af8f20
util/StringStrip: use std::strlen()
2020-10-15 12:54:47 +02:00
Max Kellermann
9355ec44e0
util/StringStrip: use std::size_t
2020-10-15 12:53:02 +02:00
Max Kellermann
c63bd323ce
util/StringCompare: use std::memcmp()
2020-10-15 12:48:33 +02:00
Max Kellermann
55db7105c5
event/SocketEvent: check/clear scheduled_flags in Close()
...
Fixes regression by commit 521e573be9
2020-10-14 21:08:39 +02:00
Max Kellermann
1c079e554b
io/UniqueFileDescriptor: add method Release()
2020-10-14 20:50:02 +02:00
Max Kellermann
48afb68f3a
event/SocketEvent: remove assert() from GetScheduledFlags()
...
Fixes regression by commit 7901b04c78
2020-10-14 20:50:02 +02:00
Max Kellermann
21f409d5e2
event/SocketEvent: fix grammar
2020-10-14 16:30:38 +02:00
Max Kellermann
521e573be9
event/SocketEvent: use EventLoop::AbandonFD() in Close()
2020-10-14 16:29:49 +02:00
Max Kellermann
abf9ae2dd9
event/Loop: rename Abandon() to AbandonFD()
2020-10-14 16:26:06 +02:00
Max Kellermann
9f013f7de4
event/SocketEvent: allow Close() without socket
2020-10-14 16:26:01 +02:00
Max Kellermann
7fc04fd5cd
event/SocketEvent: move Dispatch() down
2020-10-14 16:21:41 +02:00
Max Kellermann
7901b04c78
event/SocketEvent: allow Cancel() without socket
2020-10-14 16:20:43 +02:00
Max Kellermann
653eea5840
event/SocketEvent: remove unnecessary initializer
2020-10-14 16:18:39 +02:00
Max Kellermann
5a4055fb08
event/SocketMonitor: refactor to SocketEvent
...
Similar to commits 1686f4e857 and
30a5dd267b
2020-10-14 15:54:12 +02:00
Max Kellermann
4d68a12f03
event/Loop: split the AtScopeExit()
...
Fixes the !HAVE_THREADED_EVENT_LOOP build.
2020-10-14 14:47:59 +02:00
Max Kellermann
0e951da64b
event/Loop: add missing #ifdef
2020-10-14 14:37:29 +02:00
Max Kellermann
38dab040b3
event/Loop: add compile-time option to disable multithreading
...
Not for MPD, but for other applications which might want to copy its
event loop, but do not need multi-threading.
2020-10-14 14:08:38 +02:00
Max Kellermann
e9f6af61f9
event/Loop: forward-declare class {Idle,Defer}Event
2020-10-14 14:05:17 +02:00
Max Kellermann
b06c4e2711
event/{Idle,Defer}Event: use base_hook instead of member_hook
...
Allows forward declaration.
2020-10-14 14:04:30 +02:00
Max Kellermann
1686f4e857
event/IdleMonitor: refactor to IdleEvent
...
Instead of using this as a base class implementing a virtual method,
the new class IdleEvent can be used as a variable, decoupling
IdleMonitor's internal state from the derived class.
This is similar to commit 30a5dd267b
which refactored TimeoutMonitor to TimerEvent.
2020-10-14 13:47:25 +02:00
Max Kellermann
9f57732af2
meson.build: increment version to 0.23~git
...
The new stable branch v0.22.x was forked off and is feature-frozen, so
the "master" branch will become the next major version eventually.
2020-10-14 12:13:12 +02:00
Max Kellermann
329382c1da
event/SignalMonitor: add noexcept
2020-10-13 17:26:33 +02:00
Max Kellermann
fadc03df21
meson.build: move macros to event/Features.h
2020-10-13 16:15:52 +02:00
Max Kellermann
54ee0e28ab
event/PollGroup: check _WIN32 instead of USE_WINSELECT
2020-10-13 15:27:58 +02:00
Max Kellermann
92fc53ebef
event/PollGroupWinSelect: use range-based for
2020-10-12 12:44:23 +02:00
Max Kellermann
7e7a1613cf
event/PollGroupWinSelect: use std::copy_n()
2020-10-12 12:40:32 +02:00
Max Kellermann
f73c4643ef
event/PollGroupWinSelect: move IsEmpty() check to GetPtr()
2020-10-12 12:39:10 +02:00
Max Kellermann
8b94e8f260
event/PollGroupWinSelect: use SOCKET instead of int
2020-10-12 12:13:46 +02:00
Max Kellermann
41bc17a27f
event/SocketMonitor: add ready_flags
...
By making each SocketMonitor keep track of its ready flags, this
removes a lot of overhead from EventLoop::RemoveFD().
2020-10-09 17:28:11 +02:00
Max Kellermann
41c0bbab13
event/SocketMonitor: don't filter out ERROR/HANGUP
...
By bit-wise ANDing the reported flags with GetScheduledFlags(),
ERROR/HANGUP always get cleared. This means the MPD event loop could
never report those conditions.
2020-10-08 21:16:18 +02:00
Max Kellermann
eeb96eb367
event/TimerEvent: add type alias for std::chrono::steady_clock::duration
2020-10-08 20:48:50 +02:00
Max Kellermann
ce93e58944
event/TimerEvent: use using instead of typedef
2020-10-08 20:46:18 +02:00
Max Kellermann
263b0ffdbb
event/TimerEvent: use auto_unlink hook
2020-10-08 20:46:15 +02:00
Max Kellermann
22bea5c97e
event/Loop: reorder includes
...
This just happened to break the Windows build because of the
`GetObject` macro in `windows.h`, so I added a kludge to
PollResultGeneric.hxx.
2020-10-08 20:43:21 +02:00
Max Kellermann
75802ebcc6
StateFileConfig, ...: drop obsolete out-of-class definition
2020-10-08 20:38:11 +02:00
Max Kellermann
27cc7b352d
config/Data: cast to std::chrono::steady_clock::duration properly
...
Oh no, 3413d1bf23 was broken! Instead of passing a number as
"seconds" to the duration constructor, it just abused the duration
constructor as cast operator, which caused custom state_file_interval
settings to be extremely short.
2020-10-08 20:30:33 +02:00
Max Kellermann
d64729065e
config/Parser: use std::size_t
2020-10-08 20:26:39 +02:00
Max Kellermann
ab318200db
config/{Data,Block}: use With() in GetUnsigned(), GetPositive()
2020-10-08 20:21:09 +02:00
Max Kellermann
947856ca8e
event/Loop: forward-declare class TimerEvent
2020-10-08 17:24:32 +02:00
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
bf270a5663
doc/user.rst: document io_uring
2020-10-06 19:14:44 +02:00
Max Kellermann
6e893f40e3
doc/user.rst: common startup problems
2020-10-06 19:14:18 +02:00
Max Kellermann
7690905503
doc/user.rst: remove "Question" prefix from "Common Problems"
2020-10-06 19:03:03 +02:00
Max Kellermann
6f822a6f19
doc/user.rst: remove numbers from section headers
2020-10-06 18:59:01 +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
dffd5831f8
test/fuzzer: a simple fuzzer using libFuzzer
...
This commit adds some basic infrastructure for fuzzers, and adds a
fuzzer for the CUE sheet parser.
2020-10-05 20:25:26 +02:00
Max Kellermann
8358b34efa
meson_options.txt: move "test" to a new section
2020-10-05 19:44:52 +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
4ca2c33181
doc/meson.build: check both html_manual and manpages
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/960
2020-09-30 12:11:20 +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
65d257675f
increment version number to 0.22.1
2020-09-23 16:15:44 +02:00
Max Kellermann
56fa7368e8
release v0.22
2020-09-23 15:26:51 +02: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
5492304254
meson.build: drop obsolete warning flag -Wno-noexcept-type
...
We don't support GCC 7 anymore.
2020-09-23 15:13:19 +02:00
Max Kellermann
416d4e4433
NEWS: update recommended compilers
2020-09-23 15:12:17 +02:00
Max Kellermann
eae2863286
doc/user.rst: add GitHub link
2020-09-23 15:11:00 +02:00
Max Kellermann
39bc196f64
doc/user.rst: move download link to downloads page
2020-09-23 15:07:50 +02:00
Max Kellermann
157dfa320f
doc: improve manpage markup
2020-09-23 15:04:22 +02:00
Max Kellermann
9b4f2ac79b
doc/meson.build: kludge to fix manpage installation directory
...
Ugly workaround for https://github.com/mesonbuild/meson/issues/1550
2020-09-23 14:47:43 +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
050adf6640
doc: rewrite the log_level documentation
2020-09-23 14:14:54 +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
85af4d6916
meson.build: add -Wdouble-promotion
2020-09-22 20:40:53 +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
45f8449c72
doc/user.rst: change C++14 to C++17
2020-09-22 20:40:49 +02:00
Max Kellermann
71bf1a8a3d
doc/protocol.rst: improve "pause" documentation
...
And un-deprecate "pause" without parameter (toggles pause). I have no
idea why it was deprecated long ago; the deprecation notice was copied
from the ancient MPD wiki.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/944
2020-09-22 20:16:02 +02:00
Max Kellermann
bc47a16943
Merge tag 'v0.21.26' into master
...
release v0.21.26
2020-09-21 15:20:02 +02:00
Max Kellermann
566787f041
release v0.21.26
2020-09-21 15:14:43 +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
1a5e0ef7c9
test/test_archive_iso9660.sh: use an odd chunk size to trigger bug
...
This makes the unit test fail. D'oh!
2020-09-07 20:53:46 +02:00
Max Kellermann
979a7a1dcc
test/run_input: add option --chunk-size
2020-09-07 20:52:37 +02:00
Max Kellermann
291be84704
Merge branch 'v0.21.x' into master
2020-09-07 20:18:40 +02:00
Max Kellermann
962cf32ba7
test/run_input: pass FileDescriptor to dump_input_stream()
2020-09-07 20:14:39 +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
88446ccde9
test/run_filter: use Filter::Flush()
2020-09-07 20:07:40 +02:00
Max Kellermann
6238cc0734
test/run_filter: pass ConstBuffer<void> to FullWrite()
2020-09-07 20:07:33 +02:00
Max Kellermann
fd4823c507
test/run_filter: fix error message
2020-09-07 20:07:29 +02:00
Max Kellermann
68bcfd8bf0
test/run_filter: check for partial writes
2020-09-07 20:07:24 +02:00
Max Kellermann
1d332746af
test/run_filter: move code to WriteOrThrow()
2020-09-07 20:07:18 +02:00
Max Kellermann
f3e133c617
test/run_filter: use class FileDescriptor
2020-09-07 20:07:13 +02:00
Max Kellermann
1678a6eb59
test/run_filter: ensure that partial frames will not get passed to the filter
2020-09-07 20:07:08 +02:00
Max Kellermann
b4dc2c07d5
test/run_filter: move the buffer into the loop
2020-09-07 20:07:03 +02:00
Max Kellermann
d7838950d8
test/run_input: use WithBufferedOutputStream()
2020-09-07 20:04:13 +02:00
Max Kellermann
2e93a83dd5
test/run_input: convert pointer to reference
2020-09-07 20:02:12 +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
5c9d97775f
python/build/libs.py: update Boost to 1.74.0
2020-09-04 14:49:11 +02:00
Max Kellermann
64aadcd13f
python/build/libs.py: update CURL to 7.72.0
2020-09-04 14:48:40 +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
3b51c53eca
win32/build.py: add -D_FORTIFY_SOURCE=0
...
This fixes the Windows build. Linking failed because some packages
(e.g. libFLAC) default to enabling `_FORTIFY_SOURCE`, which is broken
in recent mingw versions
(https://github.com/msys2/MINGW-packages/issues/5803 ).
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
35d1d0bc6e
Merge branch 'document-no-config-option' of git://github.com/naglis/MPD
2020-08-21 14:36:04 +02:00
Naglis Jonaitis
fefdb7d96d
doc/mpd.1.rst: document --no-config option
2020-08-21 15:22:07 +03:00
Max Kellermann
1d39a35b05
Merge branch 'use-stderr-option-in-docs' of git://github.com/naglis/MPD
2020-08-21 13:59:43 +02:00
Naglis Jonaitis
902f18fcca
doc/user.rst: use --stderr option in examples
...
--stdout was renamed to --stderr in 7261739526 .
2020-08-21 14:49:06 +03:00
Naglis Jonaitis
8145f34248
doc/mpd.1.rst: fix typo
2020-08-21 14:41:48 +03: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
2bdf1b2284
test/meson.build: add explicit dependency from run_output on libevent.a
...
We could exclude that feature if neither ALSA nor httpd are enabled,
but that's too complicated for this small debug program.
2020-08-14 14:40:39 +02:00
Max Kellermann
3f0805e7f6
doc/meson.build: let custom_target() install manpages
...
install_man() is currently broken with Meson and doesn't support a
custom target argument.
The problem with this kludge is that both mpd.1 and mpd.conf.5 are
installed in /usr/share/man/man1/, but apparently, there's no solution
yet.
2020-08-14 13:50:49 +02:00
Max Kellermann
4c93165a67
doc/meson.build: use install_man()
2020-08-14 13:18:52 +02:00
kaliko
5f63ffd86c
Convert raw manpages to reStructured text
...
Build with `rst2man mpd.1.rst mpd.1`
2020-08-14 13:14:34 +02:00
Max Kellermann
9df2469e51
meson_options.txt: add option html_manual
2020-08-14 13:02:19 +02:00
Max Kellermann
2e73e605f7
doc/meson.build: convert option "documentation" to Meson "feature"
...
This allows automatic optional detection of Sphinx. This will be
useful when we start building the manpages with Sphinx, which many
users may want to have.
2020-08-14 13:02:08 +02:00
Max Kellermann
2bcd8516ea
Merge branch 'use-ref-for-ffmpeg-decoder' of git://github.com/naglis/MPD
2020-08-14 13:01:37 +02:00
Naglis Jonaitis
5c3301f9a3
doc/plugins.rst: use reference to ffmpeg plugin section
...
Currently, the hardcoded URL points to a non-existent page.
2020-08-14 13:51:04 +03:00
Naglis Jonaitis
f1487c30bf
doc/plugins.rst: document archive plugins
2020-08-14 13:38:31 +03:00
Naglis Jonaitis
08c70b0702
doc/user.rst: document include_optional directive
2020-08-08 16:30:27 +03:00
Max Kellermann
df1bf28caa
Merge branch 'document-libmpg123-limitations' of git://github.com/naglis/MPD
2020-08-06 20:04:30 +02:00
Naglis Jonaitis
8b67ae0460
doc/plugins.rst: document libmpg123 limitations
2020-08-01 15:04:11 +03: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
3a08a6ad72
doc/plugins.rst: document sample formats for OpenSLES
2020-07-20 15:27:41 +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
77c2efe171
python/build/libs.py: update CURL to 7.71.1
2020-07-20 12:37:54 +02:00
Max Kellermann
587c0f6232
python/build/libs.py: update FFmpeg to 4.3.1
2020-07-20 12:37:16 +02:00
Max Kellermann
64e8abf203
python/build/libs.py: update libvorbis to 1.3.7
2020-07-20 12:34:16 +02:00
Max Kellermann
6c40d2a656
python/build/libs.py: update libmpdclient to 2.19
2020-07-20 12:32:19 +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
9bda0379af
increment version number to 0.21.26
2020-07-16 12:53:22 +02:00
Naglis Jonaitis
b04c6fbd72
doc: fix a few typos and missing words
2020-07-10 19:01:53 +03:00
Max Kellermann
b74a91427d
Merge tag 'v0.21.25'
...
release v0.21.25
2020-07-06 21:47:30 +02:00
Max Kellermann
c67372f8af
release v0.21.25
2020-07-06 21:41:53 +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
0b59f4eaee
doc/plugins.rst: merge redundant nfs:// documentation
2020-07-06 20:37:58 +02:00
Max Kellermann
402663de74
doc/plugins.rst: more markup
2020-07-06 20:34:04 +02:00
Max Kellermann
eaa66c7ee3
doc/plugins.rst: add smb:// with password example
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/864
2020-07-06 20:32:41 +02:00
Max Kellermann
996714d6ff
doc/plugins.rst: more markup
2020-07-06 20:32:11 +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
c72697ea27
Merge branch 'v0.21.x'
2020-07-01 17:37:35 +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
e709d9d15c
Merge branch 'v0.21.x'
2020-07-01 17:29:39 +02:00
Max Kellermann
2b7328b434
output/osx: fix coding style
2020-07-01 17:11:02 +02:00
Max Kellermann
e0e5ed62ee
meson.build: defaults for "build.c_std" and "build.cpp_std"
...
Since Meson 0.51, there are special build options for "native:true"
builds, prefixed with "build.". This change breaks cross builds
because `GenParseName.cxx` is no longer built with `-std=c++17`.
This patch adds defaults for "build.c_std" and "build.cpp_std".
Closes https://github.com/MusicPlayerDaemon/MPD/issues/890
2020-07-01 17:04:48 +02:00
Max Kellermann
3d7147390f
Merge branch 'v0.21.x'
2020-07-01 16:56:17 +02:00
Max Kellermann
ca705e1e37
python/build/meson.py: set BOOST_ROOT for Meson 0.54
...
Commit
08224dafcb
changed Meson to require BOOST_ROOT for cross builds.
2020-07-01 16:55:28 +02:00
Max Kellermann
3c5ef504f8
test/meson.build: add explicit dependency from run_output on libevent.a
...
We could exclude that feature if neither ALSA nor httpd are enabled,
but that's too complicated for this small debug program.
2020-07-01 15:26:02 +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
b7a99b4a4b
increment version number to 0.21.25
2020-06-11 06:29:08 +02:00
Max Kellermann
c6a7f6dabc
Merge tag 'v0.21.24'
...
release v0.21.24
2020-06-10 22:58:41 +02:00
Max Kellermann
24741c5d06
release v0.21.24
2020-06-10 22:48:50 +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
7583cfe9b7
{android,win32}/build.py: enable the GME decoder plugin
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/891
2020-06-10 21:33:29 +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
e92129f449
doc/protocol.rst: clarify the term "UNIX time"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/893
2020-06-10 20:42:42 +02:00
Max Kellermann
96a273bf3b
Merge branch 'misc/tar-python' of git://github.com/ibmibmibm/MPD
2020-06-10 17:54:22 +02:00
Max Kellermann
66c27d2c13
Merge branch 'document-idle-neighbor-mount' of git://github.com/naglis/MPD
2020-06-10 17:53:03 +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
c031f9aa5d
systemnd: configure LimitMEMLOCK for io_uring
...
The io_uring buffer is allocated as memlocked memory, as MPD needs to
be able to lock memory.
2020-06-09 21:09:00 +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
Naglis Jonaitis
d2362b7c31
doc: document neighbor and mount idle subsystems
2020-06-07 16:43:04 +03:00
Shen-Ta Hsieh
9a4059ba39
misc: use python builtin tar library when /bin/tar not found
2020-06-05 11:22:52 +08:00
Max Kellermann
759f4231d2
meson.build: set default option default_library=static
...
For subprojects.
2020-06-04 18:44:47 +02:00
Max Kellermann
0cefb61a2e
test/meson.build: install GTest from fallback Meson wrap
2020-06-04 14:56:43 +02:00
Max Kellermann
b7ab1a9d79
test/meson.build: disable GTest warning "ScopedTrace was marked unused but was used"
2020-06-04 10:32:02 +02:00
Shen-Ta Hsieh
d181ecce7b
macos: change CI xcode to 10.3 for c++17 support
...
c++17 is offered by default with Xcode 10
https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes
2020-06-04 08:35:02 +08:00
Shen-Ta Hsieh
d2d53cc9d6
doc: add docs for wasapi plugin
2020-05-30 22:21:03 +08:00
Shen-Ta Hsieh
93d87854e9
src/output: add wasapi output and mixer plugin
2020-05-30 22:21:03 +08:00
Shen-Ta Hsieh
e5eac71d72
win32: add COM helper classes
2020-05-30 22:21:03 +08:00
Max Kellermann
f20b927858
Merge branch 'v0.21.x'
2020-05-30 14:05:18 +02:00
Rosen Penev
e4dad42ca1
use std chr functions
...
The ones in std have overloads for const char/char.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-05-30 13:36:53 +02:00
Max Kellermann
99afe8e6d1
lib/icu/Win32: paranoid-ify the buffer length checks
...
Passing `length+1` to `MultiByteToWideChar()` means the function may
fill the whole buffer with output data, and could theoretically
overwrite the null terminator. In practice, this will never happen,
but this way, it's slightly more correct.
Also, null-terminate after `MultiByteToWideChar()`, after we got the
real output length. Again, this would never have been a problem, but
who knows...
2020-05-30 13:29:09 +02:00
Rosen Penev
1008d5f67c
use cwchar include
...
Needed for std::wmemchr under libcxx
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-05-30 13:22:04 +02:00
Shen-Ta Hsieh
169810e8f4
lib/icu: add null terminate in win32 string and wstring
2020-05-30 04:04:34 +08:00
Shen-Ta Hsieh
8e07ea7ad8
src/db: fitting libmpdclient interface
2020-05-29 19:00:16 +02:00
Max Kellermann
9f5c6d29b2
output/osx: use range-based for
2020-05-28 15:59:52 +02:00
Max Kellermann
f6823cc679
output/osx: move code to FindAudioDeviceByName()
2020-05-28 15:54:57 +02:00
Max Kellermann
69c0f0fe99
apple/AudioUnit: wrapper functions for AudioObject properties
2020-05-28 15:54:57 +02:00
Max Kellermann
28a00472ff
apple/Throw: new helper library replacing osx_os_status_to_cstring()
2020-05-28 15:06:53 +02:00
Max Kellermann
8d540737b9
output/osx: silently ignore some errors in osx_output_set_device()
2020-05-28 15:06:51 +02:00
Max Kellermann
1112d779be
apple/ErrorRef: new library wrapping CFErrorRef
2020-05-28 15:06:41 +02:00
Max Kellermann
ecced0ce13
apple/StringRef: new library wrapping CFStringRef
2020-05-28 15:06:38 +02:00
Max Kellermann
d751df0a73
storage/State: disable -Wcomma to work around Boost compiler warning
2020-05-28 14:00:31 +02:00
Max Kellermann
2c084781b0
output/openal: disable -Wdeprecated-declarations on Apple
2020-05-28 13:59:52 +02:00
Max Kellermann
6e1a21a42a
output/osx: make several fields const
2020-05-28 13:59:32 +02:00
Max Kellermann
80e8338014
output/osx: make variables more local
2020-05-28 13:44:28 +02:00
Max Kellermann
bfaa7afcb0
output/osx: make more AudioObjectPropertyAddress instances static constexpr
2020-05-28 13:39:46 +02:00
Max Kellermann
ae7d550a01
meson.build: remove -Wall -Wextra, to be set by Meson
2020-05-28 13:19:34 +02:00
Max Kellermann
7fdbaa6156
output/osx: make AudioObjectPropertyAddress variables static constexpr
2020-05-27 19:50:44 +02:00
Max Kellermann
aa7dc62f72
output/osx: don't use C99 designated initializers
...
Fixes `-Wpedantic`.
2020-05-27 19:50:43 +02:00
Max Kellermann
6a4992118a
lib/ffmpeg/Time: redefine AV_TIME_BASE_Q with initializer list
...
libavutil's macro definition is a compound literal, which is illegal
in C++. Fixes yet another -Wpedantic warning.
2020-05-27 16:55:55 +02:00
Max Kellermann
f03cc1012d
lib/upnp/Compat: workaround for -Wkeyword-macro
2020-05-27 16:50:27 +02:00
Max Kellermann
736a696f98
lib/upnp: drop support for libupnp versions older than 1.8
2020-05-27 16:49:02 +02:00
Max Kellermann
caec384ed0
archive/ArchiveList, input/Registry: avoid zero-sized array
...
Some more `-Wpedantic` fixups.
2020-05-27 16:31:52 +02:00
Max Kellermann
8fdc6dec44
meson.build: default to warning_level=3
...
Enables `-Wpedantic`.
2020-05-27 16:17:28 +02:00
Max Kellermann
5e93e882c9
Merge branch 'v0.21.x'
2020-05-27 16:16:30 +02:00
Max Kellermann
30d97fe8a0
meson.build: fix the WildMidi check when the feature is disabled
...
Fixes regression from commit 69f09648a4
2020-05-27 16:06:49 +02:00
Max Kellermann
5cb0080052
meson.build: default to warning_level=2
...
This branch isn't yet ready for level 3 (`-Wpedantic`) due to several
C++ violations (e.g. variable length arrays). These are already
cleaned up in the master branch (0.22).
2020-05-27 15:57:13 +02:00
Max Kellermann
8e4ca23727
lib/ffmpeg/Time: replace C99 compound literal with C++ initializer list
2020-05-27 15:54:34 +02:00
Max Kellermann
bdc861f058
util/TemplateString: remove extra semicolon
2020-05-27 15:46:55 +02:00
Rosen Penev
8925040262
remove some more extra semicolons
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-05-27 15:36:53 +02:00
Max Kellermann
c065950ced
.travis.yml: disable zzip on OS X to fix Travis-CI build failure
2020-05-27 15:31:34 +02:00
Max Kellermann
257a77fa35
{android,win32}/build.py: build libmodplug and WildMidi
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/866
2020-05-27 15:03:49 +02:00
Max Kellermann
4e5d6e560b
decoder/modplug: assume ModPlug is built as static library on Windows
2020-05-27 15:03:46 +02:00
Max Kellermann
d276d8eda2
decoder/wildmidi: assume WildMidi is built as static library on Windows
2020-05-27 15:03:35 +02:00
Max Kellermann
ebcb5e9368
decoder/wildmidi: use NarrowPath, fixing the Windows build
2020-05-27 15:03:33 +02:00
Max Kellermann
69f09648a4
meson.build: attempt to detect WildMidi using pkg-config
...
The WildMidi project added the pkg-config file in version 0.3.3, but
unfortunately, Debian still doesn't ship it 4 years later:
https://bugs.debian.org/916631
However, for cross-compiling, the pkg-config file is very helpful.
2020-05-27 15:03:16 +02:00
Max Kellermann
9adda30c38
NEWS: move two lines below Windows/Android
2020-05-27 14:33:43 +02:00
Shen-Ta Hsieh
c5f80dc543
Add .clang-format
2020-05-27 18:58:55 +08:00
Max Kellermann
d2d4a0251e
.gitignore: add emacs lsp-mode files
2020-05-26 21:07:56 +02:00
Max Kellermann
f7b6431b6f
meson.build: work around Meson bug detecting strndup() on Windows
...
Work around Meson bug https://github.com/mesonbuild/meson/issues/3672
2020-05-26 20:50:56 +02:00
Max Kellermann
03b9bd3a9e
python/build/libs.py: update FFmpeg to 4.2.3
2020-05-26 18:54:56 +02:00
Max Kellermann
6cc58ccb9b
lib/icu/Converter: add missing <string_view> include
2020-05-26 17:48:01 +02:00
Max Kellermann
210c270624
test/test_pcm_export: eliminate zero-length arrays
...
C++ doesn't allow that.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/875
2020-05-26 16:50:40 +02:00
Max Kellermann
be94b4373a
util/OffsetPointer: add noexcept
2020-05-14 15:44:23 +02:00
Max Kellermann
eeec0ee804
dsd/Dsd2Pcm: convert struct GenerateCtableValue to lambda
...
Since we have dropped support for GCC 6 a while ago, we can use
constexpr lambdas now.
2020-05-07 15:04:51 +02:00
Max Kellermann
a24ef280cc
meson.build: require GCC 8 or clang 5
...
Commit 60f957ed64 broken the GCC 7 build, but instead of working
around missing C++17 features in old compilers, let's update the
compiler version requirements.
This commit raises the clang requirement to version 5 because this is
the first version to support `constexpr` lambdas, to be used to
`Dsd2Pcm.cxx`.
2020-05-07 15:04:50 +02:00
Max Kellermann
d1d6a3871e
Merge branch 'v0.21.x'
2020-05-07 15:04:41 +02:00
Max Kellermann
61aed60f6d
python/build/libs.py: update CURL to 7.70.0
2020-05-07 14:18:55 +02:00
Max Kellermann
2cc323c9fe
python/build/libs.py: update Boost to 1.73.0
2020-05-07 14:18:21 +02:00
Max Kellermann
f24ab120ee
android/build.py: use -fpic instead of -fPIC on ARM/Aarch64
...
Sync with the Android NDK build scripts.
2020-05-07 13:58:36 +02:00
Max Kellermann
68349bc55c
android/build.py: use -mfpu=vfpv3-d16 on ARMv7
...
This flag is used by the Android NDK build scripts as well, and this
fixes a build failure (assembler error) with FFmpeg and NDK r21.
2020-05-07 13:50:33 +02:00
Max Kellermann
60f957ed64
util/MimeType: use string_view::substr()
...
Fixes regression from commit db93bb996c because
ParseMimeTypeParameters() assumed the items were null-terminated, but
after that commit, they were not anymore.
2020-05-06 20:33:13 +02:00
Max Kellermann
864d26cd1b
Merge branch 'bind' of git://github.com/neheb/MPD
2020-05-06 06:14:55 +02:00
Max Kellermann
ba576ffa37
Merge branch 'v0.21.x'
2020-05-05 19:00:53 +02:00
Max Kellermann
209364adf2
db/simple: fix crash when mounting twice
...
The `db->close()` call was a `nullptr` dereference because the `db`
variable had already been moved.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/839
2020-05-05 18:57:29 +02:00
Max Kellermann
dae8da7066
input/uring: new input plugin using io_uring
...
This is the final piece of the series to establish io_uring support on
Linux.
MPD doesn't need io_uring for its efficient bulk I/O support, but to
allow file I/O to be cancelled. This is a big problem on CIFS/NFS
mounts where processes sleep uninterruptable if the file server
disappears, deadlocking MPD.
With io_uring, a flaky NFS connection allows MPD to continue to work
(even though there are still deadlocks inside MPD which need to be
addressed).
This plugin does not yet use cancellable `open()` using
`IORING_OP_OPENAT`. This will be implemented later.
Lots of other optimization opportunities for io_uring are still
missing as well - for example the database update could benefit a lot,
but unfortunately, io_uring doesn't have `readdir()` support just yet.
2020-05-05 17:41:03 +02:00
Max Kellermann
cdf8ac001c
event/Loop: integrate io_uring support
2020-05-05 17:13:14 +02:00
Max Kellermann
62d0ceabcc
io/uring: basic Linux io_uring support
2020-05-05 17:10:17 +02:00
Max Kellermann
935e622915
event/Loop: allow calling AddFD()... before starting the EventThread
...
Relax the assertions. This is necessary if BlockingCall() is used
before the thread is started.
2020-05-05 17:10:17 +02:00
Max Kellermann
1efbbfcd6f
GitVersion: make GIT_VERSION const
2020-05-05 15:12:40 +02:00
Max Kellermann
e0edf0b206
meson.build: move VERSION and others to Version.h
2020-05-05 15:12:11 +02:00
Max Kellermann
4e9fa36176
meson.build: remove unused macro PACKAGE_VERSION
2020-05-05 15:08:39 +02:00
Max Kellermann
8f178401e4
*/plugins/meson.build: define feature macros in Features.h
...
This makes ccache more efficient when recompiling with different
plugins.
2020-05-05 15:06:50 +02:00
Max Kellermann
8c1d78873d
system/KernelVersion: new library
2020-05-05 14:30:56 +02:00
Max Kellermann
9815d10137
system/FileDescriptor: move to io/
2020-05-05 14:27:03 +02:00
Max Kellermann
97f7270aa8
fs/FileSystem: remove unused function FOpen()
2020-05-05 14:19:29 +02:00
Max Kellermann
1787aa5e00
decoder/sidplay: drop support for libsidplayfp < 1.8
2020-05-05 13:53:10 +02:00
Rosen Penev
e6a77e1297
remove std::bind usage as much as possible
...
Reduces unstripped size. stripped size is the same.
Also took the time to remove using std::placeholders.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-05-04 15:40:28 -07:00
skidoo23
e251fd0053
Add info about new song length format
2020-04-30 13:35:29 +02:00
Max Kellermann
24afdee35c
command/all: "tagtypes" requires no permissions
...
The command is used to configure the client's connection, and this
shouldn't require any permissions. The client should be able to do
that before sending a password.
2020-04-30 13:08:09 +02:00
Max Kellermann
7aea285361
Revert "Fix unsafe float comparison."
...
This reverts commit a5273d6992 . It was
wrong and broke the MixRamp unit test.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/844
2020-04-30 06:57:36 +02:00
Rosen Penev
47a7707df1
Math.hxx: fix wrong macro name
...
_GLIBCXX_USE_C99_MATH_TR1 is the correct one.
_GLIBCXX_USE_C99_MATH is always defined.
2020-04-29 23:20:04 +02:00
Max Kellermann
6fdae1139f
increment version number to 0.21.24
2020-04-29 23:20:04 +02:00
skidoo23
a485c4856c
decoder/sidplay: support new song length format with libsidplayfp 2.0
2020-04-29 16:27:54 +02:00
Sören Tempel
3c955639a7
doc: Document required order of currentsong response
...
The parser implemented in libmpdclient requires the first key-value pair
of the server response to be the file pair. This is due to the fact that
libmpdclient scan pairs sequentially and first attempts to extract the
file pair before parsing the currentsong response further. See:
5c751a761e/src/song.c (L559-L563)
Meta data encoded as pairs in the currentsong response will be ignored
if they are placed before the file pair in the response.
2020-04-27 17:47:24 +02:00
Max Kellermann
bca9678683
tag/FixString: use IsNonPrintableASCII()
...
Fixes breakage of non-ASCII characters, regression from commit
cc72ceb368
Fixes https://github.com/MusicPlayerDaemon/MPD/issues/842
2020-04-27 14:01:54 +02:00
Max Kellermann
814b2a218d
util/CharUtil: add IsNonPrintableASCII()
...
Prepare to fix cc72ceb368
2020-04-27 14:01:54 +02:00
John Regan
6423670eae
gme: use song-reported fade-out time when available
2020-04-26 09:24:34 -04:00
John Regan
90a2109fd1
gme: add configurable fade-out time
...
Also include fade-out time in song length.
2020-04-26 09:21:57 -04:00
Max Kellermann
464b90210c
tag/GenParseName: include stdlib.h for EXIT_SUCCESS
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/838
2020-04-24 20:39:24 +02:00
Max Kellermann
fa45a8adfa
tag/ParseName: generate an optimized tag_name_parse() at build time
2020-04-24 16:28:29 +02:00
Max Kellermann
1532983fb5
tag/Pool: use strncmp() without strlen() to compare strings
2020-04-24 16:16:19 +02:00
Max Kellermann
ae5b2643da
tag/Builder: reserve room in std::vector in default constructor
...
This reduces resource waste for resizing the std::vector in most
cases.
2020-04-24 16:16:19 +02:00
Max Kellermann
02556ffce9
tag/Tag: use class DereferenceIterator
2020-04-24 16:02:36 +02:00
Max Kellermann
18ca734819
util/DereferenceIterator: new utility class
2020-04-24 16:02:31 +02:00
Max Kellermann
8a28f7b0a1
tag/FixString: add optimistic quick check
...
Optimizes a few nanoseconds from the common code path.
2020-04-24 15:57:40 +02:00
Max Kellermann
cc72ceb368
tag/FixString: use IsPrintableASCII()
2020-04-24 15:42:09 +02:00
Naglis Jonaitis
c021efced1
Fix typo in documentation
2020-04-24 00:36:46 +03:00
Max Kellermann
0b3acc3eec
Merge tag 'v0.21.23'
...
release v0.21.23
2020-04-23 18:01:23 +02:00
Max Kellermann
6c240f667c
release v0.21.23
2020-04-23 17:46:20 +02:00
Max Kellermann
3040ddb5ec
lib/nfs/FileReader: use struct stat64 on Windows 32-bit
...
libnfs is compiled with `-D_FILE_OFFSET_BITS=64`, but Meson decides
not to enable this mode. We could force this mode, but then again,
these days, nobody should be using 32-bit Windows ... so this is a
kludge only for debugging with 32-bit WINE.
2020-04-23 17:32:34 +02:00
Max Kellermann
fdb28eb0c4
fs/NarrowPath: preserve nullptr in Path operator
...
Fixes Path::IsNull() checks on Windows.
2020-04-23 17:10:28 +02:00
Max Kellermann
7ded244a61
lib/nfs/Connection: pass POLLHUP and POLLERR to nfs_service()
2020-04-23 16:58:53 +02:00
Max Kellermann
8ed533acf3
event/SocketMonitor: handle epoll_ctl()=EBADF/ENOENT in Schedule()
...
This fixes a freeze bug in the NFS input/storage plugins: when libnfs
auto-reconnets after a failure, it installs the new socket on the same
file descriptor number. MPD's attempt to unregister the old socket by
calling SocketMonitor::Steal() from NfsConnection::ScheduleSocket()
fails because the new/old socket number is not registered in epoll, so
epoll_ctl() returns ENOENT. The problem is that it left
`scheduled_flags`, and so subsequent Schedule() calls will use
`EPOLL_CTL_MOD`, which will fail again and again. Instead, we need to
use `EPOLL_CTL_ADD` to register the new socket.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/806
Closes https://github.com/MusicPlayerDaemon/MPD/issues/756
2020-04-23 16:58:26 +02:00
Max Kellermann
a27580d0cc
lib/nfs/Connection: don't pass HANGUP to Schedule()
...
This flag is output-only.
2020-04-23 15:21:04 +02:00
Max Kellermann
905db05cf9
zeroconf/AvahiPoll: don't pass ERROR|HANGUP to Schedule()
...
These flags are output-only.
2020-04-23 15:19:24 +02:00
Max Kellermann
4242aee21e
event/SocketMonitor: remove HANGUP|ERROR from ScheduleRead()
...
These flags are output-only. Using them here is misleading.
2020-04-23 15:18:18 +02:00
Max Kellermann
e71bd2a08b
event/PollGroupWinSelect: make EVENT_{READ,WRITE} static
2020-04-23 15:10:57 +02:00
Max Kellermann
e53a4d0a9e
lib/nfs/FileReader: reset state in OnNfsCallback()
...
The object's state is `IDLE` when OnNfsCallback() gets invoked, so
let's use the start of the method to reset the `state` field.
2020-04-23 14:54:52 +02:00
Max Kellermann
159389164a
lib/nfs/FileReader: set state=IDLE before invoking callback
...
Fixes assertion failure if the callback fails.
2020-04-23 14:51:43 +02:00
geneticdrift
0a92fbc18e
tag/Fallback: add tag fallback for AlbumSort
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/832
2020-04-22 22:00:38 +02:00
Max Kellermann
138c29320b
gme: adapt to API change in the upcoming version 0.7.0
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/833
2020-04-22 21:53:00 +02:00
Max Kellermann
8f00dbea45
lib/icu/Compare: add Windows implementation
...
Using CompareStringEx() and FindNLSStringEx().
Implements a missing piece for
https://github.com/MusicPlayerDaemon/MPD/issues/820
2020-04-22 21:42:12 +02:00
Max Kellermann
f3fd2eb618
lib/icu/Compare: use AllocatedString::Clone()
2020-04-22 21:39:13 +02:00
Max Kellermann
fc92db83cf
lib/icu/Collate: use NORM_IGNORECASE instead of LINGUISTIC_IGNORECASE
...
LINGUISTIC_IGNORECASE is unimplemented on Wine, but since we don't
have any locale support (yet), and we're using LOCALE_NAME_INVARIANT,
NORM_IGNORECASE should essentially be the same, so why bother.
2020-04-22 21:39:13 +02:00
Max Kellermann
3b0f8d5516
lib/icu/CaseFold: remove Windows implementation
...
Reverts commit fb3564fbe7
LCMapStringEx() doesn't do what I imagined it would do 5 years ago.
D'oh!
Closes https://github.com/MusicPlayerDaemon/MPD/issues/820
2020-04-22 19:32:36 +02:00
Rosen Penev
a5273d6992
Fix unsafe float comparison.
...
Switching == to >= should be safe here since the next if is the opposite.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-04-22 18:21:40 +02:00
Rosen Penev
6979be008c
[clang-tidy] use auto
...
Found with modernize-use-auto.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-04-22 18:21:07 +02:00
Rosen Penev
71792ffd43
[clang-tidy] use raw string
...
Found with modernize-raw-string-literal
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-04-22 18:21:00 +02:00
Rosen Penev
3c145c0f49
[clang-tidy] add nodiscard
...
Found with modernize-use-nodiscard
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-04-22 18:20:51 +02:00
Thomas Guillem
b18074f899
storage/curl: fix path comparison when the server escapes differently
...
Unescape the base path and the path coming from the server (href) to fix the
comparison when the server uses different escaped characters.
The outputted name need to be unescaped. Doing that before or after the
HrefToEscapedName() call should not change the current behavior.
2020-04-15 13:50:12 +02:00
Thomas Guillem
3d8067a041
storage/curl: fix href when file has a '&' char
...
If the file name is "Hello & bye", 3 CharacterData events will be sent with the
State::HREF state:
- "Hello%20"
- "&"
- "%20bye"
Reproduced with files hosted on an apache2 DAV server: 2.4.38-3+deb10u3.
2020-04-15 13:18:16 +02:00
Florian Heese
f6fe001fa9
Added missing channel order setups for ALSA
2020-04-15 13:13:09 +02:00
Max Kellermann
55b8f2c533
NEWS: add line about Solaris change
2020-04-14 16:11:18 +02:00
Max Kellermann
32a5bf043b
player/Thread: drain outputs at end of song in "single" mode
...
Without this, the Pause() call would drop the ring buffers and would
skip a considerable portion of the end of the song.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/824
2020-04-14 16:07:03 +02:00
nia
8437b141a4
SolarisOutputPlugin: Support S8 and S32 encodings.
2020-04-14 14:38:30 +01:00
nia
1f0881eec0
SolarisOutputPlugin: Use AUDIO_INITINFO for initialization
...
This is recommended by Solaris and NetBSD documentation.
2020-04-14 14:20:24 +01:00
Max Kellermann
8d2079482f
Merge branch 'lkj' of git://github.com/neheb/MPD into v0.21.x
2020-04-14 13:12:42 +02:00
Max Kellermann
c331c75fde
increment version number to 0.21.23
2020-04-14 13:12:36 +02:00
Rosen Penev
6080c3b4ba
Math.hxx: move cmath include out of define
...
The _GLIBCXX_USE_C99_MATH macro is defined in glibcxx by c++config.h, which
gets included by every header. Which means a header needs to be present.
(cherry picked from commit 79e9aff338 )
2020-04-09 14:24:06 -07:00
Max Kellermann
3c240e2119
db/simple/DirectorySave: pass std::string_view to _load_subdir()
...
Eliminates one strlen() call.
2020-04-08 23:54:58 +02:00
Max Kellermann
57fb153c5d
db/Interface: pass std::string_view to GetSong()
2020-04-08 23:43:59 +02:00
Max Kellermann
212401d687
db/update/Service: pass std::string_view to Enqueue()
2020-04-08 23:38:28 +02:00
Max Kellermann
dd831d3922
db/simple: pass std::string_view to Directory::LookupDirectory()
2020-04-08 23:38:24 +02:00
Max Kellermann
9f8dc31b50
input/Plugin: copy protocols() to stack before using it
...
Fixes regression by commit 015cbff93d causing a crash bug because the
iterators of two different temporaries were used.
2020-04-08 23:37:32 +02:00
Max Kellermann
db93bb996c
util/SplitString: convert return value to std::string_view
...
Eliminates lots of overhead.
2020-04-08 23:14:25 +02:00
Max Kellermann
2c02a04566
db/update/Walk: pass std::string_view to DirectoryMakeUriParentChecked()
...
Split the string into path segments with StringView::Split(). This
prepares to eliminate all allocations from the method.
2020-04-08 23:09:37 +02:00
Max Kellermann
f13f66487a
fs/Charset: pass std::string_view to PathToUTF8()
2020-04-08 23:04:37 +02:00
Max Kellermann
0a4c5edc3b
Merge branch 'stl' of git://github.com/neheb/MPD
2020-04-08 23:03:44 +02:00
Rosen Penev
015cbff93d
[cppcheck] convert several functions to use std::all_of
...
std::all_of becomes constexpr in C++20. I'm not sure it results in better
performance.
Found with useStlAlgorithm
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-04-08 14:01:12 -07:00
Rosen Penev
79e9aff338
Math.hxx: move cmath include out of define
...
The _GLIBCXX_USE_C99_MATH macro is defined in glibcxx by c++config.h, which
gets included by every header. Which means a header needs to be present.
2020-04-07 20:14:00 -07:00
Max Kellermann
3a51fe31df
util/ConstBuffer, ...: use using instead of typedef
2020-04-06 15:19:12 +02:00
Max Kellermann
cc3e71d8c7
util/CharUtil: add IsHexDigit()
2020-04-06 15:07:08 +02:00
Max Kellermann
dd37b4656e
storage/{composite,local}: fix -Wnonnull warnings
2020-04-06 15:06:52 +02:00
Max Kellermann
e2d2bb8755
storage/Composite: use IterableSplitString()
2020-04-03 19:51:14 +02:00
Max Kellermann
a98d627c0b
storage/Interface: convert URI parameters to std::string_view
2020-04-03 19:45:10 +02:00
Max Kellermann
0080eee857
fs/Traits: add Relative() overload with std::string_view
2020-04-03 19:45:01 +02:00
Max Kellermann
2429cc8778
fs/Traits: convert first Relative() parameter to std::string_view
2020-04-03 19:29:29 +02:00
Max Kellermann
3a83a6b527
storage/Composite: NextSegment() returns std::string_view
2020-04-03 19:29:01 +02:00
Max Kellermann
bcf4645263
db/simple/Directory: add LookupResult::uri
2020-04-03 17:18:00 +02:00
Max Kellermann
6c8eb3c7ed
db/simple/Directory: rename LookupResult::uri to "rest"
2020-04-03 17:07:15 +02:00
Max Kellermann
870151214d
util/SplitString: convert parameter to std::string_view
2020-04-03 16:47:45 +02:00
Max Kellermann
ae4fd576bf
output/ao: use IterableSplitString() instead of SplitString()
2020-04-03 16:47:25 +02:00
Max Kellermann
747436b17e
db,storage: pass std::string_view to PathTraits::Build()
2020-04-03 16:25:09 +02:00
Max Kellermann
7a58b8c3e8
fs/AllocatedPath: pass std::string_view to FromUTF8()
2020-04-03 16:21:41 +02:00
Max Kellermann
56b4b010d6
fs/FileSystem, ...: use AllocatedPath::FromFS(string_view)
2020-04-03 16:13:15 +02:00
Max Kellermann
91c75a133f
lib/icu/Collate: pass std::string_view
2020-04-03 16:13:15 +02:00
Max Kellermann
e620677d7c
lib/icu/CaseFold: pass std::string_view
2020-04-03 16:13:14 +02:00
Max Kellermann
09d8e44d56
lib/icu/Converter: pass std::string_view
2020-04-03 16:13:14 +02:00
Max Kellermann
9dc530ab51
lib/icu/Util: pass std::string_view
2020-04-03 16:13:14 +02:00
Max Kellermann
2d0798cd4d
lib/icu/Win32: pass std::string_view
2020-04-03 16:13:14 +02:00
Max Kellermann
a269fc988b
fs/Charset: enable RVO in FixSeparators()
2020-04-03 16:12:51 +02:00
Max Kellermann
915c48f748
util/AllocatedString: std::string_view support
2020-04-03 16:08:55 +02:00
Max Kellermann
f04a245769
util/AllocatedString: add noexcept
2020-04-03 15:26:47 +02:00
Max Kellermann
a8687fb7df
util/AllocatedString: use using instead of typedef
2020-04-03 15:25:37 +02:00
Max Kellermann
3b88bac07c
util/StringPointer: add noexcept
2020-04-03 15:25:33 +02:00
Max Kellermann
358f231391
util/StringPointer: use using instead of typedef
2020-04-03 15:25:16 +02:00
Max Kellermann
f0923231d0
storage/Interface: pass std::string_view to MapChildFS()
2020-04-02 20:14:00 +02:00
Max Kellermann
dadf054fbb
db/simple/Directory: reimplement LookupDirectory() without allocations
...
Use std::string_view to avoid modifying the string for the temporary
null terminators.
2020-04-02 20:08:00 +02:00
Max Kellermann
6593b5998a
db/simple/Directory: pass std::string_view to several methods
2020-04-02 19:58:24 +02:00
Max Kellermann
386235e2d2
db/simple/Mount: pass std::string_view to WalkMount()
2020-04-02 19:52:03 +02:00
Max Kellermann
ddfd92e547
db/simple/PrefixedLightSong: templatize the constructor
2020-04-02 19:51:41 +02:00
Max Kellermann
d5fd309484
db/update/IO: pass std::string_view to directory_child_is_regular()
2020-04-02 19:50:16 +02:00
Max Kellermann
6197b29aa0
db/PlaylistInfo: pass std::string_view to CompareName
2020-04-02 19:49:39 +02:00
Max Kellermann
02294a8236
song/Filter: pass std::string_view to WithoutBasePrefix()
2020-04-02 19:49:24 +02:00
Max Kellermann
66bcf04cbd
db/update/Queue: pass std::string_view to Push()
2020-04-02 19:49:16 +02:00
Max Kellermann
12b97bbe38
Merge tag 'v0.21.22'
...
release v0.21.22
2020-04-02 18:02:10 +02:00
Max Kellermann
5ccfcffcc1
release v0.21.22
2020-04-02 17:48:56 +02:00
Max Kellermann
afe2aaa5f6
fs/io/GzipOutputStream: increase buffer size to 16 kB
...
Reduce I/O overhead.
2020-04-02 17:17:58 +02:00
Max Kellermann
9b11caa0e6
fs/io/BufferedReader: larger default buffer (4 kB -> 16 kB)
...
Reduce I/O overhead.
2020-04-02 17:17:27 +02:00
Max Kellermann
a689b881d3
test/meson.build: work around linker failure due to statically linked CURL
2020-04-02 17:16:05 +02:00
Max Kellermann
e94c436264
src/event/meson.build: depend in libnet.a
...
The event library uses various libnet.a classes,
e.g. SocketDescriptor.
2020-04-02 17:16:05 +02:00
Max Kellermann
bad829509e
test/ShutdownHandler: add inline to work around Windows linker problems
2020-04-02 17:16:05 +02:00
Max Kellermann
9c66b0414a
test/*: fix Windows build using class FromNarrowPath
2020-04-02 17:16:05 +02:00
Max Kellermann
4d453a8313
fs/NarrowPath: add class FromNarrowPath
...
Move code from ParseCommandLine().
2020-04-02 17:15:34 +02:00
Max Kellermann
61d7b436a2
fs/NarrowPath: un-inline Windows constructor
2020-04-02 16:27:44 +02:00
Max Kellermann
cdddaf21b0
db/simple/Directory: optimize GetName() using the parent's path
...
This method gets called a lot during MPD startup, via FindChild() and
directory_load_subdir(), so this is worth optimizing at the expense of
code readability.
This speeds up MPD startup by 10%.
2020-04-02 16:12:08 +02:00
Max Kellermann
b267ba5f0a
tag/Pool: enlarge hash table
...
This consumes more memory (plus 48 kB on 32 bit systems), but reduces
the number of hash collisions, speeding up MPD startup with large
databases.
2020-04-02 15:45:35 +02:00
Max Kellermann
8270043053
Revert "decoder/ffmpeg: copy the AVPacket in ffmpeg_send_packet()"
...
This reverts commit eb192137d6 .
This is no longer necessary because we require FFmpeg 3.1 or newer
since MPD 0.21.2.
This fixes a deprecation warning because the implicit AVPacket copy
constructor copies the deprecated attribute `convergence_duration`.
2020-04-01 17:30:28 +02:00
Max Kellermann
c00ce42bca
python/build/libs.py: update libmpdclient to 2.18
2020-04-01 17:17:30 +02:00
Max Kellermann
3852ddbbce
.travis.yml: install more packages on OSX
...
Enable lots of plugins for better CI coverage.
2020-04-01 16:37:45 +02:00
Max Kellermann
672bc3ab67
time/Convert: fix GetTimeZoneOffset() on Windows
...
Was using the wrong parameter.
2020-04-01 16:21:29 +02:00
Max Kellermann
62229f14da
test/time: add test for LocalTime(), GmTime()
2020-04-01 16:21:29 +02:00
Max Kellermann
a4c925c8d7
test/meson.build: move TestTime to time/
2020-04-01 16:12:01 +02:00
Max Kellermann
60610e90b1
test/net/TestIPv[46]Address: fix Windows build errors
2020-04-01 16:09:24 +02:00
Max Kellermann
90184e0ce7
python/build/libs.py: update CURL to 7.69.1
2020-04-01 15:49:16 +02:00
Max Kellermann
7d7bd51bc0
util/AllocatedArray: use using instead of typedef
2020-04-01 15:42:55 +02:00
Rosen Penev
71e551df42
replace locale.h with clocale
...
Switch to std:: functions. Changed the meson check. Works locally.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-31 18:05:23 -07:00
Max Kellermann
9c3e1d450a
fs/io/GunzipReader: increase buffer size to 64 kB
...
Reduces I/O overhead while reading a compressed database file.
2020-03-31 15:07:39 +02:00
Rosen Penev
3540cf26b1
replace exit and _exit with std variants
...
_exit and std::_Exit are identical, expect the latter is standard C++.
Added several functions to the std namespace as a result of headers.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-26 18:44:09 -07:00
Thomas Guillem
60f2116202
android/Settings: remove the EXPIRIMENTAL text
...
Using MPD from Android since quite some times now. I consider it very stable
now.
2020-03-26 17:31:31 +01:00
Thomas Guillem
4ff2532330
android: add TV support
...
TODO: Not sure the app could be accepted on the play store without a valid
banner.
2020-03-26 17:31:20 +01:00
Thomas Guillem
9c15760c4d
android/Main: handle API26 NotificationChannel
...
This seems to be required on recent Android versions (tested with Android 10).
This is also required for android TV services (cf. next commit).
This is done using Java reflection so that the project doesn't depend on
android compat libs.
2020-03-26 17:30:55 +01:00
Max Kellermann
e1c43ec65f
Merge branch 'ucl' of git://github.com/neheb/MPD into v0.21.x
2020-03-26 17:28:21 +01:00
Thomas Guillem
4dd10894ba
lib/curl/Request: fix Exception "error" on Android
...
Apparently, it's not possible to change CURLOPT_NETRC on Android.
2020-03-26 17:26:14 +01:00
Rosen Penev
608d7ec1e7
[clang-tidy] change integer prefixes to uppercase
...
Found with readability-uppercase-literal-suffix
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-26 17:25:20 +01:00
Max Kellermann
8474599ed6
lib/curl/Easy: add method Unpause()
2020-03-26 17:22:10 +01:00
Max Kellermann
ab39f64fc0
lib/curl/Easy: add setter functions
2020-03-26 17:21:30 +01:00
Max Kellermann
185fbca282
lib/curl/Global: make ReadInfo() private
2020-03-26 17:20:10 +01:00
Max Kellermann
6e3b2fd844
lib/curl/Global: remove redundant API docs
2020-03-26 17:20:06 +01:00
Max Kellermann
dab39dc778
lib/curl: fix coding style
2020-03-26 17:19:48 +01:00
Max Kellermann
8cd5e79fbd
event/*, ...: make GetEventLoop() const
2020-03-26 17:19:13 +01:00
Max Kellermann
1de3ac6c78
lib/curl/Init: add const overloads
2020-03-26 17:18:27 +01:00
Max Kellermann
abe06a5fa6
lib/curl/Init: add noexcept
2020-03-26 17:18:23 +01:00
Rosen Penev
85c27840a3
treewide: use boost::lround when std::round is unavailable
...
This is the case with uClibc-ng currently.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
(cherry picked from commit 769cd0ee9f0cf8ceb026aa751b5d4a390bb5dbdc)
(changed define to match master)
2020-03-25 18:54:15 -07:00
Thomas Guillem
81c16273c5
output/sles: use the AndroidMixerPlugin
2020-03-25 20:08:53 +01:00
Thomas Guillem
801ae86b5d
mixer: add AndroidMixerPlugin
2020-03-25 20:07:26 +01:00
Thomas Guillem
5619fd0bba
android: Context: add GetAudioManager
2020-03-25 20:07:25 +01:00
Thomas Guillem
200258c7c3
android: add AudioManager
2020-03-25 20:07:24 +01:00
Max Kellermann
5418bb49fb
android/Context: add noexcept
2020-03-25 20:07:18 +01:00
Max Kellermann
3449c14ff5
java/Object: rename class Object to GlobalObject
2020-03-25 20:07:15 +01:00
Rosen Penev
cfa4524cb3
util/Math: change define
...
This has nothing to do with uClibc. It has everything to do with gcc's
libstdc++.
C99 math can be compile time disabled for it. Check for that and use boost
lround when std is not available.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-25 19:27:45 +01:00
Rosen Penev
4fd0c84f46
replace lrint with lround
...
lrint is a configurable version of lround that behaves either as round,
floor, ceil, or trunc based on setting the proper FE_ macro using
fset/getround. Given that it's not set at all and that it defaults to
round behavior, simply replace with round.
Also removed the util/Math defines.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-25 19:27:44 +01:00
Rosen Penev
e41a52d909
change abs() to std::abs()
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-25 19:27:42 +01:00
Rosen Penev
01e00632cc
[cppcheck] fix format string
...
Found with invalidPrintfArgType_sint
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-25 19:27:40 +01:00
Rosen Penev
9bad5ee3c5
remove boost pow stuff for uClibc-ng
...
It's available there.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-24 17:21:21 -07:00
Rosen Penev
e87454ae88
MpcdecDecoderPlugin: use std variant of pow
...
It's available with uClibc-ng. It also offers overloads.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-24 17:16:51 -07:00
Rosen Penev
f319f88df4
[cppcheck] use const for several variables
...
Found with constVariable
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-23 21:03:22 -07:00
Max Kellermann
637840264a
util/WStringCompare: reorder functions to relocate API docs
2020-03-22 19:20:29 +01:00
Max Kellermann
3888bafc1f
util/StringCompare: add API documentation
2020-03-22 19:15:55 +01:00
Max Kellermann
adad4c7298
util/StringCompare: add missing include
2020-03-22 19:12:02 +01:00
Max Kellermann
d54acbcffd
Merge branch 'sles-assert-fix' of git://github.com/tguillem/MPD-1
2020-03-22 10:51:28 +01:00
kowalcj0
36a89e8fe7
Support RSS feeds with application/xml MIME-type
2020-03-22 10:49:38 +01:00
Max Kellermann
8e6a21a9c2
increment version number to 0.21.22
2020-03-22 10:48:53 +01:00
Thomas Guillem
86613af37e
output/sles: fix invalid assert
...
Regression from 973c87b351
2020-03-21 22:34:04 +01:00
Rosen Penev
ba3ff10ccd
remove false ifdef
...
The entire section falls under the else path of #ifdef _WIN32. Checking
for it makes no sense. Probably some refactoring mistake.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-20 17:56:33 -07:00
Max Kellermann
1ec283d213
util/Exception: include cleanup
2020-03-19 20:13:04 +01:00
Max Kellermann
2261bcb5d3
android/Environment: remove another extra semicolon
2020-03-19 20:13:04 +01:00
Max Kellermann
0e17629445
android/Environment: remove extra semicolon
2020-03-19 15:27:43 +01:00
Max Kellermann
0da6344726
Merge tag 'v0.21.21'
...
release v0.21.21
2020-03-19 15:26:27 +01:00
Max Kellermann
c560ec8ea6
release v0.21.21
2020-03-19 15:22:28 +01:00
Rosen Penev
cade4e71c4
[clang-tidy] add [[nodiscard]]
...
Found with modernize-use-nodiscard
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-19 13:38:40 +01:00
Rosen Penev
403612c666
[clang-tidy] run through performance checks
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-19 13:38:40 +01:00
Rosen Penev
7fe49cf24d
[clang-tidy] use default member init
...
Found with modernize-use-default-member-init
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-19 13:38:40 +01:00
Rosen Penev
d2115e908a
[clang-tidy] remove redundant access specifiers
...
Found with readability-redundant-access-specifiers
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-19 13:38:40 +01:00
Max Kellermann
56c234b410
raise default "max_connections" value to 100
...
Documentation says the limit is 5, but it was really 10 (at least
since 2004). But since MPD wants to promote using many small clients
idling around, and these clients consume only very few resources, it
seems reasonable to raise this limit's default value.
2020-03-19 13:30:46 +01:00
Max Kellermann
61b5ab2663
thread/CriticalSection: remove extra semicolons
2020-03-17 16:57:57 +01:00
Rosen Penev
84f71cec2c
add two extra noreturn that clang picked up
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 23:02:35 -07:00
Rosen Penev
a5b136c420
test: fix double promotion
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 22:56:30 -07:00
Rosen Penev
c7144ed5c7
add recently fixed warnings to warning list
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 22:56:29 -07:00
Rosen Penev
00b9f69c90
remove some more extra semicolons
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 13:37:13 -07:00
Rosen Penev
6d91b5c7b2
fix double promotions
...
Found with -Wdouble-promotion
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 12:43:24 -07:00
Max Kellermann
fd71514068
Merge remote-tracking branch 'neheb/h'
2020-03-16 17:29:05 +01:00
Max Kellermann
256cfc545d
Merge remote-tracking branches 'neheb/fwhfggwe', 'neheb/nvm2', 'neheb/nvm22', 'neheb/bvm' and 'neheb/cl2'
2020-03-16 17:25:50 +01:00
Rosen Penev
77c6c3fabf
remove unreachable code
...
Found with -Wunreachable-code-break
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 00:14:13 -07:00
Rosen Penev
e25a3d17e7
remove extra semicolon
...
Found with -Wextra-semi
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 00:13:20 -07:00
Rosen Penev
7f10e7a610
fix implicit-fallthrough warnings under clang
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 00:12:38 -07:00
Rosen Penev
88d56c01e7
fix missing overrides
...
Found with clang's -Winconsistent-missing-destructor-override
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 00:11:15 -07:00
Rosen Penev
97425d56e7
remove gcc_unused
...
[[maybe_unused]] (introduced in C++17) is standard C++.
https://clang.llvm.org/docs/AttributeReference.html#maybe-unused-unused
says that this is equivalent to the GNU unused attribute.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 00:08:21 -07:00
Rosen Penev
0afb156a5b
remove gcc_warn_unused
...
[[nodiscard] (introduced in C++17) can be used instead.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 00:08:21 -07:00
Rosen Penev
a192e7b29b
remove gcc_deprecated
...
[[deprecated]] (introduced in C++14) may be used instead.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 00:08:21 -07:00
Rosen Penev
591f51f3d3
replace noreturn attribute with standard C++ version
...
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-16 00:08:18 -07:00
Rosen Penev
5e4b7e2fb7
[clang-tidy] fix incorrect rounding
...
Found with bugprone-incorrect-roundings
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-15 20:22:08 -07:00
Rosen Penev
177371a003
treewide: get rid of C math function usage
...
Boost does not seem to offer an overload for lrint.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-15 20:22:07 -07:00
Rosen Penev
a78841d6a9
volume_mapping: get rid of exp10 workaround
...
exp10 is a GNU function, is not part of C++, and is not available
everywhere.
pow(10,x) is an alternative that works just as well. It is used in musl as
the implementation of exp10.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-15 20:17:31 -07:00
Rosen Penev
3ec9fcfc44
treewide: use boost::lround when std::round is unavailable
...
This is the case with uClibc-ng currently.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-15 20:17:31 -07:00
Max Kellermann
b5d1a09010
util/StringUtil: pass std::string_view to StringArrayContainsCase()
2020-03-13 20:38:40 +01:00
Max Kellermann
85b072b3d3
util/StringCompare: add StringIsEqual() with string_view
2020-03-13 20:36:48 +01:00
Max Kellermann
8a1f1fbe06
util/ASCII: migrate to std::string_view
2020-03-13 20:17:53 +01:00
Max Kellermann
45b60b3d38
fs/Traits: GetParent() returns std::string_view
2020-03-13 20:01:10 +01:00
Max Kellermann
cefc773992
playlist/PlaylistSong: pass std::string_view
2020-03-13 19:58:36 +01:00
Max Kellermann
a885bdba4c
fs/Traits: pass string_view to Build()
2020-03-13 19:55:28 +01:00
Max Kellermann
b6b15afb5a
fs/Path: make constructor explicit
2020-03-13 19:55:25 +01:00
Max Kellermann
1d560c8f0f
fs/AllocatedPath: add string_view constructor
2020-03-13 19:46:29 +01:00
Max Kellermann
189f6eaa6f
fs/Traits: add string_view
2020-03-13 19:43:39 +01:00
Max Kellermann
87f78b9c39
fs/Traits: use {} notation for return values
2020-03-13 19:43:23 +01:00
Max Kellermann
aa722bd8ac
fs/Traits: use auto
2020-03-13 19:43:23 +01:00
Max Kellermann
58c7ec07a4
fs: use using instead of typedef
2020-03-13 19:43:23 +01:00
Max Kellermann
3796247d6d
util/Stringview: use const_pointer instead of hard-coding const char *
...
Fixes Windows build failure.
2020-03-13 19:43:23 +01:00
Max Kellermann
332f480ec3
util/UriExtract: uri_get_path() returns std::string_view
2020-03-13 18:54:41 +01:00
Max Kellermann
9a164668f2
util/UriExtract: migrate uri_get_scheme() to std::string_view
2020-03-13 18:51:11 +01:00
Max Kellermann
6876d160cf
util/StringCompare: add more StringView overloads
2020-03-13 18:49:47 +01:00
Max Kellermann
a63d0ee8fc
util/StringView: add method substr()
2020-03-13 18:48:40 +01:00
Max Kellermann
d4135935e4
lib/upnp/Util: remove unused function stringToTokens()
2020-03-13 17:59:07 +01:00
Max Kellermann
569773cc75
lib/upnp/Device: remove UPnPService::clear()
2020-03-13 17:56:29 +01:00
Rosen Penev
a2f5a63bbc
replace stdint.h with cstdint
...
The former is deprecated by C++14. The standard says they are the same:
The header defines all types and macros the same as the C standard library
header<stdint.h>.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-12 19:04:39 -07:00
Rosen Penev
2db8bcc353
replace stddef.h with cstddef
...
The former is deprecated with C++14. The standard says both are the same:
The contents and meaning of the header<cstddef>are the same as the C
standard library header<stddef.h>,except that it does not declare the type
wchar_t, that it also declares the type byte and its associated
operations (21.2.5), and as noted in 21.2.3 and 21.2.4.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-12 19:04:38 -07:00
Rosen Penev
c846ee0d1b
replace stdarg.h with cstdarg
...
The former was deprecated in C++14. The Standard says they are the same:
The contents of the header<cstdarg>are the same as the C standard library
header<stdarg.h>, with the following changes: The restrictions that ISO C
places on the second parameter to the va_start macro in header<stdarg.h>
are different in this International Standard. The parameter parmN is the
rightmost parameter in the variable parameter list of the function
definition (the one just before the...).219If the parameter parmN is a
pack expansion (17.5.3) or an entity resulting from a lambda capture
(8.1.5), the program is ill-formed, no diagnostic required. If the
parameter parmN is of a reference type, or of a type that is not
compatible with the type that results when passing an argument for which
there is no parameter, the behavior is undefined.
Also changed va_list to the std:: namespace version, which is the same.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-12 19:03:12 -07:00
Rosen Penev
69a51e12c9
replace signal.h with csignal.h
...
The former was deprecated with C++14. The standard says they are the same:
The contents of the header<csignal>are the same as the C standard library
header<signal.h>.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-12 18:56:51 -07:00
Rosen Penev
4b57b7f5a5
replace limits.h with climits
...
The former was deprecated with C++14. The standard says they are the same
with one exception:
The header<climits>defines all macros the same as the C standard library
header<limits.h>.
[Note:The types of the constants defined by macros in<climits>are not
required to match the types to which themacros refer.— end note]
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-12 16:14:04 -07:00
Rosen Penev
5cd400f578
replace inttypes.h with cinttypes
...
The former has been deprecated by C++14. They are also the same.
From the standard:
The contents and meaning of the header<cinttypes>are the same as the C
standard library header<inttypes.h>, with the following changes:
-The header<cinttypes>includes the header<cstdint>instead of<stdint.h>,and
—if and only if the typeintmax_tdesignates an extended integer type
(6.7.1), the following functionsignatures are added:intmax_t
abs(intmax_t);imaxdiv_t div(intmax_t, intmax_t);which shall have the same
semantics as the function signaturesintmax_t imaxabs(intmax_t)andimaxdiv_t
imaxdiv(intmax_t, intmax_t), respectively.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-12 16:07:28 -07:00
Rosen Penev
edc4989d9c
change errno.h to cerrno
...
The former is deprecated by C++14. It's also functionally the same.
From the standard:
19.4
The header<cerrno>is described in Table 43. Its contents are the same as
the POSIX header<errno.h>,except that errno shall be defined as a macro.
[Note: The intent is to remain in close alignment with the POSIX
standard.] A separate errno value shall be provided for each thread.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-12 15:51:16 -07:00
Rosen Penev
2b3d6461e3
remove unused ctype.h header
...
None of the functions in these files come from ctype.h
Also changed one instance of isdigit to the C++ variant.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-12 15:43:50 -07:00
Rosen Penev
ab9f5d2067
replace assert.h with cassert
...
The former was deprecated with C++14.
According to the C++11 and C++17 standards, both files are identical.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-12 15:25:38 -07:00
Max Kellermann
a718086ffb
test/run_convert: add option --config
2020-03-12 21:41:39 +01:00
Max Kellermann
8d40e68dec
test/run_convert: add option --verbose
2020-03-12 21:41:39 +01:00
Max Kellermann
de0affe115
test/run_convert: move code to ParseCommandLine()
2020-03-12 21:40:27 +01:00
Max Kellermann
26e718c7c3
doc/user.rst, .travis.yml: drop GCC 6 support
...
Debian Stable (Buster) has GCC 8 and Ubuntu LTS (18.04) has GCC 7.
This will unlock a lot of C++17 features like `std::string_view`.
2020-03-12 21:37:07 +01:00
Max Kellermann
82743dfd02
playlist/asx: concatenate multiple CharacterData fragments
...
Similar to c45f113856
2020-03-12 21:07:37 +01:00
Rosen Penev
f00f8b002a
[clang-tidy] use nodiscard
...
Introduced in C++17. It replaces gcc's warn_unused_result.
Found with modernize-use-nodiscard.
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-03-12 12:59:16 -07:00
Max Kellermann
33694642bd
playlist/asx: add State::TAG
2020-03-12 20:42:16 +01:00
Max Kellermann
c71242d743
playlist/asx: use tag_table to convert element name to TagType
2020-03-12 20:40:18 +01:00
Max Kellermann
2229e86673
client/Expire: cancel the BackgroundCommand before deleting it
...
Fixes assertion failure.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/774
2020-03-12 20:32:08 +01:00
Max Kellermann
f24c274f5c
client/BackgroundCommand: fix typo in comment
2020-03-12 20:32:07 +01:00
Max Kellermann
3824bf66ca
lib/chromaprint/DecoderClient: add assertion
2020-03-12 20:32:07 +01:00
Max Kellermann
d942f874ae
lib/chromaprint/DecoderClient: check ready in GetCommand()
...
Fixes access to uninitialized memory (`remaining_bytes` isn't
initialized until Ready() is called) and fixes spurious
`getfingerprint` failures.
2020-03-12 20:31:46 +01:00
Max Kellermann
01632d37ef
Merge branch 'v0.21.x'
2020-03-12 08:11:08 +01:00
Max Kellermann
c45f113856
playlist/xspf: concatenate multiple CharacterData fragments
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/781
2020-03-12 08:02:58 +01:00
Max Kellermann
e0a8fd398c
playlist/xspf: add State::TAG
2020-03-12 08:00:54 +01:00
Max Kellermann
3e97058151
playlist/xspf: move location.empty() check to _start_element()
2020-03-11 20:54:53 +01:00
Max Kellermann
51b1dd8672
playlist/xspf: use tag_table to convert element name to TagType
2020-03-11 20:51:47 +01:00
Max Kellermann
98a7d8da6c
playlist/xspf: use C++11 initializer
2020-03-11 20:51:10 +01:00
Max Kellermann
acb29f792f
tag/Mask: fix yet another typo, this time in Unset()
...
Similar to commits e8f2f98048 and
ff1ff1e54a
Closes https://github.com/MusicPlayerDaemon/MPD/issues/783
2020-03-11 20:34:02 +01:00
Max Kellermann
cd364023ae
.travis.yml: rename "matrix" to "jobs"
...
Travis has changed the canonical name for this a while ago.
(Now really. The last commit for this was empty.)
2020-03-07 09:31:46 +01:00
Max Kellermann
8d34a1cfc6
archive/iso9660: skip empty filenames
...
Aparently, libcdio sometimes returns empty filenames, causing MPD
crashes. This shouldn't really happen, and I consider this a libcdio
bug - but if it happens, people blame MPD, so let's add a check.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/776
2020-03-07 09:30:56 +01:00
Max Kellermann
73a1f078a6
archive/iso9660: use IsSpecialFilename()
2020-03-07 09:30:56 +01:00
Max Kellermann
b7ce452308
fs/Traits: add IsSpecialFilename()
...
Merge some duplicate code in a central library.
2020-03-07 09:30:56 +01:00
Max Kellermann
5faf76051d
.travis.yml: force updating homebrew on OSX
...
Workaround for Travis failures as described in
https://travis-ci.community/t/macos-build-fails-because-of-homebrew-bundle-unknown-command/7296/18
2020-03-07 09:30:56 +01:00
Max Kellermann
5fe70a3417
.travis.yml: rename "matrix" to "jobs"
...
Travis has changed the canonical name for this a while ago.
2020-03-07 09:30:56 +01:00
Thomas Klausner
7a68b1e71f
Adapt SolarisOutputPlugin.cxx to be usable on NetBSD.
2020-02-29 10:05:29 +01:00
Thomas Klausner
d5468dfe89
Add missing header.
...
Fixes
../src/time/ISO8601.cxx:67:24: error: use of undeclared identifier 'strtoul'
unsigned long value = strtoul(s, &endptr, 10);
^
../src/time/ISO8601.cxx:77:14: error: use of undeclared identifier 'strtoul'
minutes = strtoul(s, &endptr, 10);
^
on NetBSD with clang 9.0.0.
2020-02-29 10:04:54 +01:00
John Regan
976372ff63
gme: check for empty metadata strings instead of nullptr
...
Using libgme 0.6.2 on macOS, it appears that gme_info_t strings can be
empty, which creates weird track titles: (001/050)
This adds an additional check for an empty string.
2020-02-25 20:12:08 +01:00
Max Kellermann
c977d646c7
Merge remote-tracking branches 'neheb/j', 'neheb/f', 'neheb/qwe' and 'neheb/hgf'
2020-02-20 16:58:17 +01:00
Rosen Penev
ac50bb5d2b
[clang-tidy] remove needless std::move
...
Found with performance-move-const-arg
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-20 16:47:34 +01:00
Max Kellermann
85e33f7d60
lib/dbus/Udisks2: make path non-const to allow moving from it
2020-02-20 16:47:32 +01:00
Max Kellermann
7646866a32
neighbor/smbclient: make iterators non-const to enable the std::move()
2020-02-20 16:47:32 +01:00
Max Kellermann
d072b3cb17
storage/smbclient: remove misplaced .c_str() call
2020-02-20 16:47:32 +01:00
Max Kellermann
646fef108a
storage/composite: make variable non-const to enable the std::move()
2020-02-20 16:41:38 +01:00
Max Kellermann
d1cc73775f
Instance: flush input cache on SIGHUP
2020-02-17 15:23:05 +01:00
Max Kellermann
29d05cdb8e
unix/SignalHandlers: pass Instance to ...Init()
2020-02-17 15:23:03 +01:00
Max Kellermann
322d6f2a40
doc/user.rst: add section "Signals"
2020-02-17 15:22:45 +01:00
Max Kellermann
7729713924
doc/user.rst: add section "Starting MPD"
...
Move the existing systemd sections over there.
2020-02-17 12:21:05 +01:00
Rosen Penev
351a4a80d2
[clang-tidy] use using instead of typedef
...
Found with modernize-use-using
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-16 19:22:32 -08:00
Rosen Penev
87f7b0f0bb
[clang-tidy] use emplace_back
...
Found with hicpp-use-emplace
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-16 19:21:55 -08:00
Rosen Penev
6d3190fe5f
[clang-tidy] use = default
...
Found with modernize-use-equals-default
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-16 17:10:18 -08:00
Rosen Penev
5d787806fe
[clang-tidy] add ending namespace comments
...
Found with llvm-namespace-comment
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-16 16:44:37 -08:00
Max Kellermann
9abb686eeb
increment version number to 0.21.21
2020-02-16 20:48:46 +01:00
Max Kellermann
dea0cc165d
input/cache/Manager: add method Flush()
2020-02-16 20:46:24 +01:00
Max Kellermann
07e0a31d02
Merge tag 'v0.21.20'
...
release v0.21.20
2020-02-16 20:46:13 +01:00
Max Kellermann
f24bcc7f42
release v0.21.20
2020-02-16 20:43:35 +01:00
Max Kellermann
89800324cb
.travis.yml: use GTest 1.8.0 instead of HEAD
...
Fixes strange C++11 compatibility problems during GTest installation:
/tmp/gtest-20200216-20679-mu1044/googletest/include/gtest/internal/gtest-internal.h:1249:1: error: unknown type name 'constexpr'
constexpr bool TypedTestCaseIsDeprecated() { return true; }
/tmp/gtest-20200216-20679-mu1044/googletest/include/gtest/internal/gtest-internal.h:1249:11: error: expected unqualified-id
constexpr bool TypedTestCaseIsDeprecated() { return true; }
/tmp/gtest-20200216-20679-mu1044/googletest/include/gtest/internal/gtest-internal.h:1254:1: error: unknown type name 'constexpr'
constexpr bool RegisterTypedTestCase_P_IsDeprecated() { return true; }
2020-02-16 20:33:15 +01:00
Rosen Penev
050e30418c
Fix travis
...
pip is bugged on arm64 and s390x. Add --no-cache-dir to fix. For
consistency, it doesn't hurt to add everywhere.
2020-02-16 19:29:30 +01:00
Max Kellermann
36a678276b
storage/composite: no "=default" in constructor
...
Closes https://github.com/MusicPlayerDaemon/MPD/pull/739 (essentially
the same, but with a proper explanation)
2020-02-16 19:07:08 +01:00
Max Kellermann
d4a6d647a0
Merge branch 'efuhgeh' of git://github.com/neheb/MPD
2020-02-16 19:03:35 +01:00
Max Kellermann
5397d18ed9
protocol/ArgParser: cast seek offset to SignedSongTime
...
"The issue is that ParseCommandArgSignedSongTime parses with
SongTime::FromS, not SignedSongTime::FromS, before casting back to a
SignedSongTime for the return. With x86 overflow rules this doesn't
matter, but on ARM the first cast turns negative values to zero."
Closes https://github.com/MusicPlayerDaemon/MPD/issues/757
2020-02-10 09:18:37 +01:00
Max Kellermann
2d3b51665e
util/BitReverse: generate table with constexpr function
...
Get rid of the macro hell.
2020-02-05 19:51:46 +01:00
Max Kellermann
7b03f55cb4
util/bit_reverse: convert to C++
2020-02-05 19:49:18 +01:00
Max Kellermann
b84444b680
archive/iso9660: rewrite the macro CEILING as function
2020-02-05 19:43:20 +01:00
Max Kellermann
1e421cbcb2
Merge remote-tracking branches 'neheb/patch-2', 'neheb/con', 'neheb/cons', 'neheb/guruhg', 'neheb/r12R3', 'neheb/fefgheh' and 'neheb/rhgerg3453'
2020-02-05 19:36:01 +01:00
Rosen Penev
a4eed3e330
[clang-tidy] use forward instead of move
...
Found with bugprone-move-forwarding-reference
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-04 18:31:00 -08:00
Rosen Penev
b9db8ddee6
[clang-tidy] remove misplaced const
...
The rhs evaluates to void *const, not const void*.
Found with misc-misplaced-const
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-04 15:27:14 -08:00
Rosen Penev
9cf1385765
[clang-tidy] remove static in namespace
...
Found with readability-static-definition-in-anonymous-namespace
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-04 15:25:31 -08:00
Rosen Penev
a3963de668
[clang-tidy] change integer prefixes to uppercase
...
Found with readability-uppercase-literal-suffix
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-04 15:20:50 -08:00
Rosen Penev
7d2c4ec775
[clang-tidy] remove unneeded return
...
Found with readability-redundant-control-flow
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-04 15:19:52 -08:00
Rosen Penev
1de5bd64d8
[clang-tidy] remove const in declaration
...
Found with readability-avoid-const-params-in-decls
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-04 15:17:10 -08:00
Rosen Penev
1923cf3844
remove redundant const qualification
...
Found with readability-const-return-type
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-04 15:16:28 -08:00
Rosen Penev
196d5fde65
Fix travis
...
pip is bugged on arm64 and s390x. Add --no-cache-dir to fix. For
consistency, it doesn't hurt to add everywhere.
2020-02-04 14:35:52 -08:00
Max Kellermann
140d8547c7
test/run_decoder: add option --seek
2020-02-04 22:19:21 +01:00
Max Kellermann
42eb69f46f
test/meson.build: restore -Wno-missing-declarations for GTest
...
This is still needed for GTest 1.8.0 (Travis / Ubuntu Bionic).
2020-02-04 22:06:51 +01:00
Max Kellermann
6f579ddc95
test/DumpDecoderClient: allow overriding GetCommand()
2020-02-04 21:55:21 +01:00
Max Kellermann
8e4cb3217e
lib/xiph/OggSyncState: fix offset counter by using the actual page size
2020-02-04 21:38:08 +01:00
Max Kellermann
7bcccbedad
Merge remote-tracking branches 'neheb/bind', 'neheb/move' and 'neheb/str'
2020-02-04 17:03:49 +01:00
Max Kellermann
7c62887df7
tag/ApeTag: don't take reference of IterableSplitString() elements
...
This doesn't work because IterableSplitString() returns its elements
by value.
Fixes clang warning:
loop variable 'i' is always a copy because the range of type 'IterableSplitString' (aka 'BasicIterableSplitString<char>') does not return a reference [-Werror,-Wrange-loop-analysis]
2020-02-04 16:53:45 +01:00
Max Kellermann
3fc859c42d
Merge branch 'v0.21.x'
2020-02-04 16:49:18 +01:00
Max Kellermann
f1ad21d2bf
test/meson.build: add -Wno-unused-command-line-argument for clang 9+
2020-02-04 16:35:44 +01:00
Max Kellermann
535a099a27
test/meson.build: drop obsolete gtest warning suppressions
2020-02-04 16:32:13 +01:00
Max Kellermann
50003f6ad2
decoder/ffmpeg: add two more missing commas
2020-02-04 16:30:05 +01:00
Rosen Penev
0914644d2b
add missing comma
...
Found with bugprone-suspicious-missing-comma
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-04 16:29:23 +01:00
Rosen Penev
7e41c4de58
[clang-tidy] use == instead of compare for strings
...
Found with readability-string-compare
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-02 20:11:25 -08:00
Rosen Penev
452c41b71f
[clang-tidy] convert several functions to const &
...
Found with performance-unnecessary-value-param
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-02 13:21:27 -08:00
Max Kellermann
4b0444e760
Merge remote-tracking branches 'neheb/uniq', 'neheb/bool', 'neheb/loop', 'neheb/bool2', 'neheb/perf', 'neheb/void' and 'neheb/value'
2020-02-02 16:22:19 +01:00
Rosen Penev
ecad6d936a
[clang-tidy] pass by value where appropriate
...
Found with modernize-pass-by-value
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-01 19:53:44 -08:00
Rosen Penev
568deefd68
[clang-tidy] remove pointless void arg
...
Found with modernize-redundant-void-arg
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-01 19:52:38 -08:00
Rosen Penev
40d0420648
[clang-tidy] convert several loops to const auto&
...
Found with performance-for-range-copy
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-01 19:49:17 -08:00
Rosen Penev
afb29942b0
[clang-tidy] simplify boolean expressions
...
Found with readability-simplify-boolean-expr
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-01 19:47:47 -08:00
Rosen Penev
15fa780c99
[clang-tidy] convert several loops to range based ones
...
Found with modernize-loop-convert
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-01 19:46:50 -08:00
Rosen Penev
9db3809c7b
[clang-tidy] use bool literals where appropriate
...
Found with modernize-use-bool-literals
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-01 19:45:33 -08:00
Rosen Penev
dfed9546aa
[clang-tidy] replace std::bind with lambdas
...
Found with modernize-avoid-bind
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-01 19:43:01 -08:00
Rosen Penev
469cd9582f
[clang-tidy] use make_unique
...
Found with modernize-make-unique
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-02-01 19:40:39 -08:00
Max Kellermann
bc6eca2115
*: add explicit
2020-02-01 14:02:43 +01:00
Max Kellermann
72ec641f0d
*: use auto
2020-02-01 14:02:43 +01:00
Max Kellermann
4f22f4d357
*: use nullptr instead of NULL
2020-02-01 14:02:43 +01:00
Max Kellermann
4c52001a35
*: use defaulted destructors
2020-02-01 13:47:16 +01:00
Max Kellermann
faa04966af
test/test_pcm_*: use using instead of typedef
2020-02-01 13:38:55 +01:00
Max Kellermann
302eff0a59
decoder/{vorbis,mpcdec}: use using instead of typedef
2020-02-01 13:38:43 +01:00
Max Kellermann
bcc4e97c60
pcm/PcmFormat: use using instead of typedef
2020-02-01 13:38:19 +01:00
Max Kellermann
4968dd4faa
pcm/Dither: use using instead of typedef
2020-02-01 13:38:00 +01:00
Max Kellermann
0896f44455
util/Domain: add noexcept
2020-02-01 13:25:57 +01:00
Max Kellermann
620872390b
util/Exception: move the forwarded std::exception_ptr
2020-02-01 13:13:08 +01:00
Max Kellermann
f7c326dbeb
net/StaticSocketAddress: make the cast operators constexpr
2020-02-01 11:49:55 +01:00
Max Kellermann
50de3a7886
net/AddressInfo: add MakeAddrInfo()
2020-02-01 11:48:15 +01:00
Max Kellermann
36cad54ccd
util/TemplateString: remove stray semicolon
2020-02-01 11:46:06 +01:00
Max Kellermann
5ad6e7fec5
decoder/{audio,snd}file: handle MIME type "audio/wav"
2020-02-01 11:26:57 +01:00
Rosen Penev
0bb943ba3e
FfmpegDecoderPlugin: add WAV support
2020-02-01 11:24:51 +01:00
Rosen Penev
b64fdae938
[clang-tidy] use override instead of virtual
...
Found with modernize-use-override
Signed-off-by: Rosen Penev <rosenp@gmail.com >
2020-01-31 21:27:26 -08:00
Rosen Penev
80a0cf694f
MadDecoderPlugin: fix bad printf format
...
max_frames is size_t, not unsigned long. Fixes GCC warning.
2020-01-31 21:21:39 +01:00
Max Kellermann
0b2444450f
decoder/ogg: improve seeking accuracy using binary search
...
On some VBR files, the single-step interpolation was very inaccurate
and inacceptable.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/720
2020-01-31 19:35:35 +01:00
Max Kellermann
faf149d08e
lib/xiph/OggVisitor: add method ReadGranulepos()
2020-01-31 19:32:38 +01:00
Max Kellermann
e01bbad7bb
lib/xiph/OggVisitor: update the OggStreamState offset
2020-01-31 19:24:41 +01:00
Max Kellermann
7e3eaa5921
lib/xiph/OggSyncState: keep track of the Reader offset
2020-01-31 19:24:34 +01:00
Max Kellermann
6fe4068c8e
decoder/ogg: move code to SeekByte()
2020-01-31 19:24:26 +01:00
Max Kellermann
8472135859
decoder/ogg: remove unimplemented Seek() declaration
2020-01-31 19:20:52 +01:00
Max Kellermann
0c9e25b3c4
NEWS: add missing line
2020-01-25 20:09:16 +01:00
Max Kellermann
943a67c805
decoder/ogg: need to sync small files while looking for EOS
...
When calling OggSeekFindEOS() from inside a OggVisitor callback, then
the #InputStream may be in the middle of an Ogg packet, and the newly
initialized #ogg_sync_state will not be able to load it without the
help of ogg_sync_pageseek(). By passing "synced=false" to
OggSeekFindEOS(), we force the use of ogg_sync_pageseek() even when
not actually seeking.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/719
2020-01-25 20:07:11 +01:00
Max Kellermann
881d91f86b
lib/xiph/OggFind: add parameter "synced"
2020-01-25 20:07:10 +01:00
Max Kellermann
54d57fdcc2
test/DumpDecoderClient: dump the seekable flag
2020-01-25 20:07:09 +01:00
Max Kellermann
f6f30d6d64
increment version number to 0.21.20
2020-01-25 20:06:58 +01:00
Max Kellermann
1e07d15428
output/Control: add missing nullptr check to LockRelease()
2020-01-20 17:34:38 +01:00
Max Kellermann
cc7f66822e
command/partition: add command "delpartition"
2020-01-20 14:56:31 +01:00
Max Kellermann
9cbfa66886
command/partition: don't create null output in new partitions
...
No output at all is fine. If the partition needs an output, it must
be moved there, but having just a null output isn't helpful.
2020-01-20 14:55:10 +01:00
Max Kellermann
4df98466df
output/multiple: add "client" field, replacing the "client" parameter
...
By eliminating GetAnyClient(), we can have instances with no outputs
at all.
2020-01-20 14:51:08 +01:00
Max Kellermann
ff2e584bde
Create FUNDING.yml
2020-01-20 14:30:52 +01:00
Max Kellermann
49309b419f
Partition: add a local idle_monitor
...
Make idle events per-partition, but leave Instance::EmitIdle() and its
underlying idle_monitor which broadcasts idle events to all
partitions.
2020-01-20 13:33:01 +01:00
Max Kellermann
879bafb837
Instance: move OnIdle() to Instance.cxx
2020-01-20 13:32:43 +01:00
Max Kellermann
6fcea2d484
Instance: move code to OnStateModified()
2020-01-20 13:28:00 +01:00
Max Kellermann
5d597a3646
Instance: manage StateFile with std::unique_ptr
2020-01-20 13:25:19 +01:00
Max Kellermann
56eaf000a4
Partition: add client list
...
For efficient traversal within one partition, e.g. for distributing
partition-local idle events.
2020-01-20 13:16:13 +01:00
Max Kellermann
77271ebc1f
Partition,Instance: add EmitIdle() documentation
2020-01-20 12:50:48 +01:00
Max Kellermann
fd2b2cf0bc
command/message: make messages/subscriptions local to the current partition
2020-01-20 12:47:57 +01:00
Max Kellermann
438a6d7595
client/Client: make several getter methods const
2020-01-20 12:47:57 +01:00
Max Kellermann
00ed836aa9
Instance: remove partitions loop from {Found,Lost}Neighbor()
...
These are global events.
2020-01-20 12:18:43 +01:00
Max Kellermann
5afec8256a
Main: move code to Partition::BeginShutdown()
2020-01-20 09:22:28 +01:00
Max Kellermann
f249a755e2
command/player: show partition name in "status" response
2020-01-18 23:31:39 +01:00
Max Kellermann
4029a79dc2
command/player: add local Partition reference variable
2020-01-18 23:30:45 +01:00
Max Kellermann
c16233fa74
add "moveoutput" command
2020-01-18 22:21:27 +01:00
Max Kellermann
ac126ede22
client/Client: emit idle flags in SetPartition()
2020-01-18 22:21:27 +01:00
Max Kellermann
7732db0aee
output/Control: move code to method StopThread()
2020-01-18 21:46:18 +01:00
Max Kellermann
37f984ba74
output/Control: avoid sending KILL twice
2020-01-18 21:43:17 +01:00
Max Kellermann
cd612c4eef
AudioFormat: move to pcm/
2020-01-18 20:24:59 +01:00
Max Kellermann
914ad261ed
pcm/meson.build: split libpcm into two
...
One basic library without dependencies, and one with heavy
dependencies like libsamplerate.
2020-01-18 20:08:23 +01:00
Max Kellermann
7551867249
meson.build: move Log.cxx and LogBackend.cxx into a static library
...
Prevents compiling those sources many times, once for each debug
program using it.
2020-01-18 19:56:16 +01:00
Max Kellermann
bdd3167495
tag/ApeLoader: remove exception handler, let caller catch
2020-01-18 19:51:46 +01:00
Max Kellermann
526c778162
tag/Id3Scan: remove exception handler, let caller catch
...
There's just one caller, i.e. ScanGenericTags(), which is documented
to throw exceptions.
2020-01-18 19:50:02 +01:00
Max Kellermann
e01bddbd86
output/MultipleOutputs: update API documentation
2020-01-18 19:23:49 +01:00
Max Kellermann
2817bf9e95
copyright year 2020
2020-01-18 19:23:49 +01:00
Max Kellermann
a37d22de8a
pcm/Convert: choose pcm2dsd float/integer according to dest_format
2020-01-17 19:15:44 +01:00
Max Kellermann
452e1c1a6f
pcm/Convert: throw if !ENABLE_DSD
2020-01-17 19:15:28 +01:00
Max Kellermann
8db86e2820
Revert "pcm/Convert: add option to enable the integer-only dsd2pcm implementation"
...
This reverts commit c84bae739a . A
configuration option is not necessary, because the PcmConvert
constructor knows already whether integer or floating point is needed.
2020-01-17 19:11:10 +01:00
Max Kellermann
c84bae739a
pcm/Convert: add option to enable the integer-only dsd2pcm implementation
2020-01-17 16:37:09 +01:00
Max Kellermann
925b5954c3
pcm/Dsd2Pcm: add integer-only implementation
2020-01-17 16:17:32 +01:00
Max Kellermann
dca79938d5
Merge tag 'v0.21.19'
...
release v0.21.19
2020-01-17 15:58:11 +01:00
Max Kellermann
4013fa15b9
release v0.21.19
2020-01-17 15:49:02 +01:00
Max Kellermann
ac1b844c15
android/AndroidManifest.xml: increase targetSdkVersion to 28
...
Google Play refuses uploads with a lower targetSdkVersion.
2020-01-17 15:48:43 +01:00
Max Kellermann
b8614048d4
python/build/libs.py: update Boost to 1.72.0
2020-01-17 15:33:13 +01:00
Max Kellermann
aed0d13591
python/build/libs.py: update expat to 2.2.9
2020-01-17 15:33:13 +01:00
Max Kellermann
9d02103ebe
python/build/libs.py: disable various CURL features we don't use
2020-01-17 15:33:13 +01:00
Max Kellermann
61784c2144
python/build/libs.py: update CURL to 7.68.0
2020-01-17 15:19:46 +01:00
Max Kellermann
7059215795
python/build/libs.py: update FFmpeg to 4.2.2
2020-01-17 15:19:00 +01:00
Max Kellermann
2190cc7927
python/build/libs.py: update FLAC to 1.3.3
2020-01-17 15:17:21 +01:00
Max Kellermann
75dc9506c2
python/build/libs.py: update libmpdclient to 2.17
2020-01-17 15:16:20 +01:00
Max Kellermann
4f11fa0d41
config/File: allow overriding top-level settings in includes
...
Remove the error message and instead erase the old setting if the
"repeatable" flag is not set.
https://github.com/MusicPlayerDaemon/MPD/issues/684
2020-01-17 14:58:40 +01:00
Max Kellermann
235b6980b8
pcm/Dsd2Pcm: add optimized stereo version
...
This code path is 2% faster.
2020-01-14 23:38:46 +01:00
Max Kellermann
ee46150329
pcm/Dsd2Pcm: add class MultiDsd2Pcm
2020-01-14 23:29:03 +01:00
Max Kellermann
79c585bf03
pcm/PcmDsd: use size_t
2020-01-14 23:28:34 +01:00
Max Kellermann
becd81f771
pcm/PcmDsd: manage Dsd2Pcm instances, not pointers
2020-01-14 23:26:34 +01:00
Max Kellermann
2073a2c1b0
pcm/Dsd2Pcm: remove unused "lsbf" flag
2020-01-14 23:20:45 +01:00
Max Kellermann
3f3104348e
pcm/Dsd2Pcm: add "restrict" attribute
2020-01-14 23:20:36 +01:00
Max Kellermann
7e80c62c7c
util/GenerateArray: use double curly braces for compatibility
2020-01-14 23:16:46 +01:00
Max Kellermann
4038d8527f
pcm/Dsd2Pcm: eliminate "& 0xff"
2020-01-14 22:56:28 +01:00
Max Kellermann
3565f0c8ce
pcm/Dsd2Pcm: move code to TranslateSample()
...
10% speedup. Strange, huh?
2020-01-14 22:51:20 +01:00
Max Kellermann
9647b2cb01
pcm/Dsd2Pcm: move code to ApplySample()
...
For some reason, this speeds up the library by 2%.
2020-01-14 22:43:11 +01:00
Max Kellermann
2d5bf53240
pcm/Dsd2Pcm: use sizet_t instead of int
2020-01-14 22:40:54 +01:00
Max Kellermann
a65f7b1006
pcm/Dsd2Pcm: use std::fill_n()
2020-01-14 22:39:54 +01:00
Max Kellermann
bc5b647053
pcm/Dsd2Pcm: use sizet_t instead of unsigned
2020-01-14 22:37:30 +01:00
Max Kellermann
1708ae3e3c
pcm/Dsd2Pcm: use uint8_t instead of unsigned char
2020-01-14 22:36:50 +01:00
Max Kellermann
6bfbc5d320
pcm/Dsd2Pcm: move code to CalcOutputSample()
2020-01-14 22:25:54 +01:00
Max Kellermann
e7483bc5bc
pcm/Dsd2Pcm: make variables more local
2020-01-14 22:21:32 +01:00
Max Kellermann
b911ec1a29
pcm/Dsd2Pcm: convert to class
2020-01-14 22:16:02 +01:00
Max Kellermann
ca2633bf26
pcm/Dsd2Pcm: remove unused function dsd2pcm_clone()
2020-01-14 22:15:05 +01:00
Max Kellermann
e0784cd48b
pcm/Dsd2Pcm: make variables more local
2020-01-14 22:14:03 +01:00
Max Kellermann
566ac171f5
pcm/Dsd2Pcm: generate ctables at compile time
2020-01-14 22:11:12 +01:00
Max Kellermann
8aaf39efd6
util/GenerateArray: new utility library
2020-01-14 22:11:12 +01:00
Max Kellermann
4d95402e4e
pcm/Dsd2Pcm: move formula to CalculateCtableValue()
2020-01-14 22:11:12 +01:00
Max Kellermann
4d102c4770
pcm/Dsd2Pcm: convert parameter to bool
2020-01-14 22:11:12 +01:00
Max Kellermann
91bc41ea20
pcm/Dsd2Pcm: add noexcept and remove extern
2020-01-14 22:11:12 +01:00
Max Kellermann
e565dcf18c
pcm/dsd2pcm: convert to C++
2020-01-14 22:05:58 +01:00
Max Kellermann
5a87fc7c26
pcm/dsd2pcm: remove unused sources
2020-01-14 22:05:27 +01:00
Max Kellermann
64309abc14
Merge branch 'v0.21.x'
2020-01-14 22:04:55 +01:00
Max Kellermann
ce7ec2b3f5
meson.build: add -f{function,data}-sections to C++ as well
...
By accident, this was only enabled for C.
2020-01-14 17:48:48 +01:00
Max Kellermann
b11c5f8d30
util/{Const,Writable}Buffer: drop more "_type" suffixes from type names
2020-01-12 14:39:54 +01:00
Max Kellermann
fada4aa529
NEWS: mention the Android build fix
2020-01-12 13:08:37 +01:00
Max Kellermann
aa0e121ade
android/build.py: support x86_64 builds
2020-01-12 13:03:18 +01:00
Max Kellermann
b4700039fd
android/build.py: drop -lmstackrealign
...
This flag doesn't appear to work, and since we never had a problem
without the flag, implementing Google's recommendation is useless.
2020-01-12 13:03:18 +01:00
Max Kellermann
ab41c16eb5
android/build.py: add -Wl,--exclude-libs=ALL
...
Don't export the symbols of all those static libraries. Most
importantly, don't export the whole libc++ ABI.
2020-01-12 12:47:40 +01:00
Max Kellermann
04101f37b8
android/build.py: add -fno-faddrsig and -lmstackrealign
2020-01-12 12:41:37 +01:00
Max Kellermann
8c31370534
android/build.py: drop --sysroot, -isystem, -L, ...
...
These appear to be no longer necessary (tested with NDK r20b).
Closes https://github.com/android/ndk/issues/951
2020-01-12 12:11:09 +01:00
Max Kellermann
2306b0d78c
android/build.py: append API level to LLVM triple
...
This implicitly defines __ANDROID_API__, which means we can drop the
"-D__ANDROID_API__=" parameter.
This is recommended on
https://android.googlesource.com/platform/ndk/+/ndk-release-r20/docs/BuildSystemMaintainers.md
2020-01-12 12:02:12 +01:00
Max Kellermann
cb1a9045e6
android/build.py: drop "-none" from llvm_triple
...
It's not mentioned on
https://developer.android.com/ndk/guides/other_build_systems
2020-01-12 11:51:20 +01:00
Max Kellermann
e92af06664
android/build.py: remove obsolete dict key android_api_level
2020-01-12 11:49:10 +01:00
Max Kellermann
af20a1c994
pulse: obey Pulse's maximum sample rate (fixes DSD128 playback)
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/708
2020-01-12 07:58:17 +01:00
Max Kellermann
44d7a1d8d2
pcm/Traits: drop "_type" from type names
2020-01-03 16:01:44 +01:00
Max Kellermann
4937d77cb6
util/{Const,Writable}Buffer: drop "_type" from type names
...
Behave like STL.
2020-01-03 15:55:06 +01:00
Max Kellermann
53f8053188
util/StringView: use using instead of typedef
2020-01-03 15:55:05 +01:00
Max Kellermann
e654c6e005
util/{Const,Writable}Buffer: use std::size_t
2020-01-03 15:55:05 +01:00
Max Kellermann
4b0e288f00
util/{Const,Writable}Buffer: add noexcept
2020-01-03 15:55:05 +01:00
Max Kellermann
71ace2fbac
util/AllocatedString: use std::exchange()
2020-01-03 15:54:51 +01:00
Max Kellermann
fb450d2f41
Merge branch 'fix_cue_in_playlist' of git://github.com/maxmitti/MPD
2020-01-03 15:31:37 +01:00
Max Kellermann
84784badce
Merge branch 'v0.21.x'
2020-01-03 15:31:18 +01:00
Max Kellermann
5990e46de2
lib/xiph/meson.build: exclude VorbisComments.cxx if the Vorbis decoder is disabled
...
Fixes a build failure.
2020-01-02 13:01:38 +01:00
Markus Mittendrein
7dea5db5df
playlist/PlaylistSong: also copy start and end time in merge_song_metadata
...
This is needed to correctly load playlist entries that reference a song in a cuesheet that is treated as a folder.
2020-01-01 22:20:39 +01:00
Max Kellermann
756560eac3
.travis.yml: add ARM64 build (for NEON optimizations)
2020-01-01 18:36:59 +01:00
Jacob Vosmaer
dca0519336
Clang: only use [[fallthrough]] in C++ files
...
It appears that [[fallthrough]] is valid in C++ but not in C. And
in some Clang versions (e.g. Clang 11 on macOS), Clang is pedantic
about this and considers it an error to use [[fallthrough]] in a
.c file such as src/util/format.c.
This changes makes gcc_fallthrough a no-op under Clang in C files.
2019-12-31 13:54:09 +01:00
Max Kellermann
b9a7f30443
.travis.yml: add s390x build (big-endian)
2019-12-24 16:47:07 +01:00
Max Kellermann
32a17a997a
increment version number to 0.21.19
2019-12-24 16:41:13 +01:00
Max Kellermann
803a48e96d
Merge tag 'v0.21.18'
...
release v0.21.18
2019-12-24 16:31:06 +01:00
Max Kellermann
bf41d1ad2b
release v0.21.18
2019-12-24 16:13:16 +01:00
Max Kellermann
d27e534a85
time/ISO8601: fix Windows build failure
...
Caused by 2bc127bb43
2019-12-24 16:12:52 +01:00
Max Kellermann
6d54928d7c
Revert "lib/curl/Global: remove lower bound on timeouts"
...
This reverts commit 4475b8ca04 . Further
testing revealed that the threaded resolver still uses a timeout of
0ms. This revert however lowers the bound to a minimum of 1ms instead
of 10ms.
2019-12-24 16:09:26 +01:00
Max Kellermann
0dffe05bf7
input/curl: remove unnecessary InvalidateSockets() call
...
Like fe598e7d30
2019-12-24 11:41:52 +01:00
Max Kellermann
9ef1f10319
.travis.yml: install brew packages using addons/homebrew
2019-12-24 11:20:54 +01:00
Max Kellermann
23fcfdbd2a
.travis.yml: remove "brew update"
...
The packages from the Travis image are good enough, and this speeds up
the Travis build.
2019-12-24 11:20:29 +01:00
Max Kellermann
3401d26d4c
.travis.yml: switch to xcode9.4, the current default
2019-12-24 10:20:04 +01:00
Max Kellermann
256753ea46
.travis.yml: disable Homebrew analytics
...
Don't bother sending analytics data for a CI runner. This adds
traffic but doesn't bring anybody any benefit.
2019-12-24 10:19:25 +01:00
Max Kellermann
76cd5f8595
.travis.yml: cache Homebrew on osx
2019-12-24 10:17:37 +01:00
Max Kellermann
5684025847
.travis.yml: change "cache" yaml syntax
2019-12-24 10:17:35 +01:00
Max Kellermann
744bd1eadc
time/ISO8601: refactor ParseTimeOfDay() to parse one by one
...
This prepares the migration away from strptime() for Windows
portability.
But the real reason I'm doing this is that strptime() on Apple is
buggy: strptime("14", "%H%M%S") (without separating colons) succeeds
even though only the hour has been parsed. This fixes recent Travis
failures in the ParseISO8601() unit test.
2019-12-24 10:15:03 +01:00
Max Kellermann
2bc127bb43
time/ISO8601: move code to ParseTimeOfDay()
2019-12-24 10:15:01 +01:00
Max Kellermann
7770298a65
util/Compiler.h: use [[fallthrough]] on clang
...
Older clang versions don't support the GCC __attribute__ syntax. For
those, don't use anything at all, and new clang versions shall use the
standard syntax.
2019-12-24 08:04:48 +01:00
Max Kellermann
fa50cdb39e
.travis.yml: escape dollar signs in MATRIX_EVAL
...
Expand $PATH at evaluation and not at assignment, which fixes the
problem that /usr/lib/ccache was added to $PATH between the
MATRIX_EVAL assignment and its evaluation.
2019-12-24 07:51:55 +01:00
Max Kellermann
816ef12088
.travis.yml: add Ubuntu Bionic build
2019-12-23 18:12:04 +01:00
Max Kellermann
5ff786e59c
.travis.yml: enable ccache on Linux
2019-12-23 18:10:58 +01:00
Max Kellermann
80fe88e8f6
.travis.yml: enable ccache on osx
2019-12-23 18:10:52 +01:00
Max Kellermann
a1afe9afc6
util/Compiler.h: add gcc_fallthrough
...
Works around build failures with ccache which may feed processed code
to GCC, which doesn't have the "fall through" code comments.
2019-12-23 17:53:57 +01:00
Max Kellermann
fe598e7d30
lib/curl/Global: remove InvalidateSockets() call from Remove()
...
curl_multi_remove_handle() calls our socket function, and there's no
need to call curl_multi_socket_action().
2019-12-23 14:52:46 +01:00
Max Kellermann
4475b8ca04
lib/curl/Global: remove lower bound on timeouts
...
This was a problem 9 years ago, and apparently, it has been fixed long
ago.
2019-12-23 14:50:51 +01:00
Max Kellermann
a714bdb0ce
lib/curl: drop support for CURL versions older than 7.32.0
...
For simplicity, this commit removes a workaround for an old CURL bug.
2019-12-23 14:41:06 +01:00
Max Kellermann
087874620f
test/RunCurl: new debug program
2019-12-23 14:26:56 +01:00
Max Kellermann
f1116c9258
event/Loop: remove bogus assertion
...
Can fail if somebody calls Break().
2019-12-23 14:20:09 +01:00
Max Kellermann
d01fb6730a
storage/curl: move start call out of the constructor
...
This can cause request completion in the I/O thread before this
constructor returns, leaving the object in an abstract state, causing
a crash due to pure virtual method call. We should not start the
request until this object is fully constructed.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/665
2019-12-23 13:37:58 +01:00
Max Kellermann
7bfe6a3304
test/run_storage: add command "stat"
2019-12-22 19:54:31 +01:00
Max Kellermann
57b8e7f651
Merge branch 'jv-cache-manager' of git://github.com/jacobvosmaer/MPD
...
Works around assertion failure in the boost::intrusive::set class
because we modified the container between insert_check() and
insert_commit().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/691
2019-12-22 12:17:13 +01:00
Max Kellermann
9a577f8060
event/MultiSocketMonitor: add workaround for /dev/null
...
The ALSA "null" driver opens /dev/null and returns the file handle
from snd_pcm_poll_descriptors(), but /dev/null cannot be used with
epoll, the epoll_ctl() system call returns -EPERM. This means that
the ALSA output hangs, eventually freezing the whole MPD process.
This commit adds a workaround to the MultiSocketMonitor class which is
used by the ALSA output plugin.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/695
2019-12-22 12:08:44 +01:00
Max Kellermann
d75a0d714e
event/MultiSocketMonitor: remove unnecessary friend declaration
2019-12-22 12:08:44 +01:00
Max Kellermann
9be3a1554e
event/MultiSocketMonitor: remove duplicate IdleMonitor::Schedule() call
...
SetReady() does this already.
2019-12-22 12:08:10 +01:00
Max Kellermann
7764719513
event/MultiSocketMonitor: un-inline AddSocket()
2019-12-22 12:00:12 +01:00
Max Kellermann
dcbb9fe07c
event/Loop: round timeout up to avoid unnecessary wakeups
2019-12-22 11:58:31 +01:00
Max Kellermann
e3b347820a
event/MultiSocketMonitor: use std::exchange()
2019-12-20 13:42:35 +01:00
Jacob Vosmaer
83acbe1002
input/cache: use simpler intrusive::set API
2019-12-18 23:15:46 +01:00
Max Kellermann
a84bf5a92e
event/MultiSocketMonitor: AddSocket() returns bool
2019-12-18 17:50:21 +01:00
Max Kellermann
732bdc800d
event/SocketMonitor: Schedule() returns bool
2019-12-18 17:46:33 +01:00
Max Kellermann
a8661b5931
increment version number to 0.21.18
2019-12-18 16:49:04 +01:00
Max Kellermann
a72878c5b9
io/FileDescriptor: add method FullRead()
2019-12-17 20:21:11 +01:00
Max Kellermann
bd4df1ae5d
util/AllocatedArray: add WritableBuffer/ConstBuffer cast operators
2019-12-17 20:18:54 +01:00
Max Kellermann
a93b7172aa
util/AllocatedArray: add ConstBuffer copy constructor
2019-12-17 20:18:49 +01:00
Max Kellermann
908b6a1939
util/AllocatedArray: use WritableBuffer::operator[]
2019-12-17 20:18:45 +01:00
Max Kellermann
561ccf600f
util/AllocatedArray: remove bogus assertions
...
`new T[0]` must not be nullptr.
2019-12-17 20:18:39 +01:00
Max Kellermann
aee861c009
util/AllocatedArray: copy constructor copies "nulled" state
2019-12-17 20:18:34 +01:00
Max Kellermann
2cc1dd28cd
util/AllocatedArray: add capacity()
...
For STL completeness.
2019-12-17 20:18:24 +01:00
Max Kellermann
f8d7bc1c34
util/AllocatedArray: use std::exchange()
2019-12-17 20:18:14 +01:00
Max Kellermann
a684b4fff1
lib/dbus/UDisks2: add missing <stdexcept> include
2019-12-16 23:50:01 +01:00
Max Kellermann
c82cef3aa6
lib/crypto/MD5: add missing include for uint8_t
2019-12-16 23:49:53 +01:00
Max Kellermann
683d5848f4
Merge tag 'v0.21.17'
...
release v0.21.17
2019-12-16 23:44:20 +01:00
Max Kellermann
5680a3a4b7
release v0.21.17
2019-12-16 23:32:44 +01:00
Max Kellermann
15ce8eb487
time/ISO8601: support omitting field separators
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/685
2019-12-16 23:31:29 +01:00
Max Kellermann
b7744be208
song/Filter: try ParseISO8601() first
...
Prepare for allowing ISO8601 time stamps without delimiters, such as
20191216, and prevent them from being interpreted as numeric UNIX time
stamps.
2019-12-16 23:31:29 +01:00
Max Kellermann
63c5d66016
time/ISO8601: support omitting minutes
2019-12-16 23:24:43 +01:00
Max Kellermann
d09bd9178f
time/ISO8601: support omitting seconds
2019-12-16 23:24:43 +01:00
Max Kellermann
7d8b1860c3
time/ISO8601: support time zone offset
2019-12-16 23:24:43 +01:00
Max Kellermann
b06825829b
time/ISO8601: allow omitting the "Z" suffix
...
And allow "Z" suffix after date.
2019-12-16 23:24:43 +01:00
Max Kellermann
ba4cd47fd8
time/ISO8601: allow omitting the time of day
2019-12-16 23:24:43 +01:00
Max Kellermann
bbe403f141
test/TestISO8601: unit test for time/ISO8601
2019-12-16 23:24:43 +01:00
Max Kellermann
5df2707d98
time/ISO8601: ParseISO8601() returns precision
2019-12-16 23:24:43 +01:00
Max Kellermann
4859ea468f
time/ISO8601: implement with strptime(), without ParseTimePoint()
...
Prepare for adding more flexible parsing.
2019-12-16 23:24:43 +01:00
Max Kellermann
2a8830db70
time/Convert: fallback TimeGm() implementation
...
Move code from Parser.cxx.
2019-12-16 23:24:38 +01:00
Max Kellermann
fed9b6fd74
time/Parser: use TimeGm()
2019-12-16 23:03:31 +01:00
Max Kellermann
b02890eb8a
time/Parser: explicitly initialize struct tm before strptime()
...
This is recommended by the strptime() manpage, because strptime() does
not initialize/set attributes which were not specified in the format
string.
2019-12-16 23:03:25 +01:00
Max Kellermann
da882a6eb6
time/Convert: include sys/time.h for struct timeval
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/562
2019-12-16 23:03:21 +01:00
Max Kellermann
aeb89aa9d6
time/ISO8601: forward-declare StringBuffer
2019-12-16 23:02:59 +01:00
Max Kellermann
f885807ecc
time/Convert: update copyright
2019-12-16 23:02:58 +01:00
Max Kellermann
b826fd71f0
time/Convert: mention exceptions
2019-12-16 23:02:57 +01:00
Max Kellermann
ae35df1126
zeroconf/AvahiPoll: move TimevalToChrono() to time/Convert.cxx
2019-12-16 23:02:45 +01:00
Max Kellermann
80e55f6bfc
time/Convert: add noexcept
2019-12-16 23:02:40 +01:00
Max Kellermann
e7411c0c4b
time/Convert: add pure attributes
2019-12-16 23:02:38 +01:00
Max Kellermann
e9af692973
util/Time*: move to time/
2019-12-16 23:02:14 +01:00
Max Kellermann
0cf90ee8b6
decoder/mad: work around bogus -Wuninitialized in GCC 10
2019-12-16 23:01:31 +01:00
Max Kellermann
dc3c0c8866
pcm/Convert, ...: add missing include for std::runtime_error
2019-12-16 22:52:50 +01:00
Max Kellermann
1c46bb1ba6
lib/gcrypt/MD5: add missing include for uint8_t
2019-12-16 22:52:22 +01:00
Max Kellermann
2e8f42c6ad
util/StringBuffer: use std::size_t instead of size_t
2019-12-16 22:51:23 +01:00
Max Kellermann
b449627265
fs/io/Reader: relicense to BSD-2
2019-12-16 17:13:55 +01:00
Jacob Vosmaer
2b301ffd2c
lib/xiph: add missing meson dependency
2019-12-16 17:11:14 +01:00
Jacob Vosmaer
ef0765ca10
input: add missing boost meson dependency
2019-12-16 17:11:14 +01:00
Naglis Jonaitis
9766ac6db3
Fix typo in documentation
2019-12-16 17:09:45 +01:00
Jacob Vosmaer
940206d106
filter/plugins: add missing meson dependency
2019-12-09 23:49:35 +01:00
Max Kellermann
65bbb975d2
command/fingerprint: fix inverted check
2019-12-04 16:59:01 +01:00
Max Kellermann
32799ff682
archive/zzip: improve error reporting
...
Most importantly, this commit translates ZZIP_ENOENT to
std::system_error(ENOENT) so IsFileNotFound() returns true and
find_stream_art() can suppress the log line.
2019-12-04 12:33:42 +01:00
Max Kellermann
ce093be12c
system/Error: add FormatFileNotFound()
2019-12-04 12:33:38 +01:00
Max Kellermann
2c276770f0
util/PrintException, ...: update copyright
2019-12-04 12:33:36 +01:00
Max Kellermann
75a592f629
system/Error: move code to IsErrno()
2019-12-04 12:33:33 +01:00
Max Kellermann
c129ca9f63
lib/xiph/VorbisComments: move to separate static library
...
This also reverts the previous commit which was wrong. When the
Vorbis decoder is disabled, we can't compile VorbisComments.cxx at
all.
Instead of expanding the #ifdef, this commit moves VorbisComments.cxx
to a separate library with dependencies on libvorbis (which was
missing previously, which could also lead to build failures if the
libvorbis headers were in a non-standard directory).
2019-11-20 16:12:35 +01:00
Max Kellermann
1e03457746
lib/xiph/VorbisComments: disable VorbisCommentToReplayGain() if Vorbis is disabled
...
Fixes build failure.
2019-11-20 15:51:49 +01:00
Max Kellermann
13ce07d181
output/shout: declare metadata as UTF-8
...
Apparently, Icecast defaults to ISO-8859-1 for MP3:
http://icecast.org/docs/icecast-2.4.0/config-file.html#mountsettings
This change forces Icecast to UTF-8 without having to configure it in
Icecast's configuration file.
2019-11-06 16:05:22 +01:00
Max Kellermann
43ac264f54
tag/Mask: add noexcept
2019-11-05 10:56:20 +01:00
Max Kellermann
cbaa98c1a1
input/curl: apply the "charset" parameter to Icy-Name
...
Extends the URI fragment parameter added in
commit cf9ee33928
Closes https://github.com/MusicPlayerDaemon/MPD/issues/679
2019-11-04 15:44:24 +01:00
Max Kellermann
ed327c597a
lib/icu/Converter: Create() returns std::unique_ptr
2019-11-04 15:44:06 +01:00
Max Kellermann
496f43e25d
Merge branch 'v0.21.x'
2019-11-04 15:07:46 +01:00
Max Kellermann
d659c7df19
python/build/libs: update CURL to 7.66.0
2019-11-04 14:27:00 +01:00
Max Kellermann
f8403a1d29
python/build/libs: update FFmpeg to 4.2.1
2019-11-04 14:26:05 +01:00
Max Kellermann
ebb952c4ad
neighbor/meson.build: disable if -Ddatabase=false
...
Fixes yet another build failure (which however only affects the 0.22
branch).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/666
2019-11-04 14:18:48 +01:00
Max Kellermann
bea3b954a5
meson.build, SongUpdate: disable db-specific archive code if -Ddatabase=false
...
Fixes another build failure.
2019-11-04 14:15:48 +01:00
Max Kellermann
129d8e89b9
lib/sqlite: disable if -Ddatabase=false
...
Fixes build failure in StickerCommands.cxx.
2019-11-04 14:10:03 +01:00
Niklas Haas
65778a3774
output/Jack: mark ports as terminal
...
This is the correct thing to do for ports from which a signal ultimately
"originates", such as is the case with mpd.
2019-10-29 10:07:44 +01:00
kaliko
d9841668ff
doc/user.rst: update build dependencies on Debian Buster
2019-10-28 15:20:05 +01:00
Max Kellermann
3f4437266b
Merge branch 'buster-build-dependencies' of git://github.com/mxjeff/MPD
2019-10-28 15:19:12 +01:00
kaliko
799097c385
doc/user.rst: update build dependencies on Debian Buster
2019-10-28 15:09:14 +01:00
smutbert
4ecd4761c2
add tag "Conductor"
2019-10-25 10:12:32 +02:00
Max Kellermann
85d27cbcb9
increment version number to 0.21.17
2019-10-16 14:20:28 +02:00
Max Kellermann
e1867a99e9
Merge tag 'v0.21.16'
...
release v0.21.16
2019-10-16 12:03:12 +02:00
Max Kellermann
9b95e65bd9
release v0.21.16
2019-10-16 11:58:36 +02:00
Max Kellermann
12a86c4975
queue/PlaylistEdit: fix relative destination offset when moving a range
...
Commit 13208bf5a7 added range support to
the `move` command, but applied the wrong offset to the `to` variable.
When the source range is before the current song, and the song thus
gets decremented by the range size, then the final destination offset
must also be decremented by the range size.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/663
2019-10-15 17:00:16 +02:00
Max Kellermann
0b9435858b
storage/curl: unescape file names from PROPFIND
...
This is the last missing piece for https://github.com/MusicPlayerDaemon/MPD/issues/662
2019-10-15 16:49:17 +02:00
Max Kellermann
f0386459ee
storage/curl: follow redirects for collections without trailing slash
2019-10-15 16:42:39 +02:00
Max Kellermann
e98d4670b8
storage/curl: work around different case in hex digits
2019-10-15 16:26:53 +02:00
Max Kellermann
56cc42b752
storage/curl: use MapUTF8() to reuse existing escaping code
...
Commit 29f78b18b1 continued.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/662
2019-10-15 16:26:53 +02:00
Max Kellermann
ead208987d
storage/curl: unescape URI in MapToRelativeUTF8()
2019-10-15 16:26:49 +02:00
Max Kellermann
364acc8949
lib/curl/Escape: add CurlUnescape()
2019-10-15 13:39:02 +02:00
Max Kellermann
a8f4d2b6fc
storage/curl: move code to EscapeUriPath()
2019-10-15 13:24:06 +02:00
Max Kellermann
0eb113e7c6
lib/curl/String: OO wrapper for allocated strings returned from CURL
2019-10-15 13:13:39 +02:00
Max Kellermann
b2c4a5db14
util/UTF8: use uint8_t instead of unsigned char
2019-10-14 13:44:11 +02:00
Max Kellermann
cadfccfd0c
util/UTF8: add noexcept
2019-10-14 13:41:06 +02:00
Max Kellermann
c89c7f71a2
thread/Util: lower the real-time priority from 50 to 40
...
On linux-rt, kernel IRQ threads are configured with priority=50, and
this change configures MPD somewhat below that priority, leaving some
room for other programs to be configured in between.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/643
2019-10-09 14:40:02 +02:00
Andre Heider
96a9670c69
lib/icu: fix build with iconv()
2019-10-07 13:34:04 +02:00
Max Kellermann
dcc5ce6792
storage/curl: request the "resourcetype" property to fix update
...
Without requesting the property, "good" WebDAV servers would not send
it, and so MPD could never recognize a directory, failing the database
update.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/660
2019-10-07 12:44:48 +02:00
Max Kellermann
23d08820a2
db/update/Walk: fix crash when music_directory is not a directory
...
Add a runtime sanity check to avoid the assertion failure.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/660
2019-10-07 12:24:25 +02:00
Max Kellermann
b9b906ab20
increment version number to 0.21.16
2019-10-07 12:24:25 +02:00
Max Kellermann
2f3e94f8d0
output/MultipleOutputs: add method IsOpen()
2019-09-26 14:52:19 +02:00
Max Kellermann
f616bfe354
output/MultipleOutputs: add method HasName()
2019-09-26 14:48:31 +02:00
Max Kellermann
f2c3d86612
output: use StringIsEqual()
2019-09-26 14:48:31 +02:00
Max Kellermann
d7dbf47a3f
time/ISO8601: support omitting minutes
2019-09-25 21:39:25 +02:00
Max Kellermann
3db584a3ea
curl/Easy: add SetReadFunction()
2019-09-25 21:37:42 +02:00
Max Kellermann
409002b1c3
curl/Easy: add Perform()
2019-09-25 21:37:22 +02:00
Max Kellermann
29b542fd36
curl/Easy: add SetTimeout()
2019-09-25 21:36:52 +02:00
Max Kellermann
c9590db188
util/StringView: enable string_view support only on C++17
2019-09-25 21:34:48 +02:00
Max Kellermann
0643b5abad
Merge tag 'v0.21.15'
...
release v0.21.15
2019-09-25 21:27:31 +02:00
Max Kellermann
964804a4c2
release v0.21.15
2019-09-25 21:24:15 +02:00
Max Kellermann
92495d2b0b
decoder/mpcdec: fix bogus ReplayGain values
...
Apparently, libmpcdec sets gain/peak variables to zero if they are not
present. This clashes with our formula and results in bogus values
which cause noise during playback.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/640
2019-09-13 19:52:11 +02:00
Max Kellermann
9270829b5b
ReplayGainInfo: move more code to a function
2019-09-13 19:50:49 +02:00
Max Kellermann
b6243a9945
decoder/mpcdec: merge duplicate code
2019-09-13 19:50:43 +02:00
Max Kellermann
496f88653d
ReplayGainInfo: add static method Undefined()
2019-09-13 19:46:39 +02:00
Max Kellermann
5ef645df97
NEWS: add missing line for 818b7e0641
2019-09-08 12:54:16 +02:00
Max Kellermann
bf49c9e4e2
decoder/{dsf,dsdiff}: precalculate bit rate
2019-09-08 12:52:02 +02:00
Max Kellermann
0da9c91af2
decoder/{dsf,dsdiff}: fix displayed bit rate
...
The formula did not consider the channel count.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/639
2019-09-08 12:45:05 +02:00
Max Kellermann
d63e2c2641
db/update: scan CUE playlist contents
...
This commit adds a PlaylistPlugin attribute "as_folder" which for now
is only enabled in the "CUE" playlist plugin (which handles separate
"*.cue" files). If a playlist with this flag set is being scanned
during database update, it will be parsed and its contents will be
added to the database. This allows clients to inspect them like
directories and its contents will be searchable.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/39
2019-09-08 00:39:53 +02:00
Max Kellermann
5fdb804a50
db/simple/Song: add attribute "target"
...
Will be used for Song objects representing tracks inside a CUE file.
2019-09-08 00:32:16 +02:00
Max Kellermann
91c1274ac6
db/Song: translate relative "real_uri" paths
2019-09-08 00:31:10 +02:00
Max Kellermann
9caf90f74f
util/UriRelative: add uri_apply_relative()
2019-09-08 00:07:37 +02:00
Max Kellermann
71448e645c
util/UriExtract: use uri_get_scheme() in uri_has_scheme()
2019-09-08 00:06:52 +02:00
Max Kellermann
0509472636
util/UriExtract: add uri_is_relative_path()
2019-09-08 00:04:49 +02:00
Max Kellermann
0b956cf968
util/StringAPI: add memrchr() wrapper
2019-09-07 23:59:59 +02:00
Max Kellermann
2c3eb5b8ad
test/TestUriRelative: new unit test
2019-09-07 23:27:24 +02:00
Max Kellermann
58363cf4dd
util/UriRelative: allow "parent" to end with slash
2019-09-07 23:27:24 +02:00
Max Kellermann
2574615fa3
util/UriRelative: use StringAfterPrefix() instead of memcmp()
...
memcmp() can overrun the buffer.
2019-09-07 23:24:41 +02:00
Max Kellermann
15fbd2b4ab
util/UriRelative: use StringIsEqual()
2019-09-07 23:22:16 +02:00
Max Kellermann
ee36a48dbb
db/simple/Directory: RemoveSong() returns SongPtr
2019-09-05 21:12:10 +02:00
Max Kellermann
07f212c98c
SongSave: return DetachedSong, not a std::unique_ptr<>
...
Eliminate unnecessary dynamic allocations.
2019-09-05 20:58:04 +02:00
Max Kellermann
a1e2602c3d
SongSave: allow throwing any exception
2019-09-05 20:58:00 +02:00
Max Kellermann
b03e4ae692
queue/Save: move code to LoadQueueSong()
2019-09-05 20:56:47 +02:00
Max Kellermann
57808d1a1b
queue/Save: queue_load_song() throws on error
...
Don't catch and log exceptions here; let the caller decide.
2019-09-05 20:55:18 +02:00
Max Kellermann
7775691965
db/simple/Song: rename "uri" to "filename"
...
This attribute is not a URI; it is just the filename without its
parent directory path. To avoid confusion, let's rename it to
"filename", leaving the struct without a "uri" attribute.
2019-09-04 12:04:35 +02:00
Max Kellermann
a727150c8d
db/simple/Song: remove StringView constructor
2019-09-04 12:03:56 +02:00
Max Kellermann
949916cba1
db/simple/Song: convert NewFrom() to constructor
2019-09-04 12:03:49 +02:00
Max Kellermann
497d090814
db/simple/Song: remove static method NewFile()
2019-09-04 12:03:41 +02:00
Max Kellermann
6a13847287
db/simple/Song: add template constructor
2019-09-04 12:03:37 +02:00
Max Kellermann
cbe7d052e8
db/simple/Song: use PathTraitsUTF8::Build()
2019-09-04 12:02:18 +02:00
Max Kellermann
f4d0bd8205
db/simple/Song: make "parent" a reference, not a pointer
2019-09-04 12:02:17 +02:00
Max Kellermann
1bfede120a
fs/Traits: call std::string::reserve() in BuildPathImpl()
2019-09-04 12:01:25 +02:00
Max Kellermann
e96856032f
SongSave: use StringIsEqual()
2019-09-04 11:13:39 +02:00
Max Kellermann
05a29e8458
db/simple/Song: simplify Export()
2019-09-03 20:36:39 +02:00
Max Kellermann
7f9a8b8748
db/simple/Song: convert "uri" to a std::string
...
No longer allocate it as a "VarSize". This used to be a clever trick
to save memory 10 years ago, but these days, keeping the code
maintainable seems more important than saving a few kilobytes of
memory.
2019-09-03 20:26:47 +02:00
Max Kellermann
af3f637d3f
db/simple/Song: pass StringView to constructor
2019-09-03 20:25:04 +02:00
Max Kellermann
97a9adcbec
db/update/Archive: convert pointer to reference
2019-09-03 19:54:18 +02:00
Max Kellermann
177d3b0178
db/update/Archive: use MakeDirectoryIfModified()
2019-09-03 19:52:15 +02:00
Max Kellermann
12beb22c1d
db/update/VirtualDirectory: add LockMakeVirtualDirectoryIfModified()
2019-09-03 19:51:20 +02:00
Max Kellermann
29fd3172ee
db/update/VirtualDirectory: pass device_id to MakeVirtualDirectoryIfModified()
2019-09-03 19:49:32 +02:00
Max Kellermann
a873137702
db/update/VirtualDirectory: rename MakeDirectoryIfModified()
2019-09-03 19:49:10 +02:00
Max Kellermann
e08298a66f
db/update/Container: move MakeDirectoryIfModified() to VirtualDirectory.cxx
2019-09-03 19:37:53 +02:00
Max Kellermann
fd1826cb91
db/update/Container: move SupportsContainerSuffix() to struct DecoderPlugin
2019-09-03 19:36:56 +02:00
Max Kellermann
d5681b678c
db/update/Walk: move UpdatePlaylistFile() to Playlist.cxx
2019-09-03 18:53:33 +02:00
Max Kellermann
0fd6235a66
playlist/Registry: add FindPlaylistPluginBySuffix()
2019-09-02 20:28:14 +02:00
Max Kellermann
4d11745156
playlist/Plugin: add SupportsSuffix(), SupportsMimeType()
2019-09-02 20:19:47 +02:00
Max Kellermann
2038620bc4
db/simple/Directory: add method IsReallyAFile()
2019-09-02 20:15:52 +02:00
Max Kellermann
5dc7cb87bb
db/simple/DirectorySave: use StringIsEqual()
2019-09-02 20:10:26 +02:00
Max Kellermann
f885e068c8
playlist/Plugin: add constructors
2019-09-01 15:01:58 +02:00
Max Kellermann
0d16772dea
playlist/Plugin: rename with CamelCase
2019-09-01 14:58:49 +02:00
Max Kellermann
2376527d1f
db/DatabaseSong: add noexcept
2019-09-01 14:56:27 +02:00
Max Kellermann
7f043367ed
db/UniqueTags: add API documentation
2019-09-01 14:55:25 +02:00
Max Kellermann
45403b44de
db/update/ExcludeList: add noexcept
2019-09-01 14:02:34 +02:00
Max Kellermann
32f865f146
db/update/InotifySource: add noexcept
2019-09-01 13:58:45 +02:00
Max Kellermann
9f92b59376
db/update/InotifyQueue: add noexcept
2019-09-01 13:58:22 +02:00
Max Kellermann
2bb5030f70
db/update/Queue: add noexcept
2019-09-01 13:55:17 +02:00
Max Kellermann
366de8773c
db/update/Service: add noexcept
2019-09-01 13:51:34 +02:00
Max Kellermann
193e637dd9
python/build/libs: update Boost to 1.71.0
2019-09-01 13:03:50 +02:00
Max Kellermann
928bee933d
python/build/libs: update expat to 2.2.7
2019-09-01 13:02:56 +02:00
Max Kellermann
4d1720c886
python/build/libs: update CURL to 7.65.3
2019-09-01 13:02:04 +02:00
Max Kellermann
8f8ed87327
python/build/libs: update FFmpeg to 4.2
2019-09-01 13:00:26 +02:00
Max Kellermann
28a441c977
python/build/libs: update Opus to 1.3.1
2019-09-01 12:59:17 +02:00
Max Kellermann
8cf50b08f2
python/build/libs: update libogg to 1.3.4
2019-09-01 12:58:26 +02:00
Max Kellermann
d3cc54d4eb
TagArchive, db/update/Service: catch all exceptions
2019-09-01 12:57:24 +02:00
Max Kellermann
71ef0faa2c
output/Source: move code to DropCurrentChunk()
2019-08-27 19:07:52 +02:00
Max Kellermann
328a6de86e
output/Source: document "pending_tag" ownership
2019-08-27 19:07:52 +02:00
Max Kellermann
f750c8012a
test/run_filter: use Filter::Flush()
2019-08-26 21:17:31 +02:00
Max Kellermann
b0a04b3da8
test/run_filter: pass ConstBuffer<void> to FullWrite()
2019-08-26 21:17:27 +02:00
Max Kellermann
9617bd6c85
test/run_filter: fix error message
2019-08-26 21:17:26 +02:00
Max Kellermann
4c7154bd23
filter/Observer: add noexcept
2019-08-26 21:04:35 +02:00
Max Kellermann
4f5c3b349d
filter/Filter: document that Flush() can throw
2019-08-26 21:03:25 +02:00
Max Kellermann
4fabfdabde
filter/Filter: allow throwing any exception
2019-08-26 21:01:22 +02:00
Max Kellermann
2e9b5e4e78
filter/Registry: rename the source file
2019-08-26 20:54:52 +02:00
Max Kellermann
115dd2b5ce
lib/curl: require CURL 7.33, remove bug workaround
2019-08-26 20:43:39 +02:00
Max Kellermann
b18003ddfd
lib/curl/Global: add missing include
2019-08-26 20:40:26 +02:00
Max Kellermann
6ec335dcd5
net/UniqueSocketDescriptor: import std::swap()
2019-08-26 20:37:47 +02:00
Max Kellermann
d5d6746ddf
net/UniqueSocketDescriptor: update copyright year
2019-08-26 20:37:31 +02:00
Max Kellermann
00d7759cee
net/SocketDescriptor: expose CheckDuplicate()
2019-08-26 20:36:51 +02:00
Max Kellermann
2ecc4e3eed
net/AllocatedSocketAddress: remove config.h, we have Features.hxx already
2019-08-26 20:28:53 +02:00
Max Kellermann
7d98145ea8
net/AddressInfo: include Features.hxx instead of config.h
2019-08-26 20:26:40 +02:00
Max Kellermann
e7c5a59e39
util/Exception: support "const char *"
2019-08-26 20:24:22 +02:00
Xipmix
71c45d8ebe
Typo fix
2019-08-27 00:06:39 +10:00
Max Kellermann
c9081a206a
client/New: fix assertion failure in Close()
...
Caused by a revert accident in commit
f2cdbeace6
Closes https://github.com/MusicPlayerDaemon/MPD/issues/631
2019-08-22 14:43:53 +02:00
Max Kellermann
818b7e0641
output/solaris: include sys/stropts.h only on Solaris
...
This header had been available for a long time on Linux, but was
removed in glibc 2.30. This commit moves the `#include` line inside
the `#ifdef __sun` block and adds a fake declaration of `I_FLUSH` for
the Linux build.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/630
2019-08-22 11:41:12 +02:00
Max Kellermann
e70f40fac1
increment version number to 0.21.15
2019-08-22 11:40:17 +02:00
Max Kellermann
f2cdbeace6
Revert "Client: eliminate SetExpired(), call Close() directly"
...
This reverts commit 58d7804d66 . It
caused a use-after-free bug when Client::OnSocketError() was called
due to a failed write, e.g. if the output buffer was full.
2019-08-22 09:52:19 +02:00
Max Kellermann
e6600b8562
Merge tag 'v0.21.14'
...
release v0.21.14
2019-08-21 10:52:49 +02:00
Max Kellermann
bc89ca92b4
release v0.21.14
2019-08-21 10:47:53 +02:00
Max Kellermann
b968e1b6de
output/Thread: add missing return in exception handler
2019-08-21 10:20:17 +02:00
Max Kellermann
6c9f9c136b
command/all: don't create new Response instance in exception handler
...
The new Response instance in the `catch` block didn't have the
`command` attribute set, so the error response didn't indicate which
command had failed, which however is required in the MPD protocol.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/628
2019-08-20 20:31:36 +02:00
Max Kellermann
9bff5f9e36
client/Process, command/all: add noexcept
...
Clarify that those can't throw, preparing for the next commit.
2019-08-20 20:28:15 +02:00
Max Kellermann
2bf26a2ff8
command/all: remove obsolete prototype
2019-08-20 20:28:10 +02:00
Max Kellermann
e33b50d9c5
command/all: simplify return from command_process()
2019-08-20 20:26:07 +02:00
Max Kellermann
21fa44c0d5
command/all: catch all exceptions
2019-08-20 20:23:54 +02:00
Max Kellermann
44444e1b89
decoder/Thread: on late SEEK, start decoder at seek position
...
Previously, a bogus value (whatever happened to be still in
`start_time`) was used.
2019-08-20 20:15:08 +02:00
Max Kellermann
ca450663d0
decoder/Control: work around crash after SEEK was too late
...
See code comment.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/629
2019-08-20 20:01:53 +02:00
Max Kellermann
04e2d08417
decoder/Control: inline WaitForDecoder()
2019-08-20 19:33:15 +02:00
Max Kellermann
af4ffa91fd
decoder/Control: remove attribute client_is_waiting
...
This optimization is useless because sane pthread_cond_signal()
implementations check the number of waiters and do not invoke a system
call if there are none.
2019-08-20 19:23:44 +02:00
Max Kellermann
f3ed2c0a82
time/ISO8601: support omitting seconds
2019-08-19 22:44:41 +02:00
Max Kellermann
2c35ea92bd
time/ISO8601: support time zone offset
2019-08-19 22:44:28 +02:00
Max Kellermann
26e0e1d25a
time/ISO8601: allow omitting the "Z" suffix
...
And allow "Z" suffix after date.
2019-08-19 22:42:39 +02:00
Max Kellermann
6412efb6e4
time/ISO8601: allow omitting the time of day
2019-08-19 22:42:06 +02:00
Max Kellermann
995783bb2f
test/TestISO8601: unit test for time/ISO8601
2019-08-19 22:41:54 +02:00
Max Kellermann
1a08bdf16f
time/ISO8601: ParseISO8601() returns precision
2019-08-19 22:41:49 +02:00
Max Kellermann
48b122f2ed
time/ISO8601: implement with strptime(), without ParseTimePoint()
...
Prepare for adding more flexible parsing.
2019-08-19 22:26:43 +02:00
Max Kellermann
06dac4783f
time/Convert: fallback TimeGm() implementation
...
Move code from Parser.cxx.
2019-08-19 22:22:07 +02:00
Max Kellermann
fdaadc19cb
time/Parser: use TimeGm()
2019-08-19 22:21:22 +02:00
Max Kellermann
2e53e9248a
time/Parser: explicitly initialize struct tm before strptime()
...
This is recommended by the strptime() manpage, because strptime() does
not initialize/set attributes which were not specified in the format
string.
2019-08-19 22:09:38 +02:00
Max Kellermann
b7abd5691c
lib/curl/Global: use auto
2019-08-19 22:00:25 +02:00
Max Kellermann
7a0957d713
lib/curl/Global: document ToRequest()
2019-08-19 22:00:06 +02:00
Max Kellermann
2934fc2507
lib/curl/Global: remove CURL* parameter from Add() and Remove()
2019-08-19 21:53:19 +02:00
Max Kellermann
0c8ff56a15
lib/curl/Easy: add constructor with URL parameter
2019-08-19 21:48:07 +02:00
Max Kellermann
07be44a50a
lib/curl/Easy: add getter functions
2019-08-19 21:47:11 +02:00
Max Kellermann
7a473729af
lib/curl/Easy: add method Unpause()
2019-08-19 21:46:21 +02:00
Max Kellermann
402f429b17
lib/curl/Easy: add setter functions
2019-08-19 21:38:55 +02:00
Max Kellermann
4c46ca6b59
lib/curl/Global: make ReadInfo() private
2019-08-19 21:38:09 +02:00
Max Kellermann
76a0bf68c7
lib/curl/Global: remove redundant API docs
2019-08-19 21:38:03 +02:00
Max Kellermann
9f02beaba9
lib/curl: fix coding style
2019-08-19 21:37:47 +02:00
Max Kellermann
a478af6759
util/PrintException, ...: update copyright
2019-08-19 19:11:59 +02:00
Max Kellermann
4c2434788f
system/FileDescriptor: add method IsRegularFile()
2019-08-19 19:11:53 +02:00
Max Kellermann
ca9daf5e19
playlist/flac: set song URI to an empty string
...
Simplify the plugin by using a trivial relative URI; later,
playlist_check_translate_song() will set the correct full URI.
2019-08-16 14:55:12 +02:00
Max Kellermann
e98ce710b8
util/WStringAPI: add wcsncmp() wrapper
2019-08-16 14:48:54 +02:00
Max Kellermann
79d1004544
util/StringView: add method Compare()
2019-08-16 13:32:00 +02:00
Max Kellermann
bb7f7bd3e5
util/StringAPI: add strncmp() wrapper
2019-08-16 13:31:58 +02:00
Max Kellermann
ad2b858933
util/ForeignFifoBuffer: add friend function swap()
2019-08-16 13:27:22 +02:00
Max Kellermann
d7aa4fa7d3
util/ForeignFifoBuffer: make Swap() lower case
2019-08-16 13:27:22 +02:00
Max Kellermann
57c5603122
util/ForeignFifoBuffer: import std::swap()
2019-08-16 13:27:22 +02:00
Max Kellermann
1550113506
util/DynamicFifoBuffer: add nullptr constructor overload
2019-08-16 13:21:28 +02:00
Max Kellermann
a82d61a5e4
util/DynamicFifoBuffer: add API documentation
2019-08-16 13:21:11 +02:00
Max Kellermann
0c4a7c8004
util/AllocatedString: update copyright
2019-08-16 13:20:23 +02:00
Max Kellermann
674ee9d19a
util/Exception: forward the exception in ThrowException()
...
Fixes -Wreturn-std-move (clang 8).
2019-08-16 13:19:34 +02:00
Max Kellermann
3344953db8
util/*FifoBuffer: use using instead of typedef
2019-08-16 13:16:45 +02:00
Max Kellermann
f909615b14
include cleanups (powered by iwyu)
2019-08-15 17:57:20 +02:00
Max Kellermann
92c89f0c86
playlist/flac: allow reading from FLAC streams
2019-08-15 11:13:39 +02:00
Max Kellermann
34246eb7fd
playlist/flac: read the file only once using FLAC__Metadata_Chain
2019-08-15 10:40:48 +02:00
Max Kellermann
5894514ccb
playlist/flac: move code to ToSongEnumerator()
2019-08-15 10:40:37 +02:00
Max Kellermann
dcb07e6ed4
playlist/flac: use class MemorySongEnumerator
2019-08-15 09:45:03 +02:00
Max Kellermann
ccffff9870
playlist/flac: use the NarrowPath for FLAC__metadata_get_streaminfo()
2019-08-15 09:44:20 +02:00
Max Kellermann
e34672c9d8
lib/xiph/FlacMetadataIterator: add noexcept
2019-08-14 20:14:26 +02:00
Max Kellermann
a8f314190f
playlist/flac: add noexcept
2019-08-14 20:08:55 +02:00
Max Kellermann
545af857ba
lib/xiph/{FlacStreamMetadata,VorbisComments}: merge redundant code
2019-08-14 19:57:12 +02:00
Max Kellermann
01f86e1c25
lib/xiph/FlacStreamMetadata: pass StringView to flac_scan_comment()
2019-08-14 19:54:19 +02:00
Max Kellermann
7a89b1656c
lib/xiph/FlacStreamMetadata: properly convert entries to StringView
2019-08-14 19:44:14 +02:00
Max Kellermann
07fcf091a2
tag/MixRamp: pass StringView to ParseMixRampVorbis()
2019-08-14 19:42:48 +02:00
Max Kellermann
74a883dbf8
tag/MixRamp: add noexcept
2019-08-14 19:42:28 +02:00
Max Kellermann
5c550e8b33
lib/crypto/MD5: add option to use libavutil instead of libgcrypt
2019-08-14 18:56:10 +02:00
Max Kellermann
433e18b247
decoder/{opus,vorbis}: support embedded pictures (METADATA_BLOCK_PICTURE)
...
More for https://github.com/MusicPlayerDaemon/MPD/issues/42
2019-08-14 12:39:03 +02:00
Max Kellermann
2b837277c1
lib/crypto: add base64 wrapper using libavutil
2019-08-14 12:39:03 +02:00
Max Kellermann
d515a8e99a
lib/gcrypt/MD5: add wrapper in lib/crypto/
...
Prepare for using other crypto libraries, e.g. FFmpeg's libavutil.
2019-08-14 12:39:03 +02:00
Max Kellermann
2c2efaa91f
lib/xiph/VorbisComments: pass struct vorbis_comment instead of char**
...
Use the "comments" attribute instead of relying on the nullptr
terminator.
2019-08-14 12:28:52 +02:00
Max Kellermann
9ae9b2c18f
tag/VorbisComment: use struct StringView
2019-08-14 12:22:52 +02:00
Max Kellermann
8e0d810968
tag/MixRamp: use StringView in ParseMixRampTagTemplate()
2019-08-14 12:18:49 +02:00
Max Kellermann
0f1e13d9ff
util/StringView: add StartsWithIgnoreCase(), EndsWithIgnoreCase()
2019-08-14 11:36:21 +02:00
Max Kellermann
21b81dfb1d
lib/gcrypt/Hash: use the "algo" parameter instead of hard-coding MD5
2019-08-13 20:02:08 +02:00
Max Kellermann
f3d16f6d1b
output/Thread: fix typo in comment
2019-08-13 13:08:40 +02:00
Max Kellermann
6b51429203
decoder/opus: move comment size check to ScanOneOpusTag()
...
Prepare for parsing large binary comments (such as
METADATA_BLOCK_PICTURE).
2019-08-13 12:19:31 +02:00
Max Kellermann
e2da13b0d3
command/file: add command "readpicture"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/42
2019-08-13 11:55:51 +02:00
Max Kellermann
54daa85ac2
decoder/flac: support embedded pictures (FLAC__METADATA_TYPE_PICTURE)
2019-08-13 11:55:51 +02:00
Max Kellermann
575ba51931
tag/Id3Scan: support embedded pictures (the "APIC" tag)
2019-08-12 20:31:43 +02:00
Max Kellermann
96a1c69c29
tag/Handler: add virtual method OnPicture()
...
Preparing for https://github.com/MusicPlayerDaemon/MPD/issues/42
2019-08-12 20:31:43 +02:00
Max Kellermann
3895d35a52
command/file: move code to TagScanAny()
2019-08-12 20:31:43 +02:00
Max Kellermann
b717ab0383
doc/protocol.rst: improve binary chunk description
2019-08-12 20:31:43 +02:00
Max Kellermann
4f61cd0b93
client/Response: add constant MAX_BINARY_SIZE
...
Use the same chunk size for all binary commands.
2019-08-12 20:23:46 +02:00
Max Kellermann
4464cdcc67
doc/protocol.rst: add missing newline to "albumart" example
...
This was missing in commit 0f488dcecf
2019-08-12 20:20:17 +02:00
Max Kellermann
989790e7f1
client/Response: add method WriteBinary()
...
Move code from read_stream_art().
2019-08-12 14:17:35 +02:00
Max Kellermann
831bc711ca
decoder/mad: remove option "gapless", always do gapless
...
Why would anybody want to keep the silence inserted by the codec?
Other plugins/codecs (such as Vorbis) have this hard-coded as well.
2019-08-12 13:05:57 +02:00
Max Kellermann
d640961420
doc/developer.rst: add chapter about git branches
2019-08-12 12:53:22 +02:00
Max Kellermann
828c614d57
decoder/sidplay: use StringFormat<>()
2019-08-10 12:31:31 +02:00
Max Kellermann
4964ad7800
decoder/sidplay: sidplay_load_songlength_db() throws on error
2019-08-10 12:28:53 +02:00
Max Kellermann
a7976cd0f2
decoder/sidplay: automatic memory management inside struct SidplayGlobal
2019-08-10 12:26:10 +02:00
Max Kellermann
bed8a0e040
decoder/sidplay: move global variables to struct SidplayGlobal
2019-08-10 12:16:09 +02:00
Max Kellermann
b8a64771c0
decoder/sidplay: add noexcept
2019-08-10 12:12:52 +02:00
Max Kellermann
f357f743a3
pcm/Volume: use transform_n()
2019-08-10 12:05:37 +02:00
Max Kellermann
91e565d92e
pcm/PcmFormat: use transform_n()
2019-08-10 12:05:35 +02:00
Max Kellermann
a189a9e478
util/TransformN: new library
2019-08-10 11:59:47 +02:00
Fredrik Noring
9654a33218
decoder/sidplay: Fix empty album names by using the SID name field
...
SID files are generally collections of tunes, so a SID name field makes
sense as an MPD album. The SID tune information list (STIL) has name
and title fields for individual tunes, when such are known, but MPD is
currently not using the STIL.
2019-08-10 11:01:15 +02:00
Max Kellermann
9bcd02d178
Merge branch 'v0.21.x'
2019-08-10 10:58:32 +02:00
Fredrik Noring
2d61e526de
decoder/sidplay: Fix date field to have year but not company or author
...
Field 2 is called <released>, formerly used as <copyright>[1][2]. It is
formatted <year><space><company or author or group>, where <year> may be
<YYYY>, <YYY?>, <YY??> or <YYYY-YY>, for example "1987", "199?", "19??"
or "1985-87". The <company or author or group> may be for example Rob
Hubbard. A full field may be for example "1987 Rob Hubbard".
This change splits the <released> field at the first <space>, to retain
the <year> part.
The 51823 SID files in High Voltage SID Collection (HVSC) version 71
have the following distribution of dates:
333 19?? 11 1990-92 6 1995-99 2 2006-08
827 198? 88 1990-93 2140 1996 530 2007
32 1982 69 1990-94 9 1996-97 15 2007-08
1 1982-83 49 1990-95 2 1996-98 2 2007-09
255 1983 3467 1991 5 1996-99 1 2007-10
677 1984 75 1991-92 1840 1997 430 2008
775 1985 65 1991-93 4 1997-98 23 2008-09
3 1985-86 10 1991-94 1276 1998 1 2008-12
10 1985-87 35 1991-97 4 1998-99 631 2009
943 1986 3320 1992 865 1999 1 2009-10
12 1986-87 26 1992-93 24 200? 645 2010
5 1986-89 59 1992-94 590 2000 1 2010-12
2083 1987 1 1992-96 4 2000-01 538 2011
31 1987-88 2996 1993 727 2001 1 2011-12
44 1987-89 42 1993-94 875 2002 651 2012
2510 1988 12 1993-95 2 2002-04 811 2013
129 1988-89 2 1993-97 844 2003 790 2014
91 1988-90 2737 1994 3 2003-05 740 2015
58 1988-91 16 1994-95 842 2004 792 2016
3466 1989 20 1994-96 2 2004-05 775 2017
95 1989-90 17 1994-97 707 2005 638 2018
150 1989-91 2271 1995 1 2005-06 284 2019
1077 199? 2 1995-96 2 2005-07
2834 1990 4 1995-97 785 2006
119 1990-91 2 1995-98 6 2006-07
References:
[1] https://www.hvsc.c64.org/download/C64Music/DOCUMENTS/SID_file_format.txt
[2] https://hvsc.c64.org/info
2019-08-10 10:50:51 +02:00
Fredrik Noring
7723c481db
decoder/sidplay: Fix windows-1252 to utf-8 string conversion
...
High Voltage SID Collection (HVSC) metadata fields are encoded in
windows-1252, as described in DOCUMENTS/SID_file_format.txt:
https://www.hvsc.c64.org/download/C64Music/DOCUMENTS/SID_file_format.txt
If utf-8 transcoding fails, or the ICU library is unavailable, fall
back to plain ASCII and replace other characters with '?'.
2019-08-10 10:45:02 +02:00
Max Kellermann
cf9ee33928
input/icy: support "charset" parameter in URI fragment
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/616
2019-08-10 10:07:13 +02:00
Max Kellermann
4a47bbd816
IcyMetadataParser: implement charset conversion
2019-08-10 10:07:13 +02:00
Max Kellermann
7654038d65
util/UriQueryParser: new library
2019-08-09 20:39:34 +02:00
Max Kellermann
e4612ecb66
util/UriExtract: add uri_get_fragment()
2019-08-09 20:39:23 +02:00
Max Kellermann
9c6850210d
util/UriExtract: uri_get_scheme() returns StringView
...
Reduce overhead by not duplicating the string.
2019-08-09 20:21:37 +02:00
Max Kellermann
40a2880857
util/UriUtil: split
2019-08-09 20:21:12 +02:00
Max Kellermann
ade712d711
util/UriUtil: relicense as BSD-2
2019-08-09 20:16:02 +02:00
Max Kellermann
175e13099c
doc/developer.rst: more details about error handling and OOM
2019-08-09 20:16:02 +02:00
Fredrik Noring
0ed10542cc
decoder/sidplay: Fix song length initialisation during container scan
...
The song length was previously undetermined.
2019-08-09 15:39:36 +02:00
Max Kellermann
ab830f9afd
increment version number to 0.21.14
2019-08-09 15:38:01 +02:00
Max Kellermann
349a2ea7eb
Merge branch 'sid-genre-option' of git://github.com/frno7/MPD
2019-08-09 14:45:41 +02:00
Max Kellermann
192ad91010
Merge tag 'v0.21.13'
...
release v0.21.13
2019-08-06 11:39:25 +02:00
Max Kellermann
d4d2bc072e
release v0.21.13
2019-08-06 11:35:42 +02:00
Max Kellermann
bcccc8f66c
output/jack: use jack_free() for Windows compatibility
2019-08-06 11:34:56 +02:00
Max Kellermann
848c63e2d5
output/jack: use std::atomic_bool for "shutdown" and "pause"
...
Without this, the compiler may optimize accesses away.
2019-08-06 11:34:00 +02:00
Max Kellermann
f6d0310f9c
output/jack: use SIZE_MAX instead of (size_t)-1
2019-08-06 11:33:52 +02:00
Max Kellermann
3ef043392c
input/cdio_paranoia: drop support for libcdio-paranoia older than 10.2+0.93+1
...
Version 10.2+0.93+1 was released five years ago in 2014 and is the
first version to feature cdio_cddap_free_messages(). There is no way
to check the libcdio-paranoia version at compile time, so let's just
remove support for older versions instead of attempting to fix the
cdio_cddap_free_messages() check at build time.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/613
2019-08-06 11:09:36 +02:00
Max Kellermann
864d6f312d
Revert "decoder/mad: use MAD_F_MIN and MAD_F_MAX"
...
This reverts commit f7ed7446ae . It was
a bad idea, because MAD_F_MIN and MAD_F_MAX do not represent the
clamping limits, but the theoretical minimum and maximum values of the
mad_fixed_t data type.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/617
2019-08-05 13:07:41 +02:00
Max Kellermann
f44c67de09
increment version number to 0.21.13
2019-08-05 13:05:54 +02:00
Max Kellermann
91fb91d89c
util/StringView: prepare the transition to std::string_view
...
Unfortunately, we need to disable this for GCC versions older than 7,
because it doesn't have <string_view> yet.
2019-08-05 10:23:05 +02:00
Max Kellermann
8b399b7133
output/jack: use jack_free() for Windows compatibility
2019-08-05 09:35:41 +02:00
Max Kellermann
9d24f68f51
output/jack: convert to class, make attributes/methods private
2019-08-05 09:31:40 +02:00
Max Kellermann
44652fdb13
output/jack: convert callback functions to static methods
2019-08-05 09:29:27 +02:00
Max Kellermann
2892a6f5e2
output/jack: merge set_audioformat() into Open()
2019-08-05 09:28:41 +02:00
Max Kellermann
2fc40e5575
output/jack: eliminate "shutdown" flag, use only "error" (mutex protected)
2019-08-05 09:24:43 +02:00
Fredrik Noring
7363fe90bb
decoder/sidplay: Add "default_genre" option
...
Genres are not part of the SID format, so SID files are genreless. This
"default_genre" option may be used to assign a default genre to all SID
music, for example "SID", "C64", "Chiptune", etc.
2019-08-05 06:23:40 +02:00
Max Kellermann
d146bef740
output/jack: use jack_on_info_shutdown()
2019-08-04 20:25:13 +02:00
Max Kellermann
1f4c4be1f1
output/jack: use std::atomic_bool for "shutdown" and "pause"
...
Without this, the compiler may optimize accesses away.
2019-08-04 20:24:51 +02:00
Max Kellermann
90067d16c0
output/jack: use SIZE_MAX instead of (size_t)-1
2019-08-04 06:34:43 +02:00
Max Kellermann
cde6c46d2f
util/Macros: replace with std::size() (C++17)
2019-08-03 13:10:49 +02:00
ckdo
d305f187d5
Add the ability to specify media.role for pulse output plugin
...
This is useful in multiple mpd instances scenario, or multiple pulse outputs defined on the same mpd instance.
It is actually a more flexible way to route flows than the "sink" parameter, letting the PulseAudio routing do its job, but with the ability to isolate routing for each output.
If not specified, the role remains like it was before this commit, ie "music"
2019-08-03 13:03:05 +02:00
Richard Dodd
4f6a713b32
Add option to not connect jack ports automatically
2019-08-03 13:01:47 +02:00
Max Kellermann
8f981845dc
switch to C++17
...
Time to move on, two years after 2017.
2019-08-03 12:57:56 +02:00
Max Kellermann
c764b70b3a
decoder/mad: merge DecodeNextFrame() and DecodeNextFrameHeader()
2019-08-03 12:55:56 +02:00
Max Kellermann
52bb03e136
decoder/mad: eliminate redundant error handling from DecodeNextFrame()
...
Much of that is not possible when mad_header_decode() has already been
called.
2019-08-03 12:55:48 +02:00
Max Kellermann
a90685d6cf
Merge tag 'v0.21.12'
...
release v0.21.12
2019-08-03 12:53:23 +02:00
Max Kellermann
ae19bda1f2
release v0.21.12
2019-08-03 12:48:20 +02:00
Max Kellermann
f2d8fd769d
player/Thread: don't restart unseekable song after failed seek attempt
...
The check IsSeekableCurrentSong() was added by commit
44b200240f in version 0.20.19, but it
caused a regression: by doing the branch only if the current song is
seekable, the player would restart the current song if it was not
seekable, and later the initial seek would fail; but we already know
it's not seekable, and so we should fail early.
2019-08-03 12:30:10 +02:00
Max Kellermann
9661062ae2
decoder/mad: pass const reference to RecoverFrameError()
2019-08-03 11:59:41 +02:00
Max Kellermann
2a07354cad
decoder/mad: change integers to size_t
2019-08-03 11:44:02 +02:00
Max Kellermann
fc18fd571c
decoder/mad: return from SynthAndSubmit() early
2019-08-03 11:42:05 +02:00
Max Kellermann
51abed9732
decoder/mad: pass mad_pcm to mad_fixed_to_24_buffer()
2019-08-03 11:40:06 +02:00
Max Kellermann
d00afc912c
decoder/mad: eliminate the loop in SubmitPCM()
...
libmad has a hard-coded maximum PCM buffer size; if we make our
output_buffer just as large, we can avoid the loop, because any
possible size will fit.
2019-08-03 11:36:05 +02:00
Max Kellermann
9d0fe725eb
decoder/mad: rename a few misnamed methods
2019-08-03 11:32:42 +02:00
Max Kellermann
8a432c9b7f
decoder/mad: move code to LoadNextFrame()
2019-08-03 11:32:06 +02:00
Max Kellermann
187204f03c
decoder/mad: move code to HandleCurrentFrame()
2019-08-03 11:32:06 +02:00
Max Kellermann
5e5fadb5f2
decoder/mad: remove unnecessary initializers
...
These will not be used until they are initialized in SyncAndSend().
2019-08-03 08:49:26 +02:00
Max Kellermann
952c793235
decoder/mad: subtract libmad decoder delay from LAME encoder padding
...
Apparently, libmad not only inserts 529 samples of silence at the
beginning of the file, but also removes them at the end.
This solves the last piece of
https://github.com/MusicPlayerDaemon/MPD/issues/601
Closes https://github.com/MusicPlayerDaemon/MPD/issues/601
2019-08-03 08:35:00 +02:00
Max Kellermann
3e3d8c7f9d
decoder/mad: pad the input buffer with zero bytes and end of file
...
libmad requires padding the input buffer with "MAD_BUFFER_GUARD" zero
bytes at the end of the file, or else it is unable to decode the last
frame.
This fixes yet another bug which prevented this plugin from decoding
the last frame, see
https://github.com/MusicPlayerDaemon/MPD/issues/601
2019-08-03 08:32:27 +02:00
Max Kellermann
9b99a9897a
decoder/mad: don't count the Xing/LAME metadata frame
...
The Xing/LAME frame indicates how many frames there are, but that
excludes the initial Xing/LAME frame. Therefore, it should not be
counted.
This fixes an off-by-one bug which caused the last frame to be
skipped, fixing one part of
https://github.com/MusicPlayerDaemon/MPD/issues/601
2019-08-03 08:25:48 +02:00
Max Kellermann
4f56fdc397
decoder/mad: make "current_frame" zero-based
...
Increment "current_frame" after processing the frame.
2019-08-03 08:24:25 +02:00
Max Kellermann
c87d6825ec
decoder/mad: add API documentation
2019-08-03 08:07:30 +02:00
Max Kellermann
00830a20e3
decoder/mad: convert to class, make almost everything private
2019-08-03 07:52:51 +02:00
Max Kellermann
d39d2874b4
decoder/mad: move code to methods RunDecoder(), RunScan()
2019-08-03 07:49:41 +02:00
Max Kellermann
a0a74951b8
decoder/mad: eliminate attribute "bit_rate"
...
This also fixes a bug which caused the bit rate to not update after
seeking.
2019-08-03 00:38:45 +02:00
Max Kellermann
779a6855ff
decoder/mad: add noexcept
2019-08-03 00:28:59 +02:00
Max Kellermann
f7ed7446ae
decoder/mad: use MAD_F_MIN and MAD_F_MAX
2019-08-03 00:27:59 +02:00
Max Kellermann
9d44a6d2ae
decoder/mad: use Clamp()
2019-08-03 00:26:57 +02:00
Max Kellermann
10da9ee7ba
decoder/mad: refactor local variables in FillBuffer()
2019-08-02 23:19:11 +02:00
Max Kellermann
f9eff31205
decoder/mad: use sizeof(input_buffer)
2019-08-02 23:19:11 +02:00
Max Kellermann
1d74a029a2
decoder/mad: simplify variable initialization in FillBuffer()
2019-08-02 23:19:11 +02:00
Max Kellermann
6b8ca514bb
decoder/mad: fix broken log message
...
Broken since commit f8bfea8bae
2019-08-02 22:58:16 +02:00
Max Kellermann
f51e555154
decoder/mad: change "mp3_" suffix to "mad_"
2019-08-02 22:49:55 +02:00
Max Kellermann
61a3c69a06
decoder/mad: make enums strictly-typed
2019-08-02 22:49:55 +02:00
Max Kellermann
089615a01e
decoder/mad: include cleanup
2019-08-02 22:49:55 +02:00
Max Kellermann
52bee8f81f
util/StaticFifoBuffer: add GetAvailable()
2019-08-02 22:49:55 +02:00
Max Kellermann
adc25e648f
util/StaticFifoBuffer: add constexpr
2019-08-02 22:49:33 +02:00
Max Kellermann
31da8eac9b
util/StaticFifoBuffer: add noexcept
2019-08-02 22:49:05 +02:00
Max Kellermann
e00464435b
util/Compiler.h: move compiler version checks to meson.build
2019-08-02 15:53:16 +02:00
Diomendius
b81138bda1
Fix JACK plugin outputting only to left channel
...
The JACK output plugin would not correctly upmix mono input files when exactly 2 output ports were configured. This fixes that.
2019-08-02 15:52:20 +02:00
Max Kellermann
fe2f8c088a
Partition, ...: add noexcept to callback methods
2019-08-02 14:44:00 +02:00
Max Kellermann
6de088140b
lib/xiph/OggVisitor: invoke OnOggPacket() with the "E_O_S" packet
...
The "end of stream" packet is not special; it contains normal data,
and thus we should pass it to OnOggPacket().
This fixes one part of https://github.com/MusicPlayerDaemon/MPD/issues/601
2019-08-02 14:04:08 +02:00
Max Kellermann
86d0534638
lib/xiph/OggVisitor: more API documentation
2019-08-02 13:56:00 +02:00
Max Kellermann
af99f9fc90
pcm/Volume: convert S16 to S24 to preserve quality and reduce noise
...
Applying software volume to S16 samples means several bits of
precision are lost; at 25% volume, two bits are lost. Additionally,
dithering adds some noise.
The problem gets worse when you apply the software volume code twice:
for the software mixer volume, and again for the replay gain. This
loses some more precision and adds even more dithering noise, which
can become audible (see
https://github.com/MusicPlayerDaemon/MPD/issues/542 ).
By converting everything to 24 bit, we need to shift only two bits to
the right instead of ten, losing nearly no precision, and dithering is
not needed. Even if the output device is unable to play S24 directly,
we can convert back to S16 with only one stage of dithering.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/542
2019-07-30 20:03:37 +02:00
Max Kellermann
a784c8b1ae
net/Resolver: replace memset(0) with empty C++ initializer list
2019-07-29 11:32:06 +02:00
Max Kellermann
991bbea875
Merge branch 'v0.21.x'
2019-07-29 11:32:00 +02:00
Max Kellermann
1033dbca2b
playlist/Song: add missing includes
2019-07-29 11:31:30 +02:00
Max Kellermann
a2d2210713
ls: fix early return in uri_supported_scheme()
...
Fixes regression by commit 4e2a551f30
Closes https://github.com/MusicPlayerDaemon/MPD/issues/599
2019-07-29 11:08:47 +02:00
Max Kellermann
b955334882
decoder/opus: ignore case in replay gain tag names
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/604
2019-07-29 10:40:37 +02:00
Max Kellermann
90ea3bf985
playlist/Song: support backslash in relative URIs
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/607
2019-07-29 09:58:53 +02:00
Max Kellermann
83b0871248
test/test_translate_song: remove unused variable "s1"
2019-07-29 09:52:57 +02:00
Max Kellermann
d8aec4b2dc
test/run_decoder: catch StopDecoder
...
This exception is usually thrown by class DecoderBridge, but the Opus
plugin (ab)uses it as well, so we need to catch it.
2019-07-12 17:49:12 +02:00
Max Kellermann
39b302dcad
increment version number to 0.21.12
2019-07-12 17:22:20 +02:00
Max Kellermann
426891ab31
output/Init: pass MixerType to _load_mixer()
2019-07-12 17:11:14 +02:00
Max Kellermann
b94de51ac4
system/Error: move code to IsErrno()
2019-07-12 17:11:14 +02:00
Max Kellermann
db024c27d5
output/Source: allow the ReplayGainFilter to change the AudioFormat
...
Just in case.
2019-07-08 20:16:53 +02:00
Max Kellermann
326c6ae615
pcm/Volume: add variable "dest_size"
2019-07-05 21:01:09 +02:00
Max Kellermann
5fa7610264
pcm/Volume: Open() returns output sample format
...
Prepare for a new mode which may convert to a different sample format
when applying volume, to reduce dithering.
2019-07-05 19:03:00 +02:00
Max Kellermann
1c757f8c1c
pcm/Volume: allow any exception
2019-07-05 19:01:46 +02:00
Max Kellermann
06fbbe2d7b
pcm/Volume: calculate PCM_VOLUME_1
2019-07-05 18:26:26 +02:00
Max Kellermann
21d91cb1d1
pcm/Volume: fix API documentation
2019-07-05 18:26:14 +02:00
Max Kellermann
9d3d4fc734
util/CharUtil: add noexcept
2019-07-05 18:05:04 +02:00
Max Kellermann
d6660bad03
util/WCharUtil: remove redundant inline keywords from constexpr functions
2019-07-05 18:03:42 +02:00
Max Kellermann
9d74b1a212
IcyMetaDataParser: include cleanup
2019-07-05 17:27:39 +02:00
Max Kellermann
54c7dc029e
IcyMetaDataParser: remove useless log message
2019-07-05 17:26:31 +02:00
Max Kellermann
d8bcdca7ff
IcyMetaDataParser: pass StringView to icy_add_item()
2019-07-05 17:17:44 +02:00
Max Kellermann
d663f81420
include cleanups (powered by iwyu)
2019-07-05 09:59:58 +02:00
Max Kellermann
9cdebc90a0
lib/icu/Compare: use StringIsEqualIgnoreCase()
2019-07-05 09:59:58 +02:00
Max Kellermann
0a267056d3
lib/icu/Compare: fix strcasecmp() call
2019-07-05 09:59:58 +02:00
Max Kellermann
4650a903b4
decoder/Bridge: add noexcept
2019-07-05 08:57:51 +02:00
Max Kellermann
94c9fafe16
lib/chromaprint/DecoderClient: catch and postpone InputStream::LockRead() errors
2019-07-05 08:36:14 +02:00
Max Kellermann
8480b834b3
encoder/Interface: add noexcept
2019-07-04 22:44:36 +02:00
Max Kellermann
07080574a2
encoder/Interface: allow throwing any exception
2019-07-04 22:44:11 +02:00
Max Kellermann
6c22c34300
output/oss: add noexcept
2019-07-04 22:42:19 +02:00
Max Kellermann
f54710b100
output/oss: replace enum oss_setup_result with bool
...
It's not a tri-state anymore since we introduced C++ exceptions.
2019-07-04 22:23:22 +02:00
Max Kellermann
196db1a8c8
output/oss: remove redundant DoClose() calls from Reopen()
2019-07-04 22:01:44 +02:00
Max Kellermann
d66ef7eac1
lib/alsa/HwSetup: don't reset dsd_mode
...
Fixes regression by commit 28e07e900f
Closes https://github.com/MusicPlayerDaemon/MPD/issues/596
2019-07-04 12:47:35 +02:00
Max Kellermann
0a32634d8f
output/alsa: check ring buffer space before writing to it
...
Pass only the amount of data to PcmExport::Export() when its full
output fits into the ring buffer. Using only a part of the
PcmExport::Export() result may cause data corruption because
PcmExport's internal state may contain partial blocks which would need
to be rolled back when only some of its output data was used.
As a side effect, this fixes an assertion failure because
PcmExport::CalcInputSize() considered partial block data and could
cause Play() to return a number larger than the "size" parameter.
2019-07-04 12:47:10 +02:00
Max Kellermann
b12fc3c60d
output/alsa: throw unexpected snd_pcm_writei() errors
...
If snd_pcm_writei() fails, throw an error and stop playback instead
of going into an endless busy loop.
2019-07-04 12:46:18 +02:00
Max Kellermann
6d013b092f
output/osx: remove trailing newline from exception messages
2019-07-03 22:21:43 +02:00
Max Kellermann
ccb182865c
output/osx: fix coding style
2019-07-03 22:12:47 +02:00
Max Kellermann
412b04be58
output: allow throwing any exception
2019-07-03 22:10:26 +02:00
Max Kellermann
510e6841a0
net/AllocatedSocketAddress: import std::swap
2019-07-03 22:06:40 +02:00
Max Kellermann
2089c99348
net/{Allocated,Static}SocketAddress: use IPv[46]Address::SetPort()
2019-07-03 21:59:23 +02:00
Max Kellermann
77b5b4158c
net/ToString: move UnmapV4() to class IPv6Address
2019-07-03 21:56:56 +02:00
Max Kellermann
08552f3938
net/ToString: UnmapV4() returns IPv4Address
2019-07-03 21:56:27 +02:00
Max Kellermann
2700265769
net/SocketAddress: use IPv[46]Address::Cast()
2019-07-03 21:53:42 +02:00
Max Kellermann
557098644b
Merge tag 'v0.21.11'
...
release v0.21.11
2019-07-03 15:36:45 +02:00
Max Kellermann
f6125f0c35
release v0.21.11
2019-07-03 15:16:27 +02:00
Max Kellermann
44aaf51345
Merge branch 'runtime_enumeration' of git://github.com/eugene2k/MPD
2019-07-01 09:48:33 +02:00
Eugene Gorodinsky
4e2a551f30
Add runtime enumeration of supported schemas.
...
Fix src/ls.cxx to only print unique schemas.
Refactor src/ls.cxx to use src/input/InputPlugin functionality.
Add dynamic enumeration support to curl plugin.
2019-07-01 09:49:34 +03:00
Max Kellermann
f780ac418a
output/alsa: log when generating silence due to slow decoder
...
MPD used to do that when this code lived in the player thread, but it
was removed by commit 98a7c62d7a4f716d90af6d78e18d1a3b10bc54b3; and
the replacement code in the ALSA output plugin didn't have it.
2019-06-28 18:15:30 +02:00
Max Kellermann
61a72a5d13
output/alsa: schedule a timer to generate silence
...
Without this timer, DispatchSockets() may disable the
MultiSocketMonitor and if Play() doesn't get called soon, it never
gets a chance to generate silence. However if Play() gets called,
generating silence isn't necessary anymore...
Resulting from this misdesign (added by commit ccafe3f3cf in 0.21.3),
the silence generator didn't work reliably.
2019-06-28 18:04:49 +02:00
Max Kellermann
0c0a354753
output/alsa: add a new flag "waiting" for xrun management
...
In DispatchSockets(), when there was not enough data, but enough for
current playback, the method would disable the "active" flag so the
next Play() call would re-enable the MultiSocketMonitor.
This was an abuse of the flag which could result in a crash
in Cancel(), because that method asserts that the period_buffer is
empty, which it may be not.
The solution is to add anther flag called "waiting" which shares some
behavior with the old flag.
2019-06-28 18:04:49 +02:00
Max Kellermann
3c5f860fb8
output/alsa: Cancel() also affects "active" (documentation)
2019-06-28 18:04:49 +02:00
Max Kellermann
3da1fa88d0
output/alsa: fix comment typo
2019-06-28 18:04:49 +02:00
Max Kellermann
fac15aaffb
output/alsa: fix comment typo
2019-06-28 14:39:54 +02:00
Max Kellermann
5b01373356
output/alsa: more assertions in class PeriodBuffer
2019-06-28 09:31:51 +02:00
Max Kellermann
a92aa0bedc
output/alsa: use IsCleared() instead of IsDrained() in DrainInternal()
...
Really drain all data from the period_buffer in any case.
2019-06-28 09:30:33 +02:00
Max Kellermann
d66f5a8590
output/alsa: replace PeriodBuffer::IsEmpty() with IsCleared()
...
This assertion is not about whether all data has been consumed, but
about whether there has been any data at all.
2019-06-28 09:29:18 +02:00
Max Kellermann
30ca6b8881
Merge branch 'v0.21.x'
2019-06-28 09:28:04 +02:00
Max Kellermann
c926021599
output/alsa: always redo DrainInternal() after writing
...
Draining isn't finished just because the period_buffer has run empty.
It is only finished after snd_pcm_drain() has succeeded.
2019-06-28 09:10:16 +02:00
Max Kellermann
543776d9c9
output/alsa: check PCM state before calling snd_pcm_drain()
...
Apparently, if snd_pcm_drain() returns EAGAIN, it does not actually
want to be called again; the next call will snd_pcm_drain() will also
return EAGAIN, forever, even though the PCM state has meanwhile
switched to SND_PCM_STATE_SETUP. This causes a busy loop; to fix
this, we should always check snd_pcm_state() to see if draining is
really required.
2019-06-28 08:55:25 +02:00
Max Kellermann
cf631fca50
output/alsa: check GetFrames()>0 instead of IsEmpty() in WriteFromPeriodBuffer()
2019-06-27 21:59:43 +02:00
Max Kellermann
f0ac63d5af
output/alsa: DrainInternal() ignores postponed partial frame
2019-06-27 21:23:28 +02:00
Max Kellermann
c1eb0583c4
output/alsa: add "full" assertion to WriteFromPeriodBuffer()
2019-06-27 21:22:52 +02:00
Max Kellermann
549faa8a9c
output/alsa: add full check before calling FillWithSilence()
2019-06-27 21:20:38 +02:00
Max Kellermann
8f6c750064
output/alsa: improve silence generator test in DrainInternal()
...
There cannot be partial frames in the buffer, so we don't need
GetPeriodPosition(); it's enough to check whether head has been moved
in this period.
2019-06-27 21:17:37 +02:00
Max Kellermann
9fc1668de3
output/alsa: hold back snd_pcm_writei() until period_buffer is full
...
This gives MPD more control, because attempts to avoid having partial
periods in the ALSA period buffer. For example, this means that
DrainInternal() doesn't need to generate silence to fill the partial
period.
2019-06-27 15:40:07 +02:00
Max Kellermann
e9190f4249
lib/alsa/PeriodBuffer: add missing include
2019-06-27 15:34:40 +02:00
Max Kellermann
127b464c59
lib/alsa/PeriodBuffer: add API documentation
2019-06-27 14:58:19 +02:00
Max Kellermann
048990cd2f
doc/user.rst: two more heading corrections
2019-06-27 14:55:53 +02:00
Max Kellermann
01fd6e5e82
Merge branch 'v0.21.x'
2019-06-27 14:51:05 +02:00
Max Kellermann
8bf3f9b874
input/tidal: deprecated because Tidal has changed the protocol
...
See https://github.com/MusicPlayerDaemon/MPD/issues/545
2019-06-26 23:14:07 +02:00
Max Kellermann
f07f8f7d88
decoder/wildmidi: add fallbacks for libwildmidi<0.4
...
Fix build breakage from commit ea639269d8
2019-06-26 23:13:23 +02:00
Max Kellermann
39b40ac1fd
decoder/wildmidi: remove unused variable wildmidi_domain
2019-06-26 23:10:20 +02:00
Max Kellermann
ea639269d8
decoder/wildmidi: throw PluginUnavailable on WildMidi_Init() error
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/589
2019-06-26 22:40:27 +02:00
Max Kellermann
0abaa3ecc5
decoder/wildmidi: throw PluginUnavailable if config file does not exist
...
This makes the configuration error more visible, possibly addressing
one part of https://github.com/MusicPlayerDaemon/MPD/issues/589
2019-06-26 22:38:40 +02:00
Max Kellermann
c4d3efe71d
decoder/List: handle exception PluginUnavailable
2019-06-26 22:02:54 +02:00
Max Kellermann
85e82e3d4d
decoder/List: annotate exceptions thrown by DecoderPlugin::Init()
2019-06-26 22:01:45 +02:00
Max Kellermann
beed004b10
pcm/Export: add GetSilence()
2019-06-26 16:04:46 +02:00
Max Kellermann
730e67d766
test/test_pcm_export: add tests for Get{In,Out}put{Frame,Block}Size()
2019-06-26 16:01:19 +02:00
Max Kellermann
34c6337887
pcm/Export: add GetInputBlockSize(), GetOutputBlockSize()
2019-06-26 15:49:08 +02:00
Max Kellermann
2093e53641
pcm/Export: add GetInputFrameSize()
2019-06-26 15:48:18 +02:00
Max Kellermann
2f243f2295
pcm/Export: rename GetFrameSize() to GetOutputFrameSize()
2019-06-26 15:46:49 +02:00
Max Kellermann
e69fd0300a
pcm/Export: rename CalcSourceSize() to CalcInputSize()
2019-06-26 15:46:05 +02:00
Max Kellermann
f43cafbf7d
pcm/Export: eliminate the AudioFormat parameter from GetFrameSize()
2019-06-26 15:42:47 +02:00
Max Kellermann
53faf77d20
pcm/Export: use the "channels" attribute in GetFrameSize()
2019-06-26 15:41:07 +02:00
Max Kellermann
bf574dcb0a
pcm/RestBuffer: make internal methods private
2019-06-26 14:44:20 +02:00
Max Kellermann
f44011519c
meson.build: increase protocol version to 0.21.11
...
Commit 1eae9339f2 added support for
multiple "groups" in the "list" command, and this change allows
clients to detect that this behavior, which had been documented for
several years, is now implemented properly.
2019-06-18 15:35:38 +02:00
Max Kellermann
72b8f33272
pcm/Export: split src_sample_format from alsa_channel_order
...
Combining these two in one single value saves some memory, but is
complicated and we may need the src_sample_format for new features
later.
2019-06-18 12:19:40 +02:00
Max Kellermann
a17f420d6b
pcm/Export: update API documentation
2019-06-18 12:19:40 +02:00
Max Kellermann
f97a9ce765
Revert "MusicChunk: pad MusicChunkInfo to a multiple of 8 bytes"
...
This reverts commit 2c3eeb7194 . This
workaround has been obsoleted by commits
bf26adf555 and
32380d1db0
2019-06-18 11:49:52 +02:00
Max Kellermann
bf26adf555
pcm/Dsd{16,32}: stash odd frames away for the next call
...
Similar to commit 32380d1db0 , these are
the final parts for really fixing
https://github.com/MusicPlayerDaemon/MPD/issues/469
2019-06-18 11:19:27 +02:00
Max Kellermann
0cc94fe30c
pcm/Dsd{16,32}: convert public function to stateful class
2019-06-18 10:58:55 +02:00
Max Kellermann
d5d5705213
pcm/Export: update API documentation
2019-06-18 10:58:26 +02:00
Max Kellermann
96d74e77eb
pcm/Dsd{16,32}: move the conversion loop to a separate function
2019-06-17 22:51:01 +02:00
Max Kellermann
ca8451cdbc
tag/Type: add tag "Work"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/577
2019-06-17 22:40:36 +02:00
Max Kellermann
28e07e900f
pcm/Export: convert the DSD bools to an enum
...
These options are exclusive.
2019-06-17 22:35:00 +02:00
Max Kellermann
c75dc4a647
output/osx: remove redundant initializer
2019-06-17 22:35:00 +02:00
Max Kellermann
32380d1db0
pcm/Dop: stash odd frames away for the next call
...
First part of the "real" fix for
https://github.com/MusicPlayerDaemon/MPD/issues/469
2019-06-17 22:18:44 +02:00
Max Kellermann
c9f1354e4d
pcm/RestBuffer: new utility class
2019-06-17 22:18:41 +02:00
Max Kellermann
e3f9e96eef
pcm/Dop: convert public function to stateful class
...
Preparing to add more state.
2019-06-17 22:16:29 +02:00
Max Kellermann
8f9b3cbf0e
pcm/Dop: add separate dsd_buffer for DSD_U16/32
...
The dop_buffer will be moved out soon.
2019-06-17 22:11:23 +02:00
Max Kellermann
458a1beed9
AudioFormat: move MAX_CHANNELS to pcm/ChannelDefs.hxx
...
Reduce header dependencies.
2019-06-17 22:11:08 +02:00
Max Kellermann
47bb1cd8b5
output/{alsa,osx}: use ConstBuffer::empty()
2019-06-17 22:09:47 +02:00
Max Kellermann
ccc96e25d3
output/{alsa,osx}: remove comment after PcmExport::Export()
...
Returning an empty buffer is a normal result now (since commit
79839db3a3 ), and doesn't deserve such a
big comment.
2019-06-17 22:09:06 +02:00
Max Kellermann
33f5e03e80
Merge branch 'v0.21.x'
2019-06-17 22:06:54 +02:00
Max Kellermann
2c3eeb7194
MusicChunk: pad MusicChunkInfo to a multiple of 8 bytes
...
Workaround for a regression caused by commit
a06bf388d9 , revealing a problem with
discarding odd numer of frames in the DSD_U32 and DoP converters,
causing distortions with DSD_U32 and DoP on 32 bit CPUs.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/469
2019-06-17 21:24:32 +02:00
Max Kellermann
79839db3a3
output/oss: return early if PcmExport::Export() returns empty array
...
This can happen if the DoP converter doesn't get enough source samples
for one destination quad. This isn't a critical bug, because the OSS
plugin doesn't support DoP yet, but it's good to be prepared.
2019-06-17 21:07:30 +02:00
Max Kellermann
d478bdda8e
pcm/Export: document that Export() may return an empty buffer
2019-06-17 21:07:29 +02:00
Max Kellermann
fd7caab872
output/winmm: fix build breakage after e87f0ca771
2019-06-17 12:23:34 +02:00
Max Kellermann
e87f0ca771
pcm/Pcm*: drop more "Pcm" prefixes from source file names
2019-06-17 11:17:48 +02:00
Max Kellermann
a139279575
Copyright year 2019
2019-06-17 11:17:30 +02:00
Max Kellermann
9fcd33cc8d
pcm/Dop: move the conversion loop to separate function
2019-06-16 12:23:48 +02:00
Max Kellermann
96ff6b9b8b
pcm/Dop: remove redundant inline keywords
2019-06-16 12:23:38 +02:00
Max Kellermann
fd5e74dbd0
pcm/Pcm{Dop,Export}: drop "Pcm" prefix
2019-06-16 12:11:44 +02:00
Max Kellermann
b64571f4a5
pcm/Export: update API documentation
2019-06-16 11:52:57 +02:00
Max Kellermann
1eae9339f2
db/Interface: CollectUniqueTags() allows multiple "groups"
...
Instead of passing tag and group, pass an array of tags. To support a
nested return value, return a nested std::map of std::maps. Each key
specifies the tag value, and each value may be another nesting level.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/408
2019-06-16 10:39:29 +02:00
Max Kellermann
22a9e866bc
decoder/mad: make enums strictly-typed
2019-06-16 10:02:51 +02:00
Max Kellermann
97e6ea57c4
decoder/mad: change "mp3_" suffix to "mad_"
2019-06-16 10:01:10 +02:00
Max Kellermann
527642a90b
decoder/Plugin: simplify compile-time initialization
...
Add a `constexpr` constructor and several `constexpr` methods to
construct a DecoderPlugin at compile time, in a way which allows
adding new methods later without having to edit each plugin.
2019-06-15 14:44:37 +02:00
Max Kellermann
aebb1baad8
decoder/sidplay: remove redundant extern
2019-06-15 14:36:12 +02:00
Max Kellermann
bd6b7aa88e
archive/Lookup: move to fs/LookupFile.cxx
...
This can be used for other purposes as well.
2019-06-15 14:26:26 +02:00
Max Kellermann
fcf6415963
archive/Lookup: pass class Path
2019-06-15 14:06:50 +02:00
Max Kellermann
be79b44dc8
archive/Lookup: pass const pointer
2019-06-15 14:04:34 +02:00
Max Kellermann
17f207ffd1
archive/Lookup: return AllocatedPath
2019-06-15 13:57:28 +02:00
Max Kellermann
476647bfa0
fs/AllocatedPath: add GetSuffix()
2019-06-15 13:57:16 +02:00
Max Kellermann
9f246fc0dc
archive/Lookup: use PathTraitsFS::pointer_type
2019-06-11 19:42:16 +02:00
Max Kellermann
7de6e4dbac
playlist/Registry: eliminate MIME type copy
2019-06-11 19:32:45 +02:00
Max Kellermann
15dbb8082e
playlist/Registry: pass StringView to playlist_list_open_stream_mime2()
2019-06-11 19:31:22 +02:00
Max Kellermann
1a7e3bb358
util/StringUtil: add StringArrayContainsCase() overload with StringView
2019-06-11 19:29:40 +02:00
Max Kellermann
74380d2ae4
playlist/Registry: use initializer instead of memset()
2019-06-11 19:27:59 +02:00
Max Kellermann
d43ce8413a
playlist/Plugin: update API documentation
2019-06-11 19:26:15 +02:00
Max Kellermann
923c1b6220
doc/include: remove obsolete DocBook fragment
2019-06-11 09:29:20 +02:00
Max Kellermann
09884e608b
increment version number to 0.21.11
2019-06-11 09:29:05 +02:00
Max Kellermann
3055c1266d
output/osx: don't use variable-length arrays
2019-06-08 11:51:15 +02:00
Max Kellermann
931c3a1de0
output/osx: convert int to size_t
2019-06-08 11:49:15 +02:00
Yue Wang
a7b30fcb9e
add missing header.
...
bad_alloc depends on <new>
2019-06-07 21:59:31 -07:00
Max Kellermann
e153407b51
tag/Id3Scan: eliminate a string copy in UFID importer
2019-06-06 13:42:14 +02:00
Max Kellermann
5675431eaf
tag/ApeTag: use IterableSplitString
...
Eliminates yet another string copy.
2019-06-06 13:32:39 +02:00
Max Kellermann
8a136b79e5
decoder/opus: pass StringView to ScanOneOpusTag()
2019-06-06 13:27:17 +02:00
Max Kellermann
dffa25c55e
decoder/opus: use StringView::Split()
2019-06-06 13:26:35 +02:00
Max Kellermann
72a0aeb265
util/NumberParser: add overload with StringView
2019-06-06 13:26:30 +02:00
Max Kellermann
e556cd20f7
util/NumberParser: add noexcept
2019-06-06 13:26:30 +02:00
Max Kellermann
80ec6f976c
tag/Table: add StringView overloads
2019-06-06 13:23:16 +02:00
Max Kellermann
589639f80f
tag/ParseName: add StringView overloads
2019-06-06 13:21:33 +02:00
Max Kellermann
548aa00111
tag/Handler: pass StringView to OnTag() and OnPair()
...
Eliminates a number of allocations, because callers don't need to copy
the strings to a newly allocated buffer only to null-terminate them.
And most callers don't need to have a null-terminated string.
2019-06-06 13:00:53 +02:00
Max Kellermann
76eb550011
util/StringView: add method Split()
2019-06-06 12:54:42 +02:00
Max Kellermann
c1719a5200
lib/xiph/FlacStreamMetadata: add missing include
2019-06-06 12:54:42 +02:00
Max Kellermann
b07bbb928a
decoder/dsdiff: allow longer tag values
2019-06-06 12:44:25 +02:00
Max Kellermann
3b5a128097
decoder/dsdiff: pass DecoderClient* to dsdiff_handle_native_tag()
2019-06-06 12:43:20 +02:00
Max Kellermann
fad60f977e
meson.build: enable -Wvla
2019-06-06 12:40:32 +02:00
Max Kellermann
71f9332bd3
test/TestCircularBuffer: add constexpr to fix -Wvla
2019-06-06 12:40:32 +02:00
Max Kellermann
3eae3a2826
queue/Queue: allocate MoveRange() buffer on the heap
...
No variable-length arrays on the stack.
2019-06-06 12:39:42 +02:00
Max Kellermann
3c1f7c77f0
queue/Queue: remove outdated API documentation
2019-06-06 12:38:21 +02:00
Max Kellermann
3e40b1d9d2
decoder/dsdiff: use a fixed-size buffer for the tag value
...
Variable-length arrays are a C-only feature.
2019-06-06 12:33:14 +02:00
Max Kellermann
adffbba2a5
Merge tag 'v0.21.10'
...
release v0.21.10
2019-06-05 22:38:54 +02:00
Max Kellermann
e239009295
release v0.21.10
2019-06-05 22:32:32 +02:00
Max Kellermann
3fae2150f5
decoder/OpusReader: return StringView
...
Since we now don't duplicate all items, we can easily remove the 64kB
limit from OpusReader::ReadString() and instead silently ignore and
skip all strings which are longer than 4 kB.
This fixes a tag duplication bug with Opus file containing a very long
`METADATA_BLOCK_PICTURE` tag, which occurred because the Opus plugin
returned false after parsing all tags, and then the MPD core fell back
to FFmpeg which scanned the tags again.
2019-06-05 22:19:35 +02:00
cathugger
f9ca2f52c1
output/httpd: reject some well-known request paths
...
Return `404 not found` for some common well-known paths, as clients requesting them usually do that automatically and don't expect endless audio stram.
Closes #572
2019-06-05 21:53:46 +02:00
cathugger
4b81cf0c2c
output/httpd: use strncmp instead of memcmp
...
memcmp use may result in out of bounds access
2019-06-05 21:53:46 +02:00
Max Kellermann
e7acbf112c
output/httpd: fix indent
2019-06-05 21:53:43 +02:00
Max Kellermann
120e570da7
archive/Domain: remove unused library
2019-06-04 17:54:59 +02:00
Max Kellermann
0019231a37
archive/Lookup, input/Archive: remove useless log messages
2019-06-04 17:54:35 +02:00
Max Kellermann
9ae1256ae7
input/archive: include cleanup
2019-05-31 19:59:09 +02:00
Max Kellermann
e1ac377812
archive/ArchiveLookup: replace output parameters with a struct
2019-05-31 19:56:25 +02:00
Max Kellermann
7866d1a005
archive/meson.build: move ArchiveLookup.cxx to archive_glue.a
...
Fixes the Windows build.
2019-05-31 19:56:13 +02:00
Max Kellermann
3e3ee581a8
fs/Path: add constexpr
2019-05-31 19:47:50 +02:00
Max Kellermann
0e8ca44968
archive/List: disallow passing suffix==nullptr to archive_plugin_from_suffix()
2019-05-31 19:05:26 +02:00
Max Kellermann
12e75a523a
archive/ArchiveLookup: remove "suffix" output parameter
...
Let the caller do this. Our GetSuffix() function was broken anyway.
2019-05-31 19:01:22 +02:00
Max Kellermann
508ba22789
archive/ArchiveLookup: use class FileInfo
2019-05-31 18:55:27 +02:00
Max Kellermann
fa13648f2c
archive/ArchiveLookup: throw on error
2019-05-31 18:52:11 +02:00
Max Kellermann
2f83ed90d0
archive/iso9660: implement seeking
2019-05-31 18:40:24 +02:00
Max Kellermann
5d74b5cee1
input/cache: first draft of the file cache
2019-05-31 17:49:52 +02:00
Max Kellermann
e8a0ce643a
tag/Generic: fail if InputStream is not seekable
2019-05-31 17:49:37 +02:00
Max Kellermann
9ed4fac341
input/InputStream: check offset in Rewind()
...
Don't call Seek() if the stream is already at the beginning. This
avoids unnecessary exceptions if seeking is not implemented by an
Inputstream implementation.
2019-05-31 17:47:16 +02:00
Max Kellermann
81b2b4a85c
Merge branch 'v0.21.x'
2019-05-31 17:27:20 +02:00
Max Kellermann
304d45b551
Revert "player/Thread: remove unnecessary "pipe" check"
...
This reverts commit ff3e2c0514 . The
check was necessary, after all, because this is what checked whether
the decoder had finished the current or the next song.
> The "queued" flag can only possibly be set if the decoder is still
> decoding the current song or if the decoder is stopped.
That was wrong because ProcessCommand() sets `queued=true` and also
starts the decoder (if it was idle).
> This is also what the following assert() checks.
That was also wrong, because the assert() has two conditions.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/566
2019-05-31 17:23:12 +02:00
Max Kellermann
0f488dcecf
doc/protocol.rst: binary responses do have a newline after all
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/568
2019-05-31 16:47:41 +02:00
Max Kellermann
17039aec70
doc/user.rst: more heading corrections
...
According to http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#sections
2019-05-31 16:30:06 +02:00
Max Kellermann
fb6cb07912
doc/developer.rst: remove outdated section about the clang static analyzer
2019-05-31 16:27:43 +02:00
Max Kellermann
e9e0e02db3
doc/user.rst: use ".. note:"
2019-05-31 16:26:52 +02:00
Max Kellermann
03507037e8
increment version number to 0.21.10
2019-05-31 16:16:56 +02:00
Max Kellermann
7739b3960c
mixer/Listener: add noexcept
2019-05-31 14:09:47 +02:00
Max Kellermann
11ec7117ab
Partition: add noexcept
2019-05-31 14:07:33 +02:00
Max Kellermann
c3ccbfd407
queue/Playlist: add noexcept
2019-05-31 13:58:57 +02:00
Max Kellermann
de3cd96c76
queue/Playlist: remove destructor
2019-05-31 13:58:57 +02:00
Max Kellermann
d8cf7d1ef0
queue/Playlist: use C++11 initializers
2019-05-31 13:58:57 +02:00
Max Kellermann
57de2470f1
queue/Listener: add noexcept
2019-05-31 13:57:46 +02:00
Max Kellermann
8fef4af7b2
decoder/Bridge: add method OpenLocal()
2019-05-30 17:08:09 +02:00
Max Kellermann
cfb678d618
config/Parser: work around conflicting macro MAX_INPUT
...
linux/limits.h defines MAX_INPUT which breaks the build.
2019-05-30 16:10:01 +02:00
Max Kellermann
4eb101f046
config/Parser: add ParseSize()
...
Supports suffixes such as "kB" and "MB".
2019-05-29 22:44:05 +02:00
Max Kellermann
af7970337b
config/Parser: get_bool() throws on error
2019-05-29 22:35:40 +02:00
Max Kellermann
96a37da03d
config/Block: add method With()
2019-05-29 22:35:36 +02:00
Max Kellermann
ece35552fe
config/Block: add ThrowWithNested()
2019-05-29 22:33:51 +02:00
Max Kellermann
7d599c1afc
Main: add Config constructor
2019-05-29 22:22:05 +02:00
Max Kellermann
7c565bce1d
Main: move two more functions down
2019-05-29 22:20:02 +02:00
Max Kellermann
d17ff18ec0
Main: move main() to the bottom
2019-05-29 22:18:06 +02:00
Max Kellermann
efc6b1b77a
Main: fold mpd_main_after_fork() into MainConfigured()
2019-05-29 22:16:32 +02:00
Max Kellermann
fdbec694c6
config/Param: add method With()
2019-05-29 21:50:04 +02:00
Max Kellermann
b86d8d0cd8
config/Param: add method ThrowWithNested()
2019-05-29 21:46:27 +02:00
Max Kellermann
0b4e7b3317
client/List: use using instead of typedef
2019-05-29 21:36:27 +02:00
Max Kellermann
472e4bfd41
client/List: fold CloseAll() into destructor
2019-05-29 21:33:22 +02:00
Max Kellermann
d3d70a7eed
client/List: use auto
2019-05-29 21:31:43 +02:00
Max Kellermann
39046bed85
Instance: wrap ClientList in std::unique_ptr<>
2019-05-29 21:29:55 +02:00
Max Kellermann
71a5c8b819
Main: allocate Instance on the stack
2019-05-29 21:22:25 +02:00
Max Kellermann
620a39afb4
thread/Slack: use std::chrono::duration
2019-05-29 21:11:32 +02:00
Max Kellermann
14cee01ba1
Main: simplify Android startup
2019-05-29 15:08:39 +02:00
Max Kellermann
c782fdb698
Main: use AtScopeExit() to free Android objects
2019-05-29 15:08:38 +02:00
Max Kellermann
49ba76167e
Main: add overload with ConfigData parameter
2019-05-29 15:08:26 +02:00
Max Kellermann
93ab957800
Main: convert int return types to void
2019-05-29 14:52:58 +02:00
Max Kellermann
155c915733
input/buffering: make "mutex" public
2019-05-29 13:44:05 +02:00
Max Kellermann
971450f0d4
input/InputStream: make IsEOF() and IsAvailable() const
2019-05-29 13:31:54 +02:00
Max Kellermann
40a48cfba0
PluginUnavailable: add subclass PluginUnconfigured
...
PluginUnconfigured exceptions are logged with level "info" instead of
"error". This suppresses some rather boring messages in the default
log level.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/565
2019-05-23 14:25:14 +02:00
Max Kellermann
9d1906da8a
{event,output}/Thread: downgrade realtime scheduling errors to "info"
...
These messages can be confusing, but they are not critical.
2019-05-23 14:24:27 +02:00
Max Kellermann
3d2b180cf8
LogBackend: set default log level to "default"
...
This is the documented value, but for unknown reasons, "info" was
really the default.
This was never noticed because there are only very few "info" level
messages.
2019-05-23 14:14:58 +02:00
Max Kellermann
f987947730
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.
2019-05-23 12:23:28 +02:00
Max Kellermann
e0d5d88104
Log: make LogLevel the first parameter
...
Prepare for templated functions.
2019-05-23 12:17:59 +02:00
Max Kellermann
585a745484
Log: use GetFullMessage() to print exceptions
...
Print all nested exceptions on a single line to avoid confusion.
2019-05-22 18:24:45 +02:00
Max Kellermann
43fe513de8
input/buffering: add API documentation
2019-05-22 12:09:20 +02:00
Max Kellermann
c1b853ca7c
input/InputStream: define UNKNOWN_SIZE without undefined behavior
2019-05-22 12:01:46 +02:00
Max Kellermann
4b78038b41
input/InputStream: update API documentation
2019-05-22 12:00:16 +02:00
Max Kellermann
d651d1abfd
util/SparseBuffer: move #endif to the bottom
2019-05-22 10:43:07 +02:00
Max Kellermann
5a8b734cfd
tag/Id3Load: include cleanup
2019-05-22 10:23:39 +02:00
Max Kellermann
31b59a0db6
tag/Generic: allow ScanGenericTags() to throw
...
Propagate the error to the caller instead of logging it.
2019-05-22 10:19:28 +02:00
Max Kellermann
92f7421715
TagFile: allow ScanFileTags*() to throw
2019-05-22 10:19:27 +02:00
Max Kellermann
6f1d5105ee
TagStream: allow tag_stream_scan() to throw
2019-05-22 10:19:26 +02:00
Max Kellermann
9a78371b5c
DetachedSong: allow LoadFile(), Update() to throw
2019-05-22 10:19:25 +02:00
Max Kellermann
3fc4da382e
db/simple/Song: allow LoadFile(), UpdateFile() to throw
...
Preparing to move logger calls out of lower-level libaries, and
propagating error details to the caller instead.
2019-05-22 10:19:24 +02:00
Max Kellermann
6ee7d88af0
db/update/Archive: fix inverted nullptr check
...
Regression by commit bbdf2dcf1e
2019-05-22 10:18:18 +02:00
Max Kellermann
bbdf2dcf1e
db/simple/Song: wrap in std::unique_ptr<>
2019-05-21 22:46:34 +02:00
Max Kellermann
02bb47dd08
db/simple/Song: move struct Disposer to separate header
...
Allow forward-declaring it.
2019-05-21 22:42:32 +02:00
Max Kellermann
0c48b8d084
db/simple/Song: add noexcept
2019-05-21 22:41:21 +02:00
Max Kellermann
8462559b2f
db/simple/Song: include cleanup
2019-05-21 22:40:08 +02:00
Max Kellermann
319c9699fb
tag/Type: add TAG_GROUPING
...
Map ID3 "TIT1" to this new core tag type.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/563
2019-05-21 22:23:06 +02:00
Max Kellermann
06a0a4a838
time/Convert: include sys/time.h for struct timeval
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/562
2019-05-21 10:13:16 +02:00
Max Kellermann
8942be858b
Merge tag 'v0.21.9'
...
release v0.21.9
2019-05-20 17:23:01 +02:00
Max Kellermann
66a8fac25e
release v0.21.9
2019-05-20 17:10:58 +02:00
Max Kellermann
1b902e00b4
doc/protocol.rst: several clarifications
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/340
2019-05-20 17:06:20 +02:00
Max Kellermann
45a091c00c
.github: add issue templates
2019-05-20 16:44:02 +02:00
Max Kellermann
923e66738c
player/Thread: fix "single" mode race condition
...
If the decoder finishes decoding the current song between the two
IsIdle() checks, MPD stops playback instead of starting the decoder
for the next song.
This is usually not visible problem, because the main thread restarts
it via playlist::ResumePlayback(), but that way it, ignores "single"
mode.
As a workaround, this commit adds another "queued" check which
re-enters the player loop and checks again whether to start the
decoder.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/556
2019-05-20 16:22:01 +02:00
Max Kellermann
ff3e2c0514
player/Thread: remove unnecessary "pipe" check
...
The "queued" flag can only possibly be set if the decoder is still
decoding the current song or if the decoder is stopped. This is also
what the following assert() checks. This check was not necessary.
2019-05-20 16:20:59 +02:00
Max Kellermann
6922a2f55e
input/buffered: check error in IsAvailable()
2019-05-17 12:43:45 +02:00
Max Kellermann
219546cb81
input/buffering: check error in IsAvailable()
2019-05-17 12:43:06 +02:00
Max Kellermann
555a4d738c
input/buffering: pass offset to Read() and eliminate Seek()
...
Another step towards supporting multiple readers.
2019-05-17 12:02:55 +02:00
Max Kellermann
813567bf5c
input/buffering: use notify_one() to wake up thread
...
There is just one thread.
2019-05-17 11:57:23 +02:00
Max Kellermann
16a07bc201
input/buffering: remove obsolete thread wakeup
...
The thread will always attempt to read more data since commit
2cf6b77627 , so we don't need to tell it
to continue.
2019-05-17 11:56:30 +02:00
Max Kellermann
1153715608
input/buffering: rename "read_error" to "error"
...
The "seek_error" attribute will be eliminated soon.
2019-05-17 11:29:19 +02:00
Max Kellermann
b5c7c16fb4
input/buffering: merge multiple exception handlers into RunThread()
2019-05-17 11:23:54 +02:00
Max Kellermann
302c0515b7
input/buffering: move code to RunThreadLocked()
2019-05-17 11:21:56 +02:00
Max Kellermann
19e4672a54
input/buffering: use notify_all() instead of notify_one()
...
More preparations to support multiple readers.
2019-05-17 11:17:16 +02:00
Max Kellermann
c2dd6808e1
input/buffering: make read errors fatal, no recovery
...
If a read error occurs, it is very unlikely that the InputStream will
ever recover. Removing the code removes some code complexity which
just isn't worth it. And it allows supporting multiple readers for
one buffer.
2019-05-17 10:55:58 +02:00
Max Kellermann
2cf6b77627
input/buffering: eliminate "idle" flag, automatically seek to next hole
2019-05-16 22:42:29 +02:00
Max Kellermann
a5c09f4ddb
input/buffering: destruct our input while mutex is unlocked
2019-05-16 22:38:37 +02:00
Max Kellermann
1acb9bcedb
input/buffering: close input if buffered completely
2019-05-16 22:34:11 +02:00
Max Kellermann
0626e3d21e
input/buffering: at end of input, seek to first hole
2019-05-16 22:29:10 +02:00
Max Kellermann
869d215058
input/buffering: merge "read_error" and "idle" checks in thread
2019-05-16 22:25:21 +02:00
Max Kellermann
0cf922b2da
input/buffering: clear read_error after successful seek
...
After seeking, a new read should be done.
2019-05-16 22:24:57 +02:00
Max Kellermann
5e266cd8e4
Merge branch 'v0.21.x'
2019-05-16 22:12:48 +02:00
Max Kellermann
ca5a400dbe
input/buffered: rethrow read_error in Check()
2019-05-16 22:08:33 +02:00
Max Kellermann
63fe4d1d17
input/buffered: wake up client thread on seek error
2019-05-16 22:05:25 +02:00
Max Kellermann
a199f58db5
input/buffering: update thread name
2019-05-16 22:02:51 +02:00
Max Kellermann
5277297336
input/buffered: move basic buffering code to class BufferingInputStream
...
Prepare to reuse it in another class.
2019-05-16 21:41:28 +02:00
Max Kellermann
604d08b2c6
Merge branch 'v0.21.x'
2019-05-16 21:26:45 +02:00
Max Kellermann
ca06d9d3bf
input/buffered: fix deadlock bug
2019-05-16 21:11:03 +02:00
Max Kellermann
ed2db04f43
doc/mpd.conf.5: remove ALSA specific documentation
...
ALSA is just one out of many output plugins, and detailed plugin
documentation should only live in the user manual, without having
duplicates in the (brief) manpage.
Also move "mixer_type" to the "optional audio output parameters"
section; it is a generic option, not specific to ALSA.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/552
2019-05-13 22:51:48 +02:00
Max Kellermann
de0afa0e08
doc/mpd.conf.5: fix section indent
2019-05-13 22:51:45 +02:00
Max Kellermann
f0d3227d7b
doc/protocol.rst: add references to audio_output_format
2019-05-13 22:46:23 +02:00
Max Kellermann
fb07a7cecc
doc/user.rst: move audio format spec to section "Global Audio Format"
2019-05-13 22:39:49 +02:00
Max Kellermann
c6b08a4d48
doc/user.rst: add reference to audio_output_format
2019-05-13 22:39:44 +02:00
Max Kellermann
040e87ad8d
doc/user.rst: more markup
2019-05-13 22:36:19 +02:00
Max Kellermann
d5521ead56
doc/user.rst: add missing space
2019-05-13 22:36:19 +02:00
Max Kellermann
a48604d2e3
util/SparseBuffer: remove bogus noexcept from constructor
...
The HugeArray constructor can throw std::bad_alloc, and so can
SparseBuffer's constructor.
2019-05-08 22:34:33 +02:00
Max Kellermann
98e6a861ca
util/HugeAllocator: import std::swap()
2019-05-08 22:33:41 +02:00
Max Kellermann
2c6dd04d19
util/HugeAllocator: add noexcept
2019-05-08 22:32:50 +02:00
Max Kellermann
82ca3aa281
time/ISO8601: forward-declare StringBuffer
2019-05-08 16:24:31 +02:00
Max Kellermann
b45f5c7bf6
time/Convert: update copyright
2019-05-08 16:23:58 +02:00
Max Kellermann
f54877d128
time/Convert: mention exceptions
2019-05-08 16:14:12 +02:00
Max Kellermann
af3ea97a42
zeroconf/AvahiPoll: move TimevalToChrono() to time/Convert.cxx
2019-05-08 16:11:14 +02:00
Max Kellermann
8beac03dc4
time/Convert: add noexcept
2019-05-08 16:09:27 +02:00
Max Kellermann
4a49a5587d
time/Convert: add pure attributes
2019-05-08 16:08:54 +02:00
Max Kellermann
d0cfa44c8f
time/FileTime: use ToUint64() in DeltaFileTimeS()
2019-05-08 16:06:19 +02:00
Max Kellermann
5bae6946c6
time/FileTime: add ToUint64(FILETIME)
2019-05-08 16:05:37 +02:00
Max Kellermann
a8fc805594
time/FileTime: drop static
2019-05-08 16:05:21 +02:00
Max Kellermann
a265738528
time/FileTime: add noexcept
2019-05-08 16:04:07 +02:00
Max Kellermann
5641c4baa6
system/Clock, fs/FileInfo: move FILETIME specific code to time/FileTime.hxx
2019-05-08 16:02:13 +02:00
Max Kellermann
96f889276f
system/Clock: GetProcessUptimeS() returns std::chrono::duration
2019-05-08 15:58:01 +02:00
Max Kellermann
214ddee2f5
util/Time*: move to time/
2019-05-08 15:47:58 +02:00
Max Kellermann
973c87b351
event/Call, ...: use wait() with predicate
2019-05-07 20:01:45 +02:00
Max Kellermann
72fc117393
thread/WindowsCond: add wait() overload with predicate
2019-05-07 19:59:32 +02:00
Max Kellermann
230ca2e968
thread/{Mutex,Cond}: use std::mutex and std::condition_variable
...
On Windows, we keep using our own implementations, because GCC
implements std::mutex and std::condition_variable with pthread
emulation, which is not a good choice.
2019-05-07 19:57:53 +02:00
Max Kellermann
9095167039
thread/*Cond: add wait_for() overload with predicate
2019-05-07 19:54:54 +02:00
Max Kellermann
ad4ca0c449
thread/*Cond: remove wait() overloads without std::unique_lock<>
2019-05-07 19:31:00 +02:00
Max Kellermann
0a0cc66e8f
thread/Mutex: use using instead of making it a derived class
...
Prepare the transition to std::mutex.
2019-05-07 19:23:01 +02:00
Max Kellermann
1b5c1f75a4
input/InputStreams: pass std::unique_lock<> to various methods
2019-05-07 19:09:39 +02:00
Max Kellermann
040573c636
command/fingerprint: fix mutex locking bug
...
GetChromaprintCommand::DecodeStream() is called without holding the mutex.
2019-05-07 19:09:13 +02:00
Max Kellermann
bc5d4f9494
Merge branch 'v0.21.x'
2019-05-04 13:29:17 +02:00
Max Kellermann
f8468451c9
android/AndroidManifest.xml: increment versionCode after hotfix upload
2019-05-04 13:25:05 +02:00
Max Kellermann
65df6ca14e
android/Settings: request READ_EXTERNAL_STORAGE permission
...
Using this API function requires SDK level 23.
2019-05-04 07:29:41 +02:00
Max Kellermann
36dec47bf7
android/build.py: link ARMv7 binary with libunwind
...
Fixes nullptr dereference when an exception gets thrown because there
is no ".eh_frame" section for unwinding.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/543
2019-05-03 20:15:50 +02:00
Max Kellermann
478cedcadf
increment version number to 0.21.9
2019-05-03 20:15:33 +02:00
Max Kellermann
dedc4b4b10
player/Control: pass std::unique_lock<> to Cond::wait()
2019-04-26 18:47:22 +02:00
Max Kellermann
cf348f9fae
decoder/Control: pass std::unique_lock<> to Cond::wait()
2019-04-26 18:34:16 +02:00
Max Kellermann
23d56cb6a1
output/Control: pass std::unique_lock<> to Cond::wait()
2019-04-26 18:28:44 +02:00
Max Kellermann
4473816384
output/Control: add LockEnableDisableAsync()
2019-04-26 18:28:09 +02:00
Max Kellermann
2c8d004f78
output/Control: add LockWaitForCommand()
2019-04-26 18:25:36 +02:00
Max Kellermann
684bd9153e
output/MultipleOutputs: simplify locking in CheckPipe()
...
Instead of keeping all open outputs locked, let ClearTailChunk() stall
playback until MultipleOutputs::CheckPipe() has updated the MusicPipe.
2019-04-26 18:13:14 +02:00
Max Kellermann
ec456fc57c
output/MultipleOutputs: make variable more local
2019-04-26 18:13:02 +02:00
Max Kellermann
7c92eb4360
output/Control: add noexcept
2019-04-26 17:53:27 +02:00
Max Kellermann
2c6ebe28e9
playlist/EmbeddedCue:: wrap CueParser in std::unique_ptr<>
2019-04-26 14:58:09 +02:00
Max Kellermann
401f06f367
playlist/EmbeddedCue: add noexcept
2019-04-26 14:57:03 +02:00
Max Kellermann
2b4e9cc635
db/update/Service: wrap UpdateWalk in std::unique_ptr<>
2019-04-26 14:55:00 +02:00
Max Kellermann
afdaaba045
fs/io/BufferedOutputStream: add noexcept
2019-04-26 14:55:00 +02:00
Max Kellermann
1cfc0cb874
fs/io/AutoGunzipReader: use std::unique_ptr<>
2019-04-26 14:55:00 +02:00
Max Kellermann
3882c97545
fs/io/AutoGunzipReader: add noexcept
2019-04-26 14:55:00 +02:00
Max Kellermann
bf9f690c70
fs/io/GunzipReader: add noexcept
2019-04-26 14:55:00 +02:00
Max Kellermann
392b783c9e
fs/io/TextFile: add noexcept
2019-04-26 14:44:27 +02:00
Max Kellermann
6d86902a02
fs/io/TextFile: use std::unique_ptr<>
2019-04-26 14:42:54 +02:00
Max Kellermann
376f4a2b16
output/MultipleOutputs: wrap AudioOutputControl in std::unique_ptr<>
2019-04-26 14:28:59 +02:00
Max Kellermann
b42f19f514
output/Control: implicitly call BeginDestroy() in destructor
2019-04-26 14:28:30 +02:00
Max Kellermann
92022658f9
thread/Cond: add wait() overload which takes a unique_lock<>
...
Just like std::condition_variable, which however has no way to specify
the std::mutex directly.
2019-04-26 11:51:45 +02:00
Max Kellermann
b51bae5500
thread/*Cond: rename methods to match std::condition_variable
2019-04-25 19:46:43 +02:00
Max Kellermann
5bc8cd0ecb
event/Call: use std::lock_guard
2019-04-25 19:45:52 +02:00
Max Kellermann
d38a079ba1
neighbor/smbclient: use std::lock_guard
2019-04-25 19:44:59 +02:00
Max Kellermann
c75a0f7c75
neighbor/smbclient: call Run() with locked mutex
2019-04-25 19:43:45 +02:00
Max Kellermann
e740f8d969
decoder/Control: remove unused methods Lock(), Unlock()
2019-04-25 19:34:26 +02:00
Max Kellermann
9da7509944
input/curl: use class ScopeUnlock
2019-04-25 19:33:50 +02:00
Max Kellermann
36aa204575
input/smbclient: use std::lock_guard
2019-04-25 19:33:50 +02:00
Max Kellermann
2c0a968735
storage/smbclient: use std::lock_guard
2019-04-25 19:23:37 +02:00
Max Kellermann
84c406d5f5
storage/nfs: use class ScopeUnlock
2019-04-25 19:22:57 +02:00
Max Kellermann
0e48747607
event/Call: use std::lock_guard
2019-04-25 18:57:58 +02:00
Max Kellermann
f764925edc
Instance: use std::unique_ptr<> to manage the NeighborGlue pointer
2019-04-25 13:09:31 +02:00
Max Kellermann
692c8025a2
Main: use AtScopeExit() to call NeighborGlue::Close()
2019-04-25 13:03:51 +02:00
Max Kellermann
a6dc1ab0a9
lib/sqlite/Database: wrapper for sqlite3*
2019-04-25 12:10:12 +02:00
Max Kellermann
77c9081f78
sticker/Database: wrap in class StickerDatabase
2019-04-25 12:05:18 +02:00
Max Kellermann
c88d5616f7
sticker/Database: move sticker_prepare() to lib/sqlite/Util.hxx
2019-04-25 11:57:29 +02:00
Max Kellermann
34d483a34a
lib/sqlite/Util: move into namespace
2019-04-25 11:56:52 +02:00
Max Kellermann
5a3828ed4a
sticker/*: rename source files, drop "Sticker" prefix
2019-04-24 15:15:19 +02:00
Max Kellermann
3fe7f27345
sticker/Database: eliminate sticker_foreach()
2019-04-24 15:12:58 +02:00
Max Kellermann
0dccadff89
sticker/Database: remove unused function sticker_get_value()
2019-04-24 15:09:47 +02:00
Max Kellermann
5a915eb0e6
sticker/Database: return Sticker by value
2019-04-24 15:05:05 +02:00
Max Kellermann
7b48ae4f85
sticker/Database: move struct Sticker to Sticker.hxx
2019-04-24 15:03:52 +02:00
Max Kellermann
92dc4a0ca7
sticker/Database: add noexcept
2019-04-24 15:00:24 +02:00
Max Kellermann
c7c303eec3
db/DatabaseListener: add noexcept
2019-04-24 14:57:30 +02:00
Max Kellermann
1b62adc894
Instance: add noexcept
2019-04-24 14:56:08 +02:00
Max Kellermann
0641ce79fe
StateFile: add noexcept
2019-04-24 14:54:17 +02:00
Max Kellermann
b985835d8b
android/Environment: add noexcept
2019-04-24 14:50:02 +02:00
Max Kellermann
e413dcf8c6
android/LogListener: add noexcept
2019-04-24 14:49:42 +02:00
Max Kellermann
ea61e6dde1
android/Context: add noexcept
2019-04-24 14:49:42 +02:00
Max Kellermann
f7f858cb07
android/Context: use DiscardException()
2019-04-24 14:44:06 +02:00
Max Kellermann
4d1546cb38
java/File: use DiscardException()
2019-04-24 14:43:09 +02:00
Max Kellermann
a4bc972aad
java/File: use String::ToString() in ToAbsolutePath()
2019-04-24 14:40:31 +02:00
Max Kellermann
1415bac1d6
fs/AllocatedPath: add Android-only FromUTF8(std::string&&) overload
2019-04-24 14:39:47 +02:00
Max Kellermann
7a98a784b2
fs/Features: add macro FS_CHARSET_ALWAYS_UTF8
2019-04-24 14:28:55 +02:00
Max Kellermann
162845cc6d
fs/Charset: move HAVE_FS_CHARSET to Features.hxx
2019-04-24 14:24:54 +02:00
Max Kellermann
a8ee7269bc
fs/Config: add noexcept
2019-04-24 14:24:21 +02:00
Max Kellermann
7c1843ee2e
fs/AllocatedPath: add noexcept
2019-04-24 14:18:24 +02:00
Max Kellermann
bc8bb41aef
fs/Path: add noexcept
2019-04-24 14:17:37 +02:00
Max Kellermann
a8b94a4507
fs/Traits: add noexcept
2019-04-24 14:16:45 +02:00
Max Kellermann
f1b6deb768
java/Exception: add RethrowException()
2019-04-24 14:09:45 +02:00
Max Kellermann
72ebd5ebdd
java/Object: add Object.toString() wrapper
2019-04-24 14:08:51 +02:00
Max Kellermann
61b2ae0f7c
java/String: add method ToString()
2019-04-24 14:07:52 +02:00
Max Kellermann
0d2ec5ead2
java/Object: rename class Object to GlobalObject
2019-04-24 14:07:52 +02:00
Max Kellermann
5b74ed6b3b
Merge tag 'v0.21.8'
...
release v0.21.8
2019-04-23 14:41:08 +02:00
Max Kellermann
cabcbb059d
release v0.21.8
2019-04-23 14:35:14 +02:00
Max Kellermann
5e21b2db3c
doc/protocol.rst: "list file" is deprecated
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/526
2019-04-23 14:29:42 +02:00
Max Kellermann
3a0d6d96c1
input/smbclient: wrap in MaybeBufferedInputStream
...
This enables the input buffer for remote files and caches file
contents in MPD.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/376
2019-04-23 14:08:27 +02:00
Max Kellermann
f39d2d33c0
python/build/libs.py: upgrade Boost to 1.70.0
2019-04-23 14:08:27 +02:00
Max Kellermann
ccc58f2a32
Merge branch 'v0.21.x'
2019-04-18 11:49:05 +02:00
Max Kellermann
ead3dc6a92
LocateUri: pass URI plugin kind, optionally disables plugin verify
...
Commit b3a458338a added a LocateUri()
call to several playlist commands, which applied InputPlugin URI
scheme verification to playlist URIs. This broke the SoundCloud
playlist plugin which uses "soundcloud://" URIs for which no input
plugin exists.
This commit allows the caller to specify the kind of plugin which
shall be used to verify the URI. Right now, only "input" is
implemented; "storage" uses the "input" verification for now; and
"playlist" has no verification at all (for now).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/528
2019-04-18 10:03:15 +02:00
Max Kellermann
7d814cc899
neighbor/smbclient: fix double smbc_closedir() call
...
There is already one call in ReadServers(), which is the correct place
to do it.
2019-04-18 09:40:56 +02:00
Max Kellermann
f5b4606c09
.travis.yml: switch to another PPA for a newer ninja version
...
Fixes Travis failure with Meson 0.50:
ERROR: Could not detect Ninja v1.5 or newer
2019-04-18 09:40:30 +02:00
Max Kellermann
d6dbf64efb
CommandLine: fix another build failure with -Ddatabase=false
...
Split several printf() calls to make it easier to deal with all those
#ifdefs.
2019-04-18 09:20:12 +02:00
Eugene Gorodinsky
8d18b4c24b
Fix meson.build to work properly with '-Ddatabase=false'
2019-04-18 08:55:13 +02:00
Max Kellermann
d28307e082
neighbor/smbclient: fix double smbc_closedir() call
...
There is already one call in ReadServers(), which is the correct place
to do it.
2019-04-16 20:07:48 +02:00
Max Kellermann
aa5c5bf14f
neighbor/smbclient: add noexcept
2019-04-16 20:05:14 +02:00
Max Kellermann
2e80477218
neighbor/smbclient: make Server attributes "const"
2019-04-16 20:05:11 +02:00
Max Kellermann
8b9df85daa
neighbor/smbclient: remove unused attribute "alive"
2019-04-16 20:04:53 +02:00
Max Kellermann
38d0f02e83
.travis.yml: switch to another PPA for a newer ninja version
...
Fixes Travis failure with Meson 0.50:
ERROR: Could not detect Ninja v1.5 or newer
2019-04-16 11:36:17 +02:00
Max Kellermann
edafe4cad6
tag/Id3Unique: add noexcept
2019-04-16 10:38:57 +02:00
Max Kellermann
3cbadf42a5
java/Ref: add move constructor
2019-04-11 11:34:52 +02:00
Max Kellermann
1d49f1108f
java/Ref: allow LocalRef to be nullable
...
Makes using the Java glue classes simpler to use, at the cost of very
little overhead.
2019-04-11 11:32:07 +02:00
Max Kellermann
791245dec2
Merge branch 'v0.21.x'
2019-04-10 16:38:51 +02:00
Max Kellermann
fe8621906d
systemd: add user socket unit
...
Copy the system socket unit to the "user" directory.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/530
2019-04-10 16:37:13 +02:00
Max Kellermann
b4fcbdb235
systemd/socket: use %t instead of hard-coding /run
...
This allows using the file as a user unit, where "%t" maps to
"$XDG_RUNTIME_DIR".
Proposed in https://github.com/MusicPlayerDaemon/MPD/issues/530
2019-04-10 16:34:40 +02:00
Max Kellermann
f4b5a28596
doc/protocol: mention that stickers are only implemented for songs
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/524
2019-04-10 16:33:17 +02:00
Max Kellermann
6cbd77fc57
doc/protocol.rst: mention "in seconds" where it was missing
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/523
2019-04-10 16:30:26 +02:00
cotko
1bc78e9f2c
Fid move doc args
2019-04-10 13:16:58 +02:00
Max Kellermann
cb6282e0a7
doc/developer.rst: remove mailing list, refer to GitHub instead
2019-04-10 11:36:03 +02:00
Max Kellermann
8e5e97bfed
command: add command "getfingerprint"
...
A first use case for our libchromaprint integration added by commit
30e22b753b
2019-04-05 14:23:35 +02:00
Max Kellermann
17dd334b82
client/ThreadBackgroundCommand: fix inverted check
2019-04-05 14:23:35 +02:00
Max Kellermann
ab5eb4f9ce
tag/meson.build: move libchromaprint detection to lib/chromaprint/
2019-04-05 13:51:48 +02:00
Max Kellermann
a30af2ba42
lib/chromaprint/DecoderClient: replace method PrintResult()
2019-04-05 13:40:05 +02:00
Max Kellermann
9f1c23e217
client/BackgroundCommand: infrastructure for commands running in background
2019-04-05 11:18:15 +02:00
Max Kellermann
28fc1d555f
decoder/Thread: eliminate decoder_input_stream_open()
2019-04-05 10:32:07 +02:00
Max Kellermann
ac74f284aa
decoder/Bridge: check for STOP before InputStream::IsReady()
...
If the DecoderThread gets woken up by a STOP command, this should be
detected as early as possible.
2019-04-05 10:32:06 +02:00
Max Kellermann
77af999b46
decoder/Thread: use DecoderBridge::OpenUri(), eliminate duplicate code
2019-04-05 10:29:24 +02:00
Max Kellermann
4926763f00
decoder/Bridge: call InputStream::Check() before returning
2019-04-05 10:29:20 +02:00
Max Kellermann
a19eee78c6
decoder/Bridge: make many attributes private
2019-04-05 09:26:03 +02:00
Max Kellermann
6be3c99876
decoder/Bridge: add noexcept
2019-04-05 09:04:08 +02:00
Max Kellermann
8006911a1f
decoder/Client: add noexcept
2019-04-05 09:03:42 +02:00
Max Kellermann
61e5828790
input/InputStream: add noexcept to ReadTag()
2019-04-05 08:57:42 +02:00
Max Kellermann
6addc9d6e0
pcm/PcmConvert: remove unused attribute "dest_format"
2019-04-04 21:06:28 +02:00
Max Kellermann
e78d825059
pcm/PcmConvert: eliminate Open() and Close()
...
Let the constructor and destructor do this. This means that all users
have to be converted to allocate PcmConvert dynamically.
2019-04-04 21:01:08 +02:00
Max Kellermann
00b04468dc
filter/Convert: make in_audio_format const
2019-04-04 21:00:23 +02:00
Max Kellermann
8a07724b23
test/RunChromaprint: move class ChromaprintDecoderClient to lib/chromaprint/
2019-04-04 20:29:27 +02:00
Max Kellermann
5256929b17
tag/Chromaprint: move to lib/chromaprint/Context.hxx
2019-04-04 20:21:10 +02:00
Max Kellermann
093bf5d859
event/*, ...: make GetEventLoop() const
2019-04-04 20:07:57 +02:00
Max Kellermann
4f6144dc71
lib/curl/Init: add const overloads
2019-04-04 20:06:43 +02:00
Max Kellermann
2d1493ed7a
lib/curl/Init: add noexcept
2019-04-04 20:06:20 +02:00
Max Kellermann
43677d5740
event/MaskMonitor: add noexcept
2019-04-04 19:54:17 +02:00
Max Kellermann
693815bb32
input/AsyncInputStream: add noexcept
2019-04-04 19:54:17 +02:00
Max Kellermann
58d7804d66
Client: eliminate SetExpired(), call Close() directly
2019-04-04 10:37:38 +02:00
Max Kellermann
ea5e6d8f33
Merge branch 'v0.21.x'
2019-04-04 10:29:58 +02:00
Max Kellermann
f6941f9a44
event/SocketMonitor: don't cancel if OnSocketReady() returns false
...
Expect OnSocketReady() to cancel events. If it returns false, the
SocketMonitor may be destructed already. This fixes a use-after-free
bug in the "httpd" output plugin.
2019-04-04 10:24:58 +02:00
Max Kellermann
d2eb4df8fc
event/{Fully,}BufferedSocket: add more API documentation
2019-04-04 10:24:58 +02:00
Max Kellermann
df33a898d7
zeroconf/Bonjour: fix OnSocketReady() return value
...
Keep the SocketMonitor registered. This wrong return value was added
6 years ago in commit 72cf8dd8a0 , andd
apparently, nobody ever noticed.
2019-04-04 10:24:29 +02:00
Max Kellermann
325c7b8e8b
output/httpd: close client connection on error
...
This missing piece probably never really hurt, because
HttpdClient::OnSocketClosed() would be called right after a socket
error, but it's better to be explicit about closing on error.
2019-04-04 09:39:22 +02:00
Max Kellermann
380656d8c9
output/httpd: add missing mutex lock
2019-04-03 22:53:03 +02:00
Max Kellermann
9111bc2c21
output/httpd: add more API documentation about locking
2019-04-03 22:49:25 +02:00
Max Kellermann
c1272c72b0
client/Process: reset the CommandListBuilder before processing it
...
Allows removing a CommandResult::CLOSE check.
2019-04-03 22:38:26 +02:00
Max Kellermann
7d1db5c19f
client/Process: refactor IsExpired() checks
2019-04-03 22:31:49 +02:00
Max Kellermann
2142d070a3
client/Process: refactor return statements
2019-04-03 22:30:38 +02:00
Max Kellermann
9711cee26d
client/Process: update code comment
2019-04-03 22:30:18 +02:00
Max Kellermann
39baa4e364
client/Process: more strict syntax check
2019-04-03 22:29:43 +02:00
Max Kellermann
f339a53e3c
client/Process: move basic syntax check to the beginning of method
...
This catches lines within command lists as well.
2019-04-03 22:27:41 +02:00
Max Kellermann
d9117a272b
client/Response: use C++11 initializer
2019-04-03 21:53:20 +02:00
Max Kellermann
b8a8bdeaec
Permission: use IterableSplitString
2019-04-03 21:47:20 +02:00
Max Kellermann
8f20edac9d
Permission: pass StringView to ParsePermission()
...
Eliminates a temporary copy.
2019-04-03 21:45:01 +02:00
Max Kellermann
8499a662ea
Permission: add noexcept
2019-04-03 21:42:31 +02:00
Max Kellermann
3f05b7d8b4
client/New: include cleanup
2019-04-03 21:41:52 +02:00
Max Kellermann
1d563700a4
client/File: include cleanup
2019-04-03 21:40:12 +02:00
Max Kellermann
def6b936c8
client/Response: add noexcept
2019-04-03 21:38:09 +02:00
Max Kellermann
3610f55479
client/Write: add noexcept
2019-04-03 21:37:38 +02:00
Max Kellermann
6db84852ae
client/Listener: add noexcept
2019-04-03 21:36:02 +02:00
Max Kellermann
41dc36ba92
client/List: add noexcept
2019-04-03 21:34:53 +02:00
Max Kellermann
fe32db17d7
client/Internal: rename to Config.hxx
2019-04-03 21:31:32 +02:00
Max Kellermann
772aa4f165
client/Internal: move CLIENT_MAX_* to class Client
2019-04-03 21:28:46 +02:00
Max Kellermann
38298e0cd8
client/Internal: move client_domain to Domain.hxx
2019-04-03 21:26:16 +02:00
Max Kellermann
1213d979f8
client/*: rename source files, remove "Client" prefix
2019-04-03 20:59:00 +02:00
Max Kellermann
a9cb12b745
Client: make almost all attributes private
2019-04-03 20:16:08 +02:00
Max Kellermann
380f73c112
client/Process: convert functions to Client methods
2019-04-03 20:04:59 +02:00
Max Kellermann
9f79d034b3
client/Process: add noexcept
2019-04-03 20:04:31 +02:00
Max Kellermann
37b54179d8
net/IPv[46]Address: add cast to void* to fix GCC9 build failure
...
Fixes:
src/net/IPv4Address.hxx: In member function 'constexpr IPv4Address::operator SocketAddress() const':
src/net/IPv4Address.hxx:171:24: error: a reinterpret_cast is not a constant expression
171 | return SocketAddress((const struct sockaddr *)&address,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/net/IPv6Address.hxx: In member function 'constexpr IPv6Address::operator SocketAddress() const':
src/net/IPv6Address.hxx:138:24: error: a reinterpret_cast is not a constant expression
138 | return SocketAddress((const struct sockaddr *)&address,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Closes https://github.com/MusicPlayerDaemon/MPD/issues/522
2019-04-03 16:59:53 +02:00
Max Kellermann
4a745a399f
client: un-inline the destructor
2019-04-03 14:44:01 +02:00
Max Kellermann
c340485dd5
client: make GetEventLoop() public
2019-04-03 14:32:28 +02:00
Max Kellermann
f8570dd79f
encoder/opus: use new[] instead of xalloc()
2019-04-03 14:22:32 +02:00
Max Kellermann
4a49f3cce8
doc/protocol.rst: add parameters to albumart example
2019-04-03 14:04:26 +02:00
Max Kellermann
a1ae455c69
doc/protocol.rst: make the albumart documentation more generic
2019-04-03 14:01:46 +02:00
Max Kellermann
7a1b56fe96
Merge tag 'v0.21.7'
...
release v0.21.7
2019-04-03 12:32:20 +02:00
Max Kellermann
511826763a
increment version number to 0.21.8
2019-04-03 12:27:18 +02:00
Max Kellermann
ef10354d06
release v0.21.7
2019-04-03 12:18:29 +02:00
Max Kellermann
158458db5f
python/build/libs.py: upgrade libnfs to 4.0.0
2019-04-03 11:37:33 +02:00
Max Kellermann
e183ab5cf8
python/build/libs.py: upgrade CURL to 7.64.1
2019-04-03 11:35:13 +02:00
Max Kellermann
fef839e2a9
python/build/libs.py: upgrade FFmpeg to 4.1.3
2019-04-03 11:34:32 +02:00
Max Kellermann
9776e43bbe
android/AndroidManifest.xml: update version number
2019-04-03 11:28:59 +02:00
Max Kellermann
5201147ab1
input/curl: use std::throw_with_nested() instead of logging the exception
...
Let the caller decide what to do with the original exception.
2019-03-29 17:34:51 +01:00
Max Kellermann
fb7daa0d05
input/smbclient: use std::throw_with_nested() to construct PluginUnavailable
...
Preserve the original exception.
2019-03-29 17:32:23 +01:00
Max Kellermann
508e522188
PluginUnavailable: perfect forwarding in the constructor
2019-03-29 17:17:45 +01:00
Max Kellermann
2e9f3d8b9f
decoder/HybridDSD: downgrade log message to "debug"
...
This plugin is interesting only for a tiny fraction of MPD users, so
let's not spam everybody else's log with it.
2019-03-29 17:15:48 +01:00
Max Kellermann
976731ab6c
command/playlist: invoke the RemoteTagScanner on all newly added songs
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/234
2019-03-29 17:01:31 +01:00
François Revol
0d8942e64a
Haiku: remove redundant calls to delete_sem()
...
Fixes #184 .
Semaphores are kernel-managed objects, calling delete_sem() twice is not more
dangerous than calling close() twice on an fd though, it would just return
an error.
2019-03-29 14:33:49 +01:00
François Revol
37a0f04712
Haiku: add version info to the resources like win32 does
2019-03-29 14:33:27 +01:00
François Revol
cde9348009
Haiku: fix adding resources
...
The custom_command was run in src/haiku/ and created a file with only resources inside.
Since xres edits the file in-place and meson doesn't like it, we have to run a shell script for now.
Maybe later I'll add proper support in meson.
2019-03-29 14:32:59 +01:00
François Revol
095e6e6ad4
Haiku: meson.build: fix linking (missing libs)
2019-03-29 14:32:19 +01:00
François Revol
9d0bf5e95c
Haiku: fix build
2019-03-29 14:32:06 +01:00
Max Kellermann
b1b630a4cc
command/database: support "sort" and "window" in more commands
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/516
2019-03-25 19:05:49 +01:00
Max Kellermann
c60d374fc8
db/DatabasePlaylist: pass DatabaseSelection to search_add_to_playlist()
2019-03-25 19:04:34 +01:00
Max Kellermann
de4fd4c059
command/database: move code to ParseDatabaseSelection()
2019-03-25 19:02:11 +01:00
Max Kellermann
95d8b30864
protocol/Ack: add noexcept
2019-03-25 19:01:34 +01:00
Max Kellermann
eb94f409d5
protocol/Ack: perfect forwarding in the ProtocolError constructor
2019-03-25 19:01:27 +01:00
Max Kellermann
93d91936b5
test/run_filter: check for partial writes
2019-03-25 08:59:34 +01:00
Max Kellermann
2220383d83
test/run_filter: move code to WriteOrThrow()
2019-03-25 08:59:25 +01:00
Max Kellermann
3231706628
test/run_filter: use class FileDescriptor
2019-03-25 08:53:58 +01:00
Max Kellermann
ca4e53859d
Merge branch 'v0.21.x'
2019-03-25 08:11:07 +01:00
Max Kellermann
8b327f1d9b
filter/AutoConvert: implement Flush()
2019-03-24 22:42:06 +01:00
Max Kellermann
aef0507abb
filter/Filter: fix typo in API doc
2019-03-24 22:34:11 +01:00
Max Kellermann
61120d2059
filter/ffmpeg: use only one AVFrame
...
The two were never used at the same time, and merging them saves one allocation.
2019-03-24 22:29:57 +01:00
Max Kellermann
cc1822810f
filter/ffmpeg: use av_buffersrc_add_frame() instead of av_buffersrc_write_frame()
...
This transfers ownership of the buffer instead of adding another reference.
2019-03-24 22:28:40 +01:00
Max Kellermann
a21c6884f2
filter/ffmpeg: call av_frame_unref() before av_buffersink_get_frame()
...
Fix another memory leak.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/514
2019-03-24 22:27:48 +01:00
Max Kellermann
2700eed08d
filter/ffmpeg: remove unnecessary av_frame_make_writable() call
...
A newly allocated buffer doesn't need this call; it only adds overhead
for copying the data.
2019-03-24 22:26:09 +01:00
Max Kellermann
ec2badbedd
filter/ffmpeg: call av_frame_unref() before av_frame_get_buffer()
...
av_frame_get_buffer() leaks memory if buffers were already allocated.
Fixes one of the memory leaks of https://github.com/MusicPlayerDaemon/MPD/issues/514
2019-03-24 22:24:54 +01:00
Max Kellermann
054a7557fa
lib/ffmpeg/Frame: add av_frame_unref() wrapper
2019-03-24 22:21:35 +01:00
Max Kellermann
977a4570d9
Merge branch 'v0.21.x'
2019-03-21 11:49:41 +01:00
Max Kellermann
6c2077eb7c
doc/plugins.rst: fix filter/ffmpeg description
2019-03-21 11:20:40 +01:00
Max Kellermann
6bab3bcfea
test/RunChromaprint: add missing override
2019-03-20 13:30:13 +01:00
Max Kellermann
1d436b3c86
lib/ffmpeg/IOContext: keep using avio_read() with old libavformat versions
...
avio_read_partial() was added in libavformat 57.81.100, and we keep
compatibility with version 57.40 for now. Fixes regression from
commit bfb7b0117f
Closes https://github.com/MusicPlayerDaemon/MPD/issues/511
2019-03-20 13:15:05 +01:00
Max Kellermann
a854595886
event/ServerSocket: runtime error if abstract sockets are unavailable
2019-03-20 13:09:16 +01:00
Max Kellermann
8fc3c5c612
event/ServerSocket: add HAVE_UN check to AddAbstract()
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/510
2019-03-20 13:06:09 +01:00
Max Kellermann
4f408bd952
event/ServerSocket, doc, ...: refer to AF_LOCAL as "local socket"
...
.. and not "UNIX domain socket. Be consistent about the naming.
2019-03-20 12:57:26 +01:00
Max Kellermann
f86b14bfc5
tag/Chromaprint: relicense as BSD-2
2019-03-18 19:26:19 +01:00
Max Kellermann
ec5be91ff6
filter/ffmpeg: new filter plugin
2019-03-18 18:56:06 +01:00
Max Kellermann
a7a9490a0c
filter/hdcd: include cleanup
2019-03-18 18:55:25 +01:00
Max Kellermann
c0d6008781
filter/hdcd: move generic code to class FfmpegFilter
2019-03-18 18:35:23 +01:00
Max Kellermann
9f62824e98
filter/hdcd: fix typo
2019-03-18 18:32:20 +01:00
Max Kellermann
b824ba3299
doc/plugins.rst: document the new "hdcd" filter plugin
2019-03-18 18:26:47 +01:00
Max Kellermann
59c4f9a089
Merge branch 'v0.21.x'
2019-03-18 18:26:23 +01:00
Max Kellermann
7de8fd04a4
doc/plugins.rst: add the Haiku plugin and mark it as unmaintained
2019-03-18 18:24:51 +01:00
Max Kellermann
8158bd218c
doc/plugins.rst: add filter plugin reference
2019-03-18 18:05:18 +01:00
Max Kellermann
aa1d867b72
doc/user.rst: document the "filters" setting
2019-03-18 17:05:23 +01:00
Max Kellermann
34c8242133
doc/user.rst: add more links
2019-03-18 17:01:55 +01:00
Max Kellermann
c673528cff
filter/hdcd: new filter plugin based on FFmpeg's "af_hdcd"
2019-03-18 13:48:24 +01:00
Max Kellermann
321f01b95c
filter/plugins/null: move code to src/filter/NullFilter.hxx
2019-03-18 13:48:24 +01:00
Max Kellermann
e88667e01c
lib/ffmpeg/Filter: add MakeAudioBuffer{Source,Sink}()
2019-03-18 11:05:13 +01:00
Max Kellermann
fb96907b52
lib/ffmpeg/Filter: add missing include
2019-03-18 11:05:13 +01:00
Max Kellermann
09ece26200
lib/ffmpeg/SampleFormat: add ToFfmpegSampleFormat()
2019-03-18 11:02:17 +01:00
Max Kellermann
0c6d22fe47
decoder/ffmpeg: move code to lib/ffmpeg/SampleFormat.hxx
2019-03-18 10:58:46 +01:00
Max Kellermann
c563eb81a3
lib/ffmpeg/Filter: C+++ wrapper for several libavfilter objects
2019-03-18 10:32:25 +01:00
Max Kellermann
e864a0dd05
lib/ffmpeg/meson.build: detect libavfilter
2019-03-18 10:30:02 +01:00
Max Kellermann
42a05bc904
lib/ffmpeg/Frame: add more wrapper methods
2019-03-18 10:29:26 +01:00
Max Kellermann
4722175049
Merge branch 'v0.21.x'
2019-03-18 10:01:00 +01:00
Max Kellermann
e22bdee808
win32/res/meson.build: drop tilde suffix from version number before splitting
...
MPD sometimes uses version numbers like "0.22~git" to mark unreleased
versions. That makes the win32 resource compiler unhappy, because it
expects numbers only.
2019-03-18 09:58:40 +01:00
Jörg Krause
7f87de783f
src/lib/gcrypt/meson.build: use dependency() for quering linker flags
...
Since version 0.49.0 the Meson build system has native support for
finding and using the gcrypt library using the `dependency()` function.
`dependency()` has the advantage over `find_library()` as it queries the
required linker flags for proper linking with external libraries, e.g.
libgpg-error.
As the latest released version 1.8.4 of libgcrypt does not
provide a .pc file, using `libgcrypt-config` is the only way to query
the required linker flags.
Unfortunately, there is an issue when cross compiling mpd and the user does not
define `libgcrypt-config` in the cross file. If the user sets the qobuz feature
to `auto` and the target does not have libgcrypt installed, the Meson
build system will falsly assume libgcrypt is available for the target as
it uses the native `libgcrypt-config` on the host and pretend is has
found the library.
Therefore, we still rely on `find_library()` to workaround this buggy
behavior. This way, if qobuz feature detection is set to `auto`, the
feature is disabled in case there is no target libgcrypt available.
Fixes building mpd statically with the qobuz feature enabled. Otherwise
the build fails with undefined references because of the missing libgpg-error
dependency:
```
/sysroot/usr/lib/libgcrypt.a(libgcrypt_la-visibility.o): In function `gcry_strerror':
visibility.c:(.text+0x14): undefined reference to `gpg_strerror'
```
2019-03-18 09:12:19 +01:00
Jörg Krause
c66389a453
meson.build: require Meson 0.49.0
...
Meson 0.49.0 adds native support for `libgcrypt-config` which is
necessary for detecting libgcrypt dependencies, as the latest
version 1.8.4 of libgcrypt does not provide a .pc file.
2019-03-18 09:11:46 +01:00
Max Kellermann
b63c1a2144
increment version number to 0.21.7
2019-03-18 09:11:16 +01:00
Max Kellermann
3a901098e9
Merge tag 'v0.21.6'
...
release v0.21.6
2019-03-17 23:58:54 +01:00
Max Kellermann
808dd7cc54
release v0.21.6
2019-03-17 23:52:13 +01:00
Max Kellermann
62a129c18f
PlaylistFile: ignore empty playlist names
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/465 and
https://github.com/MusicPlayerDaemon/MPD/pull/466
2019-03-17 23:46:36 +01:00
Max Kellermann
c18cd941aa
lib/xiph: disable Tremor detection if libvorbis was found
...
And disable libvorbis detection if Tremor was explicitly enabled.
This fixes a crash bug caused by libvorbis/Tremor ABI conflict caused
by commit 4f7d52dbf2
2019-03-17 23:36:52 +01:00
Max Kellermann
6d12c22653
decoder/ogg: ignore the BOS packet after seek to the beginning of song
...
Previously, MPD would skip the current song after attempting to seek
to its beginnig, because that was a seek to offset 0. At offset 0,
MPD will see the BOS packet again, which results in throwing
StopDecoder in MPDOpusDecoder::OnOggEnd().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/470
2019-03-17 23:14:59 +01:00
Max Kellermann
b76d78e6ae
output/sles: enable power saving mode
2019-03-17 18:04:40 +01:00
Jacob Vosmaer
0a6e484b1a
output/plugins/OSXOutputPlugin: add boost meson dependency
2019-03-17 16:59:24 +01:00
Max Kellermann
a66097129d
Merge branch 'v0.21.x'
2019-03-16 14:08:22 +01:00
Max Kellermann
0bb71f1f20
output/pulse: use pa_channel_map_init_extend() instead of _auto()
...
Unlike pa_channel_map_init_auto(), pa_channel_map_init_extend() does
not fail if there is no valid mapping for the given channel count, but
instead maps additional "AUX" channels.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/493
2019-03-16 14:03:10 +01:00
Max Kellermann
1aa7cdd602
decoder/opus: fix replay gain when there are no other tags
...
The `tag_builder.empty()` check was wrong for the SubmitReplayGain()
call.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/497
2019-03-16 13:55:19 +01:00
Max Kellermann
a4b8a0d801
doc/protocol.rst: clarify filter expressions with multiple tag values
...
Clarification for https://github.com/MusicPlayerDaemon/MPD/issues/505
2019-03-16 13:23:44 +01:00
Max Kellermann
3bf521d5ca
song/TagSongFilter: apply negation properly to multiple tag values
...
The old implementation didn't make a lot of sense; the "!=" operator
was not actually the opposite of "==".
Closes https://github.com/MusicPlayerDaemon/MPD/issues/505
2019-03-16 13:23:02 +01:00
Max Kellermann
0acb55cde5
song/StringFilter: remove obsolete #if
2019-03-16 13:23:02 +01:00
Max Kellermann
6b89fd6100
song/StringFilter: make MatchWithoutNegation() public
2019-03-16 13:23:02 +01:00
Max Kellermann
52ce39dc3e
test/TestSongFilter: unit test for song filters
...
A few of those tests fail due to bugs.
2019-03-16 13:23:02 +01:00
Max Kellermann
7a3e15d8e5
test/meson.build: add section for filter tests
2019-03-16 13:23:02 +01:00
Max Kellermann
cf66a60c60
test/MakeTag: add noexcept
2019-03-16 13:23:02 +01:00
Max Kellermann
9b26d451e4
test/MakeTag: remove static
2019-03-16 13:23:02 +01:00
Max Kellermann
137ffba1b4
test/test_translate_song: move MakeTag() to header
2019-03-16 13:23:02 +01:00
Max Kellermann
5c5dc1b7c0
meson.build: increase protocol version to 0.21.6
...
There is a minor new feature (commit 713c1f2ba9 ) and clients might be
interested in detecting it by the protocol version.
2019-03-16 13:23:02 +01:00
Max Kellermann
9e9418294a
song/TagSongFilter: eliminate Match(TagItem)
2019-03-15 20:28:27 +01:00
Max Kellermann
b850eb74b7
song/TagSongFilter: add code comments
2019-03-15 19:54:29 +01:00
Max Kellermann
67d73a2aee
song/TagSongFilter: improve lambda indent
2019-03-15 19:54:16 +01:00
Max Kellermann
fde9a470dd
song/TagSongFilter: eliminate the std::fill_n() call
2019-03-15 19:35:58 +01:00
Max Kellermann
8d1f30e55b
tag/Fallback: add API documentation
2019-03-15 19:23:10 +01:00
Max Kellermann
ddd2b60489
doc/protocol.rst: add missing operators to example expressions
2019-03-15 19:14:06 +01:00
Max Kellermann
8777737861
doc/protocol.rst: use double backticks for tag names
2019-03-15 19:11:30 +01:00
Max Kellermann
cb71f6dd04
doc/protocol.rst: clarify the meaning of the any tag type
2019-03-15 19:09:55 +01:00
Max Kellermann
1881b0e975
song/TagSongFilter: rename MatchNN() to Match()
...
The "NN" suffix used to mean "no negation", but that's not how it's
implemented today.
2019-03-15 19:06:56 +01:00
Max Kellermann
eed4e40ec6
Merge branch 'v0.21.x'
2019-03-14 20:32:04 +01:00
Max Kellermann
6de57b36c7
song/TagSongFilter: eliminate the std::fill_n() call
2019-03-14 20:31:22 +01:00
Max Kellermann
98b29f6d1c
meson.build: remove the libwinpthread-1.dll dependency on Windows
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/507
2019-03-14 20:07:06 +01:00
Max Kellermann
59fdfd25cb
command/database: fix "list" with filter expression
...
Disable the 0.11 compatibility mode if the only argument is a filter
expression.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/506
2019-03-14 19:50:09 +01:00
Max Kellermann
0d98677212
playlist/flac: copy the URI to fix use-after-free bug
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/508
2019-03-14 19:30:33 +01:00
Max Kellermann
1a0865da7a
test/run_filter: ensure that partial frames will not get passed to the filter
2019-03-14 14:26:53 +01:00
Max Kellermann
a6ecf6c992
test/run_filter: move the buffer into the loop
2019-03-14 13:57:37 +01:00
Max Kellermann
cb100f2e5c
input/ffmpeg: use avio_feof(), eliminate eof attribute
2019-03-13 10:41:12 +01:00
Max Kellermann
bfb7b0117f
lib/ffmpeg/IOContext: allow partial reads
2019-03-13 10:39:43 +01:00
Max Kellermann
f6a705c769
input/ffmpeg: add AVIOContext wrapper class
2019-03-13 10:01:17 +01:00
Max Kellermann
0c01840a7e
input/ffmpeg: use C++11 initializer
2019-03-13 09:59:45 +01:00
Max Kellermann
b0b75c54de
input/ffmpeg: convert to class
2019-03-13 09:59:20 +01:00
Max Kellermann
3fc201d985
input/ffmpeg: add noexcept
2019-03-13 09:58:33 +01:00
Max Kellermann
5aa453ada3
input/ffmpeg: include cleanup
2019-03-13 09:57:50 +01:00
Max Kellermann
0009d53b3f
decoder/ffmpeg: add AVCodecContext wrapper class
2019-03-13 09:41:52 +01:00
Max Kellermann
05f7a6d1ff
decoder/ffmpeg: add AVFormatContext wrapper class
2019-03-13 00:27:21 +01:00
Max Kellermann
0256bbbbaf
decoder/ffmpeg: wider try/catch in ffmpeg_scan_stream()
2019-03-13 00:27:21 +01:00
Max Kellermann
bce608cdbc
decoder/ffmpeg: ffmpeg_decode() may throw
...
Don't catch and log exceptions. Let the caller handle the error.
2019-03-13 00:20:13 +01:00
Max Kellermann
38a0844cdf
decoder/ffmpeg: add AVFrame wrapper class
2019-03-12 23:51:46 +01:00
Max Kellermann
9acc6617d2
filter/registry: move extern lines to plugin headers
2019-03-12 12:26:12 +01:00
Max Kellermann
4f72f49216
filter/normalize: clean up forward declarations
2019-03-12 12:24:31 +01:00
Max Kellermann
af9840daf7
util/Clamp: remove redundant inline keywords from constexpr functions
2019-03-12 11:54:51 +01:00
Max Kellermann
a67a9c9980
tag/Pool: remove redundant inline keywords from constexpr functions
2019-03-12 11:54:44 +01:00
Max Kellermann
732b2acf35
lib/upnp: remove redundant inline keywords from constexpr functions
2019-03-12 11:54:38 +01:00
Max Kellermann
16906cdcbe
fs/FileInfo: remove redundant inline keywords from constexpr functions
2019-03-12 11:54:31 +01:00
Max Kellermann
96e70659f0
lib/xiph/FlacAudioFormat: remove redundant inline keywords from constexpr functions
2019-03-12 11:53:13 +01:00
Max Kellermann
f2cacaf6b6
AudioFormat, pcm/Dsd*: remove redundant inline keywords from constexpr functions
2019-03-08 10:29:03 +01:00
Max Kellermann
24cde31328
lib/ffmpeg/Time: remove redundant inline keywords from constexpr functions
2019-03-08 10:28:02 +01:00
Max Kellermann
f6c0688684
util/ByteOrder: remove redundant inline keywords from constexpr functions
2019-03-08 10:23:14 +01:00
Max Kellermann
c176d94598
system/ByteOrder: move to util/
2019-03-08 10:21:10 +01:00
Max Kellermann
f300ea62dc
meson.build: increment version number to 0.22
...
Time to create a new unstable branch; stable development will now
continue in the branch v0.21.x
2019-03-07 19:10:17 +01:00
borine
c5df879cf9
decooder/plugins/PcmDecoderPlugin: add missing config for preproceesor macro definitions
2019-03-07 12:31:43 +00:00
borine
0762e5c289
decoder/plugins/PcmDecoderPlugin: guard alsa specific code with pre-processor macro test
2019-03-07 08:26:04 +00:00
borine
5d18559c1c
input/plugins/AlsaInputPlugin: change default device to default and default format to 48000:16:2
...
using the device "default" brings this plugin into line with the AlsaOutputPlugin; and a sample rate of 48kHz is more widely used as a native default for modern hardware than 44.1kHz
Also fixes an inconsistency between the docs and code.
2019-03-06 19:37:19 +00:00
borine
62c9751ac8
doc/plugins.rst: document the ability to select the audio format when using the alsa input plugin.
2019-03-06 14:48:10 +00:00
borine
7db9c7f24e
input/plugins/AlsaInputPlugin: introduce mpd.conf config block to allow user to override the builtin defaults
2019-03-06 14:18:10 +00:00
borine
c834eb4590
input/plugins/AlsaInputPlugin: extend the alsa uri parsing to permit specification of the desired pcm audio format in the uri
2019-03-06 08:53:00 +00:00
borine
945ea51bd4
decoder/plugins/PcmDecoderPlugin: introduce new internal mime type "audio/x-mpd-alsa-pcm"
...
This mime type is to enable the AlsaInputPlugin to communicate the pcm stream audio format to the decoder
2019-03-06 08:39:47 +00:00
Max Kellermann
38f0c16904
system/UniqueFileDescriptor: add CreatePipeNonBlock()
2019-02-27 23:30:56 +01:00
Max Kellermann
4fbf6b6c95
net/StaticSocketAddress: remove GetAddress()
2019-02-27 23:26:59 +01:00
Max Kellermann
1f8ff48168
net/StaticSocketAddress: add GetLocalRaw()
2019-02-27 23:26:00 +01:00
Max Kellermann
20b6e0d684
net/SocketDescriptor: add SetTcpUserTimeout()
2019-02-27 23:22:12 +01:00
Max Kellermann
713c1f2ba9
Merge branch 'feature/playlist' of git://github.com/miccoli/MPD
2019-02-27 13:49:22 +01:00
Stefano Miccoli
a149bc4c5d
update protocol documentation for new semantics of playlist abs. name
2019-02-26 00:12:09 +01:00
Stefano Miccoli
b3a458338a
allow loading playlists specified as absolute filesystem paths
...
implement for the "load" command the same logic used for the "add"
command: local clients can load playlist specified as absolute paths.
For relative paths the old logic is preserved: first look for a stored
playlist, then look in the music directory.
2019-02-26 00:12:09 +01:00
Max Kellermann
44422b2b2f
event/ServerSocket, config/Net: abstract socket support
2019-02-25 13:08:33 +01:00
Max Kellermann
f10afd38b5
NEWS: mention the cdio_paranoia build failure fix
2019-02-25 13:08:33 +01:00
Thomas Zander
4c50a5e0b3
Ensure SEEK_SET is set on systems where stdio.h is not pulled in by accident.
2019-02-23 18:04:00 +01:00
Max Kellermann
f255a485b7
increment version number to 0.21.6
2019-02-22 15:28:03 +01:00
Max Kellermann
1930d5774d
release v0.21.5
2019-02-22 15:23:33 +01:00
Max Kellermann
7220a76be0
doc/plugins.rst: document udisks2/policykit rule
2019-02-22 15:22:20 +01:00
Max Kellermann
83f7610dd1
storage/udisks2: move empty string check out of the fallback block in MapUTF8()
...
Even if the LocalStorage is available, return the "udisks://" URI when
the MapUTF8() parameter is an empty string. This fixes the mount URI
in the state file.
2019-02-22 15:07:40 +01:00
Max Kellermann
30e0644722
db/simple: call ReturnSong() on mounted database
...
Fixes a memory leak, or an assertion failure in the debug build.
2019-02-22 14:52:13 +01:00
Max Kellermann
3ada464020
db/simple: use C++11 initializer
2019-02-22 14:52:01 +01:00
Max Kellermann
d5983dd362
storage/udisks2: use the relative path
...
Closes #487
2019-02-22 14:41:56 +01:00
Max Kellermann
98258acc37
storage/udisks2: pass Path to SetMountPoint()
2019-02-22 14:41:56 +01:00
Max Kellermann
8002bc752f
NEWS: mention the udisks2 AlreadyMounted fix
2019-02-22 14:41:56 +01:00
Max Kellermann
834ad7a58f
TagPrint: omit tags which were disabled by the client
...
Closes #471
2019-02-22 13:05:38 +01:00
Max Kellermann
e8f2f98048
tag/Mask: fix another typo, this time in operator^=
...
Similar to commit ff1ff1e54a
2019-02-22 12:44:36 +01:00
Max Kellermann
c672b60d07
build/pkg-config.sh: add comment
2019-02-22 12:39:59 +01:00
Max Kellermann
ea269c9c92
python/build/libs.py: upgrade CURL to 7.64.0
2019-02-22 12:10:06 +01:00
Max Kellermann
1fe3a77640
python/build/libs.py: upgrade FFmpeg to 4.1.1
2019-02-22 12:09:35 +01:00
Max Kellermann
bbaeea1ab7
storage/udisks2: use existing mount point if already mounted
...
Fixes the "org.freedesktop.UDisks2.Error.AlreadyMounted" error.
Closes #485
2019-02-21 13:32:03 +01:00
Max Kellermann
0a3aee9d82
storage/udisks2: move code to SetMountPoint()
2019-02-21 13:31:59 +01:00
Max Kellermann
2434020971
storage/udisks2: adjust lambda indent
2019-02-21 13:31:57 +01:00
Max Kellermann
41e0eb7378
lib/dbus/udisks2: parse the MountPoints property
2019-02-21 13:28:26 +01:00
Max Kellermann
6adf964c81
lib/dbus/ReadIter: add dbus_message_iter_get_fixed_array() wrapper
2019-02-21 12:56:05 +01:00
Max Kellermann
b59f37bc0a
db/simple/Directory: close the Database in destructor
...
Fixes assertion failure.
2019-02-20 22:50:15 +01:00
Max Kellermann
cf2d171ccc
db/simple: reorder checks in assert() to fix assertion failure
...
`light_song.Get()` could cause an assertion failure because the
`Manual<>` object must not be used if uninitialized.
Regression by commit ebc006ab52
2019-02-20 21:24:01 +01:00
Max Kellermann
cc28a7b67f
Main: create Database on stack, move to Instance after Open() succeeded
...
This fixes use-after-free bug in SimpleDatabase::Close(), accessing
the `root` object which was already freed by the `catch` block in
Open().
By having the Database on the stack first, we can avoid calling
Close() on the failed-to-open Database from Instance's destructor.
Closes #482
2019-02-20 20:50:28 +01:00
Max Kellermann
8b5c33cecd
Instance: use std::unique_ptr<> to manage the Database pointer
2019-02-20 20:48:20 +01:00
Max Kellermann
6c28adbcd2
db/Plugin: use std::unique_ptr<> to manage Database pointers
2019-02-20 20:43:31 +01:00
Max Kellermann
2125e3ed57
db/simple/Directory: add noexcept
2019-02-20 20:39:49 +01:00
Max Kellermann
3da7ecfadf
mixer/pulse: add missing ParseFloat() check
2019-02-20 19:27:13 +01:00
Max Kellermann
5bb02bbd39
mixer/pulse: move volume_scale_factor up to improve struct packing
2019-02-20 19:25:55 +01:00
Max Kellermann
f11aa09f7c
mixer/pulse: add const to volume_scale_factor
2019-02-20 19:25:53 +01:00
Max Kellermann
02eb4752d3
mixer/pulse: use C++11 initializer
2019-02-20 19:25:45 +01:00
Max Kellermann
d9c3215584
mixer/pulse: rename scale to scale_volume
...
Make it less generic, to avoid clashes.
2019-02-20 19:23:11 +01:00
Clément Pit-Claudel
110e6d026b
mixer/pulse: Add a new 'scale' parameter to allow volumes above 100
...
Closes GH-479.
2019-02-17 16:14:52 -05:00
Max Kellermann
c0f57b8a8b
net/IPv[46]Address: update copyright
2019-02-19 13:00:45 +01:00
Max Kellermann
57633fbcb3
net/AllocatedSocketAddress: add methods IsV6Any(), IsV4Mapped()
2019-02-19 12:51:24 +01:00
Max Kellermann
864c87e6c0
net/SocketAddress: add method GetLocalPath()
2019-02-19 12:50:40 +01:00
Max Kellermann
1a516cf3c0
net/AllocatedSocketAddress: add method GetLocalRaw()
2019-02-19 12:43:16 +01:00
Max Kellermann
5c25499c5e
lib/cdio/Paranoia: add method GetDiscSectorRange()
2019-02-19 12:40:36 +01:00
Max Kellermann
da4bb4c298
fs/io/OutputStream: update include guard
2019-02-19 12:39:29 +01:00
Max Kellermann
5b8ff61799
fs/io/BufferedOutputStream: add WithBufferedOutputStream()
2019-02-19 12:37:53 +01:00
Max Kellermann
56bded07b1
system/UniqueFileDescriptor: import std::swap
2019-02-19 12:36:54 +01:00
Max Kellermann
db144a43ad
system/Open: add OpenWriteOnly(), OpenDirectory()
2019-02-19 12:16:41 +01:00
Max Kellermann
5965f62b56
system/EpollFD: include cleanup
2019-02-19 11:51:52 +01:00
Max Kellermann
05aa9f72a9
util/StringView: add SkipPrefix(), RemoveSuffix()
2019-02-19 11:51:32 +01:00
Max Kellermann
281461f0f0
nfs: work around assertion failure on exception during program init
...
Closes #477
2019-02-15 18:33:58 +01:00
Max Kellermann
f70eb63879
Instance: eliminate FinishShutdownUpdate(), move code to destructor
2019-02-15 18:20:11 +01:00
Max Kellermann
99c23cf139
Instance: eliminate ShutdownDatabase(), move code to destructor
...
Destruct automatically, even if leaving the scope due to exception
being thrown.
2019-02-15 18:04:23 +01:00
Max Kellermann
9aa75e738c
Merge branch 'protocol-doc-typo' of git://github.com/mxjeff/MPD
2019-02-15 18:03:49 +01:00
Max Kellermann
e9c45a9140
playlist/Registry: add RAII class
2019-02-05 23:03:29 +01:00
Max Kellermann
a065c6e6b9
Main: use AtScopeExit() to call DeinitFS()
2019-02-05 23:02:50 +01:00
Max Kellermann
feb5ff9bd2
Mapper: remove empty function mapper_finish()
2019-02-05 23:01:09 +01:00
Max Kellermann
92ec3f0881
valgrind.suppressions: add GObject/libgcrypt/libsmbclient suppressions
2019-02-05 22:53:02 +01:00
Max Kellermann
98c47d9d36
Instance: remove FinishShutdownPartitions()
...
The list of partitions is cleared automatically.
2019-02-05 22:53:02 +01:00
Max Kellermann
6c67408944
event/Loop: add flag alive
...
This replaces the old `dead` flag which was unreliable; it was `false`
if the EventThread was not yet started, which could cause deadlocks in
BlockingCall().
2019-02-05 22:38:45 +01:00
Max Kellermann
261a816b21
command/AllCommands: remove empty function command_finish()
2019-02-05 22:15:41 +01:00
Max Kellermann
7a23c123c8
decoder/List: add RAII class
2019-02-05 22:12:22 +01:00
Max Kellermann
e85b24bee0
decoder/List: add noexcept
2019-02-05 22:11:51 +01:00
Max Kellermann
9e73ea77b4
input/Init: add RAII class
2019-02-05 22:07:49 +01:00
Max Kellermann
b0739eca87
test/ConfigGlue: merge duplicate code from various debug programs
2019-02-05 21:56:20 +01:00
Max Kellermann
848f6aa5ab
Main: stop io_thread and rtio_thread automatically
...
They will be stopped by ~EventThread() when the `Instance` is deleted.
2019-02-05 21:49:59 +01:00
Max Kellermann
c9ba4f3f9c
archive/List: add RAII class
2019-02-05 21:40:07 +01:00
Max Kellermann
c0e9246a66
archive/List: add noexcept
2019-02-05 21:38:46 +01:00
Max Kellermann
096c23f27d
unix/SignalHandlers: add RAII class
2019-02-05 21:36:51 +01:00
Max Kellermann
40bde1eac9
unix/SignalHandlers: add noexcept
2019-02-05 21:36:35 +01:00
Max Kellermann
4b55ed17a9
LogInit: add noexcept
2019-02-05 21:36:35 +01:00
kaliko
4f757a5add
Fixed protocol documentation
...
* "lsinfo" argument is optional
* "tagtypes disable" arguments are mandatory (typo)
2019-02-03 10:38:34 +01:00
Max Kellermann
674c137e5f
NEWS: mention the TagMask typo fix
2019-02-02 15:17:25 +01:00
kaliko
ff1ff1e54a
Fixed typo in TagMask
2019-02-02 15:14:31 +01:00
Yue Wang
42b22187c8
[OSXOutput] Throw an error when device not found
...
Currently it falls back to system default device (either internal speaker or headphone) when device not found.
I believe it is a better to fail in this case, to make it better aligned with platforms (such as alsa).
2019-01-25 19:50:27 -08:00
Max Kellermann
cfe22502ab
fs/io/StdioOutputStream: add noexcept
2019-01-22 09:03:49 +01:00
Max Kellermann
d77b0c7dcd
net/SocketAddress: add constexpr
2019-01-22 08:42:35 +01:00
Max Kellermann
5cf889b676
util/WStringView: add missing include
2019-01-22 08:38:03 +01:00
Max Kellermann
ffc36d5255
input/buffered: implement seeking to end of file
...
Previously, a seek to the end of the file would cause an assertion
failure in SparseMap::Check() because the given offset was invalid.
Closes #453
2019-01-22 07:42:00 +01:00
Max Kellermann
0126276e2f
FileCommands: log irregular errors while looking for cover art
2019-01-21 22:21:11 +01:00
Max Kellermann
58d6ddab9e
FileCommands: catch all exceptions
2019-01-21 22:19:32 +01:00
Max Kellermann
05db6934eb
FileCommands: fix deadlock in "albumart" command
...
Must lock the mutex before calling any of the unprotected InputStream methods.
Closes #462
2019-01-21 22:16:46 +01:00
Max Kellermann
02c68c5cdb
net/HostParser: add noexcept
2019-01-21 21:20:43 +01:00
Max Kellermann
b02fee7309
util/PrintException: support "const char *"
2019-01-21 21:19:35 +01:00
Max Kellermann
424f75c9e1
util/OffsetPointer: remove redundant inline keywords from constexpr functions
2019-01-21 21:19:09 +01:00
Max Kellermann
f6e1176f97
util/CharUtil: remove redundant inline keywords from constexpr functions
2019-01-21 21:18:23 +01:00
Max Kellermann
e4700c0a27
util/Cast: remove redundant inline keywords from constexpr functions
2019-01-21 21:17:58 +01:00
Max Kellermann
cf23fd8774
fs/io/FileOutputStream: add constructor with directory fd
2019-01-21 21:10:02 +01:00
Max Kellermann
dee8872395
fs/io/FileOutputStream: move code to Open()
2019-01-21 21:09:34 +01:00
Max Kellermann
4ba9357a9c
input/CdioParanoia: C++ wrappers for libcdio types
2019-01-21 20:20:20 +01:00
Max Kellermann
48ec09ab1e
test/net/TestIPv4Address: make literal unsigned to work around -Wsign-compare
2019-01-21 14:39:24 +01:00
Max Kellermann
754f4048a8
output/shout: evaluate tls option only if TLS is enabled in libshout
...
Fixes build failure after commit
0cea67ee70
2019-01-21 14:36:43 +01:00
Max Kellermann
037bb07d08
db/VHelper: include DetachedSong.hxx to fix GCC 9 build failure
...
GCC 9's libstdc++ is unable to use forward-declared types as
std::vector item because the compiler wants to resolve `noexcept()` on
the item destructor.
2019-01-21 14:34:12 +01:00
Max Kellermann
87635c5268
input/CdioParanoia: use the new function names
2019-01-21 14:18:55 +01:00
Max Kellermann
528b4338f4
input/CdioParanoia: use cdio_cddap_free_messages() on recent library versions
2019-01-21 14:16:51 +01:00
Max Kellermann
c780b8bba9
input/CdioParanoia: remove useless cdda_messages() call
2019-01-21 12:36:59 +01:00
Max Kellermann
ca34f3250b
input/CdioParanoia: detect libcdio version at compile time
...
libcdio_paranoia was split from libcdio in version 90, and at the same
time, the header was moved from cdio/paranoia.h to
cdio/paranoia/paranoia.h. We can easily detect this version at
compile time which is faster than configure time.
2019-01-21 12:14:13 +01:00
Max Kellermann
6a68e1c3f3
test/net/TestIPv6Address: work around failure on macOS
2019-01-21 12:13:52 +01:00
Max Kellermann
85f77ec81d
test/net/TestLocalSocketAddress: can't use strcmp() if the string isn't null-terminated.
2019-01-21 12:12:36 +01:00
Max Kellermann
37debed0b8
python/build/libs.py: upgrade Boost to 1.69.0
2019-01-21 10:19:46 +01:00
Max Kellermann
008383f24a
python/build/libs.py: upgrade CURL to 7.63.0
2019-01-21 10:11:50 +01:00
Jörg Krause
4f7d52dbf2
meson: add fixed-point Vorbis (Tremor) decoder support
...
Re-add build support for the fixed-point Vorbis (Tremor) decoder, which
was dropped when switching from Autotools to Meson.
Note, that it is not possible to build both, the Vorbis and the Tremor
decoder.
Closes : #405
2019-01-21 08:35:17 +01:00
Max Kellermann
c7848da8f2
input/CdioParanoia: add const to pointer
2019-01-20 22:03:49 +01:00
Max Kellermann
10a6c5c57d
input/CdioParanoia: make variables more local
2019-01-20 21:59:57 +01:00
Max Kellermann
2cc2bab309
test/net: new unit tests
2019-01-20 21:05:21 +01:00
Max Kellermann
701fd1d939
net/IPv4Address: fix comment typo
2019-01-20 21:05:12 +01:00
Max Kellermann
d1bdea8edb
Merge branch 'shout_tls' of git://github.com/JakobOvrum/MPD
2019-01-20 21:03:42 +01:00
Jakob Ovrum
0cea67ee70
shout output plugin: add support for TLS
2019-01-19 17:36:14 +01:00
Thomas Klausner
3a0480a482
Add missing include of stdlib.h.
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/456
2019-01-15 16:52:40 +01:00
Max Kellermann
1fa99da3c2
net/IPv[46]Address: make the initializers even more portable
...
Similar to 5a5229b499 : use more C++14
constexpr.
2019-01-14 19:21:07 +01:00
James D. Smith
22d669da18
Add APE mapping for album artist.
...
"De-facto" field mappings are available at http://wiki.hydrogenaud.io/index.php?title=Tag_Mapping .
2019-01-14 19:15:42 +01:00
Thomas Zander
772681f23d
Fix link_args for mDNSResponder on non-darwin platforms
2019-01-13 14:09:14 +01:00
Max Kellermann
1862a98a44
increment version number to 0.21.5
2019-01-04 19:31:07 +01:00
Max Kellermann
4634b94c83
release v0.21.4
2019-01-04 19:22:21 +01:00
Max Kellermann
6e04a327b4
android/AndroidManifest.xml: increment version number to 0.21.4
2019-01-04 19:22:14 +01:00
Max Kellermann
7ec887eea2
Merge branch 'add-meson-dependencies' of git://github.com/jacobvosmaer/MPD
2019-01-04 19:06:49 +01:00
Max Kellermann
1477b64d4f
Merge branch 'patch-2' of git://github.com/HyShai/MPD
...
Closes #343
2019-01-04 19:04:52 +01:00
Max Kellermann
a2c108f5ef
NEWS: mention the Haiku build fix
2019-01-04 19:03:53 +01:00
Zoltán Mizsei
f546e76490
Build fix. This struct is the same on Haiku and on Linux, still gcc
...
fails on it. This fixes.
2019-01-04 19:01:27 +01:00
Zoltán Mizsei
2568bc3957
Haiku is "haiku".
2019-01-04 18:59:49 +01:00
Max Kellermann
7104ac963b
util/AllocatedArray: import std::swap
2018-12-28 17:18:41 +01:00
Max Kellermann
2cb36590b2
util/AllocatedArray: add noexcept
2018-12-28 17:17:28 +01:00
Max Kellermann
af7b928d7c
output/httpd/Page: remove obsolete API documentation
2018-12-28 17:16:12 +01:00
Max Kellermann
c0d8a9b07a
output/httpd/Page: add noexcept
2018-12-28 17:15:28 +01:00
Max Kellermann
5b0d23d553
output/httpd/IcyMetaDataServer: add noexcept
2018-12-28 17:14:27 +01:00
Max Kellermann
ab30695bd1
output/httpd: add noexcept
2018-12-28 17:06:01 +01:00
Max Kellermann
53a4de35c4
util/DynamicFifoBuffer: add noexcept
2018-12-28 17:06:01 +01:00
Max Kellermann
22e6d95c4b
remove libwrap support
...
libwrap is an obscure artefact from a past long ago, when source IP
address meant something.
And its API is "interesting"; it requires the application to expose
two global variables `allow_severity` and `deny_severity`. This led
to bug #437 . I don't want to declare those variables; instead, I'd
like to remove libwrap support.
Closes #437
2018-12-28 14:16:02 +01:00
Max Kellermann
1c7bd7d5c4
db/update/InotifyQueue: check for ACK_ERROR_UPDATE_ALREADY
...
Since commit cc64c715a2 , UpdateService::Enqueue() throws
ProtocolError(ACK_ERROR_UPDATE_ALREADY) instead of returning 0.
2018-12-28 14:02:41 +01:00
Max Kellermann
3c4ed9cbe3
db/update/InotifyQueue: catch UpdateService::Enqueue() exceptions
2018-12-28 14:00:58 +01:00
Max Kellermann
2677b90244
db/update/InotifyQueue: add noexcept
2018-12-28 14:00:55 +01:00
Max Kellermann
1b20fa441d
db/update/InotifyQueue: update code comment
2018-12-28 14:00:10 +01:00
HyShai
18c042d4cf
remove non-block call
...
This is similar to b177bffa6a , in that it fixes the Windows issue of connecting to the open socket. Also, the listen_socket is set to AcceptNonBlock after the connection anyways.
2018-12-18 15:23:40 -05:00
Max Kellermann
98f92d828a
NEWS: mention the "ICY" -> "HTTP/1.1" change
2018-12-14 09:26:59 +01:00
HyShai
76268773b5
change HTTP Version to a valid version
2018-12-14 01:51:54 -05:00
Jacob Vosmaer
87542e3080
Add missing pcre_dep in src/song/meson.build
2018-12-09 17:21:38 +01:00
Jacob Vosmaer
66f5b0fed7
Add boost_dep in subdir meson.build files
2018-12-09 17:20:47 +01:00
Max Kellermann
5cb603983e
alsa/NonBlock: throw on snd_pcm_poll_descriptors_revents() error
...
This function is sparsely documented and a look at the bluez-alsa
source code shows that implementations make undocumented assumptions
on the `struct pollfd` array parameter which can lead to strange
effects.
2018-12-04 18:00:52 +01:00
Max Kellermann
9c5790ab1d
doc/user.rst: more markup
2018-11-20 22:06:42 +01:00
Max Kellermann
4b7078297d
db/upnp: use the generic ::CollectUniqueTags() function
...
This function implements the "group" feature on top of the
Database::Visit() method.
2018-11-19 20:08:10 +01:00
Max Kellermann
841694ccf2
db/Interface: document CollectUniqueTags()
2018-11-19 19:40:00 +01:00
Max Kellermann
12f4a8255a
Main: use DatabasePlugin::RequireStorage()
2018-11-19 19:39:37 +01:00
Max Kellermann
bda77ffc5b
db/Interface: remove IsPlugin(), use dynamic_cast instead
2018-11-19 19:38:20 +01:00
Max Kellermann
ed9ece5ea3
db/Interface: make the constructor protected
2018-11-19 19:38:20 +01:00
Max Kellermann
ce49d99c2f
check.h: remove obsolete header
...
Since we switched from autotools to Meson in commit
94592c1406 , we don't need to include
`config.h` early to properly enable large file support. Meson passes
the required macros on the compiler command line instead of defining
them in `config.h`.
This means we can include `config.h` at any time, whenever we want to
check its macros, and there are no ordering constraints.
2018-11-19 16:33:49 +01:00
Max Kellermann
2e450bbf95
src/thread/meson.build: detect pthread_setname_np()
...
This compile-time check got lost during the Meson transition.
2018-11-19 16:33:14 +01:00
Max Kellermann
303b3071e4
db/UniqueTags: remove pure attribute because function may throw
2018-11-19 11:32:53 +01:00
Max Kellermann
eb6d5f34fc
db/UniqueTags: include cleanup
2018-11-19 11:11:45 +01:00
Max Kellermann
f80126959d
meson.build: increment PROTOCOL_VERSION to 0.21.4
...
This version should have been incremented in 0.21.2 because this
version added new search operators. In 0.21.4, we'll have more
protocol bug fixes which may be important for clients to know.
2018-11-19 11:11:45 +01:00
Max Kellermann
4fb4f6d1b7
increment version number to 0.21.4
2018-11-19 09:58:05 +01:00
Max Kellermann
43df4a7500
release v0.21.3
2018-11-16 13:27:58 +01:00
Max Kellermann
4cdcaa8630
output/alsa: don't call snd_pcm_drain() if nothing was written
...
Works around a problem where MPD goes into a busy loop because
snd_pcm_drain() always returns `-EAGAIN` without making any progress
(fixes #425 ).
This problem was triggered by snd_pcm_drain() after snd_pcm_cancel()
and snd_pcm_prepare(), but without submitting any data with
snd_pcm_writei().
I believe this is a kernel bug: in non-blocking mode, the kernel's
snd_pcm_drain() function returns early. In this mode, it only checks
whether snd_pcm_drain_done() has been called already, but
snd_pcm_drain_done() is never called if no data was submitted.
In blocking mode, the following `for` loop detects this condition, so
snd_pcm_drain_done() is not necessary, but without this extra check,
we get `-EAGAIN` forever.
2018-11-16 12:49:37 +01:00
Volodymyr Medvid
04f632296f
test/meson.build: run_storage depends on event lib
...
test/run_storage.cxx depends on EventThread/EventLoop from libevent.a.
Depend on it explicitly. This addresses build failure with
-Dtest=true -Dcurl=disabled -Ddbus=disabled
2018-11-15 19:01:43 +02:00
Max Kellermann
7c8dbcfaac
doc/protocol.rst: song position is 0-based
2018-11-15 12:34:23 +01:00
Max Kellermann
436ba3c96c
output/alsa: drain the whole ring_buffer, not just one period
...
This fixes a problem which caused a failure with snd_pcm_writei()
because snd_pcm_drain() had already been called in the previous
iteration. This commit makes sure that snd_pcm_drain() is only called
after the final snd_pcm_writei() call.
This fixes discarded samples at the end of playback.
2018-11-14 13:35:17 +01:00
Max Kellermann
5d12f52873
output/alsa: clear error after reopening device
...
When a playback error has occurred, MPD would never recover until one
restarts MPD.
2018-11-14 13:20:54 +01:00
Max Kellermann
a8bf8ede01
event/Thread: reduce the RTIO timer slack to 10us
...
MPD's default is 100ms, which is too long for the real-time I/O
thread. The OutputThread has 100us, but the real-time I/O thread
might have tighter deadlines.
This change has currently no effect (I believe), because nobody uses
timers on the RTIO thread.
2018-11-14 12:11:57 +01:00
Max Kellermann
8682183bc3
LogInit: default to journal if MPD was started as systemd service
2018-11-14 12:07:22 +01:00
Max Kellermann
94c31d0da9
doc/mpdconf.example: no, logging is not disabled without log_file
2018-11-14 12:07:22 +01:00
Max Kellermann
464a4cbeec
python/build/libs.py: upgrade FFmpeg to 4.1
2018-11-14 11:50:51 +01:00
Max Kellermann
9f0cbf418a
python/build/libs.py: upgrade CURL to 7.62.0
2018-11-14 11:50:51 +01:00
Max Kellermann
b477f86c92
output/alsa: don't lock the mutex in CancelInternal()
...
CancelInternal() doesn't need to be protected because it is called
synchronously from Cancel().
2018-11-14 11:50:51 +01:00
Max Kellermann
020371f145
output/alsa: wake up the client thread after generating silence
...
Fixes a theoretical race condition which could occur in Drain() (but
was extremely unlikely).
2018-11-14 11:48:55 +01:00
Max Kellermann
ccafe3f3cf
output/alsa: don't generate silence if ALSA-PCM buffer has enough data
...
If our `ring_buffer` is smaller than the ALSA-PCM buffer (if the
latter has more than the 4 periods we allocate), it can happen that
the start threshold is crossed and ALSA switches to
`SND_PCM_STATE_RUNNING`, but the `ring_buffer` is empty. In this
case, MPDD will generate silence, even though the ALSA-PCM buffer has
enough data. This causes stuttering (#420 ).
This commit amends an older workaround for a similar problem (commit
e08598e7e2 ) by adding a snd_pcm_avail()
check, and only generate silence if there is less than one period of
data in the ALSA-PCM buffer.
Fixes #420
2018-11-14 11:17:59 +01:00
Max Kellermann
3830748de5
output/alsa: clear the period_buffer in LockCaughtError()
...
The method Cancel() assumes that the `period_buffer` must be empty
when `active==false`, but that is not the case when Play() fails.
Of course the assertion in Cancel() is not 100% correct, but I decided
to rather fix this in LockCaughtError() because the `period_buffer`
should only be accessed from within the RTIO thread, and this is the
only code path where `active` can be set to `false` with a non-empty
`period_buffer`.
Fixes #423
2018-11-14 10:24:08 +01:00
Max Kellermann
1a43f5145d
output/alsa: throw on snd_pcm_writei() error while draining
...
This implements real error handling, and avoids calling
CancelInternal() from this code path.
2018-11-14 10:08:29 +01:00
Max Kellermann
7f143a83c1
output/alsa: fix wrong use of errno
...
alsa-lib doesn't set errno, it returns errors as negative integers.
2018-11-14 10:07:23 +01:00
Max Kellermann
6ccc254179
output/alsa: throw after snd_pcm_drain() error
2018-11-14 10:04:10 +01:00
Max Kellermann
7db2450447
output/alsa: refactor the drain EAGAIN workaround
2018-11-14 10:00:50 +01:00
Max Kellermann
6c2a6a65e0
output/alsa: remove snd_pcm_state() check from DrainInternal()
...
This check was added 9 years ago in commit
4dc25d3908 to work around a dmix bug
which I assume has been fixed long ago.
Removing this fixes another corner case: if draining is requested
before the start threshold is reached, the PCM is still in
SND_PCM_STATE_PREPARED but not yet SND_PCM_STATE_RUNNING, which means
the submitted data will never be played. This corner case is
realistic when playing songs shorter than the ALSA buffer (if the
buffer is very large).
2018-11-14 09:48:24 +01:00
Max Kellermann
4247a757b3
output/alsa: call snd_pcm_prepare() if draining is requested early
...
This fixes a corner case which has probably never occurred and
probably never will: if Cancel() is called, and then Play() followed
by Drain(), the plugin should really play that data. However
currently, this never happens, because snd_pcm_prepare() is never
called.
2018-11-14 09:43:14 +01:00
Max Kellermann
57e34823d8
increment version number to 0.21.3
2018-11-12 13:59:17 +01:00
Max Kellermann
3c93decdf0
release v0.21.2
2018-11-12 13:33:04 +01:00
Max Kellermann
89e7a5018d
doc/protocol.rst: explain song positions vs ids
2018-11-12 13:19:10 +01:00
Max Kellermann
7235b46e5e
doc/protocol.rst: rename "current playlist" to "queue"
2018-11-12 13:12:29 +01:00
Max Kellermann
0852226a48
doc/protocol.rst: deprecated close and kill
2018-11-12 13:03:09 +01:00
Max Kellermann
e20d215abf
doc/protocol.rst: more markup
2018-11-12 13:01:43 +01:00
Max Kellermann
e4b9b67e24
doc/protocol.rst: deprecation
2018-11-12 12:57:53 +01:00
Max Kellermann
685b78828d
doc/protocol.rst: mention that unknown lines may be omitted
2018-11-12 12:57:45 +01:00
Max Kellermann
060908d5c4
song/Filter: add operator "contains"
...
Closes #410
2018-11-12 12:49:01 +01:00
Max Kellermann
0b0f4c61f1
doc/protocol.rst: remove documentation about == matching substrings
...
I added this sentence in commit
5271e81ebe , but this was merely
documented the legacy status quo, which has always been undocumented
for old-style filters.
But for new filters, using "==" for sub strings was a surprising
"feature", which I removed in commit
ac0852b4e3 .
2018-11-12 12:45:40 +01:00
Max Kellermann
228bf7eb09
output/thread: cancel the AudioOutputSource() instead of closing it
...
This fixes the assertion failure due to calling
AudioOutputSource::Close() twice.
2018-11-12 12:24:25 +01:00
Max Kellermann
5eaf2b8fc3
output/control: always close the AudioOutputSource in RELEASE
...
Fixes a crash bug with `always_on` outputs which occurs because the
`AudioOutputSource` still has a pointer to an outdated `MusicChunk`.
Fixes #415
2018-11-12 12:21:59 +01:00
Max Kellermann
e097fef79e
output/control: add command RELEASE
...
With the new command, the decision to pause or close the output moves
into the output thread.
2018-11-12 12:09:37 +01:00
Max Kellermann
9a813cd3b1
output/Thread: update comment
2018-11-12 12:09:02 +01:00
Max Kellermann
1c60c8e014
output/Filtered: catch Drain() exceptions in CloseOutput()
2018-11-12 12:05:54 +01:00
Max Kellermann
eddda95900
output/interface: document that Drain() may throw
2018-11-12 12:04:42 +01:00
Max Kellermann
72184dccfc
song/StringFilter: support regular expressions with "=~" and "!~"
...
This feature requires `libpcre`.
2018-11-11 12:55:35 +01:00
Max Kellermann
fee75dc766
{output,mixer}/alsa: use snd_pcm_poll_descriptors_revents()
...
This call was missing, causing very high CPU usage when the ALSA
output plugin was used with dmix.
Closes #391
2018-11-11 12:37:29 +01:00
Max Kellermann
ba5c856f15
events/MultiSocketMonitor: add method ForEachResult()
2018-11-11 12:37:28 +01:00
Max Kellermann
12308a0f55
lib/alsa/NonBlock: move the functions into a class managing the state
2018-11-11 12:37:25 +01:00
Max Kellermann
a958abde2f
Merge branch 'fix_362' of git://github.com/miccoli/MPD
2018-11-11 12:37:13 +01:00
Max Kellermann
583208db7e
output/httpd: fix nullptr dereference crash bug
...
When `metadata_sent` is `false`, the plugin assumes there is metadata
which must be sent, even if no metadata page was passed to the plugin.
Initializing it to `true` avoids dereferencing this `nullptr`.
Fixes #412
2018-11-08 09:37:18 +01:00
Max Kellermann
7b5ba15170
song/Filter: move code to ParseStringFilter()
2018-11-08 00:02:10 +01:00
Max Kellermann
d5e0d49f86
song/{Tag,Uri}SongFilter: pass StringFilter&& to constructor
2018-11-07 23:57:42 +01:00
Max Kellermann
73b22d82aa
song/StringFilter: move negated flag from containing class
2018-11-07 23:47:31 +01:00
Max Kellermann
db51cc4e02
lib/zlib/meson.build: add zlib_dep to declare_dependency
...
Fixes potential compiler error when zlib is installed in a
non-standard directory.
2018-11-07 23:32:23 +01:00
Max Kellermann
be8a52a914
NEWS: mention the ENABLE_ZLIB fix
2018-11-07 23:26:33 +01:00
Max Kellermann
ad597a8ff0
lib/zlib/meson.build: define ENABLE_ZLIB
...
Fixes #414
2018-11-07 23:24:58 +01:00
Max Kellermann
b1fe105904
output/Source: reset current_chunk in Open()
...
If the output is already open, the `current_chunk` pointer may be
bogus and out of sync with `SharedPipeConsumer::chunk`, leading to an
assertion failure in `SharedPipeConsumer::Consume()`.
Fixes #411
2018-11-07 00:17:48 +01:00
Max Kellermann
451b142e3a
player/Thread: finish decoder startup before checking the buffer
...
This fixes a valgrind warning because `buffer_before_play`
initialization needs to know the audio format from the decoder.
2018-11-06 23:52:26 +01:00
Max Kellermann
2833625266
doc/user.rst: more markup
2018-11-06 22:38:34 +01:00
Max Kellermann
0464028872
doc/user.rst: add information about debug build
2018-11-06 22:38:24 +01:00
Max Kellermann
98985c03b0
check.h: remove obsolete ENABLE_LARGEFILE check
...
Meson always enables large file support on the compiler command line,
thus config.h doesn't need to be included anymore. We'll remove the
whole `check.h` header soon.
Closes #409
2018-11-05 21:25:59 +01:00
Max Kellermann
793fd8c479
decoder/ffmpeg: eliminate GetSampleFormat()
2018-11-04 22:36:17 +01:00
Max Kellermann
6c602811df
decoder/ffmepg: fill AudioFormat from AVCodecContext, not AVCodecParameters
...
`AVCodecParameters` contains values from the codec detected by
avformat_find_stream_info(), but after avcodec_open2(), a different
codec might be selected with a different `AVSampleFormat`. This leads
to misinterpretation of data returned from FFmpeg, leading to random
noise or silence.
This was observed with FFmpeg 4.0.2 and a TS container file containing
MP2. A mp3-float codec was detected returning `AV_SAMPLE_FMT_FLTP`,
but finally the `mpegaudiodec_fixed.c` was used, returning
`AV_SAMPLE_FMT_S16`.
By using the audio format from `AVCodecContext`, we ensure that MPD
and FFmpeg always agree on the actual audio format in the buffer.
This removes the FFmpeg bug workaround from commit e1b032cbad which I
assume is obsolete after 7 years.
Fixes #380
2018-11-04 22:30:50 +01:00
Stefano Miccoli
6d48a5684a
clamp 'set_normalized_volume' to valid values also for ALSA softvol
...
ensure that valid mixer values are set also when the ALSA driver
does not report a valid dB range ('set_raw' fallback)
correct a bug in which volume is assumed to lie in [0..100]
instead of [0..1]
2018-11-04 22:21:56 +01:00
Max Kellermann
bd115a4008
decoder/ffmpeg: use AtScopeExit() to call av_packet_unref()
2018-11-04 22:01:33 +01:00
Max Kellermann
08272cdee2
decoder/ffmpeg: require FFmpeg 3.1 or later
...
Drop some compatibility code.
2018-11-04 21:55:06 +01:00
Max Kellermann
b14a5141a6
increment version number to 0.21.2
2018-11-04 19:47:04 +01:00
Max Kellermann
aa0e4500c6
release v0.21.1
2018-11-04 14:08:16 +01:00
Fabian Muscariello
4e6b8edf72
doc/protocol.rst: add missing backticks
2018-11-04 14:04:57 +01:00
Max Kellermann
ac0852b4e3
song/Filter: operator "==" never searches substrings in filter expressions
...
The protocol documentation says that the difference between `find` and
`search` is that `search` is case insensitive, but that's only half
the truth: `search` also searches for sub strings instead of matching
the whole string. This part is undocumented and unfortunate, but at
this point, we can't change it.
However leaking this surprising behavior to the new filter expressions
was a bad idea; the "==" operator should never match substrings. For
people who need that, we should add a new operator.
2018-11-04 13:57:34 +01:00
Max Kellermann
6fe43ed969
song/StringFilter: add flag substring
...
Prepare to stop using substrings for filter expressions.
2018-11-04 13:49:47 +01:00
Max Kellermann
b34bc06624
song/StringFilter: use std::string::operator==
2018-11-04 13:49:38 +01:00
Max Kellermann
08e41e60e5
meson.build: downgrade Boost 1.67 error to warning
...
Some Boost 1.67 packages apparently have a workaround for the bug, so
let them build MPD.
2018-11-04 12:45:22 +01:00
Max Kellermann
10ec478a9c
meson.build: refuse to build with buggy Boost version 1.67
2018-11-04 12:31:49 +01:00
Max Kellermann
86f1074905
lib/xiph/meson.build: the Vorbis encoder requires the Vorbis decoder
...
Without the Vorbis decoder, `libvorbis` is never detected, leading to
linker failures when attempting to build the Vorbis encoder.
2018-11-04 12:21:23 +01:00
Max Kellermann
8e66b855a3
doc/protocol.rst: mention that sub-expressios must be enclosed in parantheses
...
Closes #399
2018-11-04 12:12:38 +01:00
Max Kellermann
e3bc85d7bf
meson.build: require Meson 0.47.2
...
Meson 0.47.1 suffers from a bug which breaks linking the MPD
executable because the `-lpthread` flag is not propagated from our
`thread.a`.
See https://github.com/mesonbuild/meson/pull/3895
Closes #403
2018-11-04 11:54:40 +01:00
Max Kellermann
6f242836e6
lib/xiph/meson.build: fix typo, replace and with or
...
Fixes linker failure when building without FLAC support.
Closes #400
2018-11-04 11:36:28 +01:00
Max Kellermann
f2c926f3b6
zeroconf/glue: add fallback value for HOST_NAME_MAX
...
`HOST_NAME_MAX` is not a portable macro; it is undefined on some
systems.
Closes #402
2018-11-04 11:12:03 +01:00
Max Kellermann
aba18924ee
win32/build.py: link libstdc++ and libcc statically
...
Fixes #404
2018-11-04 11:10:00 +01:00
Max Kellermann
aa6bef54dd
python/build/zlib.py: build zlib as a static library
...
Fixes one part of #404
2018-11-04 11:10:00 +01:00
Max Kellermann
528f5b9cb9
song/Filter: allow escaping quotes in filter expressions
...
Closes #397
2018-11-02 19:15:08 +01:00
Max Kellermann
96ae0ec93a
remove some autotools remains
...
Closes #396
2018-11-02 18:55:49 +01:00
Max Kellermann
5a5229b499
net/IPv[46]Address: make the initializers more portable
...
Thanks to C++14, we can declare and fill variables inside `constexpr`
functions. This means me can stop make assumptions on the `struct`
layouts without losing `constexpr`.
Closes #393
2018-11-02 17:47:43 +01:00
Max Kellermann
bba22c9c8c
system/FileDescriptor: check __linux__ instead of __linux
...
`__linux` is the deprecated non-standard macros which appears to be
not present at all on PowerPC.
Closes #398
2018-11-02 16:50:38 +01:00
Max Kellermann
694c437a2c
NEWS: mention the FFmpeg build fix
2018-11-02 16:50:35 +01:00
Max Kellermann
587172efa3
Merge branch 'patch-1' of git://github.com/joerg-krause/MPD
2018-11-01 19:17:10 +01:00
Max Kellermann
2a926063b2
src/lib/ffmpeg/meson.build: copy dependencies into ffmpeg_dep
...
Apparently, Meson propagates the linker flags but not the compiler
flags from a `static_library`'s dependencies list.
Closes #392
2018-11-01 19:14:00 +01:00
Jörg Krause
d6f239e54f
meson: fix typo in options plugins comment
2018-11-01 19:06:54 +01:00
Max Kellermann
b8989fafeb
increment version number to 0.21.1
2018-11-01 17:23:47 +01:00
Max Kellermann
795789e79d
release v0.21
2018-10-31 19:39:53 +01:00
Max Kellermann
cd8bc57c0d
android/AndroidManifest.xml: increment version to 0.21
2018-10-31 19:39:41 +01:00
Max Kellermann
55b355618d
android/apk/make-unsigned-apk.sh: pass -X to zip to avoid storing uids
2018-10-31 19:34:14 +01:00
Max Kellermann
ba25a5388e
meson.build: use -funwind-tables only with clang
2018-10-31 19:30:01 +01:00
Max Kellermann
657ef48518
zeroconf/glue: use strstr() and std::string::replace() instead of std::regex_replace()
...
std::regex_replace() is heavily bloated and overkill for this feature.
2018-10-31 19:26:37 +01:00
Max Kellermann
b1d68fe995
NEWS: mention the zeroconf_name %h substitution
2018-10-31 19:26:17 +01:00
Max Kellermann
8a492c8f39
Merge branch 'bug516974' of git://github.com/fschlich/MPD
2018-10-31 19:20:41 +01:00
Max Kellermann
901a48c9a4
command/sticker: return ACK_ERROR_NO_EXIST for "no such sticker"
...
Closes #389
2018-10-31 19:19:07 +01:00
Max Kellermann
b0994bad31
AUTHORS: add 0.21 contributors
2018-10-31 17:59:54 +01:00
Max Kellermann
f5c9071494
*: copyright year 2018
2018-10-31 17:54:59 +01:00
Florian Schlichting
d1f85240a2
include hostname in zeroconf_name ( fixes #387 )
...
expand %h to the system hostname and default to a zeroconf string that
contains %h
2018-10-31 17:54:45 +01:00
Max Kellermann
2148d4bb31
fs/io/FileOutputStream: fix -Wcomment
2018-10-31 17:18:44 +01:00
Max Kellermann
e79d06d595
fs/io/FileOutputStream: don't use O_TMPFILE on Android
...
Fixes writing to Context.getCacheDir().
2018-10-31 17:12:21 +01:00
Max Kellermann
c60cf944f5
fs/io/FileOutputStream: add macro HAVE_O_TMPFILE
2018-10-31 17:10:52 +01:00
Max Kellermann
4b8ee58638
doc/user.rst: more markup
2018-10-31 15:34:33 +01:00
Max Kellermann
9305730993
doc/user.rst: use arm64 instead of armv7 in the example
...
All new hardware is arm64 anyway.
2018-10-31 15:26:24 +01:00
Max Kellermann
16bc97e9e5
doc/user.rst: add warning about outdated Debian packages
2018-10-31 15:22:35 +01:00
Max Kellermann
482c18982e
doc/user.rst: use "apt" instead of the old "apt-get"
2018-10-31 15:17:22 +01:00
Max Kellermann
06ca08ce55
output/roar: remove
...
Bugs in libroar which broke the MPD build have been annoying me for
quite some time, and the newest bug has now hit my main build machine:
https://github.com/MusicPlayerDaemon/MPD/issues/377
Problem is the usage of the typedef `_IO_off64_t` in libroar's
`vio_stdio.h`:
int roar_vio_to_stdio_lseek (void *__cookie, _IO_off64_t *__pos, int __w);
This `_IO_off64_t` is an internal implementation detail of glibc and
was removed in version 2.28. Nobody must ever use it. Why the ****
did the RoarAudio developers use it? Not using internal typedefs
isn't exactly rocket science.
This annoys me enough to finally remove the plugin. Anyway, I've
never heard of anybody using RoarAudio, so my best guess is that
nobody will notice.
2018-10-31 15:03:28 +01:00
Max Kellermann
9fc00a817b
Listen: use fs/XDG.hxx
...
This keeps one central place for the XDG switch. Specifically, this
disables the XDG listener on Apple, where XDG is not supported.
2018-10-31 14:30:34 +01:00
Max Kellermann
f47696f5f8
fs/StandardDirectory: move USE_XDG to XDG.hxx
2018-10-31 13:39:20 +01:00
Max Kellermann
190006e9dc
doc/plugins.rst: add missing :file:
2018-10-31 13:25:44 +01:00
Max Kellermann
30eaae10c1
doc/developer.rst: remove :option: markup
2018-10-31 13:24:52 +01:00
Max Kellermann
b878111404
doc/user.rst: more markup
2018-10-31 13:22:25 +01:00
Florian Schlichting
db21d7de0b
fix compilation errors on Debian GNU/Hurd
...
Apparently on hurd-i386 __GLIBC__ is defined, but the pthread
implementation is special and cannot be used with constexpr. Hence
exclude __gnu_hurd__.
2018-10-31 12:24:34 +01:00
Max Kellermann
8454083efa
doc/protocol.rst: "oneshot" was added to 0.21, not 0.20
2018-10-31 12:00:01 +01:00
Cotko
a0e5729117
doc/protocol.rst: footnote for oneshot arg
2018-10-31 03:16:05 +01:00
Cotko
534853cd32
doc/protocol.rst: add oneshot to the single command arguments
2018-10-31 03:12:35 +01:00
Max Kellermann
fb0ead1788
doc/meson.build: add missing dependency
2018-10-30 22:51:09 +01:00
Max Kellermann
32013ad4a6
doc/user.rst: remove invalid :option: tags
2018-10-30 22:34:59 +01:00
Max Kellermann
7352d6a38d
doc/user.rst: improve plugin reference links
2018-10-30 22:33:52 +01:00
Max Kellermann
f649ec1fd8
doc/user.rst: move plugin reference to plugins.rst
2018-10-30 22:27:42 +01:00
Max Kellermann
56112a237c
Listen: listen on $XDG_RUNTIME_DIR/mpd/socket by default
2018-10-30 22:14:54 +01:00
Max Kellermann
64da9399ca
event/ServerSocket: allow mixing AddFD() with other Add*() methods
2018-10-30 22:14:53 +01:00
Max Kellermann
dd8e14e121
doc/conf.py: use the "classic" theme
2018-10-30 22:13:15 +01:00
Max Kellermann
09e2202cd6
doc/user.rst: remove redundant tags list, link to protocol documentation
2018-10-30 22:08:31 +01:00
Max Kellermann
fe7e1ae8aa
doc/*.rst: revise captions and section types
2018-10-30 21:50:37 +01:00
Max Kellermann
aa07e8a8fe
doc/user.rst: add links to "Listeners"
2018-10-30 21:33:22 +01:00
Max Kellermann
83d598bdfd
doc/user.rst: add bind_to_address/port examples
2018-10-30 21:33:10 +01:00
Max Kellermann
0ec31b4aa4
Listen: eliminate listen_add_config_param()
2018-10-30 21:14:39 +01:00
Max Kellermann
a943f4063c
event/ServerSocket: add AddFD() overload with AllocatedSocketAddress&&
2018-10-30 20:44:56 +01:00
Max Kellermann
ce9f09c69a
event/ServerSocket: make AddAddress() a template
2018-10-30 20:43:52 +01:00
Max Kellermann
3ddc7a5353
event/ServerSocket: include cleanup
2018-10-30 20:19:07 +01:00
Max Kellermann
e575392b94
event/ServerSocket: use class IPv6Address
2018-10-30 20:19:04 +01:00
Max Kellermann
c6f61a699c
event/ServerSocket: make OneServerSocket an inner class
2018-10-30 20:16:26 +01:00
Max Kellermann
0307b49f43
event/ServerSocket: make OnAccept() noexcept
2018-10-30 20:13:07 +01:00
Max Kellermann
413ab80295
event/ServerSocket: use C++11 initializer
2018-10-30 20:11:58 +01:00
Max Kellermann
daffefdb10
event/ServerSocket: pass UniqueSocketDescriptor to AddFD()
2018-10-30 20:05:57 +01:00
Max Kellermann
5fb21fbdb1
event/ServerSocket: add noexcept
2018-10-30 19:57:39 +01:00
Max Kellermann
f5857c4689
net/SocketUtil: update API documentation
2018-10-30 19:56:10 +01:00
Max Kellermann
2c388434dd
meson.build: re-add -funwind-tables which got lost in v0.20.23 merge
2018-10-30 13:33:10 +01:00
Max Kellermann
c97469283c
pcm: build dsd2pcm only if -Dtest=true
2018-10-30 13:31:43 +01:00
Max Kellermann
1f8d707082
python/build/meson.py: use toolchain.libs (for libc++)
2018-10-30 13:29:02 +01:00
Max Kellermann
9b1f44e758
LogInit: work around two Android compiler warnings
2018-10-30 13:23:10 +01:00
Max Kellermann
804ccddf7e
pcm/Clamp: convert to constexpr
2018-10-30 00:08:25 +01:00
Max Kellermann
bb5918932b
pcm/PcmUtils: rename to Clamp.hxx
2018-10-30 00:05:58 +01:00
Max Kellermann
aa77bc323f
pcm/FloatConvert: make IntegerToFloatSampleConvert::Convert() constexpr
2018-10-29 23:52:25 +01:00
Max Kellermann
901229699e
Merge tag 'v0.20.23'
...
release v0.20.23
2018-10-29 23:44:47 +01:00
Max Kellermann
637c96697f
release v0.20.23
2018-10-29 23:31:17 +01:00
Max Kellermann
c92f0a1336
test/PcmFormat: add Float/32 bit test
2018-10-29 23:06:40 +01:00
Max Kellermann
8463441afe
test/PcmFormat: rename FormatFloat to FormatFloat16
2018-10-29 23:06:37 +01:00
Max Kellermann
9b6a2589e5
Merge branch 'v0.20.x'
2018-10-29 23:06:32 +01:00
Max Kellermann
cc5fab28af
pcm/FloatConvert: fix compile-time integer overflow for S32
...
The compile-time calculation for `factor` overflows because `1<<31`
cannot be represented by `int`. By casting to `uintmax_t` first, we
can avoid this overflow.
Closes #380
2018-10-29 22:50:54 +01:00
Max Kellermann
a3f7127e72
pcm/FloatConvert: use FloatToIntegerSampleConvert::factor for IntegerToFloatSampleConvert::factor
2018-10-29 22:50:06 +01:00
Max Kellermann
b0a6a569df
pcm/FloatConvert: add static_assert on the factor
...
This assertion currently fails for S32 due to integer overflow (#380 ).
2018-10-29 22:38:32 +01:00
Max Kellermann
92523f8cf2
input/CdioParanoia: parse_cdio_uri() returns CdioUri
...
The `bool` return value isn't used anymore, so we can just return the
parsed object instead of passing it as an output parameter.
2018-10-29 14:34:33 +01:00
Max Kellermann
e33c08357a
input/CdioParanoia: rename struct cdio_uri to CdioUri
2018-10-29 14:34:30 +01:00
Max Kellermann
2dc5648e57
input/CdioParanoia: use StringAfterPrefixIgnoreCase()
2018-10-29 14:34:30 +01:00
Max Kellermann
d0349880da
util/StringCompare: add StringAfterPrefixIgnoreCase()
2018-10-29 14:34:29 +01:00
iamsi
f178163217
Fix typo in build instructions
2018-10-29 13:32:53 +00:00
Max Kellermann
7aa1dceef6
player/Control: move IDLE_PLAYER to Player::SeekDecoder()
...
This emits the event even if PlayerControl::Play() is used to replay
the current song, which emits the missing "player" idle event.
Closes #381
2018-10-29 12:01:48 +01:00
Max Kellermann
a75d2fdd5a
NEWS: mention the new clang crash bug workaround
2018-10-29 12:01:28 +01:00
Max Kellermann
f76544be4c
db/update: catch all exceptions
2018-10-29 11:05:50 +01:00
Max Kellermann
1e6c445320
configure.ac: add -funwind-tables to work around clang bug
...
Replaces the workaround from commit
751fff07fb which fixed only one of many
crash locations.
See:
https://github.com/MusicPlayerDaemon/MPD/issues/373
https://github.com/android-ndk/ndk/issues/831
https://bugs.llvm.org/show_bug.cgi?id=32611
2018-10-29 11:05:35 +01:00
Max Kellermann
e02c1adf79
increment version number to 0.20.23
2018-10-29 11:05:27 +01:00
Max Kellermann
889e4869f9
meson.build: install the SVG icon
...
This change from commit 61eff1cddf got
lost in the merge.
2018-10-26 15:54:59 +02:00
Max Kellermann
f77135f307
meson.build: install README, NEWS etc.
2018-10-26 15:54:14 +02:00
Max Kellermann
eeae9a04d3
input/Registry: add missing include
2018-10-25 09:21:13 +02:00
Max Kellermann
8bb35e7bb6
decoder/Thread: reimplement HasRemoteTagScanner() using the InputPlugin list
2018-10-25 09:09:21 +02:00
Max Kellermann
3e78c9ab48
input/Plugin: add attribute prefixes
2018-10-24 20:25:32 +02:00
Max Kellermann
9ec86acb9c
decoder/Thread: enable output tags for Tidal and Qobuz
...
Fixes formatted paths in the `recorder` output, closing #345 .
2018-10-24 16:38:26 +02:00
Max Kellermann
426bde3f75
decoder/Thread: move check to SongHasVolatileTags()
2018-10-24 16:32:41 +02:00
Max Kellermann
30e22b753b
tag/Chromaprint: OO wrapper for a ChromaprintContext
2018-10-24 10:52:45 +02:00
Max Kellermann
f7141c9201
decoder/Control: convert to class, make various attributes private
2018-10-24 10:47:34 +02:00
Max Kellermann
c2a2573aa5
Merge tag 'v0.20.22'
...
release v0.20.22
2018-10-23 20:10:57 +02:00
Max Kellermann
9274bc15bc
release v0.20.22
2018-10-23 19:52:37 +02:00
Max Kellermann
751fff07fb
input/Error: work around clang bug leading to crash
...
Closes #373
2018-10-23 19:52:22 +02:00
Max Kellermann
f7d1408a1a
android/build.py: improved libc++ linker flags (for NDK r18)
...
The flag `-stdlib=libc++` doesn't appear to work because it attempts
to load `libc++` and not `libc++_static`, and it omits `libc++abi`.
2018-10-23 19:32:25 +02:00
Max Kellermann
e4e14ef6b0
Makefile.am: include mpd.svg in source tarball
2018-10-23 18:48:01 +02:00
Max Kellermann
005e691339
decoder/fluidsynth: adapt to API change in version 2.0
...
Closes #360
2018-10-23 18:44:28 +02:00
Max Kellermann
61eff1cddf
Makefile.am: install the SVG icon
...
Closes #366
2018-10-22 18:39:50 +02:00
Max Kellermann
c26703b7e6
SongFilter: check value.empty() after checking tag fallbacks
...
In this new order, a filter 'AlbumArtist ""' matches only on songs
which neither have `AlbumArtist` nor `Artist`.
2018-10-22 18:34:47 +02:00
Max Kellermann
66ab2de578
Merge branch 'v0.20.x'
2018-10-22 18:20:29 +02:00
Max Kellermann
db27bb76e2
db: fix broken command "list ... group"
...
Grouping in the "list" command was completely broken from the start,
unlike "count group". I have no idea what I have been thinking when I
wrote commit ae178c77bd , but it didn't
make any sense.
This commit is a rewrite of the feature.
For clients to be able to detect this feature, this commit also
increments the protocol version.
2018-10-22 13:08:24 +02:00
Max Kellermann
7cfe929c36
db/Count: print empty group if song without grouped tag exists
...
Be consistent with "list" responses.
2018-10-22 12:42:18 +02:00
Max Kellermann
6c06244e83
db/Count: move code to tag/VisitCallback.hxx
2018-10-22 11:50:51 +02:00
Max Kellermann
53448e4633
tag/Fallback: add tag fallbacks for AlbumArtistSort, ArtistSort
...
Just like AlbumArtist falls back to Artist, AlbumArtistSort should
fall back tom AlbumArtist, ArtistSort and finally Artist.
Closes #355
2018-10-22 10:52:42 +02:00
Max Kellermann
21adc78713
SongFilter: use ApplyTagFallback()
2018-10-22 10:46:26 +02:00
Max Kellermann
0340b01392
db/Count: use ApplyTagFallback()
2018-10-22 10:46:26 +02:00
Max Kellermann
94aed92e9a
tag/Set: move code to ApplyTagWithFallback()
2018-10-22 10:10:43 +02:00
Max Kellermann
6b9966e969
tag/Set: include cleanup
2018-10-22 10:09:56 +02:00
Max Kellermann
4bc5333995
tag/Set: use TagBuilder::AddItemUnchecked()
...
This improves the workaround from commit
b5ba94f1de and actually gives a useful
result for "list" with a disabled tag.
2018-10-22 10:06:04 +02:00
Max Kellermann
ff58b8d255
tag/Builder: move code to AddItemUnchecked()
2018-10-22 10:03:47 +02:00
Max Kellermann
e28d1e0f65
decoder/mad: convert Tag** parameter to just Tag*
2018-10-22 09:44:54 +02:00
Max Kellermann
a491d8ae24
decoder/mad: use class UniqueId3Tag
2018-10-22 09:44:50 +02:00
Max Kellermann
3cd5dd15f8
decoder/mad: don't initialize xing::frames
2018-10-22 09:44:48 +02:00
Max Kellermann
562ae44d38
decoder/mad: remove unused attribute from xing::magic
2018-10-22 09:44:46 +02:00
Max Kellermann
92541dedc0
Merge branch 'master' of git://github.com/skidoo23/MPD
2018-10-22 09:44:36 +02:00
Max Kellermann
3f3f0af543
python/build/libs.py: upgrade CURL to 7.61.1
2018-10-22 08:53:30 +02:00
Max Kellermann
850d208b7b
python/build/libs.py: upgrade Opus to 1.3
2018-10-22 08:44:11 +02:00
Max Kellermann
da563940b4
python/build/libs.py: upgrade libmpdclient to 2.16
2018-10-22 08:32:32 +02:00
Max Kellermann
650a67dc38
decoder/mad: use mad_bit_skip() where appropriate
2018-10-19 20:24:16 +02:00
Max Kellermann
c63f24e58e
decoder/audiofile: larger stack buffer to reduce overhead
2018-10-19 20:04:28 +02:00
Max Kellermann
3be8b02cc2
decoder/sndfile: make vio constexpr
...
Use `const_cast` to be able to pass it to sf_open_virtual() which has
a wrong parameter declaration.
2018-10-19 19:51:17 +02:00
Max Kellermann
bdfaea0c25
decoder/mad: move parse_id3_mixramp() to src/tag/Id3ReplayGain.cxx
2018-10-19 19:45:32 +02:00
Max Kellermann
ed5c0d6546
tag/Id3Scan: make struct id3_tag pointers const
2018-10-19 19:43:03 +02:00
Max Kellermann
86dc621086
tag/Rva2: make struct id3_tag pointers const
2018-10-19 19:41:59 +02:00
skidoo23
fbea965c70
tag: new tag Label
2018-10-17 20:33:03 +02:00
Max Kellermann
a2cd66ed6f
doc: remove the DocBook protocol documentation, has been converted to Sphinx
2018-10-17 10:27:06 +02:00
Max Kellermann
68894e822a
doc/index.rst: fix the converted protocol documentation
...
Fix links and lots of broken markup.
2018-10-17 10:17:41 +02:00
Max Kellermann
937f49f1e9
doc/index.rst: link the converted protocol documentation
2018-10-17 10:17:38 +02:00
Max Kellermann
ee59e20c28
Merge branch 'protocol2rst' of git://github.com/rain0r/MPD
2018-10-17 09:22:30 +02:00
Max Kellermann
01b6e1cbf2
test: use GTest instead of cppunit
2018-10-16 21:26:04 +02:00
Max Kellermann
eefc0f5d80
input/Error: add noexcept
2018-10-16 21:26:04 +02:00
Max Kellermann
1f94cea889
doc/meson.build: fix target for "upload" target
2018-10-16 15:28:37 +02:00
skidoo23
69749eb591
decoder/sidplay: fix typo to avoid linker error with meson (libsidplayfp)
2018-10-16 14:56:40 +02:00
Max Kellermann
94592c1406
build with Meson instead of autotools
...
So long, autotools! This is my last MPD related project to migrate
away from it. It has its strengths, but also very obvious weaknesses
and weirdnesses. Today, many of its quirks are not needed anymore,
and are cumbersome and slow. Now welcome our new Meson overlords!
2018-10-14 23:41:38 +02:00
Max Kellermann
13ce142df1
python/build/meson.py: generate windres line
2018-10-14 23:41:38 +02:00
Max Kellermann
89bf4c5fad
python/build/meson.py: move two functions to the top level
2018-10-14 21:44:15 +02:00
skidoo23
f80ebf68b0
decoder/wavpack: fix warning 'unused variable is_dsd' when compiled with --enable-dsd=no
2018-10-12 01:02:34 +02:00
Max Kellermann
1155a29096
Merge branch 'cdda_set_cdspeed' of git://github.com/andrewbasterfield/MPD
2018-10-08 21:16:52 +02:00
Max Kellermann
030e603940
decoder/gme: fix include
...
Broken since commit 08f77c2b60
2018-10-07 22:33:52 +02:00
Andrew Basterfield
9c1bf9ac5f
Remove some extraneous leftover debugging
2018-10-07 19:21:38 +01:00
Andrew Basterfield
5f8dac6822
Add some docs for CDParanoia extraction speed
2018-10-07 19:17:51 +01:00
Andrew Basterfield
2f07b8f482
Set cdrive speed hint for cdparanoia
2018-10-06 20:18:19 +01:00
Max Kellermann
6c40a27809
db/update/ExcludeList: fix variable name in #else block
2018-10-01 08:40:53 +02:00
Max Kellermann
8736a3533b
db/update/ExcludeList: add missing #ifdef
2018-10-01 08:40:15 +02:00
Max Kellermann
608d232373
util/SliceBuffer: re-add line which got lost in the last commit
2018-09-23 19:33:34 +02:00
Max Kellermann
1702e98fdf
util/SliceBuffer: move code to DiscardMemory()
2018-09-23 19:15:28 +02:00
Max Kellermann
2ec94c0497
player/Control: start thread on demand
...
Keep MPD's footprint small until playback is requested.
2018-09-23 17:32:34 +02:00
Max Kellermann
bf372e3e1f
player/Control: move public methods up
2018-09-23 17:28:41 +02:00
Max Kellermann
0d971963fd
player/Control: make several methods private
2018-09-23 17:27:42 +02:00
Max Kellermann
287cff40b9
player/Control: remove Lock(), Unlock()
2018-09-23 17:27:42 +02:00
Max Kellermann
0e0bc7976f
player/Control: add LockGetSyncInfo()
2018-09-23 17:17:57 +02:00
Max Kellermann
8c638c50a3
player/Thread: remove obsolete buffered_before_play attribute
2018-09-23 16:50:04 +02:00
Max Kellermann
5b2374b949
player/Thread: calculate buffered_before_play based on a fixed duration
...
Previously, there was the setting `buffered_before_play` which
specified a percentage of the audio buffer, defaulting to `10%`. That
was working well enough for quite some time, until high-quality audio
formats became common.
At 44.1 kHz, 16 bit stereo, MPD collected 2.3 seconds worth of data in
the buffer before starting playback. With the same default settings
and 192 kHz, 24 bit stereo, that was only 0.27 seconds.
Making this depend on the byte size only leads to high latency at low
quality, and too little data at high quality. The natural choice
would be to use a duration instead of a byte size, which should give
the same good experience with all audio formats.
Since the `buffered_before_play` configuration setting was not
understood well by users and caused more harm than good, this commit
deprecates it. It has now no effect.
2018-09-23 15:46:29 +02:00
Max Kellermann
c1600bcf3d
player/Thread: copy buffered_before_play
2018-09-23 15:46:27 +02:00
Max Kellermann
a82d864c91
config/File: print warning about deprecated options
2018-09-23 15:43:38 +02:00
Max Kellermann
dcac32a6c4
AudioFormat: add implicit cast to duration::rep
...
Fixes integer truncation bugs (closes #359 ).
2018-09-23 15:15:53 +02:00
Max Kellermann
5286477f73
Chrono: remove unnecessary typedef rep
...
It is already inherited by the base class, and we don't need to import
it explicitly.
2018-09-23 15:15:18 +02:00
Max Kellermann
2f3845ef51
player/Thread: remove buffered_before_play from decoder_wakeup_threshold formula
...
Simplify the formula, and I guess this makes the formula more
reliable. Imagine somebody configured `buffered_before_play` larger
than 25%; then the decoder would be woken up all the time. This
doesn't seem logical. On the other hand, it's easy to understand that
the decoder should be woken up below 75% buffer fill.
2018-09-23 15:00:47 +02:00
Max Kellermann
1191025bbf
player/Thread: add attribute decoder_wakeup_threshold
...
Calculate the value only once.
2018-09-22 19:56:00 +02:00
Max Kellermann
bfd261929e
AudioFormat: remove obsolete method GetTimeToSize()
2018-09-22 19:39:20 +02:00
Max Kellermann
84de88841b
player/CrossFade: use AudioFormat::SizeToTime() instead of GetTimeToSize()
2018-09-22 19:37:45 +02:00
Max Kellermann
224400074c
player/CrossFade: use std::chrono::duration
2018-09-22 19:37:02 +02:00
Max Kellermann
863722545f
player/CrossFade, ...: use lround()
2018-09-22 19:08:03 +02:00
Max Kellermann
d3d1d37782
AudioFormat: add TimeToSize(), SizeToTime()
2018-09-21 20:51:08 +02:00
Max Kellermann
1a2012a97e
player/Control: convert total_play_time to FloatDuration
2018-09-21 20:50:15 +02:00
Max Kellermann
90f4e97751
decoder/Client: use std::chrono::duration<double> instead of raw double
2018-09-21 20:42:34 +02:00
Max Kellermann
d1bcd98f79
Chrono: add FloatDuration
2018-09-21 20:42:30 +02:00
Max Kellermann
39542de69d
Chrono: add static method Cast()
2018-09-21 20:41:23 +02:00
Max Kellermann
1d00d55d53
player/Thread: stop buffering if buffer is full
...
Shouldn't ever happen, but who knows...
2018-09-21 19:05:25 +02:00
Max Kellermann
a190db0873
player/Thread: simplify loop condition
2018-09-21 18:58:38 +02:00
Max Kellermann
e3142312bb
player/Control: convert to class
2018-09-21 18:12:28 +02:00
Max Kellermann
e5d1ac0bd0
player/Thread: move functions into PlayerControl
2018-09-21 18:09:14 +02:00
Max Kellermann
c0411fa412
decoder/Thread: add noexcept
2018-09-21 17:58:34 +02:00
Max Kellermann
781e690012
player/Thread: catch and log initialization errors
2018-09-21 17:35:32 +02:00
Max Kellermann
9a2d71341e
player/Control: apply CamelCase to struct player_status
2018-09-21 17:22:35 +02:00
Max Kellermann
6db6d3c50c
player/Thread: move StartPlayerThread() into PlayerControl
2018-09-21 17:14:19 +02:00
Max Kellermann
0e2c597884
MusicBuffer: remove noexcept from constructor
...
The `SliceBuffer` constructor can throw.
2018-09-21 17:11:52 +02:00
Max Kellermann
debdf9bb96
decoder/{Thread,Control,...}: rename source files, drop prefix
2018-09-21 17:01:24 +02:00
Max Kellermann
218d9383d7
decoder/Thread: move decoder_thread_start() into DecoderControl
2018-09-21 16:57:54 +02:00
Max Kellermann
af64bd5088
Thread/Thread: disallow copying
2018-09-21 16:55:09 +02:00
Max Kellermann
050f81c4fe
Thread/Thread: document Start() exception
2018-09-21 16:53:52 +02:00
Rainer Hihn
6ebe772e2f
Proposal for CMDSYN
2018-09-21 10:09:37 +02:00
Max Kellermann
c9ee6dd4ca
doc/user.rst: document the sles output plugin
2018-09-11 20:44:54 +02:00
skidoo23
38b183fac2
user.rst: fixed typo state_file_interval
2018-09-11 16:35:57 +02:00
Max Kellermann
ab678787f4
java/Ref: API doc line breaks
2018-09-06 20:04:46 +02:00
Max Kellermann
23556585ca
java/Ref: add LocalRef::GetEnv()
2018-09-06 20:04:40 +02:00
Max Kellermann
728e4e9a38
util/StringCompare: add StringEndsWithIgnoreCase(), StringStartsWithIgnoreCase()
2018-09-06 19:52:43 +02:00
Max Kellermann
2d6f9f9a9c
Util/WStringAPI: non-Windows implementation of _wcs*cmp()
2018-09-06 19:49:45 +02:00
Max Kellermann
c2e2e5543e
util/WStringAPI: add wcscoll() wrapper
2018-09-06 19:39:28 +02:00
Max Kellermann
349d8eb248
util/WStringCompare: add "noexcept"
2018-09-06 19:35:09 +02:00
Max Kellermann
94b96bde9b
util/WStringCompare: wcpcpy() and wcsdup() are available on Android
2018-09-06 19:33:50 +02:00
Max Kellermann
45ffc864c5
util/StringCompare: add more function attributes
2018-09-06 19:23:13 +02:00
Max Kellermann
19d9ce260a
fs/io/FileOutputStream: disallow copying
2018-09-03 14:36:01 +02:00
Max Kellermann
0701333ec1
db/proxy: forward filter as expression to server
...
This adds support for the full set of MPD 0.21 filter types.
2018-09-02 22:39:45 +02:00
Max Kellermann
a8e70f0901
db/proxy: forward sort and window to server
2018-09-02 17:51:30 +02:00
Max Kellermann
c7c32a3ce9
db/Print: move sort/window emulation code to class DatabaseVisitorHelper
...
That way, each plugin can decide to implement it better.
2018-09-02 17:37:02 +02:00
Max Kellermann
53170ca2f2
.travis.yml: install Boost 1.67 from a PPA
...
Apparently, Travis-CI will never upgrade its ancient Ubuntu Trusty,
so I have to get Boost from somewhere else.
Thanks to Martin Hierholzer for his PPA.
2018-09-02 17:28:01 +02:00
Max Kellermann
94694e0f33
db/simple: pass DatabaseSelection to WalkMount()
...
This passes the new `sort` and `window` attributes to the mounted
database.
2018-09-02 17:13:35 +02:00
Max Kellermann
a73176a1e9
db/Helpers: fix include guard
2018-09-02 12:32:33 +02:00
Max Kellermann
e6a974a93e
db/Selection: add sort and window
...
Remove them as parameters from `db_selection_print()`.
2018-09-02 11:10:04 +02:00
Max Kellermann
9894967fcb
db/Selection: move bool attribute to the end
...
May allow a better memory layout.
2018-09-02 11:10:04 +02:00
Max Kellermann
92da483ecd
db/Selection: add noexcept
2018-09-02 11:10:04 +02:00
Max Kellermann
9cc960ac5e
db/proxy: require MPD 0.19
2018-09-02 11:07:32 +02:00
Max Kellermann
18dd082f1e
db/proxy: use ~0 instead of -1
...
No undefined behavior.
2018-09-02 11:06:08 +02:00
Max Kellermann
81b734be10
db/Interface: add "noexcept"
2018-09-02 10:20:48 +02:00
Max Kellermann
c59be7ced3
db/Interface: add more documentation about exceptions
2018-09-02 10:19:10 +02:00
Max Kellermann
c5c4d4a57e
db/proxy: forward the audio format
...
Requires libmpdclient 2.15.
2018-09-02 08:38:23 +02:00
Max Kellermann
2d0b429b6a
db/proxy: require libmpdclient 2.9
2018-09-02 08:21:11 +02:00
Max Kellermann
60620d9af5
db/Print: move variable i
2018-09-02 08:17:22 +02:00
Max Kellermann
15b2a4862e
protocol/RangeArg: add Contains()
2018-09-02 08:17:22 +02:00
Max Kellermann
2915d2dd0f
protocol/RangeArg: add IsAll()
2018-09-02 08:17:22 +02:00
Max Kellermann
590687fdea
protocol/RangeArg: eliminate SetAll()
2018-09-02 08:17:22 +02:00
Max Kellermann
993f8d6a5e
db/Print: pass RangeArg to db_selection_print()
2018-09-02 08:17:22 +02:00
Max Kellermann
68f824a186
protocol/ArgParser: move struct RangeArg to separate header
2018-09-02 08:17:22 +02:00
Max Kellermann
b9cca49e14
lib/dbus/ReadIter: switch off -Wshadow on GCC<8
...
GCC 6.3.0 emits bogus warnings like this:
In file included from src/lib/dbus/UDisks2.cxx:22:0:
src/lib/dbus/ReadIter.hxx: In instantiation of 'ODBus::ReadMessageIter::ForEachProperty(F&&)::<lambda(auto:2&&)> [with auto:2 = ODBus::ReadMessageIter; F = std::_Bind<void (*(std::reference_wrapper<UDisks2::Object>, std::_Placeholder<1>, std::_Placeholder<2>))(UDisks2::Object&, const char*, ODBus::ReadMessageIter&&) noexcept>]':
src/lib/dbus/ReadIter.hxx:102:6: required from 'ODBus::ReadMessageIter::ForEachRecurse(int, F&&)::<lambda(auto:1&&)> [with auto:1 = ODBus::ReadMessageIter&; F = ODBus::ReadMessageIter::ForEachProperty(F&&) [with F = std::_Bind<void (*(std::reference_wrapper<UDisks2::Object>, std::_Placeholder<1>, std::_Placeholder<2>))(UDisks2::Object&, const char*, ODBus::ReadMessageIter&&) noexcept>]::<lambda(auto:2&&)>]'
src/lib/dbus/ReadIter.hxx:92:5: required from 'void ODBus::ReadMessageIter::ForEach(int, F&&) [with F = ODBus::ReadMessageIter::ForEachRecurse(int, F&&) [with F = ODBus::ReadMessageIter::ForEachProperty(F&&) [with F = std::_Bind<void (*(std::reference_wrapper<UDisks2::Object>, std::_Placeholder<1>, std::_Placeholder<2>))(UDisks2::Object&, const char*, ODBus::ReadMessageIter&&) noexcept>]::<lambda(auto:2&&)>]::<lambda(auto:1&&)>]'
src/lib/dbus/ReadIter.hxx:101:3: required from 'void ODBus::ReadMessageIter::ForEachRecurse(int, F&&) [with F = ODBus::ReadMessageIter::ForEachProperty(F&&) [with F = std::_Bind<void (*(std::reference_wrapper<UDisks2::Object>, std::_Placeholder<1>, std::_Placeholder<2>))(UDisks2::Object&, const char*, ODBus::ReadMessageIter&&) noexcept>]::<lambda(auto:2&&)>]'
src/lib/dbus/ReadIter.hxx:114:3: required from 'void ODBus::ReadMessageIter::ForEachProperty(F&&) [with F = std::_Bind<void (*(std::reference_wrapper<UDisks2::Object>, std::_Placeholder<1>, std::_Placeholder<2>))(UDisks2::Object&, const char*, ODBus::ReadMessageIter&&) noexcept>]'
src/lib/dbus/UDisks2.cxx:71:30: required from here
src/lib/dbus/ReadIter.hxx:114:53: error: declaration of 'ODBus::ReadMessageIter&& i' shadows a parameter [-Werror=shadow]
ForEachRecurse(DBUS_TYPE_DICT_ENTRY, [&f](auto &&i){
^
src/lib/dbus/ReadIter.hxx:101:33: note: shadowed declaration is here
ForEach(arg_type, [&f](auto &&i){
^
2018-09-02 08:17:21 +02:00
Max Kellermann
931b571e3d
neighbor/udisks: add this-> to work around GCC 6 bug
...
Since `this` was captured, it does not need to be specified, but GCC 6
can't do it. Since we want to support the standard compiler from
Debian Stretch (stable), we need to work around this problem:
src/neighbor/plugins/UdisksNeighborPlugin.cxx:239:12: error: cannot call member function 'void UdisksNeighborExplorer::Insert(UDisks2::Object&&)' without object
Insert(std::move(o));
~~~~~~^~~~~~~~~~~~~~
This fixes #300 which I previously thought was a different bug.
2018-09-02 08:12:51 +02:00
Rainer Hihn
b7b93bb67e
First draft of the protocol as rst
2018-08-28 18:08:22 +02:00
Max Kellermann
35eca08d48
java/*: add noexcept
2018-08-28 13:27:28 +02:00
Max Kellermann
7137ca375a
Merge branch 'v0.20.x'
2018-08-28 13:27:04 +02:00
Max Kellermann
282859a62a
java/String: include cleanup
2018-08-28 13:07:28 +02:00
Max Kellermann
fbeb5eefdc
java/Class: drop unnecessary namespace spec
2018-08-28 13:01:01 +02:00
Max Kellermann
85bada0505
java/Class: use DiscardException() in FindOptional()
...
Sometimes, the JVM returns a non-nullptr value with an exception
pending (seen on Android 1.6, maybe a Dalvik bug?). Let's catch all
such cases.
2018-08-28 13:00:08 +02:00
Max Kellermann
fe2f7a3e5a
configure.ac: add automake conditional "LINUX"
2018-08-22 16:09:40 +02:00
Max Kellermann
98eed1f5ab
system/EpollFD: use class UniqueFileDescriptor
2018-08-22 16:09:40 +02:00
Max Kellermann
5d0a463f09
system/{Epoll,Event,Signal}FD: relicense to BSD-2
2018-08-22 15:40:45 +02:00
Max Kellermann
dd461400fb
system/EPollFD: rename to EpollFD
2018-08-22 15:40:45 +02:00
Max Kellermann
b1390ec27f
system/UniqueFileDescriptor: make the "int" constructor public
2018-08-22 15:40:45 +02:00
Max Kellermann
dda5516eec
net/IPv6Address: pass reference to Cast()
2018-08-21 20:21:41 +02:00
Max Kellermann
adc5c5db88
net/IPv4Address: pass reference to Cast()
2018-08-21 20:16:57 +02:00
Max Kellermann
0642ce4795
fs/io/FileOutputStream: make linkat() mandatory on Linux
2018-08-21 19:02:03 +02:00
Max Kellermann
d11e1d5880
fs/io/FileOutputStream: add "noexcept"
2018-08-21 18:56:14 +02:00
Max Kellermann
b143477774
fs/io/BufferedReader: add "noexcept" to constructor
2018-08-21 18:52:57 +02:00
Max Kellermann
d092a88a93
system/Open: new UniqueFileDescriptor constructing library
2018-08-21 18:27:39 +02:00
Max Kellermann
ab7597b089
fs/io/FileReader: use class UniqueFileDescriptor
2018-08-21 18:26:36 +02:00
Max Kellermann
84df470008
fs/io/FileReader: use std::exchange()
2018-08-21 18:26:34 +02:00
Max Kellermann
5ca0b7a28f
fs/io/FileReader: add "noexcept"
2018-08-21 18:26:09 +02:00
Max Kellermann
21d621e7ad
fs/io/FileReader: simplify includes
2018-08-21 18:26:09 +02:00
Max Kellermann
d036e20826
system/FileDescriptor: add openat() wrapper
2018-08-21 18:15:37 +02:00
Max Kellermann
9151b84c25
net/AllocatedSocketAddress: convert operator== to template
2018-08-21 12:26:19 +02:00
Max Kellermann
5d7dd12f7a
net/SocketDescriptor: add multicast methods
2018-08-21 11:37:19 +02:00
Max Kellermann
21783ff5f7
net/SocketDescriptor: remove unnecessary SO_REUSEPORT check
2018-08-21 11:35:29 +02:00
Max Kellermann
fd923d5d96
net/SocketDescriptor: add Shutdown()
2018-08-21 11:31:58 +02:00
Max Kellermann
ebf607eef8
net/SocketDescriptor: fix SOCK_NONBLOCK flag in CreateSocketPairNonBlock()
2018-08-21 11:27:15 +02:00
Max Kellermann
e092eadd8d
net/SocketDescriptor: add "noexcept"
2018-08-21 11:08:34 +02:00
Max Kellermann
185148f57c
net/SocketAddress: add cast to size_type
2018-08-21 11:06:05 +02:00
Max Kellermann
ede7434901
net/SocketAddress: add GetSteadyPart()
2018-08-21 10:57:46 +02:00
Max Kellermann
ba3b422ce5
net/SocketDescriptor: make accept4() mandatory on Linux
2018-08-21 10:53:54 +02:00
Max Kellermann
1f3ce380ed
net/SocketAddress: reimplement GetPort() using IPv4Address::GetPort()
2018-08-21 10:49:55 +02:00
Max Kellermann
dfc1f6342a
net/SocketAddress: add IsV4Mapped()
2018-08-21 10:48:37 +02:00
Max Kellermann
94092f1f90
net/SocketAddress: reimplement IsV6Any() using IPv6Address::IsAny()
2018-08-21 10:46:20 +02:00
Max Kellermann
a84b83f20f
net/IPv6Address: new class
2018-08-21 10:39:54 +02:00
Max Kellermann
614e410fe7
net/Resolver: update copyright year
2018-08-21 10:30:24 +02:00
Max Kellermann
4a1e885c0a
net/Resolver: replace with more advanced implementation
...
The new implementation is copied from another project and is
BSD-licensed. It is exception-safe and can parse IPv6 scope ids with
interface names.
2018-08-21 08:26:12 +02:00
Max Kellermann
eee91aa4ea
util/Exception: update copyright
2018-08-21 08:20:52 +02:00
Max Kellermann
855750c784
util/{Const,Writable}Buffer: add method SetEnd()
2018-08-21 08:20:17 +02:00
Max Kellermann
4f2163e76c
system/FileDescriptor: include cleanup
2018-08-20 17:25:42 +02:00
Max Kellermann
eef66dee04
system/FileDescriptor: pass FileDescriptor to CheckDuplicate()
2018-08-20 17:23:14 +02:00
Max Kellermann
7ad440ca1c
net/SocketDescriptor: make eventfd() and signalfd() mandatory on Linux
2018-08-20 17:16:07 +02:00
Max Kellermann
13b3e9e7b3
system/FileDescriptor: make inotify_init1() mandatory on Linux
2018-08-20 17:12:50 +02:00
Max Kellermann
8106929d60
system/FileDescriptor: add pipe2() wrapper
2018-08-20 17:05:29 +02:00
Max Kellermann
795baed3f5
system/FileDescriptor: make pipe2() mandatory on Linux
2018-08-20 17:04:43 +02:00
Max Kellermann
5487d40be9
system/FileDescriptor: add operator!=
2018-08-20 16:49:14 +02:00
Max Kellermann
5e512763d3
system/UniqueFileDescriptor: make the base class public
2018-08-20 16:38:27 +02:00
Max Kellermann
a65d02d3ae
system/FileDescriptor: add "noexcept"
2018-08-20 16:34:47 +02:00
Max Kellermann
2156fc64f4
util/StringStrip: more API documentation
2018-08-20 16:30:46 +02:00
Max Kellermann
441440101d
util/StringStrip: add more "nonnull" attributes
2018-08-20 16:28:43 +02:00
Max Kellermann
ec54754e22
Compiler.h: move to util/
2018-08-20 16:19:17 +02:00
Max Kellermann
0ebba73cb8
net/SocketDescriptor: add method GetPeerCredentials()
2018-08-20 16:11:17 +02:00
Max Kellermann
50c7337965
net/SocketDescriptor: add GetType(), IsStream()
2018-08-20 16:06:58 +02:00
Max Kellermann
b5c569cd30
system/FileDescriptor: add IsPipe(), IsSocket()
2018-08-20 16:05:03 +02:00
Max Kellermann
11396d4fba
net/SocketAddress: add method GetLocalRaw()
2018-08-20 15:59:17 +02:00
Max Kellermann
4c6ae4e9e8
net/IPv4Address: add various helper methods
2018-08-20 15:57:13 +02:00
Max Kellermann
9cb9154b08
net/IPv4Address: add struct sockaddr_in constructor
2018-08-20 15:57:13 +02:00
Max Kellermann
234a6193bb
net/SocketAddress: make GetAddress() constexpr
2018-08-20 15:57:13 +02:00
Max Kellermann
2bf5f32224
net/IPv4Address: add API documentation
2018-08-20 15:50:25 +02:00
Max Kellermann
82d0f68acf
net/IPv4Address: add static method ConstructInAddrBE()
2018-08-20 15:48:52 +02:00
Max Kellermann
616c8383c0
net/IPv4Address: check _WIN32 instead of WIN32
2018-08-20 15:48:49 +02:00
Max Kellermann
5de46268af
net/IPv4Address: add "noexcept"
2018-08-20 15:43:35 +02:00
Max Kellermann
489e11072e
util/WritableBuffer: add ConstBuffer cast operator
2018-08-20 15:36:50 +02:00
Max Kellermann
5e2af15e94
util/Manual: add static method Cast()
2018-08-20 15:35:43 +02:00
Max Kellermann
3fbb54e0a4
util/IterableSplitString: use operator==(nullptr_t)
2018-08-20 15:35:09 +02:00
Max Kellermann
fe6de14faf
util/StringView: add ConstBuffer cast constructors
2018-08-20 15:34:07 +02:00
Max Kellermann
e85b9960f0
util/StringCompare: use StringAPI.hxx
2018-08-20 15:33:16 +02:00
Max Kellermann
75c836fbd9
util/StringAPI: use StringCompare() in StringIsEqual()
2018-08-20 15:31:09 +02:00
Max Kellermann
94b1025780
util/RuntimeError: fix typo
2018-08-20 15:22:24 +02:00
Max Kellermann
36ca9d01fb
util/ForeignFifoBuffer: shift the buffer in MoveFrom() on demand
...
The API documentation says "move as much data as possible", and if
there is room at the head of the buffer, we should use that if the
room after the tail is not large enough.
2018-08-20 15:21:05 +02:00
Max Kellermann
3bceed1b53
util/ForeignFifoBuffer: add "noexcept"
2018-08-20 14:53:39 +02:00
Max Kellermann
90de2c4bd6
util/Exception: move code to NestCurrentException()
2018-08-20 14:52:54 +02:00
Max Kellermann
9d63c8220b
util/Cast: reverse operands in ContainerAttributeOffset()
...
The result shall be positive.
2018-08-20 14:23:02 +02:00
Max Kellermann
edd9d16c84
util/Cast: move OffsetPointer() to OffsetPointer.hxx
2018-08-20 13:46:18 +02:00
Max Kellermann
ec373eba5d
util/BindMethod: add "noexcept"
2018-08-20 13:45:41 +02:00
Max Kellermann
0dfb27b7e5
util/StringAPI: stpcpy() was added in Bionic API level 21
2018-08-20 13:31:23 +02:00
Thomas Guillem
735f62be0c
storage/nfs: implement follow
2018-08-20 11:29:27 +02:00
Thomas Guillem
a04e01d5f5
lib/nfs/Connection: add Lstat
2018-08-20 11:29:11 +02:00
Max Kellermann
b03f05f28a
configure.ac: require at least libnfs 1.11
...
This is the version in Debian Stretch (stable).
2018-08-20 11:28:30 +02:00
Max Kellermann
0b7d7fe069
Merge branch 'v0.20.x'
2018-08-20 11:27:56 +02:00
Max Kellermann
cf96135125
android/Main: remove SDK_INT diversion
...
MPD has minSdkVersion=21 which is above all the checks here.
2018-08-20 11:25:47 +02:00
Max Kellermann
1ff97783ea
Makefile.am: use $(AM_V_GEN) and $(AM_V_at)
2018-08-20 11:22:56 +02:00
Max Kellermann
2bc42c6445
Makefile.am: use $(MKDIR_P) instead of "mkdir -p"
2018-08-20 11:13:25 +02:00
Max Kellermann
49372a222f
Makefile.am: use $(@D)/$(@F) instead of $(dir/notdir ...)
2018-08-20 11:04:35 +02:00
Thomas Guillem
9127afbf3f
lib/nfs/Connection: use nfs_stat64_async
...
Since nfs_stat_async is deprecated.
2018-08-20 10:51:24 +02:00
Max Kellermann
f2caac595a
configure.ac: specify minimum libnfs version 1.9.5
...
This is the version in Debian Jessie (oldstable), a reasonable "old
enough" version to keep support for.
2018-08-20 10:51:24 +02:00
Max Kellermann
616abdda26
Merge branch 'v0.20.x'
2018-08-20 00:19:31 +02:00
Thomas Guillem
14d3a7ae83
android: use a gray notification icon
2018-08-20 00:07:35 +02:00
Thomas Guillem
f37ab5482b
android: improve Settings UI and run mpd on boot
...
add 2 preferences to:
- enable Wakelock when MPD is running (prevent suspend)
- run MPD on boot
and display MPD logs
2018-08-20 00:07:18 +02:00
Thomas Guillem
ef38dbe5bf
android: fix AndroidManifest.xml warnings
...
- <uses-permission> must be before <application>
- specify allowBackup (default)
2018-08-20 00:07:18 +02:00
Thomas Guillem
54a5491b86
android: Main is now a service
...
- add Settings: Activity to start / stop MPD Service (Main).
- Main is a service that run in foreground with a notification. See
Service.startForeground documentation for more details.
- Main.Client is used to control the service: start or stop it and also receive
callbacks when service encounters an error, is killed, is started or is
stopped.
- Main.start to start the service without any fallback.
2018-08-19 23:35:49 +02:00
Thomas Guillem
aff070bcbb
android: add LogListener
...
A Java object to send logs on the android side.
2018-08-19 23:32:24 +02:00
Max Kellermann
5af2632d4f
Makefile.am: use javac instead of javah to generate JNI header
...
javah is deprecated.
2018-08-19 23:27:12 +02:00
Max Kellermann
cc64c715a2
db/update/Service: Enqueue() throws on error
2018-08-19 23:15:52 +02:00
Max Kellermann
9999914c74
Main: throw exception instead of calling FatalError()
2018-08-19 23:13:29 +02:00
Max Kellermann
bd32a11016
config/Global: remove obsolete library
2018-08-19 23:08:41 +02:00
Max Kellermann
140aeea300
Main: allocate ConfigData on the stack
2018-08-19 23:08:23 +02:00
Max Kellermann
afd0fe666a
config/Global: move config_global_check() to Check.cxx
2018-08-19 23:01:30 +02:00
Max Kellermann
4accc1f159
test/run_neighbor_explorer: allocate ConfigData on the stack
2018-08-19 22:41:58 +02:00
Max Kellermann
80839b5372
test/run_input: allocate ConfigData in class GlobalInit
2018-08-19 22:41:08 +02:00
Max Kellermann
dafa3f985a
test/run_decoder: allocate ConfigData in class GlobalInit
2018-08-19 22:40:36 +02:00
Max Kellermann
f865e1393c
test/dump_rva2: remove obsolete fake function config_get_string()
2018-08-19 22:39:22 +02:00
Max Kellermann
c99416fbe0
test/dump_playlist: allocate ConfigData on the stack
2018-08-19 22:36:52 +02:00
Max Kellermann
3caef29b93
test/DumpDatabase: allocate ConfigData on the stack
2018-08-19 22:34:10 +02:00
Max Kellermann
5f95c07305
config/Path: add InitPathParser()
...
Eliminate yet another access to the global ConfigData instance.
2018-08-19 22:29:39 +02:00
Max Kellermann
1a9659ef45
output/Init: pass global configuration in struct AudioOutputDefaults
2018-08-19 07:52:23 +02:00
Max Kellermann
aaa438e745
mixer/Type: mixer_type_parse() throws on error
2018-08-19 07:49:54 +02:00
Max Kellermann
4531e4cc55
filter/LoadChain: move code to class FilterFactory
...
Eliminate a use of GetGlobalConfig().
2018-08-18 20:57:02 +02:00
Max Kellermann
44a31357f4
android/AndroidManifest.xml: increase targetSdkVersion to 26 (required by Google Play)
2018-08-18 20:44:18 +02:00
Joshua Wise
29f78b18b1
storage/plugins/CurlStorage: URL-encode paths in CurlStorage::MapUTF8
...
When using a database that was not created with a WebDAV music_directory
(i.e., if using a remote database, on which updates happen locally) and
using the Curl storage plugin, MPD would previously send GET requests that
had unescaped spaces in them. This change uses Curl's URL-encode API to
solve this.
2018-08-17 23:03:56 +02:00
Max Kellermann
147872fe97
lib/curl/Easy: add curl_easy_escape() wrapper
2018-08-17 23:02:49 +02:00
Max Kellermann
38edb58054
increment version number to 0.20.22
2018-08-17 23:02:13 +02:00
Max Kellermann
1ba35e1fd4
Merge tag 'v0.20.21'
...
release v0.20.21
2018-08-17 20:02:27 +02:00
Max Kellermann
4ba3812baf
Merge branch 'fchmod_fix' of git://github.com/1848/MPD
2018-08-14 23:14:10 +02:00
1848
4797357fa9
fixed setting unix socket permissions
...
first call fchmod() to prevent TOCTTOU, then apply permissions using
chmod()
2018-08-14 22:53:19 +02:00
Max Kellermann
f6b3a88723
Merge branch 'master' of git://github.com/skidoo23/MPD
2018-08-14 19:02:37 +02:00
skidoo23
82e8913c05
decoder/sidplay: support basic and kernal rom (libsidplayfp)
2018-08-12 14:25:11 +02:00
Max Kellermann
c46483a4ab
tag/Config: support incremental "metadata_to_use" setting
...
With a "+" or "-" prefix, the "metadata_to_use" setting can manipulate
the existing default. This way, one can enable `TAG_COMMENT` without
having to list all the other tags.
2018-08-10 18:46:47 +02:00
Max Kellermann
0f19108ce3
tag/Config: use SplitString()
2018-08-10 18:46:16 +02:00
Max Kellermann
4208fe29b5
tag/Mask: add method Unset()
2018-08-10 18:46:15 +02:00
Max Kellermann
1b593462d3
doc/user.rst: add tag links
2018-08-10 18:45:14 +02:00
Max Kellermann
0cf9c941af
doc/user.rst: line breaks
2018-08-10 18:28:25 +02:00
Max Kellermann
c1b33533da
event/ServerSocket: fix get_remote_uid() call
...
This call was broken since commit
9a5bcc6db0 because the
`UniqueSocketDescriptor` had already been moved.
2018-08-09 13:22:25 +02:00
Max Kellermann
66fcd25b7e
command/sticker, sticker/song: embed struct sticker_song_find_data in namespace
...
Fixes `-Werror=odr`
2018-08-09 12:57:47 +02:00
Max Kellermann
01d3777574
decoder/Thread, ...: log all exceptions
2018-08-09 11:14:40 +02:00
Max Kellermann
87570cdd9b
Merge branch 'HttpdOutputPlugin_socket' of git://github.com/1848/MPD
2018-08-08 16:57:24 +02:00
Max Kellermann
0ea6a2dd99
decoder/mpg123: remove obsolete const_cast hack
2018-08-07 22:52:38 +02:00
Max Kellermann
cacc1ffdad
decoder/mpg123: use AtScopeExit() to call mpg123_delete() during scan
2018-08-07 22:48:11 +02:00
Max Kellermann
cfe34647e1
decoder/mpg123: use AtScopeExit() to call mpg123_delete()
2018-08-07 22:29:51 +02:00
1848
737267cedc
Moved call to fchmod() on socket from OneServerSocket::Open() to socket_bind_listen()
2018-08-07 22:01:13 +02:00
1848
84054203af
Use fchmod instead of chmod for unix sockets to prevent TOCTTOU
2018-08-07 21:30:25 +02:00
1848
0c1a899fbe
Added unix socket support in HttpdOutputPlugin
2018-08-07 19:28:29 +02:00
1848
52521d02ea
Added a function for generic address parsing
...
Changed listen_add_config_param() to use generic address parsing
2018-08-07 19:18:33 +02:00
Yue Wang
2127a482da
Fix various bugs in OS X DSD playback
...
the most notable bugs are
1. osx_output_set_device_format should use the target asbd rather than AudioFormat. This is because asbd's sample rate calculation reflects the real dop target rate of the DAC, white AudioFormat's sample rate is the original DSD format rate.
2. the original code value the highest rate that's the multiple of the target rate. This cause DOP always have the wrong rate chosen. This is also not necessary for PCM playback --- MPD's goal is bit perfect, and it's meaningless to raise to two or four times the PCM sample rate.
3. if sample_rate cannot be synchronized, the test for falling back to PCM is wrong. If the file format is in DSD format such fallback is necessary, whatever the params.dop setting is.
2018-08-07 01:55:06 -07:00
Max Kellermann
7df0d3b7fc
event/SignalMonitor: make SignalMonitorFinish() noexcept
2018-08-06 12:01:46 +02:00
Max Kellermann
fdd101c4c5
event/SignalMonitor: add noexcept
2018-08-06 12:00:49 +02:00
Max Kellermann
4218f56f6c
system/SignalFD: add "noexcept"
2018-08-06 11:58:37 +02:00
Max Kellermann
dd18fe34a7
system/SignalFD: throw exception on error
2018-08-06 11:58:29 +02:00
Max Kellermann
5b09504a71
system/Event{FD,Pipe}: add "noexcept"
2018-08-06 11:57:40 +02:00
Max Kellermann
0c1a001622
system/Event{FD,Pipe}: throw exception on error
2018-08-06 11:49:38 +02:00
Max Kellermann
148c38fbb9
Main: use AtScopeExit() to delete the Instance
2018-08-06 11:42:46 +02:00
Max Kellermann
fbfefcc0a3
Main: call daemonize_finish() with AtScopeExit()
2018-08-06 10:47:06 +02:00
Max Kellermann
b4c517c501
song/AudioFormatFilter: add mask support
2018-08-02 21:34:29 +02:00
Max Kellermann
b39bc85e60
AudioFormat: add mask support to ToString()
2018-08-02 21:18:36 +02:00
Max Kellermann
603ce87ac2
AudioFormat: split the printf() calls in ToString()
...
Prepare for formatting masks.
2018-08-02 21:17:54 +02:00
Max Kellermann
4b16a8bf84
lib/icu: require at least version 50
2018-08-02 21:01:39 +02:00
Max Kellermann
ca4c81dd84
decoder/mikmod: require at least version 3.2
2018-08-02 20:45:14 +02:00
Max Kellermann
e9881bbfc8
configure.ac: detect libmikmod with pkg-config
2018-08-02 20:42:25 +02:00
Max Kellermann
69f4178bff
decoder/ffmpeg: require at least version 11.12
...
This is the version in Debian Jessie (oldstable).
2018-08-02 20:18:19 +02:00
Max Kellermann
027e562f65
song/OptimizeFilter: optimization stage for filters
2018-08-02 19:42:53 +02:00
Max Kellermann
2d2120338b
Makefile.am: add src/song/NotSongFilter.hxx
2018-08-02 19:29:53 +02:00
Max Kellermann
e5e623ffaa
SongFilter: add class NotSongFilter
2018-08-02 19:22:55 +02:00
Max Kellermann
e47e3205b3
doc/protocol.xml: add missing parantheses
2018-08-02 19:22:55 +02:00
Max Kellermann
592d2ebd26
song/AudioFormatSongFilter: new filter type
2018-08-02 17:28:17 +02:00
Max Kellermann
299c809272
song/Filter: convert LOCATE_TAG_* macros to enum
2018-08-02 17:23:25 +02:00
Max Kellermann
d929d0c26f
song/Filter: move each class into a separate source
2018-08-02 13:54:36 +02:00
Max Kellermann
90201e9970
DetachedSong, db/LightSong, SongFilter: move to src/song/
2018-08-02 13:51:18 +02:00
Max Kellermann
a31da51fd9
lib/systemd/Watchdog: implement the systemd watchdog protocol
2018-08-02 11:15:35 +02:00
Max Kellermann
cf471e830f
Merge branch 'v0.20.x'
2018-08-02 11:07:40 +02:00
Max Kellermann
22192adbc8
lib/icu/Init: add class ScopeIcuInit
2018-08-02 10:17:31 +02:00
Max Kellermann
b8f3de693f
lib/icu/Init: add "noexcept"
2018-08-02 10:17:04 +02:00
Max Kellermann
68c023cdd8
config/Path: simplify expression
2018-08-02 09:43:48 +02:00
Max Kellermann
b18b0bf328
config/Path: remove unnecessary IsNull() check
...
`AllocatedPath::FromUTF8Throw()` will never return a nulled instance.
2018-08-02 09:43:17 +02:00
Max Kellermann
2a2c5d50ff
unix/PidFile: add "noexcept"
2018-08-01 20:27:56 +02:00
Max Kellermann
dfda0faac7
unix/{Daemon,PidFile}: throw exception on error
...
Don't use the bad `FatalError` library.
2018-08-01 20:20:29 +02:00
Max Kellermann
95acc4be07
Main: add "noexcept"
2018-08-01 20:16:40 +02:00
Max Kellermann
330a4cf573
Main: remove exception handler from mpd_main_after_fork()
...
Let MainOrThrow() forward it to mpd_main().
2018-08-01 20:15:54 +02:00
Max Kellermann
6ffbb151a0
Main: move log_deinit() call to mpd_main()
...
Deinitialize the logging library after the last exception handler,
because that one could still need it.
Use `AtScopeExit()` to ensure it's always called, even if an exception
was thrown.
2018-08-01 20:14:31 +02:00
Max Kellermann
271e49db5d
Main: move code to MainOrThrow(), leaving exception handler in mpd_main()
2018-08-01 20:13:27 +02:00
Max Kellermann
8d2101ccb4
Main: move libdbus cleanup to class ODBus::ScopeInit
2018-08-01 19:24:50 +02:00
Max Kellermann
7aa8497546
SongFilter: implement the AND operator
2018-07-30 10:19:31 +02:00
Max Kellermann
7a8d5070f5
Songfilter: move code to ExpectWord()
2018-07-30 10:18:42 +02:00
Max Kellermann
8707ae6fd4
Songfilter: allow redundant parantheses
2018-07-30 10:00:44 +02:00
Max Kellermann
8786b61636
SongFilter: make ParseExpression() static
2018-07-30 09:57:04 +02:00
Max Kellermann
1b5faf5cbf
SongFilter: move code from SongFilter to AndSongFilter
2018-07-29 18:39:47 +02:00
Max Kellermann
2da5b7cb65
Merge branch 'v0.20.x'
2018-07-29 18:33:39 +02:00
Yue Wang
1e88e71b9a
[OSXOutputPlugin] Fix a bug that the stream sample rate is missing
...
the code here tried to guard DSD features behind ENABLE_DSD. However, the sample rate setting should be shared between two scenarios.
40a1ebee29 (diff-ce7ecec9ea9ca3df90d9c290cb3ef9d4R795)
The code runs fine if the dac supports the sample rate, as Mac OS will use the device rate if stream rate is 0.
However, when DAC is uncapable of processing the sample rate, a wrong rate (device rate) will be used for the stream rate.
2018-07-28 00:06:56 -07:00
Max Kellermann
e16fd4a09b
input/qobuz: initialize the libgcrypt library
2018-07-26 18:26:46 +02:00
skidoo23
097e2b6c62
configure.ac: clarify sidplay related info
2018-07-26 18:19:00 +02:00
Max Kellermann
7db7568dcf
lib/gcrypt/MD5: move code to util/HexFormat.cxx
2018-07-26 17:46:56 +02:00
Max Kellermann
409d3c7136
lib/gcrypt/MD5: return a StringBuffer
2018-07-26 17:45:45 +02:00
Max Kellermann
7f81375861
lib/gcrypt/MD5: move code to Hash.hxx
2018-07-26 12:14:31 +02:00
Max Kellermann
0de39a431b
lib/gcrypt/MD5: relicense to BSD-2
2018-07-26 12:14:00 +02:00
skidoo23
54c20f6aa1
user.rst: update and fix sidplay links
...
Add link to more recent libsidplayfp and correct URL pointing to libsidplay2.
2018-07-25 14:46:23 +02:00
Max Kellermann
1726278ccc
SongFilter: make several macros internal
2018-07-25 11:32:41 +02:00
Max Kellermann
8661a51aba
SongFilter: make locate_parse_type() static
2018-07-25 11:30:56 +02:00
Max Kellermann
42ec67168a
command/Database: don't use locate_parse_type()
2018-07-25 11:29:14 +02:00
Max Kellermann
91af2ebc2a
command/Database: move code to handle_list_file()
2018-07-25 11:27:12 +02:00
Max Kellermann
f7fb8a33d7
db/Print: pass TagType to PrintUniqueTags()
2018-07-25 11:21:47 +02:00
Max Kellermann
0505cb8f7e
db/Print: move code to PrintSongUris()
2018-07-25 11:18:45 +02:00
Max Kellermann
2cfccc1c34
SongFilter: make Item an interface
...
Prepare to allow more complex expressions.
2018-07-25 11:04:41 +02:00
Max Kellermann
438366effc
SongFilter: move code to class StringFilter
2018-07-25 11:04:41 +02:00
Max Kellermann
29d5ad667c
SongFilter: allow dash in tag name
...
Required for "modified-since".
2018-07-25 11:04:41 +02:00
Max Kellermann
235ddc0990
util/TimeISO8601: new utility library
2018-07-25 08:43:06 +02:00
Max Kellermann
517f5b1999
util/TimeConvert: new utility library
2018-07-25 08:34:52 +02:00
Max Kellermann
a8ac8b2563
TimePrint: remove unused time_t overload
2018-07-25 08:33:59 +02:00
Max Kellermann
78a65cf281
SongFilter: remove DetachedSong overloads
...
All DetachedSong instances should be converted to LightSong first,
which is a very cheap operation.
2018-07-25 07:43:05 +02:00
Max Kellermann
96017f58a5
decoder/ffmpeg: skip the av_probe_input_format() call
...
This is kind of a revert of commit
b2e3c0757b , which is not any longer
necessary since commit 0dd4b52b63
removed the last call to `av_open_input_stream()`.
2018-07-25 00:07:16 +02:00
Max Kellermann
c8e6f50d55
input/buffered: fix bogus offset after Seek()
...
Instead of copying the offset from our `input`, copy the requested
offset to our `offset` attribute.
By the time Seek() finishes, our input's offset may have advanced
already, having read some more data, thus giving us a bogus offset.
This fixes spurious decoder failues (closes #320 ).
2018-07-25 00:01:43 +02:00
Max Kellermann
9263d6d07d
SongFilter: implement operator "!="
...
Closes #89
2018-07-24 23:24:42 +02:00
Max Kellermann
5271e81ebe
SongFilter: new extensible filter syntax
...
Will allow more complex fitler expression, such as negation (#89 ).
2018-07-24 23:05:36 +02:00
Max Kellermann
a174159496
test/ParseSongFilter: new debug program
2018-07-24 23:04:47 +02:00
Max Kellermann
efb2051b30
SongFilter: add ToExpression()
2018-07-24 23:04:44 +02:00
Max Kellermann
a2b24cb5a2
SongFilter: pass std::string&& to Item constructor
2018-07-24 23:03:35 +02:00
Max Kellermann
a54f9ede2e
SongFilter: use std::list::emplace_back()
2018-07-24 23:03:33 +02:00
Max Kellermann
05fb624031
doc/protocol.xml: group <arg> elements
2018-07-24 23:03:09 +02:00
Max Kellermann
2de98b652b
doc/protocol.xml: move filter syntax to separate section
2018-07-24 22:36:03 +02:00
Max Kellermann
361ad92da9
doc/protocol.xml: improve find/search links
2018-07-24 22:36:00 +02:00
Max Kellermann
84ff71002e
doc/user: remove the obsolete DocBook version
...
Was converted to reStructuredText / Sphinx in commit
8a689e68bc
2018-07-24 22:28:29 +02:00
Max Kellermann
7f1b134137
SongFilter: basic support for negated items
...
Not yet wired to the protocol.
2018-07-21 11:20:50 +02:00
Rasmus Steinke
504776a10f
fix spelling
2018-07-21 08:14:53 +02:00
Rasmus Steinke
184b90bb88
fix wrong ref labels
2018-07-21 08:13:40 +02:00
Rasmus Steinke
cf85fcec79
fix wrong language type for code-blocks
2018-07-21 08:05:37 +02:00
Max Kellermann
b34fd905c8
SongFilter: simplify Parse() loop
...
Consume the ConstBuffer instead of iterating it. This will allow
adding more complex parsers.
2018-07-21 07:36:42 +02:00
Max Kellermann
821f77325c
SongFilter: Parse() throws exception on error
2018-07-21 07:24:42 +02:00
Max Kellermann
bd8cf7c53d
SongFilter: make internal Parse() overload private
2018-07-21 07:21:27 +02:00
Max Kellermann
88c19c21ee
SongFilter: remove obsolete prototype
2018-07-21 07:15:43 +02:00
Max Kellermann
40ec819330
SongFilter: make a few methods private
2018-07-21 07:15:09 +02:00
Max Kellermann
34dbd03be1
SongFilter: convert "tag" to "unsigned"
...
Having this as one-byte integer actually adds overhead and saves no
memory due to padding.
2018-07-21 07:04:01 +02:00
Rasmus Steinke
42d41647b5
fix wrong format of code sample
2018-07-20 23:50:14 +02:00
Rasmus Steinke
c91db14cef
add missing formatting
2018-07-20 23:47:39 +02:00
Rasmus Steinke
10b925e7ac
highlight actual tag_names
2018-07-20 23:42:45 +02:00
Max Kellermann
c9942846c9
doc: link the user manual in the TOC
2018-07-20 23:09:22 +02:00
Rasmus Steinke
6235cf066a
fix missing paragraphs in tables
2018-07-20 20:25:24 +02:00
Rasmus Steinke
86979c8f04
Use correct headers
2018-07-20 16:06:26 +02:00
Rasmus Steinke
8a689e68bc
Convert user documentation to restructuredText
2018-07-20 15:31:10 +02:00
Max Kellermann
b98263e86f
fs/io/OutputStream: relicense under BSD-2
2018-07-19 14:02:37 +02:00
Max Kellermann
f30265a9ee
config/File: support wildcards in "include"
2018-07-18 17:28:30 +02:00
Max Kellermann
fcbcec6856
fs/List: new library exporting ListWildcard()
2018-07-18 17:18:38 +02:00
Max Kellermann
b778fb38a9
util/StringAPI: add raw strcmp() wrapper
2018-07-18 17:18:34 +02:00
Max Kellermann
32290d5eb8
fs/Path: add method ToUTF8Throw()
2018-07-18 16:51:29 +02:00
Max Kellermann
f87265a4d5
fs/AllocatedPath: divert some methods to class Path
...
Eliminate duplicate code.
2018-07-18 16:51:29 +02:00
Max Kellermann
6448b31b11
util/StringAPI: add strpbrk() wrapper
2018-07-18 16:51:29 +02:00
Max Kellermann
998227cffc
fs/CheckFile: remove variable path_utf8
2018-07-18 16:51:29 +02:00
Max Kellermann
09f743dc1a
config/File: add directive "include_optional"
2018-07-18 13:10:36 +02:00
Max Kellermann
035f986a91
config/File: support absolute paths in "include"
2018-07-18 13:09:04 +02:00
Max Kellermann
b168a9d469
fs/Traits: add Apply()
2018-07-18 13:06:07 +02:00
Max Kellermann
2b1d6ad396
fs/{,Allocated}Path: add typedef Traits
2018-07-18 13:05:23 +02:00
Rasmus Steinke
641447bf9b
remove remaining docbook syntax; update year in footer
2018-07-18 12:52:39 +02:00
Max Kellermann
06c2aef3c7
config/File: fix typo in comment
2018-07-18 12:39:39 +02:00
Max Kellermann
1caa0ef58d
Makefile.am: upload Sphinx output
2018-07-18 12:36:58 +02:00
Max Kellermann
51951c9442
doc: remove developer.xml, was converted to Sphinx
2018-07-18 12:25:33 +02:00
Max Kellermann
104b8b4c4c
doc: basic support for Sphinx
...
Migrating from DocBook to Sphinx. Editing XML is really too
cumbersome.
2018-07-18 12:22:49 +02:00
Max Kellermann
3b95523e07
Merge branch 'sphinx' of git://github.com/carnager/MPD
2018-07-18 12:22:45 +02:00
Rasmus Steinke
3ca312bd4a
convert developer docs to restructuredtext
2018-07-18 11:49:50 +02:00
Max Kellermann
d06ef76e58
config/File: implement the "include" directive
...
This is an experimental draft. More needs to be done.
2018-07-18 11:27:41 +02:00
Max Kellermann
57729683b6
config/Data: pass new items by rvalue reference
2018-07-18 11:21:59 +02:00
Max Kellermann
9ff2606bb8
config/Data: use std::forward_list to manage params and blocks
2018-07-18 11:03:19 +02:00
Max Kellermann
fd80683ade
decoder/mad: make "gapless_mp3_playback" a block option
...
Remove another dependency on the config/Global library.
2018-07-18 10:50:09 +02:00
Max Kellermann
49efb6071c
config/Migrate: library to migrate deprecated settings
2018-07-18 10:25:02 +02:00
Max Kellermann
8df98932b1
config/Data: add methods AddParam(), AddBlock()
2018-07-18 10:17:45 +02:00
Max Kellermann
95481dda86
config/Global: remove unused function config_get_param()
2018-07-17 23:42:20 +02:00
Max Kellermann
1b4181d983
test/DumpDatabase: use struct ConfigData
2018-07-17 23:41:37 +02:00
Max Kellermann
113141bf2a
StateFileConfig: add attribute "restore_paused"
2018-07-17 23:40:14 +02:00
Max Kellermann
bcc1e51097
StateFile: add struct StateFileConfig
2018-07-17 23:27:50 +02:00
Max Kellermann
e8a7c6cee3
config/Global: remove unused function config_get_block()
2018-07-17 23:14:47 +02:00
Max Kellermann
0c8ffa1ac3
output/MultipleOutputs: use struct ConfigData
2018-07-17 23:13:35 +02:00
Max Kellermann
4f678aa244
neighbor/Glue: use struct ConfigData
2018-07-17 23:11:33 +02:00
Max Kellermann
3a4a430f6c
fs/Config: use struct ConfigData
2018-07-17 23:09:56 +02:00
Max Kellermann
36db40b224
client/Global: use struct ConfigData
2018-07-17 23:07:50 +02:00
Max Kellermann
426b9672cf
db/Configured: use struct ConfigData
2018-07-17 23:06:17 +02:00
Max Kellermann
4d80419982
pcm/ConfiguredResampler: use struct ConfigData
2018-07-17 23:04:26 +02:00
Max Kellermann
3983caa2c8
Listen: use struct ConfigData
2018-07-17 23:02:53 +02:00
Max Kellermann
0b4e0b7bcb
LogInit: use struct ConfigData
2018-07-17 23:02:06 +02:00
Max Kellermann
a9b8d5ecb6
Permission: use struct ConfigData
2018-07-17 23:00:42 +02:00
Max Kellermann
60b2338091
config/Global: remove unused function config_get_path()
2018-07-17 22:59:09 +02:00
Max Kellermann
d2594c6380
storage/Configured: use struct ConfigData
2018-07-17 22:57:08 +02:00
Max Kellermann
667daab056
config/Global: remove unused function config_get_unsigned()
2018-07-17 22:56:14 +02:00
Max Kellermann
2fc0a738ce
Main: use struct ConfigData
2018-07-17 22:54:16 +02:00
Max Kellermann
86c531b37d
config/Data: move std::chrono parsers from Global.hxx
2018-07-17 22:53:17 +02:00
Max Kellermann
a5b14a2ea7
Main: add local ConfigData reference
2018-07-17 22:48:43 +02:00
Max Kellermann
bf582bd969
ZeroconfGlue: use struct ConfigData
2018-07-17 22:44:16 +02:00
Max Kellermann
ad866f7a7d
db/update/Config: use struct ConfigData
2018-07-17 22:41:28 +02:00
Max Kellermann
338a6f2a96
db/update/Walk: move UpdateConfig initialization to class UpdateService
2018-07-17 22:39:52 +02:00
Max Kellermann
c3aa53cc97
db/update/Walk: move configuration to struct UpdateConfig
2018-07-17 22:36:37 +02:00
Max Kellermann
24a86dce21
tag/Config: use struct ConfigData
2018-07-17 22:34:11 +02:00
Max Kellermann
0209bc4ba7
ReplayGainGlobal: use struct ConfigData
2018-07-17 22:32:56 +02:00
Max Kellermann
dd57b81989
PlaylistFile: use struct ConfigData
2018-07-17 22:31:33 +02:00
Max Kellermann
ffe6819966
config/Global: move value parser code to struct ConfigData
2018-07-17 22:28:08 +02:00
Max Kellermann
8af75c78f8
config/{Global,Block}: throw exception on parser error
2018-07-17 22:23:04 +02:00
Max Kellermann
696add259b
config/Global: remove unused function config_find_block()
2018-07-17 22:15:10 +02:00
Max Kellermann
f18695eb45
test/run_output: use struct ConfigData
2018-07-17 22:12:56 +02:00
Max Kellermann
d6b0ecac1b
test/run_filter: use struct ConfigData
2018-07-17 22:11:57 +02:00
Max Kellermann
61a119b607
playlist/Registry: use struct ConfigData
2018-07-17 22:10:32 +02:00
Max Kellermann
ea5096ac90
test/read_conf: use struct ConfigData
2018-07-17 22:08:48 +02:00
Max Kellermann
428c2ec0e3
test/read_conf: throw if setting is not configured
2018-07-17 22:08:08 +02:00
Max Kellermann
1a82981d07
test/read_conf: validate the setting name early
2018-07-17 22:07:05 +02:00
Max Kellermann
0ff0aca2e2
input/Init: use struct ConfigData
2018-07-17 22:05:27 +02:00
Max Kellermann
7b02c0224c
filter/LoadChain: use struct ConfigData
2018-07-17 22:05:24 +02:00
Max Kellermann
57d77cc8a0
decoder/List: use struct ConfigData
2018-07-17 22:05:21 +02:00
Max Kellermann
9fe0585056
config/Global: add GetGlobalConfig()
2018-07-17 22:05:20 +02:00
Max Kellermann
8c366f0774
config/Data: automatic initialization
2018-07-17 22:05:18 +02:00
Max Kellermann
d6529d8c60
test/*: catch and print all exceptions
2018-07-17 21:58:39 +02:00
Max Kellermann
edb44a536a
util/PrintException: new utility class
2018-07-17 21:58:07 +02:00
Max Kellermann
eeaaea802a
config/Data: FindBlock() throws on error
2018-07-17 21:18:18 +02:00
Max Kellermann
15c36baefd
config/Data: add method FindBlock()
2018-07-17 21:16:20 +02:00
Max Kellermann
33deb84aa1
config/Data: make getters const
2018-07-17 21:16:11 +02:00
Max Kellermann
b211d31a64
config/Data: add getter methods
2018-07-17 21:11:52 +02:00
Max Kellermann
5b192beaa5
config/Global: remove ConfigBlock::SetUsed() call, let caller do that
...
This fixes an old bug which caused the "unused" warnings to be
unreliable; only the first block in the list was marked as being
"used", no matter if it was really used, and the rest was never marked
as "used", suppressing all warnings for them.
2018-07-17 21:08:41 +02:00
Max Kellermann
ef38330d74
config/Block: add method SetUsed()
2018-07-17 21:06:15 +02:00
Max Kellermann
987b60ae73
config/Block: make "used" mutable
2018-07-17 21:05:55 +02:00
Max Kellermann
7db0f7c4da
config/Param: remove unused "used" flag
2018-07-17 20:44:07 +02:00
Max Kellermann
a4eeaff63f
config/File: move duplicate code to ExpectValueAndEnd()
2018-07-17 20:28:50 +02:00
Max Kellermann
7807ddae57
config/Param: allow moving the value
2018-07-17 20:27:52 +02:00
Max Kellermann
566af6827e
config/Param: inline the constructor
2018-07-17 20:27:49 +02:00
Max Kellermann
bf046d895e
config/Param: use C++11 initializers
2018-07-17 20:27:47 +02:00
Max Kellermann
af33a9f4b8
config/Block: allow moving name and value
2018-07-17 20:27:46 +02:00
Max Kellermann
e9a4570891
config/Block: use C++11 initializers
2018-07-17 20:16:19 +02:00
Max Kellermann
99d5b61698
fs/Path: add operator/(Path,Path)
...
Modeled after std::filesystem::operator/() from C++17.
2018-07-17 18:33:32 +02:00
Max Kellermann
79e89eb23b
CommandLine: use constexpr Path instead of macros
2018-07-17 17:02:49 +02:00
Max Kellermann
d13a64455c
config/File: use nested exception to annotate file name and line number
2018-07-16 20:00:29 +02:00
Max Kellermann
816603fd9a
config/Config*: rename files, drop "Config" prefix
2018-07-16 19:50:07 +02:00
Max Kellermann
bf5f12a51f
Merge branch 'patch-4' of git://github.com/Wang-Yue/MPD
2018-07-16 18:59:17 +02:00
Yue Wang
866821765a
use uint_least32_t instead of long for timeout
2018-07-16 09:42:04 -07:00
Max Kellermann
c457d8e442
Merge branch 'can' of git://github.com/Wang-Yue/MPD
2018-07-16 18:14:04 +02:00
Yue Wang
c58dffa685
Implement Cancel() for OSXOutputPlugin
2018-07-16 09:06:07 -07:00
Max Kellermann
ba41690063
output/Interface: add method ChangeAudioFormat()
...
This is just the API design; there is no implementation yet, and no
caller.
2018-07-16 11:46:33 +02:00
Max Kellermann
86a37d0ed6
Main, pcm/SampleFormat, command/Error: remove obsolete GCC version checks
2018-07-16 11:04:05 +02:00
Max Kellermann
2fb5dbe62b
output/alsa: use spsc_queue::reset()
...
This method was added in Boost 1.58.
2018-07-16 11:04:01 +02:00
Max Kellermann
d2835e2989
configure.ac: require Boost 1.58
2018-07-16 11:03:59 +02:00
Max Kellermann
543e8a98a7
m4: update various libraries from autoconf-archive 20170928
...
Not updating m4/ax_boost_base.m4 because the new version breaks
cross-compilation by adding -I/usr/include to BOOST_CPPFLAGS.
2018-07-16 11:03:58 +02:00
Max Kellermann
86b7890f67
Merge branch 'v0.20.x'
2018-07-16 11:03:53 +02:00
Max Kellermann
9c6b52ccee
Permission: add special permissions for local sockets
...
Closes #296
2018-07-15 22:27:35 +02:00
Yue Wang
79937c9495
Support timed_wait in microseconds level
...
Some Audio plugin (such as ALSA, and soon CoreAudio) already support microsecond level buffer time. However, current interval less than 1000 microseconds will cause a bug that the code treated as 0 ms.
2018-07-15 13:22:53 -07:00
Max Kellermann
a47ecf9cb1
doc/user: document client configuration
...
Moving some text from the manpage. Oh, documentation is still a mess.
2018-07-15 21:56:41 +02:00
Max Kellermann
8aa2c57413
client: pass permission mask to constructor
...
Prepare for per-listener permissions.
2018-07-15 21:51:33 +02:00
Max Kellermann
524a7f4560
Listen: simplify code flow in listen_global_init()
2018-07-15 21:35:35 +02:00
Max Kellermann
56bfff5a57
event/ServerSocket: add method IsEmpty()
2018-07-15 21:35:35 +02:00
Yue Wang
1d30df9b15
Update OSXOutputPlugin.cxx
...
some device seems to have issue with setting kAudioDevicePropertyVolumeScalar with kAudioObjectPropertyElementMaster. Use AudioToolbox 's kAudioHardwareServiceDeviceProperty_VirtualMasterVolume instead.
Ideally, we should get the steoro channels first, and set the kAudioDevicePropertyVolumeScalar for each channel, which is doable as presented in https://github.com/cmus/cmus/blob/master/op/coreaudio.c . I will do a follow up PR after refactor PR.
2018-07-13 22:27:24 -07:00
Yue Wang
ef84e5c8fa
further guard dop code by if (dop_enabled)
2018-07-13 16:36:29 -07:00
Yue Wang
6d2a30b860
Update OSXOutputPlugin.cxx
...
1 sec for pause is too long. we wait for the same amount of time as when ring buffer is not available for writing.
2018-07-13 16:14:59 -07:00
Yue Wang
9e0fa8e9ec
Fix a copy and paste from diff bug.
2018-07-13 15:53:51 -07:00
Yue Wang
5e8e038811
Enclose pcm_export into the ENABLE_DSD guard.
2018-07-13 15:31:48 -07:00
Yue Wang
e61a804b80
Simplify audio format assignment code
2018-07-13 15:09:11 -07:00
Yue Wang
a9d6ad4759
Merge pull request #1 from Wang-Yue/patch-3
...
Remove sync_sample_rate option as it's no longer necessary
2018-07-13 13:01:34 -07:00
Yue Wang
987124610a
Remove sync_sample_rate option as it's no longer necessary
2018-07-13 13:00:25 -07:00
Yue Wang
40a1ebee29
Enable OSX output plugin to set hardware sample rate and bit depth at the same time
...
This PR will fix #271 .
special thanks to @coroner21 who contributed a nice way to score hardware supported format in #292
Also, The DSD related code are all guarded with ENABLE_DSD flag.
2018-07-13 12:48:43 -07:00
Max Kellermann
d4ce9c0df2
system/FileDescriptor: no-op implementation of *CloseOnExec() on Windows
...
Fixes the NFS client build, closes #305 .
2018-07-13 18:16:39 +02:00
Yue Wang
680fdb0338
enable macOS to use Hardware Mixer
...
- Update the mixer to set on device property instead of audio unit property. When user choose "hardware" as mixer type, they will be able to change the hardware device volume instead of the software (AudioUnit) volume.
- We don't use square root scale in volume calculation as previous code did. This will make the volume level in line with system volume meter --- That is, MPD will have the same percentage volume reading compared to System Setting (Either in "System Preference" or in "Audio Midi Setup" app)
2018-07-10 15:51:32 -07:00
Max Kellermann
727078f65d
decoder/flac: call TagHandler::OnAudioFormat()
2018-07-07 14:43:21 +02:00
Max Kellermann
d7f770ce73
decoder/flac: move flac_sample_format() to FlacAudioFormat.hxx
2018-07-07 14:40:02 +02:00
Max Kellermann
e1ddb63054
lib/xiph/FlacStreamMetadata: move code to Scan(FLAC__StreamMetadata_StreamInfo)
2018-07-07 14:33:53 +02:00
Max Kellermann
24b14c5aa5
decoder/flac: rename FlacMetadata.cxx to FlacStreamMetadata.cxx
2018-07-07 14:29:49 +02:00
Max Kellermann
2e116c9e28
lib/xiph/FlacMetadataChain: un-inline Read(InputStream)
2018-07-07 14:22:22 +02:00
Max Kellermann
37897d1550
decoder/flac: move class FlacMetadataChain to separate source
2018-07-07 14:18:00 +02:00
Max Kellermann
b153591790
decoder/flac: move FlacIOHandle.?xx to lib/xiph/
2018-07-07 14:17:03 +02:00
Max Kellermann
ee5653338d
decoder/flac: fix comment typo
2018-07-07 14:11:28 +02:00
Max Kellermann
032f47c0b0
lib/xiph/FlacMetadataIterator: disallow copying
2018-07-07 14:08:41 +02:00
Max Kellermann
1f4e4dd9b3
lib/xiph/FlacMetadataIterator: reuse default constructor
2018-07-07 14:08:18 +02:00
Max Kellermann
d43218ed16
lib/xiph/FlacMetadataIterator: proper CamelCase
2018-07-07 14:07:48 +02:00
Max Kellermann
3d43e4e954
decoder/flac: move class FLACMetadataIterator to separate source
2018-07-07 14:04:37 +02:00
Max Kellermann
b0d587ded7
decoder/flac: pass FLAC__Metadata_Chain* to FLACMetadataIterator ctor
2018-07-07 14:04:06 +02:00
Max Kellermann
1245b4a49f
decoder/wavpack: merge duplicate code into Scan()
2018-07-07 13:54:02 +02:00
Max Kellermann
d4ce6049c9
decoder/wavpack: call TagHandler::OnAudioFormat()
2018-07-07 13:52:58 +02:00
Max Kellermann
c236a85c13
decoder/wavpack: add CheckAudioFormat(WavpackContext)
2018-07-07 13:48:49 +02:00
Max Kellermann
9cf43eef67
decoder/wildmidi: call TagHandler::OnAudioFormat()
2018-07-07 13:43:29 +02:00
Max Kellermann
ed6d0aa548
decoder/wildmidi: convert WILDMIDI_SAMPLE_RATE to AudioFormat
2018-07-07 13:36:18 +02:00
Max Kellermann
3d27fffc50
decoder/opus: call TagHandler::OnAudioFormat()
2018-07-07 13:34:32 +02:00
Max Kellermann
de0ee26432
decoder/sndfile: call TagHandler::OnAudioFormat()
2018-07-07 13:29:39 +02:00
Max Kellermann
45cccbce59
decoder/sndfile: use AtScopeExit()
...
Fixes memory leaks.
2018-07-07 13:27:26 +02:00
Max Kellermann
479de9c7cb
decoder/sndfile: add CheckAudioFormat(SF_INFO)
2018-07-07 13:26:39 +02:00
Max Kellermann
60821232b9
decoder/audiofile: allocate AFvirtualfile with malloc()
...
afCloseFile() uses free(), so we need to use malloc().
2018-07-07 13:25:01 +02:00
Max Kellermann
9b4156a282
decoder/audiofile: add "noexcept"
2018-07-07 13:21:27 +02:00
Max Kellermann
89b1e27d2e
decoder/audiofile: merge duplicate code into CheckAudioFormat(AFfilehandle)
2018-07-07 13:21:09 +02:00
Max Kellermann
1dcaf8f76a
decoder/audiofile: call TagHandler::OnAudioFormat()
2018-07-07 13:18:06 +02:00
Max Kellermann
18508d1919
decoder/audiofile: merge audiofile_get_duration() into audiofile_scan_stream()
2018-07-07 13:16:38 +02:00
Max Kellermann
9f77d568e2
decoder/mad: call TagHandler::OnAudioFormat()
2018-07-07 13:10:39 +02:00
Max Kellermann
0d0569b9af
decoder/mad: merge mad_decoder_total_file_time() into mad_decoder_scan_stream()
2018-07-07 13:09:23 +02:00
Max Kellermann
0f18e7baf9
decoder/mpg123: call TagHandler::OnAudioFormat()
2018-07-07 13:08:06 +02:00
Max Kellermann
d8b03d4927
decoder/ffmpeg: call TagHandler::OnAudioFormat()
2018-07-07 13:02:08 +02:00
Max Kellermann
72b6c09a73
db/simple: add an AudioFormat to each Song
2018-07-06 22:49:02 +02:00
Max Kellermann
c05bca6f2c
tag/Handler: implement FullTagHandler::OnAudioFormat()
2018-07-06 22:46:03 +02:00
Max Kellermann
73c95d1fb2
TagFile: rename exported functions, use CamelCase
...
And specify whether generic tags are being scanned.
2018-07-06 22:33:35 +02:00
Max Kellermann
2c30e16371
db/simple/Song: remove obsolete comment
2018-07-06 21:50:53 +02:00
Max Kellermann
72437ca9e2
db/simple/Song: use C++11 initializers
2018-07-06 21:49:52 +02:00
Max Kellermann
9be14bbe82
doc/protocol.xml: document the lsinfo response
2018-07-06 21:36:28 +02:00
Max Kellermann
d47f37f23a
doc/protocol.xml: add command hyperlinks
2018-07-06 21:36:28 +02:00
Max Kellermann
a22aed7acf
doc/protocol.xml: update reference to Ack.hxx
2018-07-06 21:36:28 +02:00
Max Kellermann
38b58715ae
.travis.yml: add build with GCC 8
...
Also test the newest available GCC version.
2018-07-06 21:31:02 +02:00
Max Kellermann
d88e00c0a4
.travis.yml: switch to GCC 6
...
After commit a72d1200fb , the Travis-CI
build fails, because we have been using GCC 5 there... so let's
switch to GCC 6 to test the oldest possible GCC version.
2018-07-06 21:30:15 +02:00
Max Kellermann
a72d1200fb
require GCC 6
...
Meanwhile, GCC 5 fails to compile MPD due to incomplete C++14
implementation.
2018-07-06 19:44:32 +02:00
Max Kellermann
9a29d02e7e
Merge branch 'v0.20.x'
2018-07-06 19:43:01 +02:00
Max Kellermann
45139f94bb
db/LightSong: pass URI to constructor
2018-07-06 16:56:12 +02:00
Max Kellermann
80cb680fca
db/LightSong: implicit initialization
2018-07-06 16:50:37 +02:00
Max Kellermann
b9ff6383a4
db/LightSong: make Tag a reference
...
This enforces the "not nullptr" rule.
2018-07-06 16:47:47 +02:00
Max Kellermann
ebc006ab52
db/simple: wrap LightSong in Manual<>
...
Prepare to make LightSong non-assignable.
2018-07-06 16:46:01 +02:00
Max Kellermann
86a02871fc
decoder/vorbis: call TagHandler::OnAudioFormat()
2018-07-06 12:44:58 +02:00
Max Kellermann
e152e843d8
tag/Handler: add method OnAudioFormat()
2018-07-06 12:44:58 +02:00
Max Kellermann
9ff1ff75cb
tag/Handler: add FullTagHandler constructor with want_mask
2018-07-06 12:44:58 +02:00
Max Kellermann
abea4a24ba
tag/Handler: move WANT_DURATION|WANT_TAG to protected AddTagHandler()
2018-07-06 12:44:11 +02:00
Max Kellermann
3d3a1232b1
tag/Handler: convert to class with virtual methods
2018-07-05 19:07:05 +02:00
Max Kellermann
09d4176210
output/multiple: use WaitAll() in EnableDisable()
2018-06-23 19:23:56 +02:00
Max Kellermann
30d41e45e2
output/multiple: remove unnecessary IsBusy() check from WaitAll()
...
AudioOutputControl::WaitForCommand() doesn't need this check.
2018-06-23 19:23:18 +02:00
Max Kellermann
bd9a5021da
notify: remove unused library
2018-06-23 19:15:26 +02:00
Max Kellermann
1624a5eb8d
output/Control: add another Cond attribute, replacing audio_output_client_notify
2018-06-23 19:11:48 +02:00
Max Kellermann
1bca29f9e2
output/Control: rename "cond" to "wake_cond"
...
Prepare for adding another Cond attribute.
2018-06-23 19:10:23 +02:00
Max Kellermann
efb8a9bd2c
player, decoder, output: wrap MusicPipe in std::shared_ptr/std::unique_ptr
2018-06-23 18:45:57 +02:00
Max Kellermann
82954d1d6f
player/Thread: eliminate ClearAndReplacePipe()
...
Since commit e81b089612 , this is the
same code as in ReplacePipe().
2018-06-23 18:44:48 +02:00
Max Kellermann
5a02324c09
MusicBuffer: make constructor explicit
2018-06-23 18:40:36 +02:00
Max Kellermann
eb93bebbc1
MusicBuffer: fix potential deadlock while cross-fading in Return()
2018-06-23 18:39:50 +02:00
Max Kellermann
2be905b2e2
MusicPipe: eliminate the unused MusicBuffer reference
...
This requires re-adding the reference to struct DecoderControl, which
was removed recently by commit
9f14e7a98d
2018-06-23 18:36:24 +02:00
Max Kellermann
076be809c2
Music{Pipe,Chunk}: use MusicChunkPtr for the list links
2018-06-23 17:58:42 +02:00
Max Kellermann
88f1233d7b
MusicPipe, output/multiple: include cleanup
2018-06-23 17:44:32 +02:00
Max Kellermann
54d295c247
MusicChunkPtr: managed MusicChunk pointer
...
Make all uses of MusicChunk safe.
2018-06-22 23:11:52 +02:00
Max Kellermann
e81b089612
MusicPipe: automatically clear in destructor
...
We can implement this now that we have a MusicBuffer reference.
2018-06-22 23:09:13 +02:00
Max Kellermann
9f14e7a98d
MusicPipe: add MusicBuffer reference
...
This tiny amount of overhead allows omitting the MusicBuffer in
Clear().
2018-06-22 22:59:44 +02:00
Max Kellermann
cb412b221c
output/multiple: update API documentation
2018-06-22 22:59:30 +02:00
Max Kellermann
1ca1269a59
input/curl: use class MaybeBufferedInputStream
...
For remote files (not streams), this downloads as quickly as possible
to a large buffer instead of throttling the stream during playback.
Throttling can make the server impatient and it may then disconnect.
This is what Qobuz and Tidal do, and this commit attempts to solve
this by not letting the Qobuz/Tidal server wait (closes #241 ).
2018-06-22 22:33:16 +02:00
Max Kellermann
6681b14b71
input/MaybeBuffered: proxy InputStream implementation which auto-uses BufferedInputStream
2018-06-22 22:33:16 +02:00
Max Kellermann
12f2418445
input/buffered: proxy InputStream implementation which caches in a huge buffer
2018-06-22 22:33:16 +02:00
Max Kellermann
ae8a2ab652
util/SparseBuffer: new utility class
2018-06-22 22:18:26 +02:00
Max Kellermann
d0fbf6db59
input/Stream: remove attribute "cond", replace with handler interface
...
This adds a bit of overhead, but also adds flexibility to the API,
because arbitrary triggers may be invoked from that virtual method
implementation, not just Cond::signal().
The motivation for this is to make the handlers more dynamic, for the
upcoming buffering class utilizing ProxyInputStream.
2018-06-22 19:37:18 +02:00
Max Kellermann
01d8eb6290
input/rewind: move sources out of the "plugins" directory
...
This is not a plugin.
2018-06-22 19:31:06 +02:00
Max Kellermann
197968d65e
input/Stream: mark qobuz:// and tidal:// as "seeking is expensive"
...
Those are loaded with the "curl" input plugin, and this one is
"expensive", because it needs to send a new HTTP request with Range
header for each seek.
2018-06-21 22:35:36 +02:00
Max Kellermann
2cb83a1f84
input/Stream: make "uri" const
2018-06-14 17:31:54 +02:00
Max Kellermann
d7c94e30c5
input/Stream: remove obsolete comment
2018-06-14 17:31:33 +02:00
Max Kellermann
510d2514a0
doc/user.xml: mention the cache_directory requirement for mounts
2018-06-05 22:10:28 +02:00
Max Kellermann
5217a74b7f
storage/udisks: return file path in MapUTF8()
...
The absolute udisks:// URI is not usable with InputStream::Open(), and
thus we need to return the LocalStorage::MapUTF8() return value
instead.
2018-06-05 22:01:28 +02:00
Max Kellermann
cccf35d140
storage/udisks: add missing MountWait() call to MapFS()
2018-06-05 21:56:28 +02:00
Max Kellermann
249316c8fc
storage/udisks: implement MapFS()
2018-06-05 21:54:50 +02:00
Max Kellermann
cd24449495
doc/user.xml: document the two udisks plugins
2018-06-05 21:35:30 +02:00
Max Kellermann
687834328c
doc/user.xml: add section explaining storage/neighbor plugins and mounts
2018-06-05 21:35:30 +02:00
Max Kellermann
4d015aff30
doc/user.xml: rewrite the "Introduction" section with text from the website
2018-06-05 21:35:30 +02:00
Max Kellermann
ba8040d068
storage/udisks: new plugin
...
Documentation will follow soon.
2018-06-04 22:00:52 +02:00
Max Kellermann
5fa94d2a85
lib/dbus/AsyncRequest: add missing include
2018-06-04 22:00:52 +02:00
Max Kellermann
7eee79c145
neighbor/udisks: move code to class UDisks2::ParseObjects(ODBus::Message)
2018-06-04 21:50:34 +02:00
Max Kellermann
9626523420
neighbor/udisks: move code to class UDisks2::ParseObjects(ReadMessageIter)
2018-06-04 21:41:51 +02:00
Max Kellermann
0150131984
test/run_neighbor_explorer: make GlobalInit const
2018-06-04 17:44:31 +02:00
Max Kellermann
2ddd45e5e1
test/run_neighbor_explorer: use ShutdownHandler to catch SIGINT/SIGTERM
2018-06-04 17:42:47 +02:00
Max Kellermann
03c89c9cec
neighbor/udisks: move ParseObject() to UDisks2.cxx
2018-06-04 17:23:55 +02:00
Max Kellermann
640de5518b
neighbor/udisks: move struct UdisksObject to UDisks2.hxx
2018-06-04 17:23:55 +02:00
Max Kellermann
a92c694f1b
neighbor/Iter: add missing include
2018-06-04 17:23:55 +02:00
Max Kellermann
a159299a4b
lib/dbus/AsyncRequest: new helper class
2018-06-04 12:21:17 +02:00
Max Kellermann
d048545f1a
lib/dbus/Connection: add DBusConnection& cast operator
2018-06-04 12:20:41 +02:00
Max Kellermann
aea6d354b7
lib/dbus/ObjectManager: use TypeTraits instead of CPP macro
2018-06-03 20:30:08 +02:00
Max Kellermann
d3793dfe5b
lib/dbus/Types: add ObjectPathTypeTraits
2018-06-03 20:30:08 +02:00
Max Kellermann
234f8d287a
lib/dbus/Types: rename _MakeStructTypeAsString to ConcatTypeAsString
2018-06-03 20:29:01 +02:00
Max Kellermann
8d49c2d028
neighbor/udisks: show only filesystems, hide raw drives
2018-06-03 20:20:37 +02:00
Max Kellermann
e560f6bc63
lib/dbus/ReadIter: add ForEachProperty()
2018-06-03 20:18:46 +02:00
Max Kellermann
fbfbc5682a
lib/dbus/ReadIter: add ForEachRecurse()
2018-06-03 20:18:08 +02:00
Max Kellermann
d4141bf7f1
lib/dbus/ReadIter: add API documentation
2018-06-03 20:05:37 +02:00
Max Kellermann
6c81fa1ec5
neighbor/udisks: move code to ForEachInterface()
2018-06-03 14:47:12 +02:00
Max Kellermann
24874b8286
Merge branch 'v0.20.x'
2018-06-03 14:22:29 +02:00
Max Kellermann
b63664988f
lib/dbus/Types: support DBUS_TYPE_DICT_ENTRY
2018-06-03 12:19:17 +02:00
Max Kellermann
eeb00ac45b
util/TemplateString: new utility library
2018-06-03 12:13:47 +02:00
Max Kellermann
37e25f93d6
lib/dbus/Glue: move Connect()/Disconnect() calls to I/O thread
2018-06-03 12:08:37 +02:00
Max Kellermann
d58d65ebf0
lib/dbus/Glue: use private connection
...
Avoid interfering with libraries also using the shared connection.
2018-06-03 11:00:58 +02:00
Max Kellermann
adf2d3aff2
zeroconf/Avahi: move dbus_shutdown() call to the end of Main()
...
Calling dbus_shutdown() too early will break the "udisks2" neighbor
plugin.
2018-06-03 10:37:54 +02:00
Max Kellermann
32064a23c1
neighbor/udisks2: move Open()/Close() calls into the I/O thread
...
Fixes assertion failure.
2018-06-03 10:08:11 +02:00
Max Kellermann
c60b50b1ae
neighbor/udisks2: use SafeSingleton for managing the ODBus::Glue instance
...
Allows other objects to use the same single instance as well.
2018-06-03 09:58:34 +02:00
Max Kellermann
f3ffdaf21f
lib/dbus/Glue: singleton for global initialization
2018-06-03 09:28:04 +02:00
Max Kellermann
3aade67046
basic udisks2 support
...
To get udisks2 support started, this commit contains the configure.ac
option and a "neighbor" plugin which shows block devices. Later, this
will allow mounting removable media with a new storage plugin.
2018-06-02 19:44:46 +02:00
Max Kellermann
dc111bbec2
odbus: import dbus-1 OO wrapper library
...
From a7cef404c1
To be used by upcoming code.
2018-06-02 19:15:56 +02:00
Max Kellermann
acd61a0e8e
test/run_neighbor_explorer: dump NeighborGlue::GetList() after initialization
2018-06-02 19:15:36 +02:00
Christian Kröner
58590b71d1
Fix pause for OSX output plugin (delay one second)
2018-06-02 19:02:37 +02:00
Max Kellermann
66a1e8b737
Merge tag 'v0.20.20'
...
release v0.20.20
2018-05-22 12:47:11 +02:00
Max Kellermann
a8568d7246
Merge branch 'v0.20.x'
2018-05-03 20:15:11 +02:00
Max Kellermann
43a43c1e2b
Merge tag 'v0.20.19'
...
release v0.20.19
2018-04-26 20:06:41 +02:00
Max Kellermann
e08598e7e2
output/alsa: don't submit silence if PCM is not yet running
...
See code comment. Closes #260
2018-04-26 17:14:42 +02:00
Max Kellermann
d301a79dcf
output/alsa: CopyRingToPeriodBuffer() returns bool
2018-04-26 16:44:23 +02:00
Max Kellermann
98d76627a5
output/alsa: disable events in Cancel()
...
Don't reactivate the PCM device immediately after Cancel() is
finished; if Cancel() gets called this may mean that new data may take
a while to produce, or no data at all will be produced because the
current song is being stopped.
Once new data is available, Play() will automatically reactivate the
PCM.
This fixes underruns when switching songs manually (closes #264 ).
2018-04-26 16:41:49 +02:00
Max Kellermann
8a809013f3
output/alsa: reset "active" on error
...
Use the "active" flag in PrepareSockets() instead of LockHasError().
2018-04-26 16:18:59 +02:00
Max Kellermann
485ed0b156
output/alsa: make the "active" attribute thread-safe
2018-04-26 16:18:52 +02:00
Max Kellermann
7d546f80f9
output/alsa: merge Activate() and UnlockActivate()
...
Prepare to make the "active" attribute thread-safe.
2018-04-26 16:18:18 +02:00
Max Kellermann
5dfdc15f93
output/alsa: rethrow errors in Drain()
2018-04-26 16:17:14 +02:00
Max Kellermann
a6e5873443
output/alsa: thread-safety documentation for attribute "active"
2018-04-26 15:54:15 +02:00
Max Kellermann
e2cf777538
output/alsa: simplify MultiSocketMonitor::GetEventLoop() calls
2018-04-26 15:54:01 +02:00
Max Kellermann
9c61760713
output/alsa: remove obsolete comment, was moved to Alsa::PeriodBuffer::Allocate()
2018-04-10 15:42:29 +02:00
Max Kellermann
5f86c6d404
configure.ac: add missing "test"
...
Closes #256
2018-03-22 21:58:31 +01:00
kaliko
6edc834143
doc/protocol.xml: clarify how find behaves with albumartist
2018-03-22 16:34:09 +01:00
Max Kellermann
b7dc3fae7c
Merge branch 'v0.20.x'
2018-03-15 20:08:13 +01:00
Christian Kröner
d84cd500bb
Fix build with DSD disabled
2018-03-07 22:40:19 +01:00
Christian Kröner
5b456cadc4
Reset sample rate to initial state on OSX output
2018-03-07 22:38:09 +01:00
Christian Kröner
4be80982a4
Fix sample rate sync on Mac output for low rates
2018-03-07 21:32:21 +01:00
Christian Kröner
4d7f1f0c35
Implement Pause() for OSXOutput plugin
2018-03-07 11:59:43 +01:00
Christian Kröner
d3f097c7f1
Honor 'device "system"' setting for OSX output
2018-03-07 11:59:43 +01:00
Damien Cassou
a3d1b107f4
doc/protocol.xml: Add examples to the description of 'count'
2018-03-07 10:01:29 +01:00
Max Kellermann
0ab6c176af
doc/user.xml: mention that Tidal refuses to give us a token
...
Related to #196
2018-03-05 16:05:39 +01:00
Max Kellermann
5b0e8c6de0
Merge branch 'v0.20.x'
2018-03-05 11:13:42 +01:00
Christian Kröner
67274c018d
Really hide hidden cmd opts from help printout.
2018-03-04 11:21:26 +01:00
Christian Kröner
e89c421313
Initial support for DSD over PCM on macOS
...
From: Christian Kröner <ckroener@gmx.net >
This just copies the necessary bits and pieces from the ALSA plugin and applies them to OSXOutput based on dop config setting. It only changes the OSXOutput plugin as needed for DoP (further changes to support additionally e.g. integer mode or setting the physical device mode require rather a complete rewrite of the output plugin).
Fortunately the Core Audio API is by default bit perfect and supports DoP with minimal changes (setting the sampling rate accordingly after ensuring that the physical mode supports at least 24 bits per channel seems to be enough). This was tested on an Amanero Combo384 device hooked up to a ES9018 DAC.
USAGE (try only on DACs that support DoP):
- Add dop "yes" option to mpdconf
- Be sure to set at least 24bits per channel before playing some DSD file (using Audio-MIDI-Setup)
- Based on the dop setting, MPD will change the sample rate as required and output DoP signal to the DAC
- Hog mode is recommended to ensure that no other program will try to mix some output with the DoP stream (resulting in bad noise)
- Alternatively set the default output device to another device (e.g. the built-in output) to avoid having other audio interfere with DSD playback
2018-02-26 14:55:03 +01:00
cathugger
47d1d3c855
encoder/opus: add optional stream chaining support
...
support for chaining ogg opus streams to enable changing stream' metadata on the fly.
currently support is opt-in (enabled by additional option) because lots of clients can't handle this properly yet.
2018-02-25 15:27:08 +00:00
Patryk Hachuła
1628d801f9
playlist/Queue: add one-shot to single mode
2018-02-25 09:50:03 +01:00
Max Kellermann
1fb358249b
Merge branch 'v0.20.x'
2018-02-24 23:18:25 +01:00
Max Kellermann
b30a510b45
Merge tag 'v0.20.18'
...
release v0.20.18
2018-02-24 23:16:06 +01:00
FlashSystems
9f6af4f2cc
Fix for bogus output of the albumart command on 32bit platforms.
...
read_stream_art uses PRIu64 unconditionally with the Format
method of a Respone instance to output a size_t typed value.
If size_t is 32bit the output is garbeled. This patch uses
offset_type and PRIoffset to make sure the format string
and the type of the output value always match.
2018-02-17 19:19:38 +01:00
Max Kellermann
60efdce5ff
Merge branch 'v0.20.x'
2018-02-17 13:37:03 +01:00
Max Kellermann
a68f2cb9fa
input/InputPlugin: add API documentation
2018-02-17 10:32:17 +01:00
Max Kellermann
5f5be823f3
input/RemoteTagScanner: add API documentation
2018-02-17 08:49:35 +01:00
Max Kellermann
03700ad37c
test/DumpDecoderClient: use STDOUT_FILENO
2018-02-17 08:33:01 +01:00
Max Kellermann
6d01ee9284
test/DumpDecoderClient: convert static local to class attribute
2018-02-17 08:32:16 +01:00
Max Kellermann
cc3c1f31d0
test/DumpDecoderClient: convert to class
2018-02-17 08:31:19 +01:00
Max Kellermann
5909502a13
test/DumpDecoderClient: add API documentation
2018-02-17 08:30:12 +01:00
Max Kellermann
88bbd847e0
test/FakeDecoderAPI: rename to DumpDecoderClient
2018-02-17 08:27:03 +01:00
Max Kellermann
34d14df297
Makefile.am: remove obsolete dependencies on FakeDecoderAPI.cxx
2018-02-17 08:26:10 +01:00
Max Kellermann
bfc886cd54
decoder/Client: update API documentation
2018-02-17 08:20:07 +01:00
Max Kellermann
8624d8c144
doc/user.xml: example "ps" command for real-time scheduling check
2018-02-17 01:07:06 +01:00
Max Kellermann
420582ec5e
.travis.yml: enable ccache
2018-02-17 00:30:32 +01:00
Max Kellermann
36207d9726
.travis.yml: add variable MATRIX_EVAL
2018-02-17 00:23:31 +01:00
Max Kellermann
855d1bc5a1
.travis.yml: switch to osx_image xcode9.3beta
...
The clang/libc++ version in the default xcode8 image is unable to
compile MPD due to incomplete C++14 support.
2018-02-17 00:23:30 +01:00
Max Kellermann
081d15a830
.travis.yml: use "matrix"
2018-02-16 23:21:14 +01:00
Max Kellermann
d29d186d62
output/alsa: use a new I/O thread with real-time scheduling
...
The normal I/O event thread can have a large latency, e.g. when
libgnutls loads all TLS CA certificates for a https connect. This
makes it unreliable for the ALSA I/O notifications, and causes ring
buffer xruns. To avoid interfering with high latency events such as
CURL's, we move the ALSA I/O events to a separate I/O thread which
also obtains real-time scheduling (if possible).
Closes #221
2018-02-16 22:38:55 +01:00
Max Kellermann
61f2ce67dd
decoder/HybridDSD: implement seeking
2018-02-13 09:53:05 +01:00
Max Kellermann
60dbf1bea0
decoder/HybridDSD: calculate bit rate
2018-02-13 09:41:07 +01:00
Max Kellermann
58bb866e2d
decoder/HybridDSD: add code comments
2018-02-13 09:29:58 +01:00
Max Kellermann
b2ec5d0f01
decoder/HybridDSD: new decoder plugin for Hybrid DSD
2018-02-13 00:00:00 +01:00
Max Kellermann
0c300bd4b4
test/run_decoder: add command-line option to read mpd.conf
2018-02-13 00:00:00 +01:00
Max Kellermann
53acb7bfcb
test/run_decder: RAII-style global initialization
2018-02-13 00:00:00 +01:00
Max Kellermann
65bbb0e0aa
Merge tag 'v0.20.17'
...
release v0.20.17
2018-02-11 13:22:43 +01:00
Max Kellermann
5147654f6c
SongFilter: fix "modified-since" filter
...
Error message sent to client was "basic_string::_M_construct null not
valid" due to passing nullptr to the std::string constructor.
Regression caused by commit 386688b87a
2018-02-09 13:19:26 +01:00
Max Kellermann
250b6a3d52
Merge tag 'v0.20.16'
...
release v0.20.16
2018-02-03 19:59:29 +01:00
Max Kellermann
73ddbcc876
player/Thread: wake up the main thread after failed seek
...
Fixes deadlock bug. Closes #210
2018-02-03 19:28:39 +01:00
Max Kellermann
ce2b6dc84d
RemoteTagCache: new glue class for integrating RemoteTagScanner
...
This commit also puts an instance of RemoteTagScanner into the
Instance class, and hooks it into the "add" and "addid" commands.
2018-01-30 00:05:57 +01:00
Max Kellermann
7d16d8c887
Listen: move ClientListener pointer to struct Partition
2018-01-29 23:53:52 +01:00
Max Kellermann
1df5c5a76e
Listen: move class ClientListener to src/client/Listener.hxx
2018-01-29 23:48:16 +01:00
Max Kellermann
52da387a1d
Main: move part of the shutdown code to Instance methods
2018-01-29 23:45:48 +01:00
Max Kellermann
c1221c5c87
Main: cancel the update on shutdown even if inotify is unavailable
...
Fixup for commit 681e012fb5
2018-01-29 23:37:56 +01:00
Max Kellermann
befd669075
Instance: rename Shutdown() to Break()
2018-01-29 23:31:41 +01:00
Max Kellermann
b6013a92e0
lib/curl/Request: merge two "try" blocks
2018-01-29 23:25:03 +01:00
Max Kellermann
19af364400
event/Thread: add "noexcept"
2018-01-29 23:11:15 +01:00
Max Kellermann
3fd9a86f3c
event/Call: invoke function directly if the EventLoop is dead
...
Works around a deadlock bug which happens when waiting for an
EventLoop which isn't running anymore.
2018-01-29 23:06:43 +01:00
Max Kellermann
ce68701c0c
event/Loop: add flag "dead"
2018-01-29 22:52:13 +01:00
Max Kellermann
6ea2cb3644
event/Thread: remove unused method StopAsync()
2018-01-29 22:50:21 +01:00
Max Kellermann
199c8aaa25
event/Loop: move code to HandleTimers()
2018-01-29 22:40:12 +01:00
Max Kellermann
9ce6828d72
filter/convert: call PcmConvert::Flush() only if initialized
...
Fixes another part of #208 , the one which caused the bogus exception.
2018-01-29 22:35:28 +01:00
Max Kellermann
7ff5cf8372
filter/convert: add method IsActive()
2018-01-29 22:33:54 +01:00
Max Kellermann
eb771eaf0d
output/Thread: re-lock the mutex after flush error
...
Fixes deadlock due to mutex double lock.
2018-01-29 22:30:56 +01:00
Max Kellermann
6908555ed3
filter/Observer: drop bogus "noexcept"
...
Closes #208 .
2018-01-29 22:14:27 +01:00
Max Kellermann
3890bc5a96
event/Loop: add "noexcept"
2018-01-29 22:05:58 +01:00
Max Kellermann
2c65f986d6
event/EPoll: use C++11 initializer
2018-01-29 22:05:13 +01:00
Max Kellermann
ea402b765c
event/WinSelect: pass const reference to copy constructor
2018-01-29 22:05:13 +01:00
Max Kellermann
497e0669ff
event/PollResult: use size_t for size and index
2018-01-29 21:56:12 +01:00
Max Kellermann
13ac74e0a2
system/EPollFD: update API documentation
2018-01-29 21:49:27 +01:00
Max Kellermann
c2f23d92dc
system/EPollFD: add "noexcept"
2018-01-29 21:48:39 +01:00
Max Kellermann
7027da3cd3
Instance: un-inline the destructor
...
Allows more forward declarations.
2018-01-29 18:43:10 +01:00
Max Kellermann
005bb59797
test/run_input: move code from Scan() to input/ScanTags.cxx
2018-01-29 16:57:44 +01:00
Max Kellermann
88bc3a9271
input/qobuz: implement InputPlugin::scan_tags()
2018-01-26 20:08:01 +01:00
Max Kellermann
2e32cf7b87
input/tidal: implement InputPlugin::scan_tags()
2018-01-26 20:08:01 +01:00
Max Kellermann
3ecf5fd442
test/run_input: add frontend for InputPlugin::scan_tags()
2018-01-26 20:08:01 +01:00
Max Kellermann
3e9c3c8ae8
input/Plugin: add method scan() with asynchronous callback class
...
To be used when a URL gets added.
2018-01-26 19:29:38 +01:00
Max Kellermann
ec31e8df1d
input/qobuz: remove obsolete prototypes
2018-01-26 19:29:38 +01:00
Max Kellermann
b56bfbae26
input/tidal: add setting "audioquality"
2018-01-26 19:18:13 +01:00
Max Kellermann
f55b1415d4
input/qobuz: move code to ExtractQobuzTrackId()
2018-01-26 18:48:15 +01:00
Max Kellermann
67693c6ad0
input/qobuz: add setting "format_id"
2018-01-26 17:30:28 +01:00
Max Kellermann
fce061b544
input/tidal: move code to ExtractTidalTrackId()
2018-01-26 17:29:58 +01:00
Max Kellermann
93765fcb30
input/{tidal,qobuz}: remove unused list_base_hook
2018-01-26 16:56:56 +01:00
Max Kellermann
b221bd7472
input/qobuz: remove bogus "noexcept"
...
This change was missing in 47fa8c4cf6
2018-01-25 15:19:33 +01:00
Max Kellermann
fd0a5a1116
decoder/{dsdiff,dsf,mpg123,wavpack}: avoid exceptions in scan methods
...
The scan methods must be "noexcept".
2018-01-25 13:01:39 +01:00
Max Kellermann
47fa8c4cf6
input/{tidal,qobus}: add bogus "noexcept"
...
The CurlRequest constructor can throw exceptions, therefore we must
not use "noexcept".
2018-01-25 12:58:58 +01:00
Max Kellermann
7640609b41
input/tidal: retry if session is expired
2018-01-24 15:35:02 +01:00
Max Kellermann
e8e6357b73
input/tidal/Error: add method IsInvalidSession()
2018-01-24 15:34:59 +01:00
Max Kellermann
4398101706
input/tidal: parse subStatus in error responses
2018-01-24 15:34:57 +01:00
Max Kellermann
2e1481f49d
input/tidal: add exception class TidalError
...
Allows catchers to inspect the HTTP status.
2018-01-24 15:34:54 +01:00
Max Kellermann
c7c087a0d2
input/tidal: add some debug logging
2018-01-24 15:29:30 +01:00
Max Kellermann
3461580b34
test/run_input: add option "--verbose"
2018-01-24 15:29:30 +01:00
Max Kellermann
fcfdeac1c7
test/test_translate_song: use std::to_string()
2018-01-24 13:38:44 +01:00
Max Kellermann
97f670658f
util/StringFormat: new utility library
2018-01-24 13:28:28 +01:00
Max Kellermann
4324fb2fbe
input/Offset: add macro PRIoffset
2018-01-24 13:26:43 +01:00
Max Kellermann
e4cb74cf7b
input/curl: remove obsolete Windows sprintf() fallback
...
See commit be137a191e
2018-01-24 13:26:18 +01:00
Max Kellermann
be137a191e
util/FormatString: remove obsolete Windows fallback
...
Since 7d353bbe2a , _GNU_SOURCE is always
defined, which implies __USE_MINGW_ANSI_STDIO and thus switches to
the mingw implementations of the printf() family. That's
standards-compliant, unlike Microsoft's CRT implementations.
2018-01-24 13:22:43 +01:00
Max Kellermann
fe1f3df36e
util/StringBuffer: add "noexcept"
2018-01-24 12:52:05 +01:00
Max Kellermann
4a330a4c33
input/qobuz: use class DelegateCurlResponseHandler to eliminate duplicate code
2018-01-24 11:33:01 +01:00
Max Kellermann
75e60669a7
input/tidal: include cleanup
2018-01-24 11:33:01 +01:00
Max Kellermann
db379c6172
player/Thread: remove bogus "noexcept" from play_chunk()
...
Closes #203
2018-01-24 11:21:28 +01:00
Max Kellermann
1da64fb79c
lib/curl/Delegate: helper class for response body parsers
...
Eliminate duplicate code.
2018-01-23 16:48:43 +01:00
Max Kellermann
8b42fd0a28
Merge branch 'v0.20.x'
2018-01-23 16:45:57 +01:00
Max Kellermann
2c401f1102
decoder/{adplug,sidplay}: add missing "noexcept"
...
Closes #202
2018-01-23 10:02:36 +01:00
Max Kellermann
d084950b1a
input/qobuz: dispose the TidalLoginRequest earlier
2018-01-21 20:17:50 +01:00
Max Kellermann
2ce10f2fed
input/qobuz: dispose the QobuzTrackRequest
2018-01-21 19:59:17 +01:00
Max Kellermann
036094799b
input/qobuz: pass std::string by value to OnQobuzTrackSuccess()
2018-01-21 19:58:21 +01:00
Max Kellermann
2da6ab2a45
input/qobuz: dispose the QobuzLoginRequest earlier
2018-01-21 19:45:03 +01:00
Max Kellermann
91a512606b
input/qobuz: remove unused variable
2018-01-21 15:01:31 +01:00
Max Kellermann
b6d858f4d6
lib/expat/Parser: make the "is_final" argument optional
2018-01-21 14:37:10 +01:00
Max Kellermann
dedede3caa
lib/expat/Parser: add method CompleteParse()
2018-01-21 14:35:47 +01:00
Max Kellermann
b14fc907f9
lib/expat/Parser: forward Parse() arguments
2018-01-21 14:34:53 +01:00
Max Kellermann
542bbb0889
input/qobuz: parse and report message from error responses
2018-01-21 12:52:54 +01:00
Max Kellermann
714e69e708
input/qobuz: create JSON parser on demand
2018-01-21 12:49:10 +01:00
Max Kellermann
cb87ed29d8
input/tidal: invoke login handlers on second request
...
Fixes a freeze bug.
2018-01-21 12:41:19 +01:00
Max Kellermann
570c6765b0
input/tidal: parse and report userMessage from error responses
2018-01-21 12:30:46 +01:00
Max Kellermann
12a2285ba5
input/tidal: create JSON parser on demand
2018-01-21 12:29:52 +01:00
Max Kellermann
1c023eac70
db/update/Walk: add "noexcept"
2018-01-21 11:53:59 +01:00
Max Kellermann
1e3f0650df
SongUpdate: add "noexcept"
2018-01-21 11:53:42 +01:00
Max Kellermann
1e9da09f62
TagFile: add "noexcept"
2018-01-21 11:53:42 +01:00
Max Kellermann
5caf351c44
TagArchive: add "noexcept"
2018-01-21 11:53:42 +01:00
Max Kellermann
7d789a984a
decoder/Plugin: add "noexcept"
2018-01-21 11:47:17 +01:00
Max Kellermann
d921114832
db/Helpers: add "noexcept"
2018-01-21 11:37:13 +01:00
Max Kellermann
39a1f03d5c
db/PlaylistVector: add "noexcept"
2018-01-21 11:36:16 +01:00
Max Kellermann
c6a4a4edf1
playlist/Print: add "noexcept"
2018-01-21 11:35:31 +01:00
Max Kellermann
45748a2bb0
playlist/Song: add "noexcept"
2018-01-21 11:35:28 +01:00
Max Kellermann
9b13d862c1
playlist/Registry: add "noexcept"
2018-01-21 11:35:27 +01:00
Max Kellermann
590edc648a
playlist/Plugin: add "noexcept"
2018-01-21 11:35:25 +01:00
Max Kellermann
3326c87a88
db/Count: add "noexcept"
2018-01-21 11:33:53 +01:00
Max Kellermann
0ec1863fcb
db/Print: add "noexcept"
2018-01-21 11:32:22 +01:00
Max Kellermann
2b67a14155
SongPrint: add "noexcept"
2018-01-21 11:32:10 +01:00
Max Kellermann
eac8caa4de
TagPrint: add "noexcept"
2018-01-21 11:30:47 +01:00
Max Kellermann
61eb2aa328
storage/Interface: wrap StorageDirectoryReader in std::unique_ptr
2018-01-21 11:04:30 +01:00
Max Kellermann
a9847ebf54
playlist/Queue: use "auto"
2018-01-20 20:14:19 +01:00
Max Kellermann
4ca1089f60
input/TextInputStream: ReadLine() throws exception on error
2018-01-20 20:13:08 +01:00
Max Kellermann
926d4150c5
playlist/SongEnumerator: allow NextSong() to throw exceptions
2018-01-20 20:11:15 +01:00
Max Kellermann
6f267adc14
playlist/SongEnumerator: add "noexcept"
2018-01-20 20:10:46 +01:00
Max Kellermann
0095e2d7d8
playlist/Plugin: use std::unique_ptr<SongEnumerator>
2018-01-20 19:59:42 +01:00
Max Kellermann
147f64e1fc
playlist/Plugin: remove useless wrapper functions
2018-01-20 19:58:11 +01:00
Max Kellermann
b8e5932506
tag/{Tag,Builder}: use std::lock_guard
2018-01-20 19:53:38 +01:00
Max Kellermann
1ea04cd8cc
tag/Pool: add "noexcept"
2018-01-20 19:53:38 +01:00
Max Kellermann
b334643b68
tag/Pool: use C++11 initializers
2018-01-20 19:53:38 +01:00
Max Kellermann
6e6a0275b5
tag/Pool: use uint8_t instead of unsigned char
2018-01-20 19:53:38 +01:00
Max Kellermann
f5590806e0
tag/Handler: add "noexcept"
2018-01-20 19:53:38 +01:00
Max Kellermann
f686e838fe
tag/Builder: add "noexcept"
2018-01-20 19:53:38 +01:00
Max Kellermann
ea8642dec9
tag/Builder: use C++11 initializers
2018-01-20 19:53:38 +01:00
Max Kellermann
eef5b58211
tag/Tag: add "noexcept"
2018-01-20 19:39:46 +01:00
Max Kellermann
1de68b72b9
tag/Tag: use C++11 initializers
2018-01-20 19:39:06 +01:00
Max Kellermann
720df085e5
input/TextInputStream: add "noexcept"
2018-01-20 19:35:09 +01:00
Max Kellermann
f90f17227b
input/Domain: remove obsolete variable
2018-01-20 19:19:29 +01:00
Max Kellermann
36f7eaadef
input/LocalOpen: make assert() more strict
2018-01-20 19:15:51 +01:00
Max Kellermann
1eb9300658
input/LocalOpen: include cleanup
2018-01-20 19:14:42 +01:00
Max Kellermann
27e4656515
input/{file,archive}: remove the dummy InputPlugin instances
...
These have no use, exception for creating an artificial dependency
from input_plugins[] to all archive plugins.
2018-01-20 19:07:34 +01:00
Max Kellermann
e0a09dbd69
input/thread: add "noexcept"
2018-01-20 18:54:29 +01:00
Max Kellermann
30832ab33a
input/InputStream: add "noexcept" to constructor
2018-01-20 18:53:37 +01:00
Max Kellermann
d20b545a94
input/InputStream: remove methods Lock() and Unlock()
...
These methods are not exception-safe; std::lock_guard should better be
used.
2018-01-20 18:51:23 +01:00
Max Kellermann
20d01be1ad
input/mms: use class ScopeUnlock
2018-01-20 18:51:00 +01:00
Max Kellermann
d6b62d7512
input/tidal: delete request objects upon completion
2018-01-20 00:34:44 +01:00
Max Kellermann
ab9d9541a8
input/tidal: pass std::string by value
...
Don't keep any references to the owner, as the handler method may
delete the owner.
2018-01-20 00:33:01 +01:00
Max Kellermann
c3b8568560
lib/curl/Handler: add API documentation
2018-01-20 00:28:54 +01:00
Max Kellermann
8bd95a4eb1
db/update/Container: include cleanup
2018-01-20 00:25:57 +01:00
Max Kellermann
2dac3ef58e
client: eliminate client_printf()
2018-01-20 00:24:18 +01:00
Max Kellermann
86c7ab29f4
client/Idle: pass Response instead of Client to WriteIdleResponse()
2018-01-20 00:22:47 +01:00
Max Kellermann
db89e5ec28
client/Idle: move code to WriteIdleResponse()
2018-01-20 00:22:30 +01:00
Max Kellermann
d096f75fb8
client/Idle: apply idle_subscriptions mask once
2018-01-20 00:22:09 +01:00
Max Kellermann
854424a758
client/Idle: use std::exchange()
2018-01-20 00:21:26 +01:00
Max Kellermann
fe5d0ce827
Merge branch 'v0.20.x'
2018-01-20 00:04:35 +01:00
Max Kellermann
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
6c239f7a00
test/run_input: add option to load a configuration file
2018-01-17 12:09:08 +01:00
Max Kellermann
7d5b859756
test/run_input: add command-line option parser
2018-01-17 12:04:01 +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
326488aeeb
configure.ac: decouple libyajl detection from SoundCloud
...
Allow using libyajl in other parts of MPD.
2018-01-11 19:13:19 +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
34eef0ed84
Merge branch 'v0.20.x'
2018-01-07 17:24:05 +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
4a120f8090
Merge branch 'v0.20.x'
2018-01-05 10:10:17 +01:00
Max Kellermann
79b0f97a3f
output/Interface: clarify Play() API documentation
2018-01-05 08:35:40 +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
192f4240e3
valgrind.suppressions: more library suppressions
2018-01-04 10:20:53 +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
14f669f4fb
Makefile.am: move sources to libfilter_api.a, libfilter_glue.a
2018-01-02 23:11:03 +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
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
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
10537c5095
test/run_filter: use "auto"
2018-01-01 19:06:17 +01:00
Max Kellermann
551ac56a33
Filter/Internal: split header
2018-01-01 18:48:34 +01:00
Max Kellermann
5227582e90
Merge tag 'v0.20.14'
...
release v0.20.14
2018-01-01 18:28:39 +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
6a755b0663
Makefile.am: remove -DCPPUNIT_HAVE_RTTI=0
...
This declaration is obsolete because MPD has switched on RTTI long
ago.
2017-12-29 17:04:12 +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
a2c2288cd6
test/run_filter: throw exception on error
2017-12-27 12:03:13 +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
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
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
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
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
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
d293aaf945
test/test_icy_parser: use AtScopeExit()
2017-12-20 14:54:56 +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
Merge tag 'v0.20.13'
...
release v0.20.13
2017-12-18 23:48:14 +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
Max Kellermann
6246d36fe6
Merge branch 'v0.20.x'
2017-12-16 20:56:06 +01:00
Max Kellermann
fbc4bb29dc
Merge branch 'v0.20.x'
2017-12-03 16:22:08 +01:00
Yue Wang
7ba7ce3af7
Correctly set the mixer plugin for osx output
2017-12-02 23:29:23 -08: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
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
Merge tag 'v0.20.12'
...
release v0.20.12
2017-11-25 19:47:56 +01:00
Max Kellermann
f70b4e02c4
Merge branch 'v0.20.x'
2017-11-14 21:21:14 +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
e4a147218b
Merge branch 'v0.20.x'
2017-11-12 18:55:12 +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
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
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
Merge tag 'v0.20.11'
...
release v0.20.11
2017-10-18 10:21:39 +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
Max Kellermann
af033c0d1d
NEWS: mention the GME decoder change
2017-09-22 20:00:12 +02: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
Max Kellermann
cfc152d979
input/async: remove outdated API documentation
2017-09-19 19:56:37 +02:00
Max Kellermann
513212c5e8
input/async: use std::exchange()
2017-09-19 19:55:16 +02:00
Max Kellermann
99a447dff5
input/async: use C++11 initializers
2017-09-19 19:54:07 +02:00
Max Kellermann
56a9bf459d
util/SliceBuffer: use C++11 initializers
2017-09-19 19:48:04 +02:00
Max Kellermann
11dbba3503
util/HugeAllocator: document std::bad_alloc
2017-09-19 19:45:52 +02:00
Max Kellermann
8662427d48
util/HugeAllocator: use std::exchange()
2017-09-19 19:42:21 +02:00
Max Kellermann
821480d329
util/HugeAllocator: make constructor explicit
2017-09-19 19:42:19 +02:00
Max Kellermann
5ce93d6fa8
output/sndio: refuse to build with libroarsndio
...
RoarAudio's sndio emulation has been a source for annoyances. First,
their headers turned out to be broken with C++, due to their use of
the "new" keyword. Then they used a preprocessor macro to rename
"sio_hdl" to something else, effectively disallowing the use of
forward declarations. Enough is enough, and I'm removing support for
it.
RoarAudio users should better use the RoarAudio output plugin.
2017-09-19 19:38:43 +02:00
Max Kellermann
20a5ef2798
NEWS: mention the sndio mixer plugin
2017-09-19 19:38:43 +02:00
Max Kellermann
735eabb066
output/sndio: move #include below guard
2017-09-19 18:59:04 +02:00
Max Kellermann
412ff762bb
output/sndio: use forward declarations
2017-09-19 18:58:13 +02:00
Max Kellermann
44bbf42a9f
Merge branch 'v0.20.x'
2017-09-19 18:58:02 +02:00
Christopher Zimmermann
030f87c90c
Add sndio mixer plugin
2017-09-16 11:58:33 +02:00
Christopher Zimmermann
ae941a7665
SndioOutput: Move class definition to header
...
no change in behaviour.
2017-09-16 09:14:56 +02:00
Christopher Zimmermann
4d563e08e1
Fix building on BSDs
2017-09-16 09:14:11 +02:00
Max Kellermann
8a81b986c0
net/AllocatedSocketAddress: pass SocketAddress by value to operator!=
2017-09-13 17:51:51 +02:00
Max Kellermann
a6e62479be
system/Error: include cleanup
2017-09-13 17:49:37 +02:00
Max Kellermann
6c825064ea
system/Error: add more "noexcept"
2017-09-13 17:48:13 +02:00
Max Kellermann
13d02968bd
system/FileDescriptor: Close() should not be called on undefined object
...
It does not do much harm - but it causes an unnecessary (failing)
system call.
2017-09-13 17:43:13 +02:00
Max Kellermann
e576556149
system/UniqueFileDescriptor: remove duplicate "using" statements
2017-09-13 17:41:15 +02:00
Max Kellermann
66e74900df
system/UniqueFileDescriptor: expose CheckDuplicate()
2017-09-13 17:40:33 +02:00
Max Kellermann
aadc735d71
system/FileDescriptor: mention class UniqueFileDescriptor in API documentation
2017-09-13 17:39:29 +02:00
Max Kellermann
a13897cf6f
system/FileDescriptor: add CheckDuplicate()
2017-09-13 17:37:28 +02:00
Max Kellermann
b188ae0e5c
system/FileDescriptor: use _WIN32 instead of WIN32
2017-09-13 17:36:48 +02:00
Max Kellermann
c196710fae
util/WStringCompare: relicense to BSD-2
2017-09-13 16:43:41 +02:00
Max Kellermann
e4f62483ff
util/StringView: add default constructors
...
It was implicitly deleted since commit
db23c2f27b
2017-09-13 12:59:31 +02:00
Max Kellermann
8d9347edc5
Util/WStringCompare: use struct WStringView
2017-09-13 11:47:48 +02:00
Max Kellermann
eff821c1ca
Util/StringView: move struct WStringView to separate header
2017-09-13 11:22:59 +02:00
Max Kellermann
3bcd6ecbad
util/Exception: update API documentation
2017-09-13 10:49:34 +02:00
Max Kellermann
e76f4c2ae9
util/DeleteDisposer: convert struct to class
2017-09-13 10:35:51 +02:00
Max Kellermann
f46ac45d69
util/*: update include guards
2017-09-13 10:35:11 +02:00
Max Kellermann
1d1259a86d
util/AllocatedString: add method data()
2017-09-13 10:34:12 +02:00
Max Kellermann
101f08ca75
util/Cast: make the "member" pointer const
2017-09-13 10:32:55 +02:00
Max Kellermann
3b7f9827ab
Util/IterableSplitString: add wchar_t specialization
2017-09-12 19:12:09 +02:00
Max Kellermann
f98bf39005
Util/IterableSplitString: add template class BasicIterableSplitString
2017-09-12 19:12:09 +02:00
Max Kellermann
9e7df54ccd
Util/StringView: add struct TStringView
2017-09-12 19:12:09 +02:00
Max Kellermann
db23c2f27b
util/StringView: allow casting from BasicStringView to StringView
2017-09-12 19:08:47 +02:00
Max Kellermann
9744f437d8
Util/CharUtil: add wchar_t overloads
...
Needed for WStringView.
2017-09-12 18:22:02 +02:00
Max Kellermann
01f84b0e53
util/StringView: add struct WStringView
2017-09-12 17:17:13 +02:00
Max Kellermann
5dbdd36263
util/StringView: add struct BasicStringView
2017-09-12 17:17:13 +02:00
Max Kellermann
96b557c1f0
util/StringView: remove methods SetEmpty(), Empty()
2017-09-12 17:17:13 +02:00
Max Kellermann
ebdb7c8de2
util/WStringAPI: add StringIsEqualIgnoreCase() overload
2017-09-12 17:17:13 +02:00
Max Kellermann
1fda842ee6
util/StringView: use StringAPI.hxx
2017-09-12 17:00:42 +02:00
Max Kellermann
f71e20d0ce
util/StringView: use value_type
2017-09-12 17:00:38 +02:00
Max Kellermann
988680de33
util/StringView: remove unnecessary operator= overloads
...
These will be generated by the compiler automatically.
2017-09-12 17:00:02 +02:00
Max Kellermann
cdf92c6300
util/StringView: remove redundant template parameters
2017-09-12 16:57:19 +02:00
Max Kellermann
be5b726c0a
util/StringView: remove Literal()
...
This is not necessary, because a strlen() on a literal gets optimized
away by the compiler.
2017-09-12 16:55:10 +02:00
Max Kellermann
3491218915
db/update/Service: use C++11 initializers
2017-09-09 07:59:51 +02:00
Max Kellermann
d0f6131ba4
output/Interface: allow Pause() to throw exception
...
Coverity discovered that the Pulse plugin could throw exceptions from
Pause(), but that method was marked "noexcept" because its caller was
not designed to catch exceptions. So instead of avoiding exceptions
(by catching and logging them in each and every implementation), let's
allow them, and do the catch/log game in the MPD core.
2017-09-08 14:45:53 +02:00
Max Kellermann
9cc37bdea2
command/PlayerCommands: emit "volume" only if it is known
...
The "-1" magic value is deprecated now.
2017-09-04 08:37:37 +02:00
Max Kellermann
3f754fd350
Merge branch 'v0.20.x'
2017-09-04 08:27:08 +02:00
Max Kellermann
91438b6540
output/Interface: the default Pause() implementation fails
...
Fixes regression from commit 31bad5f7af :
if Pause() returns true, the output thread is running a busy loop,
causing 100% CPU usage, instead of just closing the output.
Closes #105
2017-08-31 15:02:15 +02:00
Max Kellermann
987c505906
event/TimeoutMonitor: remove obsolete class
2017-08-29 16:53:15 +02:00
Max Kellermann
598bb93cc2
StateFile: migrate from TimeoutMonitor to TimerEvent
2017-08-29 16:52:02 +02:00
Max Kellermann
dc531b64ae
db/update/InotifyQueue: migrate from TimeoutMonitor to TimerEvent
2017-08-29 16:38:50 +02:00
Max Kellermann
91d4b5cfed
lib/nfs/Connection: migrate from TimeoutMonitor to TimerEvent
2017-08-29 16:36:16 +02:00
Max Kellermann
c24b8460e0
lib/curl/Global: migrate from TimeoutMonitor to TimerEvent
2017-08-29 16:33:20 +02:00
Max Kellermann
2e471daef1
storage/nfs: migrate from TimeoutMonitor to TimerEvent
2017-08-29 16:30:50 +02:00
Max Kellermann
7ae57a3531
event/MultiSocketMonitor: migrate from TimeoutMonitor to TimerEvent
2017-08-29 16:28:27 +02:00
Max Kellermann
11f36c0bd6
zeroconf/AvahiPoll: migrate from TimeoutMonitor to TimerEvent
2017-08-29 16:28:27 +02:00
Max Kellermann
fd520eeed2
Client: migrate from TimeoutMonitor to TimerEvent
2017-08-29 16:28:27 +02:00
Max Kellermann
30a5dd267b
event/TimeoutMonitor: move code to new class TimerEvent
2017-08-29 16:28:27 +02:00
Max Kellermann
2f0d683378
event/Loop: fix inverted checkin RemoveDeferred()
2017-08-29 16:28:24 +02:00
Max Kellermann
a1309a90ac
event/Loop: use boost::intrusive::list to store IdleMonitors and DeferredMonitors
...
The intrusive contains can easily erase items without searching
through the whole list. This removes a good amount of runtime
overhead.
2017-08-29 15:43:16 +02:00
Max Kellermann
010855a294
event/Loop: use boost::intrusive::multiset to store TimeoutMonitors
...
By using an "intrusive" data structure, we can easily eliminate
struct TimerRecord.
2017-08-29 14:42:59 +02:00
Max Kellermann
71ed3ff992
event/Loop: move TimerRecord::due to class TimeoutMonitor
...
Prepare to eliminate the TimerRecord struct.
2017-08-29 14:13:09 +02:00
Max Kellermann
d4266d0063
event/Loop: remove unused method TimerRecord::IsDue()
2017-08-29 13:41:11 +02:00
Max Kellermann
8225064aab
lib/upnp/Discovery: add missing include
...
Got lost in commit e5ee357903
2017-08-29 13:41:03 +02:00
Max Kellermann
e5ee357903
lib/upnp/Discovery: use DeferredMonitor instead of BlockingCall()
2017-08-25 11:01:30 +02:00
Max Kellermann
8aef518c05
lib/upnp/Discovery: add method GetEventLoop()
2017-08-25 10:59:49 +02:00
Max Kellermann
309ed77ef4
lib/upnp/Device: use std::string::find() instead of ...find_first_of()
2017-08-25 10:57:40 +02:00
Max Kellermann
9a6d2b791f
lib/upnp/Discovery: avoid a std::string copy
2017-08-25 10:55:30 +02:00
Max Kellermann
2a5010a426
lib/upnp/Discovery: remove obsolete comment
2017-08-25 10:16:19 +02:00
Max Kellermann
be29da46f8
lib/upnp/Discovery: use std::list::remove_if()
2017-08-25 10:14:18 +02:00
Max Kellermann
d0734e27ba
lib/upnp/Discovery: use range-based "for"
2017-08-25 10:11:35 +02:00
Max Kellermann
732f6aaa30
neighbor/Explorer: add "noexcept"
2017-08-25 10:09:34 +02:00
Max Kellermann
dd422c7b8b
neighbor/plugins/*: remove redundant "virtual"
2017-08-25 10:07:32 +02:00
Max Kellermann
c8f7a859ea
lib/upnp/Discovery: use CURL instead of UpnpDownloadUrlItem()
...
We can do CURL requests asynchronously, and we don't need a
synchronous WorkQueue thread for that.
This allows parallelizing lookups and allows immediate cancellation.
2017-08-25 09:52:44 +02:00
Max Kellermann
28a2d41b85
db/DatabasePlugin: pass EventThread's EventLoop to create()
...
Allows database plugins to use the EventThread, e.g. for CURL
integration.
2017-08-24 19:53:52 +02:00
Max Kellermann
7e76656a18
db/DatabasePlugin: add #EventLoop parameter documentation
2017-08-24 19:45:23 +02:00
Max Kellermann
0b93f52ba4
Merge tag 'v0.20.10'
...
release v0.20.10
2017-08-24 09:35:34 +02:00
Matthew Leon
aa9c6062b0
Merge branch 'v0.20.x' into master
...
contains OSX mixer
2017-08-22 10:36:37 +01:00
Max Kellermann
95637fd153
lib/upnp/Discovery: use strncmp() instead of memcmp()
...
memcmp() can overflow the buffer.
2017-08-18 18:48:22 +02:00
Max Kellermann
5ac72211cd
event/Loop: set thread to current thread by default
...
Allows eliminating lots of complexity and workarounds for bogus
assertion failures.
2017-08-18 18:18:55 +02:00
Max Kellermann
94525d3952
IOThread: remove obsolete library
...
We now pass the EventThread's EventLoop reference around.
2017-08-18 18:15:19 +02:00
Max Kellermann
7f9a2f8adb
event/Loop: schedule and cancel the WakeFD in Run()
...
This is only needed while Run() is alive, and moving it there avoids
problems with thread-checking assertions.
2017-08-18 18:08:06 +02:00
Max Kellermann
cd0e92878f
test/DumpDatabase: start an EventThread
...
Our local EventLoop instance was never run; it was not usable.
2017-08-18 17:16:23 +02:00
Max Kellermann
9033f07724
test/{DumpDatabase,run_neighbor_explorer}: add class GlobalInit
2017-08-18 14:21:54 +02:00
Max Kellermann
b7d0890bc0
lib/curl/Init: share a CurlGlobal instance between input and storage
2017-08-18 13:34:55 +02:00
Max Kellermann
b2b079a26b
SongFilter: use std::chrono::system_clock::time_point instead of time_t
2017-08-18 12:30:50 +02:00
Max Kellermann
b886dfae4d
DetachedSong, db/LightSong, db/simple/Song: use std::chrono::system_clock::time_point
2017-08-18 12:22:47 +02:00
Max Kellermann
902fbb3347
db/LightDirectory: use std::chrono::system_clock::time_point
2017-08-18 12:16:43 +02:00
Ryan Walklin
9f16c798d0
Fix std::string read after free in read_stream_art
2017-08-17 21:25:03 +10:00
Ryan Walklin
318f80d113
Fix EventPipe file descriptors
2017-08-17 12:21:01 +10:00
Ryan Walklin
9df8b32f10
Add albumart command
...
Add API documentation
Support 64 bit offsets
Use InputStream for all reads
2017-08-15 20:38:33 +10:00
Max Kellermann
6f37f5752b
db/PlaylistInfo: use std::chrono::system_clock::time_point
2017-08-11 12:50:33 +02:00
Max Kellermann
9d0a71f245
output/Jack: add "noexcept"
2017-08-11 12:41:11 +02:00
Max Kellermann
ff1b435232
output/Jack: reorder methods
2017-08-11 12:39:42 +02:00
Max Kellermann
b57a272f67
system/EPollFD: throw exception instead of raising fatal error
2017-08-11 09:39:47 +02:00
Max Kellermann
ef79647e85
zeroconf/Avahi: throw exception instead of raising fatal error
2017-08-11 09:38:08 +02:00
Max Kellermann
d3fd89552f
unix/Signalhandlers: throw exception instead of raising fatal error
2017-08-11 09:37:30 +02:00
Max Kellermann
6d43e70a93
event/SignalMonitor: throw exception instead of raising fatal error
2017-08-11 09:36:22 +02:00
Max Kellermann
e8333316ee
Permission: throw exception instead of raising fatal error
2017-08-11 09:33:59 +02:00
Max Kellermann
85edcb858d
tag/Config: throw exception instead of raising fatal error
2017-08-11 09:33:07 +02:00
Max Kellermann
bab5f1a93f
client: make GREETING constexpr
2017-08-11 09:22:26 +02:00
Max Kellermann
6de8303df8
client: use C++11 initializers
2017-08-11 09:21:29 +02:00
Max Kellermann
33b4114534
system/fd_util: remove unused library
2017-08-11 09:20:15 +02:00
Max Kellermann
7a4457402f
system/EventPipe: use FileDescriptor::CreatePipeNonBlock()
2017-08-11 09:19:00 +02:00
Max Kellermann
9056dcaf7d
system/FileDescriptor: add method CreatePipeNonBlock()
2017-08-11 09:15:22 +02:00
Max Kellermann
2119e4fd3e
system/EventPipe: use class UniqueSocketDescriptor in PoorSocketPair()
2017-08-11 09:09:04 +02:00
Max Kellermann
bcd5190f1d
system/EventPipe: throw exception instead of raising fatal error
2017-08-11 09:09:04 +02:00
Max Kellermann
d705a92e43
net/IPv4Address: new class
2017-08-11 09:09:04 +02:00
Max Kellermann
614b3634d4
net/SocketDescriptor: add AcceptNonBlock() overload without address
2017-08-11 09:07:35 +02:00
Max Kellermann
b234f4307f
net/SocketDescriptor: AcceptNonBlock() enables non-blocking even if SOCK_NONBLOCK is unavailable
2017-08-11 09:04:38 +02:00
Max Kellermann
e38c213ee0
net/SocketDescriptor: check HAVE_ACCEPT4
2017-08-11 09:04:10 +02:00
Max Kellermann
699f41e114
system/EventPipe: use AtScopeExit() in PoorSocketPair()
2017-08-11 08:30:37 +02:00
Max Kellermann
424e1363ed
zeroconf/Bonjour: pass SocketDescriptor to constructor
...
Fixes Mac build failure.
2017-08-11 08:25:26 +02:00
Max Kellermann
7484bc31b4
system/FileDescriptor: implement CreatePipe() on Windows
2017-08-11 08:15:47 +02:00
Max Kellermann
5a495cc165
system/fd_util: remove unused function close_socket()
2017-08-10 19:47:57 +02:00
Max Kellermann
9ff4717738
system/fd_util: remove unused function accept_cloexec_nonblock()
2017-08-10 19:47:40 +02:00
Max Kellermann
0c1740982d
system/fd_util: remove unused function open_cloexec()
2017-08-10 19:46:23 +02:00
Max Kellermann
3c7c0515d8
output/oss: use class FileDescriptor
2017-08-10 19:42:23 +02:00
Max Kellermann
56cb92fdaf
mixer/oss: use class FileDescriptor
2017-08-10 19:41:22 +02:00
Max Kellermann
c00b6ff999
fs/FileSystem: use UniqueFileDescriptor in TruncateFile()
2017-08-10 19:40:47 +02:00
Max Kellermann
df5cc3f0f6
fs/FileSystem: OpenFile() returns UniqueFileDescriptor
2017-08-10 19:34:52 +02:00
Max Kellermann
eb0ff32efb
system/FileDescriptor: add Open() overload with wchar_t path
2017-08-10 19:34:52 +02:00
Max Kellermann
cf0120e8e0
net/SocketUtil: use SocketDescriptor::SetBoolOption()
2017-08-10 19:30:46 +02:00
Max Kellermann
1f47dc990d
net/SocketDescriptor: add method SetKeepAlive()
2017-08-10 19:25:02 +02:00
Max Kellermann
9a5bcc6db0
net/ServerSocket: pass UniqueSocketDescriptor&& to OnAccept()
2017-08-10 19:20:14 +02:00
Max Kellermann
492b20a89d
event/SocketMonitor: use class SocketDescriptor
2017-08-10 19:19:58 +02:00
Max Kellermann
fcfc8bacc0
output/httpd: remove obsolete accept() error check
2017-08-10 19:19:53 +02:00
Max Kellermann
0800d9427c
system/fd_util: remove unused function socket_cloexec_nonblock()
2017-08-10 17:40:14 +02:00
Max Kellermann
4e113a7086
lib/nfs/Connection: use class SocketDescriptor
2017-08-10 17:37:19 +02:00
Max Kellermann
39f422ded8
net/SocketDescriptor: allow constructing with "int"
2017-08-10 17:37:08 +02:00
Max Kellermann
d2cdaa041c
net/SocketDescriptor: SO_REUSEADDR is portable
2017-08-10 13:23:14 +02:00
Max Kellermann
d84dae488e
net/SocketUtil: fix -Wunused
2017-08-10 13:22:00 +02:00
Max Kellermann
79e75bfbb9
net/SocketDescriptor: cast setsockopt() value to "const char *" for Windows
2017-08-10 13:21:24 +02:00
Max Kellermann
73b15c1bee
net/SocketDescriptor: socketpair() is unavailable on Windows
2017-08-10 13:19:47 +02:00
Max Kellermann
b180604422
net/SocketDescriptor: implement SetNonBlocking() on Windows
2017-08-10 13:18:23 +02:00
Max Kellermann
fab12ef241
net/SocketDescriptor: call SetNonBlocking() on Linux if SOCK_NONBLOCK unavailable
2017-08-10 13:16:25 +02:00
Max Kellermann
917881aa48
net/SocketDescriptors: IsValid() is not available on Windows
2017-08-10 13:15:57 +02:00
Max Kellermann
9259e989a4
net/SocketDescriptors: fix includes for Windows
2017-08-10 13:13:19 +02:00
Max Kellermann
da90f484aa
net/SocketUtil: socket_bind_listen() returns UniqueSocketDescriptor
2017-08-10 13:12:13 +02:00
Max Kellermann
817e912025
net/SocketDescriptor: specialization of FileDescriptor for network sockets
2017-08-10 13:12:13 +02:00
Max Kellermann
7f83d38bca
net/StaticSocketAddress: add struct sockaddr cast operators
2017-08-10 13:12:13 +02:00
Max Kellermann
54de8b8e77
net/*, ...: use AF_LOCAL instead of AF_UNIX
2017-08-10 13:12:13 +02:00
Max Kellermann
796956970e
net/StaticSocketAddress: pass SocketAddress by value to operator!=
2017-08-10 13:12:13 +02:00
Max Kellermann
c0020142da
net/StaticSocketAddress: add method SetMaxSize()
2017-08-10 13:12:13 +02:00
Max Kellermann
ee6eea95af
net/StaticSocketAddress: set a valid size in Clear()
2017-08-10 13:12:13 +02:00
Max Kellermann
a257504ba4
mixer/Plugin: pass AudioOutput to init()
...
Fix breakage from commit bea5681fd8
2017-08-10 13:07:36 +02:00
Max Kellermann
fb0dbce15b
system/EventFD: use class UniqueFileDescriptor
2017-08-10 12:14:56 +02:00
Max Kellermann
8333551331
system/SignalFD: use class UniqueFileDescriptor
2017-08-10 12:13:41 +02:00
Max Kellermann
292d794806
system/UniqueFileDescriptor: new auto-closing FileDescriptor wrapper
2017-08-10 12:01:17 +02:00
Max Kellermann
91ce76af9d
system/FileDescriptor: add methods EnableCloseOnExec(), DisableCloseOnExec()
2017-08-10 11:54:26 +02:00
Max Kellermann
33bd9e80bb
system/FileDescriptor: add method IsReadyForWriting()
2017-08-10 11:53:43 +02:00
Max Kellermann
d310f3e9b7
system/FileDescriptor: add method IsValid()
2017-08-10 11:52:22 +02:00
Max Kellermann
8c832f4c50
system/FileDescriptor: use std::exchange()
2017-08-10 09:55:11 +02:00
Max Kellermann
31bad5f7af
output/Interface: convert to abstract class
...
Yet another C-style vtable replaced with C++.
2017-08-10 09:01:41 +02:00
Max Kellermann
1cf7f3d87c
output/Solaris: use class FileDescriptor
2017-08-10 08:56:56 +02:00
Max Kellermann
9c9a9ccd5c
output/Interface: convert to class, make attributes private
2017-08-09 17:03:07 +02:00
Max Kellermann
7381236de6
output/Interface: remove unused attribute "parent"
2017-08-09 17:03:00 +02:00
Max Kellermann
fe9ffcb9d2
Merge branch 'v0.20.x'
2017-08-08 19:30:30 +02:00
Max Kellermann
bea5681fd8
output/Interface: define a new struct AudioOutput
...
Hide struct FilteredAudioOutput from the plugins, preparing for hiding
MPD's core internals.
2017-08-08 18:58:40 +02:00
Max Kellermann
e11229494e
output/Filtered: add method NeedFullyDefinedAudioFormat()
...
Avoid accessing FilteredAudioFormat attributes directly.
2017-08-08 18:57:59 +02:00
Max Kellermann
ccc0fcb5b7
output/Shout: move ConfigureShoutAudioInfo() call to Open()
...
Configure the AudioFormat after opening the encoder, because only now
we know the final format.
2017-08-08 18:56:14 +02:00
Max Kellermann
6e24381962
output/Shout: move code to ShoutSetAudioInfo()
2017-08-08 18:56:12 +02:00
Max Kellermann
3ab905644d
output/Shout: open the encoder first, then open connection
...
This order will be necessary for proper AudioFormat initialization,
because the encoder may change the format.
2017-08-08 18:53:04 +02:00
Max Kellermann
f46d545307
output/Shout: pass shout_t* to shout_connect()
2017-08-08 18:52:03 +02:00
Max Kellermann
8134b0073b
output/Shout: move write_page() into the struct
2017-08-08 18:47:37 +02:00
Max Kellermann
6ab19c7ef2
output/Shout: pass shout_t* to handle_shout_error()
2017-08-08 18:47:30 +02:00
Max Kellermann
d22361f7c7
output/Shout: remove unnecessary nullptr check
2017-08-08 18:47:02 +02:00
Max Kellermann
06c7e55188
output/Filtered: add methods SupportsEnableDisable(), SupportsPause()
2017-08-08 15:54:49 +02:00
Max Kellermann
b3eb8489f3
output/Filtered: add a few OutputPlugin method wrappers
2017-08-08 14:27:19 +02:00
Max Kellermann
5431fca99b
output/Filtered: add attribute "log_name"
2017-08-08 14:02:58 +02:00
Max Kellermann
47c9d6ac64
output/Internal: rename source to Filtered.cxx
2017-08-07 21:50:13 +02:00
Max Kellermann
d0157af13e
filter/Internal: rename struct AudioOutput to FilteredAudioOutput
...
Prepare to add an abstract class AudioOutput, to be implemented by
plugins, to get rid of the C-style vtable.
2017-08-07 18:47:39 +02:00
Max Kellermann
fc04620519
output/Internal: move code to ConfigureConvertFilter()
2017-08-07 18:42:10 +02:00
Max Kellermann
d4ee165253
output/Thread: move OpenSoftwareMixer() to the end
...
This call cannot fail, but needs cleanup if others fail. By moving it
to the end, we eliminate some cleanup.
2017-08-07 18:42:09 +02:00
Max Kellermann
4f7f577a57
output/Internal: add OpenSoftwareMixer()
...
Moved code from AudioOutputControl::InternalOpen2().
2017-08-07 18:33:07 +02:00
Max Kellermann
612def5c11
output/Internal: rename CloseFilter() to CloseSoftwareMixer()
2017-08-07 18:32:43 +02:00
Max Kellermann
704825be96
mixer/Software: include cleanup
2017-08-07 18:31:11 +02:00
Max Kellermann
b8be7ec90e
filter/Normalize: add normalize_filter_prepare()
2017-08-07 18:28:52 +02:00
Max Kellermann
a3d71f4b91
filter/Convert: add convert_filter_prepare()
2017-08-07 18:27:00 +02:00
Max Kellermann
9250819b75
filter/Volume: add volume_filter_prepare()
...
Circumvent filter_new() with a fake ConfigBlock.
2017-08-07 18:23:13 +02:00
Max Kellermann
04738636ca
output/Finish: fold internal function into FinishDestroy()
2017-08-07 18:15:15 +02:00
Max Kellermann
33f67d418f
test/run_output: use AudioOutput::{Begin,Finish}Destroy()
2017-08-07 18:14:54 +02:00
Max Kellermann
07d1b3780d
output/Control: move two AudioOutput methods to Finish.cxx
2017-08-07 18:13:57 +02:00
Max Kellermann
27d68d8fdd
output/Internal: move the Mutex to struct AudioOutputControl
...
struct AudioOutput should not know or care about multi-threading.
2017-08-07 17:44:46 +02:00
Max Kellermann
546b773b21
output/Internal: remove mutex code from Close()
2017-08-07 17:43:58 +02:00
Max Kellermann
15dcaeda0f
output/Internal: remove mutex code from BeginPause(), IteratePause()
2017-08-07 17:40:40 +02:00
Max Kellermann
8f42ba13ef
output/Internal: simplify "return" statements in IteratePause()
2017-08-07 17:40:13 +02:00
Max Kellermann
5990017d51
output/Internal: remove mutex code from Enable() and Disable()
2017-08-07 17:39:20 +02:00
Max Kellermann
3197c0fd7d
output/Thread: move code to InternalCloseOutput()
2017-08-07 17:35:43 +02:00
Max Kellermann
4580c685f1
output/Thread: unlock the mutex for several AudioOutput calls
2017-08-07 17:08:49 +02:00
Max Kellermann
67232453d4
output/Control: more locking information in API docs
2017-08-07 16:56:41 +02:00
Max Kellermann
b4cce80727
output/Thread: move code to InternalClose()
2017-08-07 16:34:29 +02:00
Max Kellermann
89a2e5ded3
output/Thread: rename InternalClose() to InternalCheckClose()
2017-08-07 16:33:20 +02:00
Max Kellermann
9d6b4f46d4
output/Thread: move AudioOutput methods to Internal.cxx
2017-08-07 16:26:50 +02:00
Max Kellermann
a4019cb6aa
util/StringBuffer: use std::array::const_iterator
2017-08-07 16:18:43 +02:00
Max Kellermann
d29bdf3e81
Merge branch 'v0.20.x'
2017-07-31 13:50:14 +02:00
Max Kellermann
501a4af914
util/StringUtil: move strip functions to StringStrip.cxx
2017-07-05 17:20:02 +02:00
Max Kellermann
dad7d7e798
util/TruncateString: rename CopyString() to CopyTruncateString()
2017-07-05 17:15:58 +02:00
Max Kellermann
4b94ae8040
util/StringUtil: move CopyString() to TruncateString.cxx
2017-07-05 17:11:34 +02:00
Max Kellermann
b04679b429
util/WritableBuffer: add method MoveFront()
2017-07-05 17:10:59 +02:00
Max Kellermann
19358d1c42
util/Exception: add more utility functions
2017-07-05 17:08:26 +02:00
Max Kellermann
8679074be7
util/Exception: move code to AppendNestedMessage()
2017-07-05 17:07:43 +02:00
Max Kellermann
ba09e22c30
util/Exception: add GetFullMessage(std::exception)
2017-07-05 17:07:41 +02:00
Max Kellermann
6515b9727d
util/Exception: catch std::nested_exception
2017-07-05 17:07:40 +02:00
Max Kellermann
4af8e5bdb5
util/Exception: include cleanup
2017-07-05 17:07:39 +02:00
Max Kellermann
2db8cf477b
util/Exception: add "fallback" and "separator" parameters
2017-07-05 16:59:40 +02:00
Max Kellermann
3cfefa53f7
util/Exception: rename FullMessage() to GetFullMessage()
2017-07-05 12:25:55 +02:00
Max Kellermann
bce89feb13
util/Manual: drop prefix from include guard
2017-07-05 12:25:32 +02:00
Max Kellermann
88f5220acf
util/Manual: drop support for gcc 4.6
2017-07-05 12:25:20 +02:00
Max Kellermann
3e87ac75a1
util/Manual: use C++11 initializer
2017-07-05 12:12:41 +02:00
Max Kellermann
9237f2a80c
util/{Const,Writable}Buffer: add array constructor
2017-07-05 12:09:27 +02:00
Max Kellermann
61aca389c4
util/{Const,Writable}Buffer: add typedef value_type
2017-07-05 12:08:34 +02:00
Max Kellermann
80438c4876
util/BindMethod: add BIND_FUNCTION()
2017-07-05 12:04:29 +02:00
Max Kellermann
70ac4fa96b
util/AllocatedString: implement AllocatedString<wchar_t>::Duplicate()
2017-07-05 10:26:39 +02:00
Max Kellermann
6e2b348758
output/Internal: move the "open" flag to struct AudioOutputControl
2017-06-15 22:52:46 +02:00
Max Kellermann
5ed5d7fe60
Merge branch 'v0.20.x'
2017-06-15 22:51:07 +02:00
Max Kellermann
613dd67784
output/Internal: move the AudioOutputSource to struct AudioOutputControl
2017-06-08 22:13:47 +02:00
Max Kellermann
58683f02ec
output/Thread: move the AudioOutputSource::Open() call to InternalOpen()
...
Prepare for moving the AudioOutputSource to class AudioOutputControl.
2017-06-08 22:08:01 +02:00
Max Kellermann
7cb82fe8f3
output/Thread: move code to InternalClose()
2017-06-08 21:59:48 +02:00
Max Kellermann
0494779ecb
output/Thread: move software_mixer_set_filter() out of the "try" block
...
That function is "noexcept".
2017-06-08 21:49:41 +02:00
Max Kellermann
0500990d23
filter/volume: remove unused PcmVolume instance
2017-06-08 21:48:22 +02:00
Max Kellermann
22a82f1eaa
mixer/software, filter/volume: add "noexcept"
2017-06-08 21:45:23 +02:00
Max Kellermann
13b04dc908
mixer/Internal: add "noexcept"
2017-06-08 21:42:57 +02:00
Max Kellermann
011106b517
mixer/Internal: use C++11 initializers
2017-06-08 21:42:39 +02:00
Max Kellermann
7467b85019
output/Thread: rename audio_format to in_audio_format
2017-06-08 13:20:55 +02:00
Max Kellermann
7dea615f74
output/{Source,Thread}: make the AudioFormat parameter const
2017-06-08 13:19:34 +02:00
Max Kellermann
3010d182fc
output/Internal: move "really_enabled" flag to class AudioOutputControl
2017-06-08 09:55:49 +02:00
Max Kellermann
a72a02f0f2
output/Thread: move Enable() call to InternalEnable()
2017-06-08 09:51:13 +02:00
Max Kellermann
614df96382
output/Thread: move Enable() call out of Open()
2017-06-08 09:50:34 +02:00
Max Kellermann
669d7a6feb
output/Thread: move Close() call out of Disable()
2017-06-08 09:34:24 +02:00
Max Kellermann
d600b937f1
output/Thread: move code to InternalDisable()
2017-06-08 09:32:07 +02:00
Max Kellermann
ae713cb099
*: add lots of "noexcept" specifications
2017-06-04 13:09:11 +02:00
Max Kellermann
979f1b6c39
Merge tag 'v0.20.9'
...
release v0.20.9
2017-06-04 12:57:05 +02:00
Max Kellermann
1fa1790da5
output/Internal: move the "pause" flag to struct AudioOutputControl
2017-05-23 11:23:10 +02:00
Max Kellermann
dd29e6e475
output/pulse: add "pause" flag
...
Don't access AudioOutput::pause.
2017-05-23 11:17:04 +02:00
Max Kellermann
ae4b30a697
output/httpd: add "pause" flag
...
Don't access AudioOutput::pause.
2017-05-23 11:13:41 +02:00
Max Kellermann
353299168a
output/Thread: skip WaitForDelay() after resuming playback
...
This allows removing the "base.pause" check from the JACK output
plugin, and will allow removing similar accesses from other plugins.
2017-05-23 11:00:28 +02:00
Max Kellermann
a50b2c3b85
output/Thread: rename {Play,Pause}() to Internal{Play,Pause}()
2017-05-23 10:59:17 +02:00
Max Kellermann
ebecee3d85
output/Internal: move "client" to struct AudioOutputControl
2017-05-23 00:32:03 +02:00
Max Kellermann
194f733ca7
output/MultipleOutputs: use LoadOutputControl() in AddNullOutput()
2017-05-23 00:31:31 +02:00
Max Kellermann
3907ddbcc4
output/{Internal,Control}: add "noexcept"
2017-05-23 00:17:23 +02:00
Max Kellermann
e616be0a42
output/Thread: move code to InternalOpen()
2017-05-23 00:08:36 +02:00
Max Kellermann
5eef146871
output/Internal: move several flags to struct AudioOutputControl
2017-05-22 23:40:20 +02:00
Max Kellermann
2e65686fc0
output/Control: add method Configure()
...
Prepare to move some configuration settings from AudioOutput to
AudioOutputControl.
2017-05-22 23:36:45 +02:00
Max Kellermann
e5847f1ddf
output/MultipleOutputs: move code to LoadOutputControl()
2017-05-22 23:35:32 +02:00
Max Kellermann
86d05e98e5
Merge tag 'v0.20.8'
...
release v0.20.8
2017-05-19 20:13:01 +02:00
Max Kellermann
cdd2d4cc1d
util/StringView: add method EndsWith()
2017-05-17 12:39:01 +02:00
Max Kellermann
3bcabad28c
net/SocketAddress: add method IsV6Any()
2017-05-17 12:22:59 +02:00
Max Kellermann
c629ac7168
net/SocketAddress: add more "noexcept"
2017-05-17 12:21:36 +02:00
Max Kellermann
0195d5590f
net/AllocatedSocketAddress: allow copying
2017-05-17 12:19:24 +02:00
Max Kellermann
e7bebb0089
net/AllocatedSocketAddress: add more "noexcept"
2017-05-17 12:07:20 +02:00
Max Kellermann
7b05df8d33
net/AllocatedSocketAddress: use C++11 initializers
2017-05-17 12:06:45 +02:00
Max Kellermann
a8db9ae304
net/StaticSocketAddress: add method SetPort()
2017-05-17 12:03:45 +02:00
Max Kellermann
e6e9b2041e
net/AllocatedSocketAddress: add method SetPort()
2017-05-17 09:36:01 +02:00
Max Kellermann
77c747a8fd
net/SocketAddress: add method GetPort()
2017-05-17 09:28:12 +02:00
Max Kellermann
907fb257cd
util/StringAPI: add StringToken(), StringIsEqualIgnoreCase(), StringCollate()
2017-05-16 23:04:27 +02:00
Max Kellermann
60bd60db03
util/String{Compare,API}: add more "noexcept"
2017-05-16 23:02:36 +02:00
Max Kellermann
0fcc28a108
util/String{Compare,API}: indent with tabs
2017-05-16 23:01:43 +02:00
Max Kellermann
ab8005f03e
util/ScopeExit: include cleanup
2017-05-16 22:56:30 +02:00
Max Kellermann
5e8f578e78
util/ConcatString: return the end pointer
2017-05-16 11:56:56 +02:00
Max Kellermann
a4b1633e11
util/ConcatString: use std::copy_n() instead of memcpy()
2017-05-16 11:56:19 +02:00
Max Kellermann
fea211a109
util/Alloc: move template functions to ConcatString.hxx
2017-05-16 11:32:55 +02:00
Max Kellermann
59e4f1ee0f
*: remove lots of GCC 4.8 fallback code
...
We can remove those C++11 and C++14 kludges because we require GCC 4.9
now.
2017-05-16 11:29:15 +02:00
Max Kellermann
86a0a42a8d
util/StringView: add "noexcept"
2017-05-16 10:27:14 +02:00
Max Kellermann
662842126d
util/SplitString: add "noexcept"
2017-05-16 10:23:50 +02:00
Max Kellermann
66e3801b1e
util/MimeType: add "noexcept"
2017-05-16 10:23:38 +02:00
Max Kellermann
a30cf60422
util/FormatString: add "noexcept"
2017-05-16 10:22:52 +02:00
Max Kellermann
c2b8b818c7
util/DivideString: add "noexcept"
2017-05-16 10:22:36 +02:00
Max Kellermann
4284b0e2b8
util/ByteReverse: add "noexcept"
2017-05-16 10:21:59 +02:00
Max Kellermann
9def9b35b9
util/Exception: add "noexcept"
2017-05-16 10:20:17 +02:00
Max Kellermann
377a2860cc
Log: add "noexcept"
2017-05-16 10:15:43 +02:00
Max Kellermann
0a3a5a7c65
Merge branch 'v0.20.x'
2017-05-16 10:09:20 +02:00
Max Kellermann
c5996c0593
*: add "noexcept" to many, many function prototypes
...
See commit 71f0ed8b74
2017-05-15 23:05:45 +02:00
Max Kellermann
cde5a07981
*: remove "pure" and "const" attributes from throwing functions
...
See commit 788e3b31e1 for an explanation.
2017-05-15 23:02:10 +02:00
Max Kellermann
4faef28cc5
Merge tag 'v0.20.7'
...
release v0.20.7
2017-05-15 23:01:49 +02:00
Max Kellermann
89b900432e
output/Internal: move thread-specific stuff to AudioOutputControl
...
The AudioOutput struct (which is exposed to all plugins) should not be
aware that it's being controlled by another thread.
2017-04-28 22:04:30 +02:00
Max Kellermann
8bb9d0960b
output/Control: add struct AudioOutputControl
...
Will move attributes from struct AudioOutput that are specific to the
OutputThread. The new struct AudioOutputControl is a holder for the
AudioOutput pointer.
This prepares for making the output list more dynamic, to allow moving
outputs to between partitions.
2017-04-28 22:04:24 +02:00
Max Kellermann
59181ac5fb
output/Thread: move code to BeginPause(), IteratePause()
2017-04-28 22:01:20 +02:00
Max Kellermann
2a831fa547
output/Output*: drop "Output" prefix from source file name
2017-04-28 21:42:24 +02:00
André Klitzing
4abadc890e
Add initial travis configuration
2017-04-27 20:12:55 +02:00
Max Kellermann
b0ce551523
decoder/pcm: support audio/L24
...
Closes #31
2017-04-24 20:54:13 +02:00
Max Kellermann
8b0269c264
Merge branch 'v0.20.x'
2017-04-24 20:54:04 +02:00
Max Kellermann
d68772d45a
util/{Foreign,Static}FifoBuffer: update API documentation
2017-04-24 20:19:14 +02:00
Max Kellermann
52cb425e33
util/StaticFifoBuffer: add method GetCapacity()
2017-04-24 20:18:44 +02:00
Max Kellermann
ed3220f37f
util/{Foreign,Static}FifoBuffer: use C++11 initializers
2017-04-24 20:16:18 +02:00
Max Kellermann
043cbec68f
INSTALL: merge into doc/user.xml
2017-04-24 20:07:52 +02:00
Max Kellermann
7d7217ef89
doc/user.xml: add sticker documentation
2017-04-24 20:07:38 +02:00
Max Kellermann
67c709170d
doc/user.xml: add Zeroconf documentation
2017-04-24 19:54:25 +02:00
Max Kellermann
f6e428ac22
Merge branch 'v0.20.x'
2017-04-24 11:44:27 +02:00
Max Kellermann
45fbafae94
decoder/pcm: split variable "frame_size" in "in_*" and "out_*"
2017-04-24 11:32:52 +02:00
Max Kellermann
803b73a34b
pcm/PcmPack: add pcm_unpack_24be()
2017-04-24 11:32:52 +02:00
Max Kellermann
b1512201ab
pcm/PcmPack: remove obsolete code comment
2017-04-22 09:52:10 +02:00
Max Kellermann
424e9cbc43
pcm/PcmPack: simplify unpack_sample()
2017-04-22 09:28:54 +02:00
Max Kellermann
95b62a843a
Merge branch 'add-original-year-tag' of git://github.com/tremby/MPD
2017-04-21 18:55:34 +02:00
Bart Nagel
ccb4f44caf
Add support for the OriginalDate tag
...
See https://picard.musicbrainz.org/docs/mappings/
This tag is useful when the user would like all releases of the same
album to be sorted next to each other.
2017-04-21 09:43:26 -07:00
Max Kellermann
c788c76dc9
output/Internal: add method IsBusy()
2017-04-18 23:15:46 +02:00
Max Kellermann
2e4e1c7f48
output/Control: drop "Output" prefix from file name
2017-04-18 22:36:48 +02:00
Max Kellermann
f85d4d28d1
output/alsa: work around dmix non-blocking snd_pcm_drain() bug
...
See code comment. Bug was reported against MPD, but it's really an
alsa-lib bug.
https://bugs.musicpd.org/view.php?id=4662
2017-03-29 20:36:04 +02:00
Max Kellermann
b4e4bdcda9
lib/alsa/Version: wrapper for snd_asoundlib_version()
2017-03-29 20:33:06 +02:00
Max Kellermann
dae8b78569
output/httpd: copy the Page reference; fixes use-after-free
2017-03-29 20:17:09 +02:00
Max Kellermann
e26d49efb7
Merge tag 'v0.20.6'
...
release v0.20.6
2017-03-10 17:02:32 +01:00
Max Kellermann
e9e853b19a
command/Partition: add command "partition" to switch to another partition
2017-02-25 10:26:33 +01:00
Max Kellermann
e48ea5f23a
Instance: add method FindPartition()
2017-02-25 10:26:33 +01:00
Max Kellermann
a99bab935a
Client: add method SetPartition()
2017-02-25 10:25:16 +01:00
Max Kellermann
3eee35e1f7
Client: convert partition to pointer
...
Prepare to make it mutable.
2017-02-25 10:23:23 +01:00
Max Kellermann
c7396b0675
Client: add method GetPartition(), make partition private
2017-02-25 10:20:09 +01:00
Max Kellermann
e3ee60e7af
command/storage: use Instance::EmitIdle()
...
These events are relevant for all partitions.
2017-02-25 10:20:07 +01:00
Max Kellermann
05b8ddac4c
Client: add method GetInstance()
2017-02-25 10:20:05 +01:00
Max Kellermann
668724de4e
Client: replace playlist and player_control with getter methods
...
Prepare to convert "partition" to a mutable pointer.
2017-02-25 09:24:19 +01:00
Max Kellermann
71ce1a25dd
SongPrint: remove Storage::MapToRelativeUTF8() call
...
This code (added 7 years ago with commit b233c145f ) has been obsoleted
by the SongLoader class (added 3 years ago).
2017-02-24 13:56:13 +01:00
Max Kellermann
cd522f524d
fs/Traits: allow base to end with a slash in Relative()
...
Fixes false negatives:
http://foo/dav/example.ogg mismatches http://foo/dav/
.. because StringAfterPrefix() returns just "example.ogg", without
trailing slash (it existed, but was eaten already by the base
matcher).
2017-02-24 13:50:29 +01:00
Max Kellermann
ca559b1db6
input/curl: use %lu instead of %llu
...
Fixes a GCC warning because %llu appears to be unsupported by the
Windows standard library.
2017-02-21 12:06:56 +01:00
Max Kellermann
a8e76fb345
input/curl: format Range offset as unsigned
2017-02-21 12:06:03 +01:00
Max Kellermann
1d445d1039
SongPrint: move duplicate code into PrintRange()
2017-02-20 22:00:11 +01:00
Max Kellermann
29d03ab937
Merge tag 'v0.20.5'
...
release v0.20.5
2017-02-20 21:59:40 +01:00
François Revol
46aa4d2f91
haiku: fix build
...
Some missing bits when converted to C++ exceptions...
2017-02-20 11:25:00 +01:00
Max Kellermann
d0b4bd08e1
doc/protocol.xml: idle "output" may indicate outputs have been added or removed
...
Preparing the protocol spec for multi-player support.
2017-02-19 20:50:09 +01:00
Max Kellermann
512e81c629
output/httpd: use emplace() instead of push()
2017-02-19 20:48:17 +01:00
Max Kellermann
452666f742
output/httpd: wake up the I/O thread only if pages have been read from encoder
2017-02-19 20:46:20 +01:00
Max Kellermann
72008d951b
output/httpd: no mutex lock while reading data from encoder
2017-02-19 20:45:16 +01:00
Max Kellermann
72146e7800
output/httpd: use std::lock_guard
2017-02-19 20:43:45 +01:00
Max Kellermann
f7af1bb8e2
output/httpd: cancel the DeferredMonitor in Close()
2017-02-19 20:41:34 +01:00
Max Kellermann
f88f1fca3f
output/httpd: move Close() lock into the I/O thread
...
Fixes a potential deadlock introduced by commit 945287358b
2017-02-19 20:41:06 +01:00
Max Kellermann
26e4a40cc7
output/httpd/Page: use std::shared_ptr instead of class RefCount
2017-02-19 20:17:57 +01:00
Max Kellermann
8b1931072a
output/httpd/Page: no variable size, use AllocatedArray
...
Using variable-size objects is not worth the trouble here. Let's drop
this and use existing and simpler code.
2017-02-19 20:13:41 +01:00
Max Kellermann
45e15b6cc6
output/httpd/Page: make all attributes private
2017-02-19 20:13:35 +01:00
Max Kellermann
be7e52c882
output/httpd/Page: remove unused method Concat()
2017-02-19 20:13:19 +01:00
Max Kellermann
4162ce0bc5
output/httpd/Page: use uint8_t instead of unsigned char
2017-02-19 19:49:53 +01:00
Max Kellermann
7e46277016
Merge branch 'v0.20.x'
2017-02-19 19:46:18 +01:00
Max Kellermann
3b84b99804
IdleFlags: add a "partition" event
2017-02-17 23:59:06 +01:00
Max Kellermann
1786f9b1bb
command/Partition: add command "newpartition"
2017-02-17 23:53:49 +01:00
Max Kellermann
1e972174a6
output/MultipleOutputs: add method AddNullOutput()
2017-02-17 23:53:49 +01:00
Max Kellermann
77178e0590
Instance: make "partition" a std::list
...
With this commit, multi-player support becomes possible... it's just
not wired to the frontend yet.
This is based on massive amounts of refactoring work I did over the
past 9 years.
2017-02-17 23:22:29 +01:00
Max Kellermann
9a909d9f27
Instance: un-inline the constructor
2017-02-17 23:22:05 +01:00
Max Kellermann
90d25a40a0
Instance: use C++11 initializer
2017-02-17 23:21:55 +01:00
Max Kellermann
c335f18be7
Partition: add "name" attribute
2017-02-17 23:18:51 +01:00
Max Kellermann
7dc3e73782
command: add command "listpartitions"
...
The first step to multi-player support. Not much, just a dummy
command.
2017-02-17 23:07:31 +01:00
Max Kellermann
47dffe66aa
output/alsa: fix race condition on early snd_pcm_writei() error
...
During UnlockActivate() while the mutex is unlocked, the IOThread can
set a new error condition, and will never again wake up the
OutputThread. This race condition can cause a deadlock in the
OutputThread.
2017-02-15 11:23:44 +01:00
Max Kellermann
6636c69a11
storage/FileInfo: convert mtime to std::chrono::system_clock::time_point
2017-02-11 23:45:15 +01:00
Max Kellermann
0ccaf4a1ff
storage/FileInfo: add initializing constructor
2017-02-11 23:45:14 +01:00
Max Kellermann
5cdbad7937
db/simple/Directory: make parent and path const
2017-02-11 23:45:14 +01:00
Max Kellermann
fc0508c047
db/simple/Directory: use C++11 initializers
2017-02-11 23:45:14 +01:00
Max Kellermann
78ca5491e6
db/Interface: GetUpdateStamp() returns std::chrono::system_clock::time_point
2017-02-11 23:02:17 +01:00
Max Kellermann
4146475c73
util/ChronoUtil: new utility library for std::chrono
2017-02-11 22:23:33 +01:00
Max Kellermann
329c3ab21b
fs/FileInfo: use std::chrono::system_clock
2017-02-10 23:48:21 +01:00
Max Kellermann
3b7f6641d2
TimePrint: std::chrono::system_clock support
2017-02-10 23:48:21 +01:00
Max Kellermann
781487c4dd
thread/Thread: use BoundMethod
2017-02-10 22:46:09 +01:00
Max Kellermann
5ba5bc8ba1
thread/Thread: move code to Run()
2017-02-10 22:43:55 +01:00
Max Kellermann
82c66ce078
thread/Thread: Start() returns void
...
Since we switched to C++ exceptions, there is no code path which
returns false.
2017-02-10 22:41:29 +01:00
Max Kellermann
9324fbf921
event/Thread: remove the Mutex
...
We don't need to access Thread::handle early inside the EventThread,
so we don't need this trick anymore.
2017-02-10 22:29:31 +01:00
Max Kellermann
5e081de14a
IOThread: move EventThread instance into struct Instance
...
Eliminate global variables.
2017-02-10 22:25:06 +01:00
Max Kellermann
d1456ae039
test/*: use class EventThread instead of ScopeIOThread
2017-02-10 22:25:01 +01:00
Max Kellermann
115af4f565
event/Loop: Break() is no-op if "quit" is already set
2017-02-10 22:24:48 +01:00
Max Kellermann
822724d1aa
event/Thread: auto-stop in the destructor
2017-02-10 22:24:46 +01:00
Max Kellermann
87c9856b20
input/alsa: use the EventLoop& passed to init() instead of io_thread_get()
2017-02-10 22:24:44 +01:00
Max Kellermann
835136dcd3
output/Thread: add assertion on the ao_plugin_play() result
2017-02-10 22:24:36 +01:00
Max Kellermann
4a80e9cb25
output/alsa: copy the PcmExport result to the ring_buffer
...
.. and not the input data.
Regression from commit b1c7649edb (integer underflow).
https://bugs.musicpd.org/view.php?id=4639
2017-02-10 22:23:00 +01:00
Max Kellermann
de80c270bd
IOThread: move code to class EventThread
2017-02-10 21:40:39 +01:00
Max Kellermann
b92bff2658
IOThread: remove unused function io_thread_inside()
2017-02-10 21:40:30 +01:00
Max Kellermann
42f1e26540
IOThread: remove unused Cond variable
2017-02-10 21:29:54 +01:00
Max Kellermann
cfd056231b
output/alsa: use the EventLoop& parameter instead of io_thread_get()
2017-02-10 21:21:15 +01:00
Max Kellermann
b1c7649edb
output/alsa: non-blocking mode
...
Use SND_PCM_NONBLOCK, and perform all snd_pcm_writei() calls in the
IOThread. Use a lockless queue to copy data from the OutputThread to
the IOThread.
This rather major change aims to improve MPD's internal latency. All
waits are now under MPD's control, instead of blocking inside
libasound2.
As a side effect, an output's filter is now decoupled from the actual
device I/O, which solves a major latency problem with the conversion
filter on slow CPUs and small period buffers. See:
https://bugs.musicpd.org/view.php?id=3900
2017-02-09 21:36:18 +01:00
Max Kellermann
853740f1e2
Main: use the IOThread for outputs and mixers
...
The main EventLoop can block for a long time while a client's command
runs, and is therefore inappropriate for internal engine I/O. This
fixes a serious regression for at least the "httpd" output, which used
to be hard-coded for the IOThread, but now receives the main EventLoop
as an initialization parameter.
For the mixers, this doesn't make much of a difference. They are not
latency critical.
2017-02-09 21:33:49 +01:00
Max Kellermann
14986b153a
event/Loop: use std::lock_guard
2017-02-09 21:26:55 +01:00
Max Kellermann
9e503b21c1
{input,mixer}/alsa: move code to lib/alsa/NonBlock.cxx
2017-02-09 21:24:24 +01:00
Max Kellermann
67a958a326
Merge branch 'v0.20.x'
2017-02-09 21:24:20 +01:00
Max Kellermann
3850716522
command/Database: add "sort" parameter to "find" and "search"
...
Implement the second part of https://bugs.musicpd.org/view.php?id=3990
2017-02-08 11:22:08 +01:00
Max Kellermann
1e0a60e73d
doc/protocol: remove UTF-8 explanation
...
These days, this is common knowledge, and doesn't need a lengthy
explanation.
2017-02-08 11:22:08 +01:00
Max Kellermann
e9c99e0518
DetachedSong: add LightSong cast operator
2017-02-08 10:38:25 +01:00
Max Kellermann
332baa4f67
DetachedSong: don't declare empty destructor
...
An explicit destructor prevents usage of implicit move operators, even
if it's empty. Therefore, declaring a defaulted destructor with GCC
attribute "noinline" does what we want without preventing those
implicit operators.
2017-02-08 10:24:45 +01:00
Max Kellermann
08879d2a20
DetachedSong: add move operator
2017-02-08 10:24:40 +01:00
Max Kellermann
1292af4768
Revert "DetachedSong: remove explicitly-defaulted copy/move constructors"
...
This reverts commit 67b7d46432 .
Turns out I was wrong, and mentioning these does make a difference:
the implicit move constructor is not defined in the presence of a
user-declared destructor.
2017-02-08 10:21:35 +01:00
Max Kellermann
4d88a099f9
Compiler.h: add gcc_noinline
2017-02-08 10:17:21 +01:00
Max Kellermann
777e15bd78
db/DatabaseSong: make the Storage optional
...
Some database plugins don't use a Storage (e.g. UPnP), and with this
plugin, DatabaseDetachSong() can crash.
2017-02-08 10:05:55 +01:00
Max Kellermann
f689e28958
SongLoader: return instance, not pointer
2017-02-08 10:02:08 +01:00
Max Kellermann
d184231169
db/DatabaseSong: DatabaseDetachSong(uri) returns instance, not pointer
2017-02-08 09:59:12 +01:00
Max Kellermann
7225e919fc
db/DatabaseSong: use AtScopeExit()
2017-02-08 09:58:40 +01:00
Max Kellermann
7a185f1ead
queue/PlaylistUpdate: assert Database::GetSong()!=nullptr
2017-02-08 09:53:14 +01:00
Max Kellermann
c1fa5279f4
db/Interface: clarify GetSong() error handling
2017-02-08 09:50:30 +01:00
Max Kellermann
4f0fe66f69
DetachedSong: make the LightSong constructor public
...
Sometimes, it's useful to construct a DetachedSong from a LightSong
even without having real_uri initialized.
2017-02-08 09:45:37 +01:00
Max Kellermann
76380b2b45
DetachedSong: pass std::string&& to uri initializer
...
Eliminate one temporary allocation.
2017-02-08 09:42:09 +01:00
Max Kellermann
67b7d46432
DetachedSong: remove explicitly-defaulted copy/move constructors
...
Mentioning these doesn't make a difference.
2017-02-08 09:40:29 +01:00
Max Kellermann
29453ba196
client: add tag_mask attribute
...
The "tagtypes" command now has several sub commands which can be used
to edit that mask.
2017-02-08 09:06:11 +01:00
Max Kellermann
599d77643b
client/Response: add method GetClient()
2017-02-08 09:06:11 +01:00
Max Kellermann
09d87d5ef1
command/Other: move some functions to ClientCommands.cxx
...
handle_tagtypes() is also being moved to ClientCommands.cxx, because
that command will be extended to access client-specific settings.
2017-02-08 09:06:11 +01:00
Max Kellermann
2f3f075e4f
tag/Mask: wrap in class
2017-02-08 09:04:45 +01:00
Max Kellermann
17097d96b7
db/{Count,Print}: use tag_print(), eliminate duplicate code
2017-02-08 09:04:41 +01:00
Max Kellermann
a3e28c2d1a
tag/Tag: move tag_name_parse() to ParseName.cxx
2017-02-08 08:57:22 +01:00
Max Kellermann
03a97d87ea
tag/Tag*: rename several source files
2017-02-08 08:49:42 +01:00
Max Kellermann
8cbf099054
tag/Id3Load: update API documentation
2017-02-08 08:48:44 +01:00
Max Kellermann
c287452255
configure.ac: increment protocol version
2017-02-08 08:45:40 +01:00
Max Kellermann
07ce915c66
Merge branch 'v0.20.x'
2017-02-08 08:45:24 +01:00
Max Kellermann
73f58c57e8
storage/curl: use CURLOPT_POSTFIELDS instead of CURLOPT_READFUNCTION
2017-02-06 23:25:03 +01:00
Max Kellermann
43348a3e13
decoder/Control: improve locking in Start() and Seek()
...
Previously, both methods accessed a lot of attributes which require
mutex protection.
2017-02-05 13:37:20 +01:00
Max Kellermann
e716b1f4d7
Client: remove redundant "virtual" keywords
2017-02-03 22:27:11 +01:00
Max Kellermann
82e74a4ebd
Client: make client_vprintf() static
2017-02-03 20:47:41 +01:00
Max Kellermann
16b260e371
Client: eliminate client_puts(), use Client::Write() instead
2017-02-03 20:46:53 +01:00
Max Kellermann
3102e05da4
Client: make attributes "uid" and "num" const
2017-02-03 20:41:31 +01:00
Max Kellermann
df4af2b550
Merge tag 'v0.20.4'
...
release v0.20.4
2017-02-01 22:05:33 +01:00
Max Kellermann
97132e3d38
configure.ac: use MPD_DEPENDS for upnp->expat dependency
2017-01-26 10:22:37 +01:00
Max Kellermann
5ad1fe77b1
m4/mpd_depends.m4: print warning when disabling the feature
2017-01-26 09:58:34 +01:00
Max Kellermann
8d4ed1e988
m4/mpd_depends.m4: add documentation
2017-01-26 09:45:25 +01:00
Max Kellermann
add953fb6e
lib/curl/Global: decouple from the IOThread library
2017-01-26 09:29:49 +01:00
Max Kellermann
3854211694
input/Plugin: pass EventLoop& to init()
...
Eliminate dependency on io_thread_get().
2017-01-26 09:26:25 +01:00
Max Kellermann
58ac72f79d
input/nfs: use NfsFileReader::GetEventLoop()
2017-01-26 09:25:56 +01:00
Max Kellermann
6d5904801e
lib/nfs/FileReader: use nfs_get_event_loop()
...
Make sure we're using the same EventLoop as the NfsManager.
2017-01-26 09:23:49 +01:00
Max Kellermann
d4993c405e
lib/nfs/Glue: add EventLoop& accessor
2017-01-26 09:23:25 +01:00
Max Kellermann
7af8e3937f
lib/nfs/FileReader: use C++11 initializers
2017-01-26 09:21:57 +01:00
Max Kellermann
f8eeded528
input/async: pass EventLoop& to constructor
2017-01-25 23:18:33 +01:00
Max Kellermann
c3fa7e13cf
input/Plugin: include cleanup
2017-01-25 23:18:17 +01:00
Max Kellermann
5c18b0a94d
input/curl: use CurlGlobal::GetEventLoop()
2017-01-25 23:16:56 +01:00
Max Kellermann
ecbad638f1
input/async: add method GetEventLoop()
2017-01-25 23:15:52 +01:00
Max Kellermann
611ce6e756
lib/nfs/{FileReader,Glue}: pass EventLoop&
...
Eliminate dependency on io_thread_get().
2017-01-25 23:02:02 +01:00
Max Kellermann
4140e9b857
IOThread: make io_thread_run() static
2017-01-25 23:00:31 +01:00
Max Kellermann
8fd9d91974
output/Plugin: pass EventLoop& to init()
...
Eliminate dependency on io_thread_get().
2017-01-25 22:54:41 +01:00
Max Kellermann
d3f35dab1e
output/ao: convert to class, make attributes private
2017-01-25 10:46:09 +01:00
Max Kellermann
487e2618cd
output/ao: use AudioOutputWrapper
2017-01-25 10:45:20 +01:00
Max Kellermann
30d5186db4
output/ao: use const_cast instead of the union hack
2017-01-25 10:44:19 +01:00
Max Kellermann
cbe59714d4
output/solaris: convert to class, make attributes private
2017-01-25 10:33:38 +01:00
Max Kellermann
704a28ca17
output/solaris: use AudioOutputWrapper
2017-01-25 10:29:42 +01:00
Max Kellermann
8d70d10aba
output/httpd: use AudioOutputWrapper
2017-01-25 10:05:08 +01:00
Max Kellermann
ddd8b16f2b
output/roar: use AudioOutputWrapper::Init()
2017-01-25 10:05:08 +01:00
Max Kellermann
b79ce77ec5
output/Wrapper: add missing include
2017-01-25 10:05:08 +01:00
Max Kellermann
fead4bbfd9
output/Plugin: convert pointers to references
2017-01-25 09:48:59 +01:00
Max Kellermann
872ecc1aed
configure.ac: prepare for 0.21
2017-01-25 08:58:07 +01:00