Max Kellermann
5e5fadb5f2
decoder/mad: remove unnecessary initializers
...
These will not be used until they are initialized in SyncAndSend().
2019-08-03 08:49:26 +02:00
Max Kellermann
952c793235
decoder/mad: subtract libmad decoder delay from LAME encoder padding
...
Apparently, libmad not only inserts 529 samples of silence at the
beginning of the file, but also removes them at the end.
This solves the last piece of
https://github.com/MusicPlayerDaemon/MPD/issues/601
Closes https://github.com/MusicPlayerDaemon/MPD/issues/601
2019-08-03 08:35:00 +02:00
Max Kellermann
3e3d8c7f9d
decoder/mad: pad the input buffer with zero bytes and end of file
...
libmad requires padding the input buffer with "MAD_BUFFER_GUARD" zero
bytes at the end of the file, or else it is unable to decode the last
frame.
This fixes yet another bug which prevented this plugin from decoding
the last frame, see
https://github.com/MusicPlayerDaemon/MPD/issues/601
2019-08-03 08:32:27 +02:00
Max Kellermann
9b99a9897a
decoder/mad: don't count the Xing/LAME metadata frame
...
The Xing/LAME frame indicates how many frames there are, but that
excludes the initial Xing/LAME frame. Therefore, it should not be
counted.
This fixes an off-by-one bug which caused the last frame to be
skipped, fixing one part of
https://github.com/MusicPlayerDaemon/MPD/issues/601
2019-08-03 08:25:48 +02:00
Max Kellermann
4f56fdc397
decoder/mad: make "current_frame" zero-based
...
Increment "current_frame" after processing the frame.
2019-08-03 08:24:25 +02:00
Max Kellermann
c87d6825ec
decoder/mad: add API documentation
2019-08-03 08:07:30 +02:00
Max Kellermann
00830a20e3
decoder/mad: convert to class, make almost everything private
2019-08-03 07:52:51 +02:00
Max Kellermann
d39d2874b4
decoder/mad: move code to methods RunDecoder(), RunScan()
2019-08-03 07:49:41 +02:00
Max Kellermann
a0a74951b8
decoder/mad: eliminate attribute "bit_rate"
...
This also fixes a bug which caused the bit rate to not update after
seeking.
2019-08-03 00:38:45 +02:00
Max Kellermann
779a6855ff
decoder/mad: add noexcept
2019-08-03 00:28:59 +02:00
Max Kellermann
f7ed7446ae
decoder/mad: use MAD_F_MIN and MAD_F_MAX
2019-08-03 00:27:59 +02:00
Max Kellermann
9d44a6d2ae
decoder/mad: use Clamp()
2019-08-03 00:26:57 +02:00
Max Kellermann
10da9ee7ba
decoder/mad: refactor local variables in FillBuffer()
2019-08-02 23:19:11 +02:00
Max Kellermann
f9eff31205
decoder/mad: use sizeof(input_buffer)
2019-08-02 23:19:11 +02:00
Max Kellermann
1d74a029a2
decoder/mad: simplify variable initialization in FillBuffer()
2019-08-02 23:19:11 +02:00
Max Kellermann
6b8ca514bb
decoder/mad: fix broken log message
...
Broken since commit f8bfea8bae
2019-08-02 22:58:16 +02:00
Max Kellermann
f51e555154
decoder/mad: change "mp3_" suffix to "mad_"
2019-08-02 22:49:55 +02:00
Max Kellermann
61a3c69a06
decoder/mad: make enums strictly-typed
2019-08-02 22:49:55 +02:00
Max Kellermann
089615a01e
decoder/mad: include cleanup
2019-08-02 22:49:55 +02:00
Max Kellermann
991bbea875
Merge branch 'v0.21.x'
2019-07-29 11:32:00 +02:00
Max Kellermann
b955334882
decoder/opus: ignore case in replay gain tag names
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/604
2019-07-29 10:40:37 +02:00
Max Kellermann
d663f81420
include cleanups (powered by iwyu)
2019-07-05 09:59:58 +02:00
Max Kellermann
4650a903b4
decoder/Bridge: add noexcept
2019-07-05 08:57:51 +02:00
Max Kellermann
01fd6e5e82
Merge branch 'v0.21.x'
2019-06-27 14:51:05 +02:00
Max Kellermann
f07f8f7d88
decoder/wildmidi: add fallbacks for libwildmidi<0.4
...
Fix build breakage from commit ea639269d8
2019-06-26 23:13:23 +02:00
Max Kellermann
39b40ac1fd
decoder/wildmidi: remove unused variable wildmidi_domain
2019-06-26 23:10:20 +02:00
Max Kellermann
ea639269d8
decoder/wildmidi: throw PluginUnavailable on WildMidi_Init() error
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/589
2019-06-26 22:40:27 +02:00
Max Kellermann
0abaa3ecc5
decoder/wildmidi: throw PluginUnavailable if config file does not exist
...
This makes the configuration error more visible, possibly addressing
one part of https://github.com/MusicPlayerDaemon/MPD/issues/589
2019-06-26 22:38:40 +02:00
Max Kellermann
c4d3efe71d
decoder/List: handle exception PluginUnavailable
2019-06-26 22:02:54 +02:00
Max Kellermann
85e82e3d4d
decoder/List: annotate exceptions thrown by DecoderPlugin::Init()
2019-06-26 22:01:45 +02:00
Max Kellermann
e87f0ca771
pcm/Pcm*: drop more "Pcm" prefixes from source file names
2019-06-17 11:17:48 +02:00
Max Kellermann
a139279575
Copyright year 2019
2019-06-17 11:17:30 +02:00
Max Kellermann
22a9e866bc
decoder/mad: make enums strictly-typed
2019-06-16 10:02:51 +02:00
Max Kellermann
97e6ea57c4
decoder/mad: change "mp3_" suffix to "mad_"
2019-06-16 10:01:10 +02:00
Max Kellermann
527642a90b
decoder/Plugin: simplify compile-time initialization
...
Add a `constexpr` constructor and several `constexpr` methods to
construct a DecoderPlugin at compile time, in a way which allows
adding new methods later without having to edit each plugin.
2019-06-15 14:44:37 +02:00
Max Kellermann
aebb1baad8
decoder/sidplay: remove redundant extern
2019-06-15 14:36:12 +02:00
Max Kellermann
8a136b79e5
decoder/opus: pass StringView to ScanOneOpusTag()
2019-06-06 13:27:17 +02:00
Max Kellermann
dffa25c55e
decoder/opus: use StringView::Split()
2019-06-06 13:26:35 +02:00
Max Kellermann
548aa00111
tag/Handler: pass StringView to OnTag() and OnPair()
...
Eliminates a number of allocations, because callers don't need to copy
the strings to a newly allocated buffer only to null-terminate them.
And most callers don't need to have a null-terminated string.
2019-06-06 13:00:53 +02:00
Max Kellermann
b07bbb928a
decoder/dsdiff: allow longer tag values
2019-06-06 12:44:25 +02:00
Max Kellermann
3b5a128097
decoder/dsdiff: pass DecoderClient* to dsdiff_handle_native_tag()
2019-06-06 12:43:20 +02:00
Max Kellermann
3e40b1d9d2
decoder/dsdiff: use a fixed-size buffer for the tag value
...
Variable-length arrays are a C-only feature.
2019-06-06 12:33:14 +02:00
Max Kellermann
adffbba2a5
Merge tag 'v0.21.10'
...
release v0.21.10
2019-06-05 22:38:54 +02:00
Max Kellermann
3fae2150f5
decoder/OpusReader: return StringView
...
Since we now don't duplicate all items, we can easily remove the 64kB
limit from OpusReader::ReadString() and instead silently ignore and
skip all strings which are longer than 4 kB.
This fixes a tag duplication bug with Opus file containing a very long
`METADATA_BLOCK_PICTURE` tag, which occurred because the Opus plugin
returned false after parsing all tags, and then the MPD core fell back
to FFmpeg which scanned the tags again.
2019-06-05 22:19:35 +02:00
Max Kellermann
5d74b5cee1
input/cache: first draft of the file cache
2019-05-31 17:49:52 +02:00
Max Kellermann
8fef4af7b2
decoder/Bridge: add method OpenLocal()
2019-05-30 17:08:09 +02:00
Max Kellermann
e0d5d88104
Log: make LogLevel the first parameter
...
Prepare for templated functions.
2019-05-23 12:17:59 +02:00
Max Kellermann
1b5c1f75a4
input/InputStreams: pass std::unique_lock<> to various methods
2019-05-07 19:09:39 +02:00
Max Kellermann
cf348f9fae
decoder/Control: pass std::unique_lock<> to Cond::wait()
2019-04-26 18:34:16 +02:00
Max Kellermann
92022658f9
thread/Cond: add wait() overload which takes a unique_lock<>
...
Just like std::condition_variable, which however has no way to specify
the std::mutex directly.
2019-04-26 11:51:45 +02:00