summaryrefslogtreecommitdiff
path: root/src/decoder
diff options
context:
space:
mode:
Diffstat (limited to 'src/decoder')
-rw-r--r--src/decoder/plugins/AdPlugDecoderPlugin.cxx8
-rw-r--r--src/decoder/plugins/AudiofileDecoderPlugin.cxx15
-rw-r--r--src/decoder/plugins/DsdiffDecoderPlugin.cxx21
-rw-r--r--src/decoder/plugins/DsfDecoderPlugin.cxx22
-rw-r--r--src/decoder/plugins/FaadDecoderPlugin.cxx5
-rw-r--r--src/decoder/plugins/FfmpegDecoderPlugin.cxx13
-rw-r--r--src/decoder/plugins/FlacPcm.cxx7
-rw-r--r--src/decoder/plugins/FlacPcm.hxx3
-rw-r--r--src/decoder/plugins/FluidsynthDecoderPlugin.cxx8
-rw-r--r--src/decoder/plugins/GmeDecoderPlugin.cxx12
-rw-r--r--src/decoder/plugins/MadDecoderPlugin.cxx18
-rw-r--r--src/decoder/plugins/MpcdecDecoderPlugin.cxx13
-rw-r--r--src/decoder/plugins/Mpg123DecoderPlugin.cxx9
-rw-r--r--src/decoder/plugins/OpusDecoderPlugin.cxx1
-rw-r--r--src/decoder/plugins/PcmDecoderPlugin.cxx23
-rw-r--r--src/decoder/plugins/SidplayDecoderPlugin.cxx1
-rw-r--r--src/decoder/plugins/SndfileDecoderPlugin.cxx13
-rw-r--r--src/decoder/plugins/VorbisDecoderPlugin.cxx6
-rw-r--r--src/decoder/plugins/WavpackDecoderPlugin.cxx13
-rw-r--r--src/decoder/plugins/WildmidiDecoderPlugin.cxx1
20 files changed, 59 insertions, 153 deletions
diff --git a/src/decoder/plugins/AdPlugDecoderPlugin.cxx b/src/decoder/plugins/AdPlugDecoderPlugin.cxx
index fe3e55410..703fded55 100644
--- a/src/decoder/plugins/AdPlugDecoderPlugin.cxx
+++ b/src/decoder/plugins/AdPlugDecoderPlugin.cxx
@@ -23,7 +23,6 @@
#include "../DecoderAPI.hxx"
#include "CheckAudioFormat.hxx"
#include "fs/Path.hxx"
-#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "util/Macros.hxx"
#include "Log.hxx"
@@ -43,13 +42,8 @@ adplug_init(const ConfigBlock &block)
FormatDebug(adplug_domain, "adplug %s",
CAdPlug::get_version().c_str());
- Error error;
-
sample_rate = block.GetBlockValue("sample_rate", 48000u);
- if (!audio_check_sample_rate(sample_rate, error)) {
- LogError(error);
- return false;
- }
+ CheckSampleRate(sample_rate);
return true;
}
diff --git a/src/decoder/plugins/AudiofileDecoderPlugin.cxx b/src/decoder/plugins/AudiofileDecoderPlugin.cxx
index b1b97b272..62a81b071 100644
--- a/src/decoder/plugins/AudiofileDecoderPlugin.cxx
+++ b/src/decoder/plugins/AudiofileDecoderPlugin.cxx
@@ -24,7 +24,6 @@
#include "CheckAudioFormat.hxx"
#include "tag/TagHandler.hxx"
#include "util/ScopeExit.hxx"
-#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "Log.hxx"
@@ -198,16 +197,10 @@ audiofile_stream_decode(Decoder &decoder, InputStream &is)
AtScopeExit(fh) { afCloseFile(fh); };
- Error error;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format,
- afGetRate(fh, AF_DEFAULT_TRACK),
- audiofile_setup_sample_format(fh),
- afGetVirtualChannels(fh, AF_DEFAULT_TRACK),
- error)) {
- LogError(error);
- return;
- }
+ const auto audio_format =
+ CheckAudioFormat(afGetRate(fh, AF_DEFAULT_TRACK),
+ audiofile_setup_sample_format(fh),
+ afGetVirtualChannels(fh, AF_DEFAULT_TRACK));
const auto total_time = audiofile_get_duration(fh);
diff --git a/src/decoder/plugins/DsdiffDecoderPlugin.cxx b/src/decoder/plugins/DsdiffDecoderPlugin.cxx
index 6653f2053..78fda3a12 100644
--- a/src/decoder/plugins/DsdiffDecoderPlugin.cxx
+++ b/src/decoder/plugins/DsdiffDecoderPlugin.cxx
@@ -32,7 +32,6 @@
#include "input/InputStream.hxx"
#include "CheckAudioFormat.hxx"
#include "util/bit_reverse.h"
-#include "util/Error.hxx"
#include "system/ByteOrder.hxx"
#include "tag/TagHandler.hxx"
#include "DsdLib.hxx"
@@ -426,14 +425,9 @@ dsdiff_stream_decode(Decoder &decoder, InputStream &is)
if (!dsdiff_read_metadata(&decoder, is, &metadata, &chunk_header))
return;
- Error error;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format, metadata.sample_rate / 8,
- SampleFormat::DSD,
- metadata.channels, error)) {
- LogError(error);
- return;
- }
+ auto audio_format = CheckAudioFormat(metadata.sample_rate / 8,
+ SampleFormat::DSD,
+ metadata.channels);
/* calculate song time from DSD chunk size and sample frequency */
offset_type chunk_size = metadata.chunk_size;
@@ -466,12 +460,9 @@ dsdiff_scan_stream(InputStream &is,
if (!dsdiff_read_metadata(nullptr, is, &metadata, &chunk_header))
return false;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format, metadata.sample_rate / 8,
- SampleFormat::DSD,
- metadata.channels, IgnoreError()))
- /* refuse to parse files which we cannot play anyway */
- return false;
+ auto audio_format = CheckAudioFormat(metadata.sample_rate / 8,
+ SampleFormat::DSD,
+ metadata.channels);
/* calculate song time and add as tag */
uint64_t n_frames = metadata.chunk_size / audio_format.channels;
diff --git a/src/decoder/plugins/DsfDecoderPlugin.cxx b/src/decoder/plugins/DsfDecoderPlugin.cxx
index 47d8d004d..8dce68a3a 100644
--- a/src/decoder/plugins/DsfDecoderPlugin.cxx
+++ b/src/decoder/plugins/DsfDecoderPlugin.cxx
@@ -33,7 +33,6 @@
#include "input/InputStream.hxx"
#include "CheckAudioFormat.hxx"
#include "util/bit_reverse.h"
-#include "util/Error.hxx"
#include "system/ByteOrder.hxx"
#include "DsdLib.hxx"
#include "tag/TagHandler.hxx"
@@ -307,14 +306,10 @@ dsf_stream_decode(Decoder &decoder, InputStream &is)
if (!dsf_read_metadata(&decoder, is, &metadata))
return;
- Error error;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format, metadata.sample_rate / 8,
- SampleFormat::DSD,
- metadata.channels, error)) {
- LogError(error);
- return;
- }
+ auto audio_format = CheckAudioFormat(metadata.sample_rate / 8,
+ SampleFormat::DSD,
+ metadata.channels);
+
/* Calculate song time from DSD chunk size and sample frequency */
const auto n_blocks = metadata.n_blocks;
auto songtime = SongTime::FromScale<uint64_t>(n_blocks * DSF_BLOCK_SIZE,
@@ -339,12 +334,9 @@ dsf_scan_stream(InputStream &is,
if (!dsf_read_metadata(nullptr, is, &metadata))
return false;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format, metadata.sample_rate / 8,
- SampleFormat::DSD,
- metadata.channels, IgnoreError()))
- /* refuse to parse files which we cannot play anyway */
- return false;
+ auto audio_format = CheckAudioFormat(metadata.sample_rate / 8,
+ SampleFormat::DSD,
+ metadata.channels);
/* calculate song time and add as tag */
const auto n_blocks = metadata.n_blocks;
diff --git a/src/decoder/plugins/FaadDecoderPlugin.cxx b/src/decoder/plugins/FaadDecoderPlugin.cxx
index 79e3755c8..bc12a1509 100644
--- a/src/decoder/plugins/FaadDecoderPlugin.cxx
+++ b/src/decoder/plugins/FaadDecoderPlugin.cxx
@@ -273,8 +273,9 @@ faad_decoder_init(NeAACDecHandle decoder, DecoderBuffer &buffer,
buffer.Consume(nbytes);
- return audio_format_init_checked(audio_format, sample_rate,
- SampleFormat::S16, channels, error);
+ audio_format = CheckAudioFormat(sample_rate, SampleFormat::S16,
+ channels);
+ return true;
}
/**
diff --git a/src/decoder/plugins/FfmpegDecoderPlugin.cxx b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
index 3df5053fb..3fd8e4d4d 100644
--- a/src/decoder/plugins/FfmpegDecoderPlugin.cxx
+++ b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
@@ -40,7 +40,6 @@
#include "CheckAudioFormat.hxx"
#include "util/ScopeExit.hxx"
#include "util/ConstBuffer.hxx"
-#include "util/Error.hxx"
#include "LogV.hxx"
extern "C" {
@@ -666,15 +665,9 @@ FfmpegDecode(Decoder &decoder, InputStream &input,
return;
}
- Error error;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format,
- codec_params.sample_rate,
- sample_format,
- codec_params.channels, error)) {
- LogError(error);
- return;
- }
+ const auto audio_format = CheckAudioFormat(codec_params.sample_rate,
+ sample_format,
+ codec_params.channels);
/* the audio format must be read from AVCodecContext by now,
because avcodec_open() has been demonstrated to fill bogus
diff --git a/src/decoder/plugins/FlacPcm.cxx b/src/decoder/plugins/FlacPcm.cxx
index f1e3e3a37..82d2dadf4 100644
--- a/src/decoder/plugins/FlacPcm.cxx
+++ b/src/decoder/plugins/FlacPcm.cxx
@@ -58,12 +58,7 @@ FlacPcmImport::Open(unsigned sample_rate, unsigned bits_per_sample,
return false;
}
- if (!audio_format_init_checked(audio_format,
- sample_rate,
- sample_format,
- channels, error))
- return false;
-
+ audio_format = CheckAudioFormat(sample_rate, sample_format, channels);
return true;
}
diff --git a/src/decoder/plugins/FlacPcm.hxx b/src/decoder/plugins/FlacPcm.hxx
index d40d08362..9c6641025 100644
--- a/src/decoder/plugins/FlacPcm.hxx
+++ b/src/decoder/plugins/FlacPcm.hxx
@@ -39,9 +39,6 @@ class FlacPcmImport {
AudioFormat audio_format;
public:
- /**
- * @return false on error
- */
bool Open(unsigned sample_rate, unsigned bits_per_sample,
unsigned channels, Error &error);
diff --git a/src/decoder/plugins/FluidsynthDecoderPlugin.cxx b/src/decoder/plugins/FluidsynthDecoderPlugin.cxx
index cfe9cab63..c40beff8a 100644
--- a/src/decoder/plugins/FluidsynthDecoderPlugin.cxx
+++ b/src/decoder/plugins/FluidsynthDecoderPlugin.cxx
@@ -22,7 +22,6 @@
#include "../DecoderAPI.hxx"
#include "CheckAudioFormat.hxx"
#include "fs/Path.hxx"
-#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "util/Macros.hxx"
#include "Log.hxx"
@@ -75,13 +74,8 @@ fluidsynth_mpd_log_function(int level, char *message, gcc_unused void *data)
static bool
fluidsynth_init(const ConfigBlock &block)
{
- Error error;
-
sample_rate = block.GetBlockValue("sample_rate", 48000u);
- if (!audio_check_sample_rate(sample_rate, error)) {
- LogError(error);
- return false;
- }
+ CheckSampleRate(sample_rate);
soundfont_path = block.GetBlockValue("soundfont",
"/usr/share/sounds/sf2/FluidR3_GM.sf2");
diff --git a/src/decoder/plugins/GmeDecoderPlugin.cxx b/src/decoder/plugins/GmeDecoderPlugin.cxx
index 422e843be..e47447c9d 100644
--- a/src/decoder/plugins/GmeDecoderPlugin.cxx
+++ b/src/decoder/plugins/GmeDecoderPlugin.cxx
@@ -29,7 +29,6 @@
#include "util/FormatString.hxx"
#include "util/AllocatedString.hxx"
#include "util/UriUtil.hxx"
-#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "Log.hxx"
@@ -168,14 +167,9 @@ gme_file_decode(Decoder &decoder, Path path_fs)
/* initialize the MPD decoder */
- Error error;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format, GME_SAMPLE_RATE,
- SampleFormat::S16, GME_CHANNELS,
- error)) {
- LogError(error);
- return;
- }
+ const auto audio_format = CheckAudioFormat(GME_SAMPLE_RATE,
+ SampleFormat::S16,
+ GME_CHANNELS);
decoder_initialized(decoder, audio_format, true, song_len);
diff --git a/src/decoder/plugins/MadDecoderPlugin.cxx b/src/decoder/plugins/MadDecoderPlugin.cxx
index 936e38822..cb34aecea 100644
--- a/src/decoder/plugins/MadDecoderPlugin.cxx
+++ b/src/decoder/plugins/MadDecoderPlugin.cxx
@@ -29,7 +29,6 @@
#include "tag/MixRamp.hxx"
#include "CheckAudioFormat.hxx"
#include "util/StringCompare.hxx"
-#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "Log.hxx"
@@ -1051,19 +1050,10 @@ mp3_decode(Decoder &decoder, InputStream &input_stream)
data.AllocateBuffers();
- Error error;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format,
- data.frame.header.samplerate,
- SampleFormat::S24_P32,
- MAD_NCHANNELS(&data.frame.header),
- error)) {
- LogError(error);
- delete tag;
- return;
- }
-
- decoder_initialized(decoder, audio_format,
+ decoder_initialized(decoder,
+ CheckAudioFormat(data.frame.header.samplerate,
+ SampleFormat::S24_P32,
+ MAD_NCHANNELS(&data.frame.header)),
input_stream.IsSeekable(),
data.total_time);
diff --git a/src/decoder/plugins/MpcdecDecoderPlugin.cxx b/src/decoder/plugins/MpcdecDecoderPlugin.cxx
index ee14fcea2..3becac779 100644
--- a/src/decoder/plugins/MpcdecDecoderPlugin.cxx
+++ b/src/decoder/plugins/MpcdecDecoderPlugin.cxx
@@ -24,7 +24,6 @@
#include "CheckAudioFormat.hxx"
#include "pcm/Traits.hxx"
#include "tag/TagHandler.hxx"
-#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "util/Macros.hxx"
#include "util/Clamp.hxx"
@@ -162,15 +161,9 @@ mpcdec_decode(Decoder &mpd_decoder, InputStream &is)
mpc_streaminfo info;
mpc_demux_get_info(demux, &info);
- Error error;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format, info.sample_freq,
- mpcdec_sample_format,
- info.channels, error)) {
- LogError(error);
- mpc_demux_exit(demux);
- return;
- }
+ auto audio_format = CheckAudioFormat(info.sample_freq,
+ mpcdec_sample_format,
+ info.channels);
ReplayGainInfo rgi;
rgi.Clear();
diff --git a/src/decoder/plugins/Mpg123DecoderPlugin.cxx b/src/decoder/plugins/Mpg123DecoderPlugin.cxx
index 1b62fc43e..942398b20 100644
--- a/src/decoder/plugins/Mpg123DecoderPlugin.cxx
+++ b/src/decoder/plugins/Mpg123DecoderPlugin.cxx
@@ -26,7 +26,6 @@
#include "tag/ReplayGain.hxx"
#include "tag/MixRamp.hxx"
#include "fs/Path.hxx"
-#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "util/StringView.hxx"
#include "Log.hxx"
@@ -95,13 +94,7 @@ mpd_mpg123_open(mpg123_handle *handle, const char *path_fs,
return false;
}
- Error error2;
- if (!audio_format_init_checked(audio_format, rate, SampleFormat::S16,
- channels, error2)) {
- LogError(error2);
- return false;
- }
-
+ audio_format = CheckAudioFormat(rate, SampleFormat::S16, channels);
return true;
}
diff --git a/src/decoder/plugins/OpusDecoderPlugin.cxx b/src/decoder/plugins/OpusDecoderPlugin.cxx
index 17dd58d48..6e60fb3cd 100644
--- a/src/decoder/plugins/OpusDecoderPlugin.cxx
+++ b/src/decoder/plugins/OpusDecoderPlugin.cxx
@@ -32,7 +32,6 @@
#include "tag/TagHandler.hxx"
#include "tag/TagBuilder.hxx"
#include "input/InputStream.hxx"
-#include "util/Error.hxx"
#include "util/RuntimeError.hxx"
#include "Log.hxx"
diff --git a/src/decoder/plugins/PcmDecoderPlugin.cxx b/src/decoder/plugins/PcmDecoderPlugin.cxx
index 3a826b086..bc39b1324 100644
--- a/src/decoder/plugins/PcmDecoderPlugin.cxx
+++ b/src/decoder/plugins/PcmDecoderPlugin.cxx
@@ -23,7 +23,7 @@
#include "CheckAudioFormat.hxx"
#include "input/InputStream.hxx"
#include "system/ByteOrder.hxx"
-#include "util/Error.hxx"
+#include "util/Domain.hxx"
#include "util/ByteReverse.hxx"
#include "util/NumberParser.hxx"
#include "util/MimeType.hxx"
@@ -33,6 +33,8 @@
#include <string.h>
+static constexpr Domain pcm_decoder_domain("pcm_decoder");
+
static void
pcm_stream_decode(Decoder &decoder, InputStream &is)
{
@@ -62,7 +64,6 @@ pcm_stream_decode(Decoder &decoder, InputStream &is)
{
const auto mime_parameters = ParseMimeTypeParameters(mime);
- Error error;
/* MIME type parameters according to RFC 2586 */
auto i = mime_parameters.find("rate");
@@ -71,14 +72,16 @@ pcm_stream_decode(Decoder &decoder, InputStream &is)
char *endptr;
unsigned value = ParseUnsigned(s, &endptr);
if (endptr == s || *endptr != 0) {
- FormatWarning(audio_format_domain,
+ FormatWarning(pcm_decoder_domain,
"Failed to parse sample rate: %s",
s);
return;
}
- if (!audio_check_sample_rate(value, error)) {
- LogError(error);
+ try {
+ CheckSampleRate(value);
+ } catch (const std::runtime_error &e) {
+ LogError(e);
return;
}
@@ -91,14 +94,16 @@ pcm_stream_decode(Decoder &decoder, InputStream &is)
char *endptr;
unsigned value = ParseUnsigned(s, &endptr);
if (endptr == s || *endptr != 0) {
- FormatWarning(audio_format_domain,
+ FormatWarning(pcm_decoder_domain,
"Failed to parse sample rate: %s",
s);
return;
}
- if (!audio_check_channel_count(value, error)) {
- LogError(error);
+ try {
+ CheckChannelCount(value);
+ } catch (const std::runtime_error &e) {
+ LogError(e);
return;
}
@@ -107,7 +112,7 @@ pcm_stream_decode(Decoder &decoder, InputStream &is)
}
if (audio_format.sample_rate == 0) {
- FormatWarning(audio_format_domain,
+ FormatWarning(pcm_decoder_domain,
"Missing 'rate' parameter: %s",
mime);
return;
diff --git a/src/decoder/plugins/SidplayDecoderPlugin.cxx b/src/decoder/plugins/SidplayDecoderPlugin.cxx
index 6a49f2234..8cc99cabd 100644
--- a/src/decoder/plugins/SidplayDecoderPlugin.cxx
+++ b/src/decoder/plugins/SidplayDecoderPlugin.cxx
@@ -27,7 +27,6 @@
#include "util/FormatString.hxx"
#include "util/AllocatedString.hxx"
#include "util/Domain.hxx"
-#include "util/Error.hxx"
#include "system/ByteOrder.hxx"
#include "system/FatalError.hxx"
#include "Log.hxx"
diff --git a/src/decoder/plugins/SndfileDecoderPlugin.cxx b/src/decoder/plugins/SndfileDecoderPlugin.cxx
index ec45270fb..051166c1c 100644
--- a/src/decoder/plugins/SndfileDecoderPlugin.cxx
+++ b/src/decoder/plugins/SndfileDecoderPlugin.cxx
@@ -23,7 +23,6 @@
#include "input/InputStream.hxx"
#include "CheckAudioFormat.hxx"
#include "tag/TagHandler.hxx"
-#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "Log.hxx"
@@ -201,14 +200,10 @@ sndfile_stream_decode(Decoder &decoder, InputStream &is)
return;
}
- Error error;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format, info.samplerate,
- sndfile_sample_format(info),
- info.channels, error)) {
- LogError(error);
- return;
- }
+ const auto audio_format =
+ CheckAudioFormat(info.samplerate,
+ sndfile_sample_format(info),
+ info.channels);
decoder_initialized(decoder, audio_format, info.seekable,
sndfile_duration(info));
diff --git a/src/decoder/plugins/VorbisDecoderPlugin.cxx b/src/decoder/plugins/VorbisDecoderPlugin.cxx
index 178303df8..e63e76039 100644
--- a/src/decoder/plugins/VorbisDecoderPlugin.cxx
+++ b/src/decoder/plugins/VorbisDecoderPlugin.cxx
@@ -29,7 +29,6 @@
#include "input/Reader.hxx"
#include "OggCodec.hxx"
#include "pcm/Interleave.hxx"
-#include "util/Error.hxx"
#include "util/Macros.hxx"
#include "util/ScopeExit.hxx"
#include "CheckAudioFormat.hxx"
@@ -166,10 +165,7 @@ VorbisDecoder::SubmitInit()
{
assert(!dsp_initialized);
- Error error;
- if (!audio_format_init_checked(audio_format, vi.rate, sample_format,
- vi.channels, error))
- throw std::runtime_error(error.GetMessage());
+ audio_format = CheckAudioFormat(vi.rate, sample_format, vi.channels);
frame_size = audio_format.GetFrameSize();
diff --git a/src/decoder/plugins/WavpackDecoderPlugin.cxx b/src/decoder/plugins/WavpackDecoderPlugin.cxx
index 7dd3ed7b0..1835525b2 100644
--- a/src/decoder/plugins/WavpackDecoderPlugin.cxx
+++ b/src/decoder/plugins/WavpackDecoderPlugin.cxx
@@ -25,7 +25,6 @@
#include "tag/TagHandler.hxx"
#include "tag/ApeTag.hxx"
#include "fs/Path.hxx"
-#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "util/Macros.hxx"
#include "util/Alloc.hxx"
@@ -149,15 +148,9 @@ wavpack_decode(Decoder &decoder, WavpackContext *wpc, bool can_seek)
wavpack_bits_to_sample_format(is_float,
WavpackGetBytesPerSample(wpc));
- Error error;
- AudioFormat audio_format;
- if (!audio_format_init_checked(audio_format,
- WavpackGetSampleRate(wpc),
- sample_format,
- WavpackGetNumChannels(wpc), error)) {
- LogError(error);
- return;
- }
+ auto audio_format = CheckAudioFormat(WavpackGetSampleRate(wpc),
+ sample_format,
+ WavpackGetNumChannels(wpc));
const format_samples_t format_samples = is_float
? format_samples_float
diff --git a/src/decoder/plugins/WildmidiDecoderPlugin.cxx b/src/decoder/plugins/WildmidiDecoderPlugin.cxx
index ed879ae9f..d699c4ea6 100644
--- a/src/decoder/plugins/WildmidiDecoderPlugin.cxx
+++ b/src/decoder/plugins/WildmidiDecoderPlugin.cxx
@@ -21,7 +21,6 @@
#include "WildmidiDecoderPlugin.hxx"
#include "../DecoderAPI.hxx"
#include "tag/TagHandler.hxx"
-#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "fs/AllocatedPath.hxx"
#include "fs/FileSystem.hxx"