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
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
d61341c0e3
io/FileDescriptor: add method SetBinaryMode()
2021-03-08 17:25:36 +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
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
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
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
ec0c1f0d02
util/Exception: fix comment typo
2021-03-02 17:12:20 +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
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
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
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
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
release v0.22.6
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmArwO4QHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEjvyD/9M2icQCKSQheXVD0UWvDZlTaOG6dJtZIfM
1M9eLC/WG9F6ss2eQy69mfd1IkxO0qx7pPG5NN7zKp7msyK8Hbq6QAoqygKIU9S/
m5jbrdpuy8A09Mae62b0eapphhtp+Lbpl6RN8QpeROQPd3nX/eSsTngMu//5e4g8
3qbqkh8Z802FdppcLdBj7f2nUkNoW77bIbVsbm3BQd8EIiVwis9wMgs9Oh9ZEtC9
krUuij8WjTurSORC/IvqvvOh3QUmb7q7+YwoUrcEBOF1ABcpjf//qVUb4rhOwuVh
s8BxW+L8sxv3dCSrjG3msbxXLLIVXU8H2pafHyS/rosrnHmTHshiraG1ZMlOh0dE
kk8piE+7cLERR4JufEnmDtMLQdJfGVTs7QIAsOqtXWNaihsDKA2cZy9AcW3UZTxE
Vf0PDWl5W8+ibWJ/m9CVWYUEssZ3Jvbi3X0IFAgfYYT8PkIQEqNUWJFelr20Cr6H
5GNGUooiOGUXBWotrQO8Blhcx3rzwGxzeRLV0JFBqhl7zPnXdQ3Wzo70U714V+rT
ZRKSisLVbb7vVY2S5OlQf17mGSZufdNc6yzNar9CKwEaUqS64bdzo13NmiIyKqpO
tuSJlL4otO4/nsdKVj1Pcdr+LKJLFLLR9V5W6DLCiyPChR5adZ9rjN7RS9fChkBn
9G4ifkbK0w==
=NeqR
-----END PGP SIGNATURE-----
Merge tag 'v0.22.6'
release v0.22.6
2021-02-16 13:58:47 +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
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
release v0.22.5
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmAq1woQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFElB1EACItrIKgEywkzW3l+gmgSjtwwQOiLfg+0Zg
Z3YgpegDvhmjBVXAHFDlhnXf//zCr286ZmCCVItrz2eGHYX2lvul0SdYxp/+Kebk
WrCez6LMecaoGjbgiwQ70u/stNkX85ZT62CznNyYvwMx4bRhXXgOuBdKYTAZTvT8
ABvfL+Ari7TBi88qCAaufmxyv7VFOaZg8+GpV1unIlHE6vu3febzDffPdjfODmOe
BpLILJJIzUd9p1tGmSCvNCUUHdElktbK1aSVS/0x2xdKG3eDKmPIhSdxdqOdunr7
9us4Mg7ZB5REaRC0ZfxR6P+vId0uIT3kpyDqs5i8Zao1WwmCdZhvaMMxJ3KF0MVs
q4Lb99LMF2xAvsoA4x+wY0E0SlFrBhySrFY/i4gaBd9ctzQsbxID3cOZhSbEmQnk
VNlPK/cYtWVHouLzSOUZeg3/nyMMWXTXy87esB/JdKWqushYLFqy/WIIJvKh4dRL
YTEJtGeAe7wn9BPoD5Sf1xaj9ULw5CG/Z72inMk1rdzQBn+sWypb8HwJiGtHH43Q
3YwTSAg/Z3MuxcMM1F9ce/IeE+sqCtOZKgTTpdp56hPlHMV9Fa0v7mnMHz508jB/
4ZwAm3eEbCy14IKtW1jfKwA/IgPnF6bR6D1nn7F9SKnBG+hdHsyAVyHaTsXbfO4u
0RZ5Y9vxdQ==
=I2BI
-----END PGP SIGNATURE-----
Merge tag 'v0.22.5'
release v0.22.5
2021-02-15 22:50:16 +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
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
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
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
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
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
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
8279cafd6d
release v0.22.4
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmAJqgAQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEg2QEACJLeN2mk2RU7Iqxbh/ekwm6aTM8D6bx8RH
Xys4l1YAFQ0cg7sKZwMqefedGJG2j8CORbihYIF6Z8EvFsAiI6I3LjElfXrmnAc0
Y9SnWHIR5vxlSQgyqPlJ0jl213uzoHHpel8PpEJbTtYONT+8f3fQEuLpO4/uWOIT
S6mlX16vI0/Ydp//8UIazUUvjar1pPvBnSEZ0JZsZl8RTYlS/4SOfqpHnhhWnWpO
9RXlLP9Zo68rJzNhUPwRj7NkyVEkg74xpjHOWoyeTMNQ6tKMQn8b4jb/LcBfj6hk
I7mof5oX0aS+GyYaehKi9c9Az7wUcBxnnaN02qlAaSutcuox7ce70fKMtiAXRN0o
T9mFSJm1JKqHZb1dFvxqSqFjVr7eO9XCxHqaEqTbXCT+CL/6AJQZi5SVcX4gCY1P
NSM3Jnydjr73WFLmEfjCkWLTdtiJhY/2Q/J6+vcILMb3W2y5FaSHZTOFbxVG4nMM
spoQ27b7PoB9MbxLR3QJkYLa0WE3FrTORYgsH8Po7ZcCU9+JvqDSBnGXxx+Yv+JJ
dKMI5bEAvPziodSHHQXgD4lhx744JuiLAJNtlSYJvev1s2Irf2TtMHdmGERHQZwH
5cr9sQLgyHCLvTBDGt1dVZq/Z0T/PCkweIa5cT6ZBAim1hs7g20g8ksyFK2ZPUbB
vEGBNcuMIg==
=CEEr
-----END PGP SIGNATURE-----
Merge tag 'v0.22.4'
release v0.22.4
2021-01-21 17:42:26 +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
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