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
093bf5d859
event/*, ...: make GetEventLoop() const
2019-04-04 20:07:57 +02:00
Max Kellermann
7a1b56fe96
release v0.21.7
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlykiHUQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFErFWEACP0T0em6pKOV9W2YHivtnJoBhb3wG46a2w
rnyNuj0FM8nhMsWunvqbOExogGxZziTKYhSdvzOBwNSleG1Eyjks8yNuPpp7nHH/
Y5gyRr1o6BR4hkukWDAIBWN/iXatUWHb/itInN0KhrqyU0YptNGbOF87vLfAZlqW
MNVTXO4YAx/tYHEt/4ze/ljtrNvXsB8Zw86cNI+jrivdujdKVfiN5dUpbc5Hj8DA
3i6Y5YFm4OvHbFENeMy/kVht8Ln0/3Ak+Z9L7ti9ZSWLbOaQc7+Nl0P/3pfftzWf
YK6DsRyvJ2dEPylAXqRIkZWdIU1VwjKc7cKYJFljNAMhaUWcrefXIGQOv0+1kbqz
CxLgk3hIK3R7lGbxLXDU7xD05hbOGgXe1BKO9alGhEsyB8+sT6qfVay/RlJPN+da
mSnslSzPyS+p9ZdyDnWXq68FS8BIriajDVXP7/WNMKz9OEe5BiXBBQVDM5/XbxQU
qPxLn/BVYzDXOw8msgyIZ/vqE1rpomJDILsK/EMJ/HLAOdR/Jo10wIAGAqiLPp2j
n2R9jS7nxZKmEvcZkg/HroNiGSpT89f38bbW/MCdzxAkg4vQDxQ0OE9GoeBi3oiP
g/SkM/sJ9UdlC3bq7TAhxK0huimAEg5Rh6Z1II00D89QmWFQT0hjmxo++9WwCQXw
CkIiKRf7Ug==
=KzqS
-----END PGP SIGNATURE-----
Merge tag 'v0.21.7'
release v0.21.7
2019-04-03 12:32:20 +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
cb100f2e5c
input/ffmpeg: use avio_feof(), eliminate eof
attribute
2019-03-13 10:41:12 +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
c176d94598
system/ByteOrder: move to util/
2019-03-08 10:21:10 +01: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
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
Max Kellermann
4ba9357a9c
input/CdioParanoia: C++ wrappers for libcdio types
2019-01-21 20:20:20 +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
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
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
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
12308a0f55
lib/alsa/NonBlock: move the functions into a class managing the state
2018-11-11 12:37:25 +01:00
Max Kellermann
f5c9071494
*: copyright year 2018
2018-10-31 17:54:59 +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
3e78c9ab48
input/Plugin: add attribute prefixes
2018-10-24 20:25:32 +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
Andrew Basterfield
9c1bf9ac5f
Remove some extraneous leftover debugging
2018-10-07 19:21:38 +01:00
Andrew Basterfield
2f07b8f482
Set cdrive speed hint for cdparanoia
2018-10-06 20:18:19 +01:00
Max Kellermann
1ba35e1fd4
release v0.20.21
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlt3CwMQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEiQcD/0S7NzE9nLsuTJJB9ElzOW17XiKkLKuDErQ
P1r46APwa0agqfHFTUM5a+ifMCFQ4QTh0p+MiImYniBKmTnuKYBxZJFgHYojrPOS
jxJbPJI6R7vLfo07kIem1jw/3YjqF4BDJyn9FYLBLgWz3IiFC/H4XH4XYxoQhTYL
Xv0aGMCnil6gD2ENvx4by3tqsM9l5ktvPwR6bktRw4ImhgT5zHShpuPYZekas1ic
+A1oCXFO4UrlZQ0sHdcG7Up8NOEJvAiNR5+BCnb9aR8l6M2Mzu2u715zSSWvTBI+
SCa8lE/gkndJC2Q3BmPRp+OcWU/uwVIkWdJdCF8DgN5vmk3cLRJ/SpHGkR1iYSvF
MUW8QF0tc2Xctv0NHYXlDj6wVVJ+OWNUcNy6SWHAT7o5S0ppB+2nesAfTVqqGK/Z
yRmcW5CvYNH8dfN7WBkLehN57dpI6O1YkfF30xCPcT+fu4oBYv7owU4MqFVcJN2r
FEbTZCfRFGjF7Kmb6aF+mFMhTnqYNEZjFS0SljLJWjlimLaSfgTXdEv23IpxIMnV
i+CEy7B2RseR31tmCekyWxdLnNJPYC4Zqwer8dd7yrY/exEM/6x9JQDUbCaGccar
NlwmCj6uDKXxU3tkb9Mk77oX51dFL58BtpoQw/DfXRWSX+UsAxFioyAbJ9juJUrM
JO9WMABo0Q==
=2zvn
-----END PGP SIGNATURE-----
Merge tag 'v0.20.21'
release v0.20.21
2018-08-17 20:02:27 +02:00
Max Kellermann
98efb4f6d5
android: raise minSdkVersion to 21
...
The number of MPD installs on Android < 5.0 is negligible, and that
API version introduces lots of useful features for MPD.
2018-08-17 19:01:37 +02:00
Max Kellermann
cf471e830f
Merge branch 'v0.20.x'
2018-08-02 11:07:40 +02:00
Max Kellermann
906972973e
case-insensitive URI scheme comparison
...
Required according to RFC 3986:
> An implementation should accept uppercase letters as equivalent to
> lowercase in scheme names
Closes #330
2018-08-02 11:01:45 +02:00
Max Kellermann
e16fd4a09b
input/qobuz: initialize the libgcrypt library
2018-07-26 18:26:46 +02:00
Max Kellermann
409d3c7136
lib/gcrypt/MD5: return a StringBuffer
2018-07-26 17:45:45 +02:00
Max Kellermann
32290d5eb8
fs/Path: add method ToUTF8Throw()
2018-07-18 16:51:29 +02:00
Max Kellermann
49efb6071c
config/Migrate: library to migrate deprecated settings
2018-07-18 10:25:02 +02:00
Max Kellermann
816603fd9a
config/Config*: rename files, drop "Config" prefix
2018-07-16 19:50:07 +02:00
Max Kellermann
9a29d02e7e
Merge branch 'v0.20.x'
2018-07-06 19:43:01 +02:00
Max Kellermann
466625f7ad
input/curl: use new class HttpStatusError
...
This way, IsFileNotFound() can detect status 404.
2018-07-06 19:26:11 +02:00
Max Kellermann
60d5bf0240
util/StringFormat: new utility library
2018-07-06 19:07:02 +02:00
Max Kellermann
41cdc4e14b
input/Offset: add macro PRIoffset
2018-07-06 19:06:05 +02:00
Max Kellermann
87dfca0477
input/curl: remove obsolete Windows sprintf() fallback
...
See commit be137a191e
2018-07-06 19:05:09 +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
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
a8568d7246
Merge branch 'v0.20.x'
2018-05-03 20:15:11 +02:00
Max Kellermann
ac61fd1d78
{input,output}/alsa: work around -Wswitch due to SND_PCM_STATE_PRIVATE1
2018-05-03 11:59:18 +02:00
Max Kellermann
b7dc3fae7c
Merge branch 'v0.20.x'
2018-03-15 20:08:13 +01:00
Max Kellermann
73013a3c04
input/thread: move code to Stop()
...
Fixes crash due to "pure virtual method called" in the "mms" input
plugin. Closes #253
2018-03-15 19:29:55 +01:00
Max Kellermann
65bbb0e0aa
release v0.20.17
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlqAMO0QHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEg8eD/49NlFvlNdkamgYvh7MI1Sn67yKAwQt+N51
W0hVnmXwPoSg76gfWw8J9kVyQy/jEkaCxsPF/UuEbH5jzqAC0y8hwYVRkJaRc9wN
ZfwHvLHeaUxQweoguEwRSREy4ZC4ImQOK+eAxI1R43mqxxyhko1Akc1NmRVWzYfv
/FGmAjTi1U6FR/yDpdSFn1NdlPmIgZ4WDuRsDT2NrshX/Bb32FiyZBytvek2P8n/
QNgXv18E4yWXSb+zBYhPy/eaKhGasyjI3cbht1F0hNW9Yo/BsFxDuwXrX1vNBaOS
E3Dux4s/nfcJ4RMRjmrkFwXImCvxt7+AGfh8RYBXuwqMExXz2kZjIs4ZVvO7Nu9A
pFDJQwRIojXMfk73LU/MEpmNNEXhvfQLYkrM7poSqYaOr8SWMszqSgNnnfq6+flB
sJbstgAStI6lL0jy0HrtMTvPVEiAGh6wCvMy/r2G9XUAyw76ccOg7MaIldn0MHJv
A51+GfRTi4ILH0ReL1BGAg9nG97uFmRAWGkfkhtyD540xGRk7x5R8/ml4zFogHN6
SbrV0NPdwk+uFd0y2znQT2gWyjc0id4WEKEoHX+Gl6c5qtPIfrq+PQPyk9kR+u+i
AxwqMoKQer6Ji5qnsvCiKSkaGGiVNivrZ11jDWNCZaKjmvlKlvj/P5GxbPpORorq
v4ru/4vNXQ==
=v4t8
-----END PGP SIGNATURE-----
Merge tag 'v0.20.17'
release v0.20.17
2018-02-11 13:22:43 +01:00
Max Kellermann
6ba918b203
input/file: don't use posix_fadvise() on Android
...
Requires Android API 21, but we want to support older versions as
well.
2018-02-09 22:54:22 +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
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
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
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
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
1da64fb79c
lib/curl/Delegate: helper class for response body parsers
...
Eliminate duplicate code.
2018-01-23 16:48:43 +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
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
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
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
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
Max Kellermann
bbc5212436
fs/AllocatedPath: make the nullptr_t constructor public
2018-01-17 12:17:41 +01:00
Max Kellermann
9420066895
input/qobuz: new input plugin to receive Qobuz streams
2018-01-15 21:50:20 +01:00
Max Kellermann
93b51d56aa
input/tidal: new input plugin to receive Tidal streams
2018-01-12 14:33:22 +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