Max Kellermann
cc0def15c4
Copyright year 2022
2022-07-14 17:59:35 +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
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
7e14f8f830
encoder/Interface: pass std::span to Write() and Read()
2022-07-12 10:33:59 +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
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
4464310e74
release v0.23.8
...
-----BEGIN PGP SIGNATURE-----
iQJBBAABCgArFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmLIuEINHG1heEBibGFy
Zy5kZQAKCRAjbopYxttFEm1JD/9j/a82cNccPLUfTptgb8ak5fAnYA65edbtGPr9
dLv1BSjMrsTpMpgJ8FT5wjQn7H5drmE2GLvCN+oZUqaSz99F5BC+Hof7bfvv/sVF
opLTiZn2iAtanwtHP6ZEPPswTbdN2FgtZeFhJIGmFspghJV5hdbM7vbwNX1SIpc6
LH+WvE42ZG/w5wNajRvr6/lPYQhJc70wUqODXLzgdYu3WYmIclUAyFv7tVr067Hh
uXP6b6MZV60cqh+a0xX01n5kwDo2reqmmE0IY0Le7H6xg5quE7DzCVElTOAa7R1x
MZJCqY/thjvXl3JfHW5/ZwmiNrxsmx8nzGhrDyg4tb3hjbwip1iEI/OgnDyacdl4
34njeFxO40AJhienDWLAp2oSYh4pNdfjFvnfSJXeQ9HD2sIzGi692WUgzjdM1VmA
83iVRe9Bx4OTyAg1jwPOFyAYnRqhWsYFSp7GjwNBQwTRSwwBtmOxwAhWKwuspuLi
YfDoF7wGYVY5lOXuDBw+rvhGRWqGKsbQzZFy0bQFoD8dbwG9huLJCumNWZCbqELF
TAfU5sRcQlAjwSGncEpKOitYjdrtylYRb12p2DSedFuBWxcRGGPiCFfTVUKV8hz1
LGD1xj1g/4ClEUbfDNVwa7sAEO7o84Qojfkt/siBjhE427i11CpPGIlMCVeO2FkG
fI1f3Q==
=KgWM
-----END PGP SIGNATURE-----
Merge tag 'v0.23.8'
release v0.23.8
2022-07-09 01:08:16 +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
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
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
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
596ff7e6bf
output/*: use std::span instead of ConstBuffer
2022-07-04 19:14:12 +02:00
Max Kellermann
baff5e5594
lib/yajl: use std::span instead of ConstBuffer
2022-07-04 18:37:36 +02:00
Max Kellermann
67c6d111a8
filter/*: use std::span instead of ConstBuffer
2022-07-04 18:37:35 +02:00
Max Kellermann
4ce1dae673
pcm/*: use std::span instead of ConstBuffer
2022-07-04 18:11:21 +02:00
Max Kellermann
502e5f006a
decoder/*: use std::string_view instead of StringView
2022-07-04 14:50:18 +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
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
2e6f115bcc
Merge branch 'v0.23.x'
2022-05-24 10:58:40 +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
01b32d5ee0
util/WritableBuffer: remove unused library
2022-05-20 11:22:03 +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
6e1500c251
Merge branch 'v0.23.x'
2022-04-26 21:05:39 +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
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
407fa2720a
release v0.23.6
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmIvgaMQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEpzhEACOJOyOjtmeuu7Uc147O4YzL/7g5PEZMKHI
yB/H2QOWnbgAKh+8AFT2YudR89mIXslfuIILRg8/NYkEFgNCrkBQETWsATPyqrCr
rYJxPtjlC2fAlKkl9XM+qL1WMATIhvRVD9SZajZKwa+9H1y5mZGlMBWdzdxaJoUY
bhlu7fYvyRMXsStUncyYfsKsuHyibq3d4Pk/jegZhJeMI9/MOKdjc9GJE6Rzz0cT
dWGqpfBJ/WMZ9aKXB3fh7WVtiIl/hr/5K1QizL10pwmJ5o/LBNKk7eEREbPUvNc6
S5BHBOyVYaqVTGZyaoF9XkMKv7qnKYNoD2g2H+J5cN87rMRI8DzY/MqUxmX0bCGc
jOQinMcQuL7zMvYx0ypKdTiMas2OG/RlKluOgzhNIvzkWYCxh9iCozm7Wl3qsvY5
uJEsaeIb/zgSmUC2637ltBE37lW/8m7RYWpuq82M2CnFx9oL6W3ah8SMm5ToBzYB
jHrN7h+YcKoIrFcZsYVTCbLzGQnQ2kmzsyGecDeCK9aP16gTkALZdpexn0oIzEKv
fNtNSU7MgYXLs0knrcBoQw0nQnH9ICuswqFiyr4jcFfqxbIw9mvHyLRIWnyhL9zj
XiYEr3SqnuVnmuLSgHlYk6g4zpYFLJEHo+/7IlEqTItXeAcsIhjn6B/NDyKVvYQa
Pfb1ORoumQ==
=jMu8
-----END PGP SIGNATURE-----
Merge tag 'v0.23.6'
release v0.23.6
2022-03-14 18:58:47 +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
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
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
d79bf853b1
output/httpd: make configuration fields const
2022-01-10 22:59:50 +01:00
Max Kellermann
a5fa43b526
fs/io: move to io/
2021-12-03 14:35:41 +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
9bcd425a85
array conversions
...
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-11-23 01:38:10 -08: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
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
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
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
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
3413b1aeb4
output/alsa: add option thesycon_dsd_workaround
2021-11-04 17:55:53 +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
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
409b877eea
output/ao: include cleanup
2021-10-26 12:20:18 +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
bf1d77a4d8
output/alsa: un-inline several methods
2021-10-23 12:02:27 +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
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