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
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
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
Max Kellermann
d7df5e1c90
LogBackend: pass std::string_view to Log()
2021-06-24 13:43:13 +02:00
Max Kellermann
e4e4576a39
release v0.22.9
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmDTg80QHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFErvaD/93cfFvY/E9NZbI7XmuEfrfX0dUEo2dd8bi
O1tbEU+8uquNLV5cyb5iEpu6RCbAQxjj8clqVuMgfl0Qe3NQ+Z+nyOg0YVEB4Z16
cQBDFGawth7HuaqBIdMgnoapUxyGW3KMFw6si5OsV5AMkT5ybdsWg3sOXIXG+cLa
7KoIwVlgum+DsAPCSKis9fiuZJCnsg9SVcsJnpoaa7ZVOASPp1Wd7F9Kv6wj03/R
fEQ3z/s/4ILsWmZFHnclFq5LSpNvom5fAiedO15WVsJCxoZHEAg0ZpnNn/whU1HA
fciGImrjHLCTKVS5xpWNXUMaov2k7LEbLka2AqYwdeuxf7kAeoZC42H/cwK6tH/F
xuNWg4l9DZQUoGFxN4hfxJi3fsVpx0+3FR+cJQWOuUtwcmh4e7qJKX1gxAjHvEQY
GPS+jx7ndpcVDJyupvhFVGT0VDEOP7yMTjdY6uc5dXa4Ulx59duvgTdEyYgS4feM
BqNOYkD2FXnN7nv56f23q5SkRHF5D5nnoc8robIWkng9PXoq1Faq42MwLFxyCdH1
duRHk06FaFYpPv7gYagarFYIwOKCteL8aOwLymYbJop0O8ripYVQ7hHcEeWNvV+f
Q1ggllNBD/igvom6tRNl+S7TeQijr44M3/pDvDI3oXJPCfh1ZFGjwKqKqS76JfEu
v4V1N0rseA==
=p1U2
-----END PGP SIGNATURE-----
Merge tag 'v0.22.9'
release v0.22.9
2021-06-23 21:02:06 +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
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
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
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
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
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
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
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
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
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
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
release v0.22.7
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmClOSYQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEkODD/49e950HLmZE8x3rmyeEEsgdvHkOVpPlKHo
+wsmSsi+N0sQKgEOffSYyL0MRWaQqzRMnl1EcEVErCfQl5f1mOw9+TL4f5ZEjVNw
CQFMy1awHtCfktgF5zq6NzXD3nor9mkjiP733x/kGcsxwfk/Y4radqUBKJ5Y4a2B
YSg35a/YTOfLCmb9WBquwAi22x7AkyBzyrY3ToCzynVuaNcT3gvLsAAMFzRUKpqD
QEoCtUxJ4CQayjWjtG/bBCs2TVSmJvovhM2xB4Jnm+MeZz+bKI0y+ALW2Wk0Agnd
qxDqyCEnvHi5pf8i9usl4/A63VDC7HHj9kDSLtPLGTijv+7Wvvr4kNpwm2DuJ4q1
1pOEgT480ryK1FPyO6XnYCk616NqjgMbplr6SQ1DuVpIddWdiGARoge/WiNvsbT9
pnEp0q9V3cQmuJ30LlskMJHAPyrE3KSrO1s+4P2zUeirwnMnOCPdq+gT+lRw4GNG
OqLFEDHaELgSaZxInCN8RCXdLMrpuvKm+FQQApU1KwbYPXIassR14yt6BPpjxqea
vkvFLtpwFWthNPLkujak5rDqAPvbHzAeOfaOiZelzd21nl/1omiMXSXRcJkEjONi
JC5VWJpi1PHMXocq6AcOQT/9XhIH4uDA+Xghn7CURBTB6WoB954TSmuVIjXTfgAv
XQYqRR+7Yw==
=Gtzo
-----END PGP SIGNATURE-----
Merge tag 'v0.22.7'
release v0.22.7
2021-05-19 18:43:19 +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
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
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
6f51d910ee
python/build/libs.py: update CURL to 7.76.1
2021-05-17 18:42:05 +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
GrimReaperFloof
a0334d1d94
Add resampling mode setting to modplug decoder
2021-05-07 19:48:52 +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
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
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