util/Error: new error passing library
Replaces GLib's GError.
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
#include "TagHandler.hxx"
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <adplug/adplug.h>
|
||||
#include <adplug/emuopl.h>
|
||||
@@ -38,12 +39,11 @@ static unsigned sample_rate;
|
||||
static bool
|
||||
adplug_init(const config_param ¶m)
|
||||
{
|
||||
GError *error = NULL;
|
||||
Error error;
|
||||
|
||||
sample_rate = param.GetBlockValue("sample_rate", 48000u);
|
||||
if (!audio_check_sample_rate(sample_rate, &error)) {
|
||||
g_warning("%s\n", error->message);
|
||||
g_error_free(error);
|
||||
if (!audio_check_sample_rate(sample_rate, error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <audiofile.h>
|
||||
#include <af_vfs.h>
|
||||
@@ -53,13 +54,11 @@ static ssize_t
|
||||
audiofile_file_read(AFvirtualfile *vfile, void *data, size_t length)
|
||||
{
|
||||
struct input_stream *is = (struct input_stream *) vfile->closure;
|
||||
GError *error = nullptr;
|
||||
size_t nbytes;
|
||||
|
||||
nbytes = input_stream_lock_read(is, data, length, &error);
|
||||
if (nbytes == 0 && error != nullptr) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
Error error;
|
||||
size_t nbytes = input_stream_lock_read(is, data, length, error);
|
||||
if (nbytes == 0 && error.IsDefined()) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -93,7 +92,9 @@ audiofile_file_seek(AFvirtualfile *vfile, AFfileoffset offset, int is_relative)
|
||||
{
|
||||
struct input_stream *is = (struct input_stream *) vfile->closure;
|
||||
int whence = (is_relative ? SEEK_CUR : SEEK_SET);
|
||||
if (input_stream_lock_seek(is, offset, whence, nullptr)) {
|
||||
|
||||
Error error;
|
||||
if (input_stream_lock_seek(is, offset, whence, error)) {
|
||||
return input_stream_get_offset(is);
|
||||
} else {
|
||||
return -1;
|
||||
@@ -156,7 +157,6 @@ audiofile_setup_sample_format(AFfilehandle af_fp)
|
||||
static void
|
||||
audiofile_stream_decode(struct decoder *decoder, struct input_stream *is)
|
||||
{
|
||||
GError *error = nullptr;
|
||||
AFvirtualfile *vf;
|
||||
int fs, frame_count;
|
||||
AFfilehandle af_fp;
|
||||
@@ -180,13 +180,13 @@ audiofile_stream_decode(struct decoder *decoder, struct input_stream *is)
|
||||
return;
|
||||
}
|
||||
|
||||
Error error;
|
||||
if (!audio_format_init_checked(audio_format,
|
||||
afGetRate(af_fp, AF_DEFAULT_TRACK),
|
||||
audiofile_setup_sample_format(af_fp),
|
||||
afGetVirtualChannels(af_fp, AF_DEFAULT_TRACK),
|
||||
&error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
afCloseFile(af_fp);
|
||||
return;
|
||||
}
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include "util/bit_reverse.h"
|
||||
#include "TagHandler.hxx"
|
||||
#include "TagId3.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
@@ -64,7 +65,7 @@ dsdlib_skip_to(struct decoder *decoder, struct input_stream *is,
|
||||
goffset offset)
|
||||
{
|
||||
if (input_stream_is_seekable(is))
|
||||
return input_stream_seek(is, offset, SEEK_SET, nullptr);
|
||||
return input_stream_seek(is, offset, SEEK_SET, IgnoreError());
|
||||
|
||||
if (input_stream_get_offset(is) > offset)
|
||||
return false;
|
||||
@@ -97,7 +98,7 @@ dsdlib_skip(struct decoder *decoder, struct input_stream *is,
|
||||
return true;
|
||||
|
||||
if (input_stream_is_seekable(is))
|
||||
return input_stream_seek(is, delta, SEEK_CUR, nullptr);
|
||||
return input_stream_seek(is, delta, SEEK_CUR, IgnoreError());
|
||||
|
||||
char buffer[8192];
|
||||
while (delta > 0) {
|
||||
|
@@ -31,6 +31,7 @@
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "util/bit_reverse.h"
|
||||
#include "util/Error.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "DsdLib.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
@@ -432,13 +433,12 @@ dsdiff_stream_decode(struct decoder *decoder, struct input_stream *is)
|
||||
if (!dsdiff_read_metadata(decoder, is, &metadata, &chunk_header))
|
||||
return;
|
||||
|
||||
GError *error = nullptr;
|
||||
Error error;
|
||||
AudioFormat audio_format;
|
||||
if (!audio_format_init_checked(audio_format, metadata.sample_rate / 8,
|
||||
SampleFormat::DSD,
|
||||
metadata.channels, &error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
metadata.channels, error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -490,7 +490,7 @@ dsdiff_scan_stream(struct input_stream *is,
|
||||
AudioFormat audio_format;
|
||||
if (!audio_format_init_checked(audio_format, metadata.sample_rate / 8,
|
||||
SampleFormat::DSD,
|
||||
metadata.channels, nullptr))
|
||||
metadata.channels, IgnoreError()))
|
||||
/* refuse to parse files which we cannot play anyway */
|
||||
return false;
|
||||
|
||||
|
@@ -32,6 +32,7 @@
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "util/bit_reverse.h"
|
||||
#include "util/Error.hxx"
|
||||
#include "DsdLib.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
|
||||
@@ -284,13 +285,12 @@ dsf_stream_decode(struct decoder *decoder, struct input_stream *is)
|
||||
if (!dsf_read_metadata(decoder, is, &metadata))
|
||||
return;
|
||||
|
||||
GError *error = NULL;
|
||||
Error error;
|
||||
AudioFormat audio_format;
|
||||
if (!audio_format_init_checked(audio_format, metadata.sample_rate / 8,
|
||||
SampleFormat::DSD,
|
||||
metadata.channels, &error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
metadata.channels, error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
return;
|
||||
}
|
||||
/* Calculate song time from DSD chunk size and sample frequency */
|
||||
@@ -320,7 +320,7 @@ dsf_scan_stream(struct input_stream *is,
|
||||
AudioFormat audio_format;
|
||||
if (!audio_format_init_checked(audio_format, metadata.sample_rate / 8,
|
||||
SampleFormat::DSD,
|
||||
metadata.channels, NULL))
|
||||
metadata.channels, IgnoreError()))
|
||||
/* refuse to parse files which we cannot play anyway */
|
||||
return false;
|
||||
|
||||
|
@@ -23,6 +23,8 @@
|
||||
#include "DecoderBuffer.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "util/Domain.hxx"
|
||||
|
||||
#include <neaacdec.h>
|
||||
|
||||
@@ -42,14 +44,7 @@ static const unsigned adts_sample_rates[] =
|
||||
16000, 12000, 11025, 8000, 7350, 0, 0, 0
|
||||
};
|
||||
|
||||
/**
|
||||
* The GLib quark used for errors reported by this plugin.
|
||||
*/
|
||||
static inline GQuark
|
||||
faad_decoder_quark(void)
|
||||
{
|
||||
return g_quark_from_static_string("faad");
|
||||
}
|
||||
static constexpr Domain faad_decoder_domain("faad_decoder");
|
||||
|
||||
/**
|
||||
* Check whether the buffer head is an AAC frame, and return the frame
|
||||
@@ -211,7 +206,7 @@ faad_song_duration(DecoderBuffer *buffer, struct input_stream *is)
|
||||
/* obtain the duration from the ADTS header */
|
||||
float song_length = adts_song_duration(buffer);
|
||||
|
||||
input_stream_lock_seek(is, tagsize, SEEK_SET, nullptr);
|
||||
input_stream_lock_seek(is, tagsize, SEEK_SET, IgnoreError());
|
||||
|
||||
data = (const uint8_t *)decoder_buffer_read(buffer, &length);
|
||||
if (data != nullptr)
|
||||
@@ -248,7 +243,7 @@ faad_song_duration(DecoderBuffer *buffer, struct input_stream *is)
|
||||
*/
|
||||
static bool
|
||||
faad_decoder_init(NeAACDecHandle decoder, DecoderBuffer *buffer,
|
||||
AudioFormat &audio_format, GError **error_r)
|
||||
AudioFormat &audio_format, Error &error)
|
||||
{
|
||||
int32_t nbytes;
|
||||
uint32_t sample_rate;
|
||||
@@ -266,8 +261,7 @@ faad_decoder_init(NeAACDecHandle decoder, DecoderBuffer *buffer,
|
||||
const unsigned char *data = (const unsigned char *)
|
||||
decoder_buffer_read(buffer, &length);
|
||||
if (data == nullptr) {
|
||||
g_set_error(error_r, faad_decoder_quark(), 0,
|
||||
"Empty file");
|
||||
error.Set(faad_decoder_domain, "Empty file");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -277,15 +271,14 @@ faad_decoder_init(NeAACDecHandle decoder, DecoderBuffer *buffer,
|
||||
length,
|
||||
sample_rate_p, &channels);
|
||||
if (nbytes < 0) {
|
||||
g_set_error(error_r, faad_decoder_quark(), 0,
|
||||
"Not an AAC stream");
|
||||
error.Set(faad_decoder_domain, "Not an AAC stream");
|
||||
return false;
|
||||
}
|
||||
|
||||
decoder_buffer_consume(buffer, nbytes);
|
||||
|
||||
return audio_format_init_checked(audio_format, sample_rate,
|
||||
SampleFormat::S16, channels, error_r);
|
||||
SampleFormat::S16, channels, error);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -336,7 +329,8 @@ faad_get_file_time_float(struct input_stream *is)
|
||||
|
||||
decoder_buffer_fill(buffer);
|
||||
|
||||
ret = faad_decoder_init(decoder, buffer, audio_format, nullptr);
|
||||
ret = faad_decoder_init(decoder, buffer, audio_format,
|
||||
IgnoreError());
|
||||
if (ret)
|
||||
length = 0;
|
||||
|
||||
@@ -368,7 +362,6 @@ faad_get_file_time(struct input_stream *is)
|
||||
static void
|
||||
faad_stream_decode(struct decoder *mpd_decoder, struct input_stream *is)
|
||||
{
|
||||
GError *error = nullptr;
|
||||
float total_time = 0;
|
||||
AudioFormat audio_format;
|
||||
bool ret;
|
||||
@@ -400,10 +393,10 @@ faad_stream_decode(struct decoder *mpd_decoder, struct input_stream *is)
|
||||
|
||||
/* initialize it */
|
||||
|
||||
ret = faad_decoder_init(decoder, buffer, audio_format, &error);
|
||||
Error error;
|
||||
ret = faad_decoder_init(decoder, buffer, audio_format, error);
|
||||
if (!ret) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
g_warning("%s", error.GetMessage());
|
||||
NeAACDecClose(decoder);
|
||||
return;
|
||||
}
|
||||
|
@@ -27,6 +27,7 @@
|
||||
#include "TagHandler.hxx"
|
||||
#include "InputStream.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
@@ -124,7 +125,8 @@ mpd_ffmpeg_stream_seek(void *opaque, int64_t pos, int whence)
|
||||
if (whence == AVSEEK_SIZE)
|
||||
return stream->input->size;
|
||||
|
||||
if (!input_stream_lock_seek(stream->input, pos, whence, NULL))
|
||||
Error error;
|
||||
if (!input_stream_lock_seek(stream->input, pos, whence, error))
|
||||
return -1;
|
||||
|
||||
return stream->input->offset;
|
||||
@@ -343,10 +345,12 @@ ffmpeg_probe(struct decoder *decoder, struct input_stream *is)
|
||||
PADDING = 16,
|
||||
};
|
||||
|
||||
Error error;
|
||||
|
||||
unsigned char *buffer = (unsigned char *)g_malloc(BUFFER_SIZE);
|
||||
size_t nbytes = decoder_read(decoder, is, buffer, BUFFER_SIZE);
|
||||
if (nbytes <= PADDING ||
|
||||
!input_stream_lock_seek(is, 0, SEEK_SET, NULL)) {
|
||||
!input_stream_lock_seek(is, 0, SEEK_SET, error)) {
|
||||
g_free(buffer);
|
||||
return NULL;
|
||||
}
|
||||
@@ -427,14 +431,13 @@ ffmpeg_decode(struct decoder *decoder, struct input_stream *input)
|
||||
if (sample_format == SampleFormat::UNDEFINED)
|
||||
return;
|
||||
|
||||
GError *error = NULL;
|
||||
Error error;
|
||||
AudioFormat audio_format;
|
||||
if (!audio_format_init_checked(audio_format,
|
||||
codec_context->sample_rate,
|
||||
sample_format,
|
||||
codec_context->channels, &error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
codec_context->channels, error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
avformat_close_input(&format_context);
|
||||
return;
|
||||
}
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include "FlacMetadata.hxx"
|
||||
#include "FlacPcm.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
@@ -68,13 +69,12 @@ flac_got_stream_info(struct flac_data *data,
|
||||
if (data->initialized || data->unsupported)
|
||||
return;
|
||||
|
||||
GError *error = nullptr;
|
||||
Error error;
|
||||
if (!audio_format_init_checked(data->audio_format,
|
||||
stream_info->sample_rate,
|
||||
flac_sample_format(stream_info->bits_per_sample),
|
||||
stream_info->channels, &error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
stream_info->channels, error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
data->unsupported = true;
|
||||
return;
|
||||
}
|
||||
@@ -131,13 +131,12 @@ flac_got_first_frame(struct flac_data *data, const FLAC__FrameHeader *header)
|
||||
if (data->unsupported)
|
||||
return false;
|
||||
|
||||
GError *error = nullptr;
|
||||
Error error;
|
||||
if (!audio_format_init_checked(data->audio_format,
|
||||
header->sample_rate,
|
||||
flac_sample_format(header->bits_per_sample),
|
||||
header->channels, &error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
header->channels, error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
data->unsupported = true;
|
||||
return false;
|
||||
}
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include "FlacCommon.hxx"
|
||||
#include "FlacMetadata.hxx"
|
||||
#include "OggCodec.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
@@ -330,7 +331,7 @@ oggflac_decode(struct decoder *decoder, struct input_stream *input_stream)
|
||||
|
||||
/* rewind the stream, because ogg_codec_detect() has
|
||||
moved it */
|
||||
input_stream_lock_seek(input_stream, 0, SEEK_SET, nullptr);
|
||||
input_stream_lock_seek(input_stream, 0, SEEK_SET, IgnoreError());
|
||||
|
||||
flac_decode_internal(decoder, input_stream, true);
|
||||
}
|
||||
|
@@ -19,7 +19,7 @@
|
||||
|
||||
#include "config.h"
|
||||
#include "FlacIOHandle.hxx"
|
||||
#include "io_error.h"
|
||||
#include "util/Error.hxx"
|
||||
#include "gcc.h"
|
||||
|
||||
#include <errno.h>
|
||||
@@ -35,21 +35,20 @@ FlacIORead(void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle)
|
||||
/* libFLAC is very picky about short reads, and expects the IO
|
||||
callback to fill the whole buffer (undocumented!) */
|
||||
|
||||
GError *error = nullptr;
|
||||
Error error;
|
||||
while (p < end) {
|
||||
size_t nbytes = input_stream_lock_read(is, p, end - p, &error);
|
||||
size_t nbytes = input_stream_lock_read(is, p, end - p, error);
|
||||
if (nbytes == 0) {
|
||||
if (error == nullptr)
|
||||
if (!error.IsDefined())
|
||||
/* end of file */
|
||||
break;
|
||||
|
||||
if (error->domain == errno_quark())
|
||||
errno = error->code;
|
||||
if (error.IsDomain(errno_domain))
|
||||
errno = error.GetCode();
|
||||
else
|
||||
/* just some random non-zero
|
||||
errno value */
|
||||
errno = EINVAL;
|
||||
g_error_free(error);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -67,7 +66,8 @@ FlacIOSeek(FLAC__IOHandle handle, FLAC__int64 offset, int whence)
|
||||
{
|
||||
input_stream *is = (input_stream *)handle;
|
||||
|
||||
return input_stream_lock_seek(is, offset, whence, nullptr) ? 0 : -1;
|
||||
Error error;
|
||||
return input_stream_lock_seek(is, offset, whence, error) ? 0 : -1;
|
||||
}
|
||||
|
||||
static FLAC__int64
|
||||
|
@@ -20,8 +20,9 @@
|
||||
#include "config.h"
|
||||
#include "FlacInput.hxx"
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "gcc.h"
|
||||
#include "InputStream.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "gcc.h"
|
||||
|
||||
FLAC__StreamDecoderReadStatus
|
||||
FlacInput::Read(FLAC__byte buffer[], size_t *bytes)
|
||||
@@ -47,9 +48,10 @@ FlacInput::Seek(FLAC__uint64 absolute_byte_offset)
|
||||
if (!input_stream->seekable)
|
||||
return FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED;
|
||||
|
||||
::Error error;
|
||||
if (!input_stream_lock_seek(input_stream,
|
||||
absolute_byte_offset, SEEK_SET,
|
||||
nullptr))
|
||||
error))
|
||||
return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR;
|
||||
|
||||
return FLAC__STREAM_DECODER_SEEK_STATUS_OK;
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "FluidsynthDecoderPlugin.hxx"
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "conf.h"
|
||||
|
||||
#include <glib.h>
|
||||
@@ -73,12 +74,11 @@ fluidsynth_mpd_log_function(int level, char *message, gcc_unused void *data)
|
||||
static bool
|
||||
fluidsynth_init(const config_param ¶m)
|
||||
{
|
||||
GError *error = nullptr;
|
||||
Error error;
|
||||
|
||||
sample_rate = param.GetBlockValue("sample_rate", 48000u);
|
||||
if (!audio_check_sample_rate(sample_rate, &error)) {
|
||||
g_warning("%s\n", error->message);
|
||||
g_error_free(error);
|
||||
if (!audio_check_sample_rate(sample_rate, error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -23,6 +23,7 @@
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "util/UriUtil.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <glib.h>
|
||||
#include <assert.h>
|
||||
@@ -152,13 +153,12 @@ gme_file_decode(struct decoder *decoder, const char *path_fs)
|
||||
|
||||
/* initialize the MPD decoder */
|
||||
|
||||
GError *error = nullptr;
|
||||
Error error;
|
||||
AudioFormat audio_format;
|
||||
if (!audio_format_init_checked(audio_format, GME_SAMPLE_RATE,
|
||||
SampleFormat::S16, GME_CHANNELS,
|
||||
&error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
gme_free_info(ti);
|
||||
gme_delete(emu);
|
||||
return;
|
||||
|
@@ -25,6 +25,7 @@
|
||||
#include "TagRva2.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
@@ -203,8 +204,9 @@ MadDecoder::MadDecoder(struct decoder *_decoder,
|
||||
inline bool
|
||||
MadDecoder::Seek(long offset)
|
||||
{
|
||||
Error error;
|
||||
if (!input_stream_lock_seek(input_stream, offset, SEEK_SET,
|
||||
nullptr))
|
||||
error))
|
||||
return false;
|
||||
|
||||
mad_stream_buffer(&stream, input_buffer, 0);
|
||||
@@ -1124,16 +1126,14 @@ mp3_decode(struct decoder *decoder, struct input_stream *input_stream)
|
||||
return;
|
||||
}
|
||||
|
||||
Error error;
|
||||
AudioFormat audio_format;
|
||||
GError *error = nullptr;
|
||||
if (!audio_format_init_checked(audio_format,
|
||||
data.frame.header.samplerate,
|
||||
SampleFormat::S24_P32,
|
||||
MAD_NCHANNELS(&data.frame.header),
|
||||
&error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
|
||||
error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
delete tag;
|
||||
return;
|
||||
}
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <mpc/mpcdec.h>
|
||||
|
||||
@@ -53,7 +54,8 @@ mpc_seek_cb(mpc_reader *reader, mpc_int32_t offset)
|
||||
struct mpc_decoder_data *data =
|
||||
(struct mpc_decoder_data *)reader->data;
|
||||
|
||||
return input_stream_lock_seek(data->is, offset, SEEK_SET, nullptr);
|
||||
return input_stream_lock_seek(data->is, offset, SEEK_SET,
|
||||
IgnoreError());
|
||||
}
|
||||
|
||||
static mpc_int32_t
|
||||
@@ -153,13 +155,12 @@ mpcdec_decode(struct decoder *mpd_decoder, struct input_stream *is)
|
||||
mpc_streaminfo info;
|
||||
mpc_demux_get_info(demux, &info);
|
||||
|
||||
GError *error = nullptr;
|
||||
Error error;
|
||||
AudioFormat audio_format;
|
||||
if (!audio_format_init_checked(audio_format, info.sample_freq,
|
||||
SampleFormat::S24_P32,
|
||||
info.channels, &error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
info.channels, error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
mpc_demux_exit(demux);
|
||||
return;
|
||||
}
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
@@ -58,7 +59,6 @@ static bool
|
||||
mpd_mpg123_open(mpg123_handle *handle, const char *path_fs,
|
||||
AudioFormat &audio_format)
|
||||
{
|
||||
GError *gerror = nullptr;
|
||||
char *path_dup;
|
||||
int error;
|
||||
int channels, encoding;
|
||||
@@ -90,10 +90,10 @@ 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, &gerror)) {
|
||||
g_warning("%s", gerror->message);
|
||||
g_error_free(gerror);
|
||||
channels, error2)) {
|
||||
g_warning("%s", error2.GetMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "InputStream.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <opus.h>
|
||||
#include <ogg/ogg.h>
|
||||
@@ -271,7 +272,7 @@ mpd_opus_stream_decode(struct decoder *decoder,
|
||||
|
||||
/* rewind the stream, because ogg_codec_detect() has
|
||||
moved it */
|
||||
input_stream_lock_seek(input_stream, 0, SEEK_SET, nullptr);
|
||||
input_stream_lock_seek(input_stream, 0, SEEK_SET, IgnoreError());
|
||||
|
||||
MPDOpusDecoder d(decoder, input_stream);
|
||||
OggSyncState oy(*input_stream, decoder);
|
||||
@@ -302,7 +303,8 @@ SeekFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet,
|
||||
|
||||
oy.Reset();
|
||||
|
||||
return input_stream_lock_seek(is, -65536, SEEK_END, nullptr) &&
|
||||
Error error;
|
||||
return input_stream_lock_seek(is, -65536, SEEK_END, error) &&
|
||||
oy.ExpectPageSeekIn(os) &&
|
||||
OggFindEOS(oy, os, packet);
|
||||
}
|
||||
|
@@ -20,6 +20,7 @@
|
||||
#include "config.h"
|
||||
#include "decoder/PcmDecoderPlugin.hxx"
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
extern "C" {
|
||||
#include "util/byte_reverse.h"
|
||||
@@ -46,7 +47,6 @@ pcm_stream_decode(struct decoder *decoder, struct input_stream *is)
|
||||
const bool reverse_endian = mime != nullptr &&
|
||||
strcmp(mime, "audio/x-mpd-cdda-pcm-reverse") == 0;
|
||||
|
||||
GError *error = nullptr;
|
||||
enum decoder_command cmd;
|
||||
|
||||
const double time_to_size = audio_format.GetTimeToSize();
|
||||
@@ -81,12 +81,13 @@ pcm_stream_decode(struct decoder *decoder, struct input_stream *is)
|
||||
if (cmd == DECODE_COMMAND_SEEK) {
|
||||
goffset offset = (goffset)(time_to_size *
|
||||
decoder_seek_where(decoder));
|
||||
|
||||
Error error;
|
||||
if (input_stream_lock_seek(is, offset, SEEK_SET,
|
||||
&error)) {
|
||||
error)) {
|
||||
decoder_command_finished(decoder);
|
||||
} else {
|
||||
g_warning("seeking failed: %s", error->message);
|
||||
g_error_free(error);
|
||||
g_warning("seeking failed: %s", error.GetMessage());
|
||||
decoder_seek_error(decoder);
|
||||
}
|
||||
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <sndfile.h>
|
||||
|
||||
@@ -40,10 +41,8 @@ static sf_count_t
|
||||
sndfile_vio_seek(sf_count_t offset, int whence, void *user_data)
|
||||
{
|
||||
struct input_stream *is = (struct input_stream *)user_data;
|
||||
bool success;
|
||||
|
||||
success = input_stream_lock_seek(is, offset, whence, nullptr);
|
||||
if (!success)
|
||||
if (!input_stream_lock_seek(is, offset, whence, IgnoreError()))
|
||||
return -1;
|
||||
|
||||
return input_stream_get_offset(is);
|
||||
@@ -53,13 +52,11 @@ static sf_count_t
|
||||
sndfile_vio_read(void *ptr, sf_count_t count, void *user_data)
|
||||
{
|
||||
struct input_stream *is = (struct input_stream *)user_data;
|
||||
GError *error = nullptr;
|
||||
size_t nbytes;
|
||||
|
||||
nbytes = input_stream_lock_read(is, ptr, count, &error);
|
||||
if (nbytes == 0 && error != nullptr) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
Error error;
|
||||
size_t nbytes = input_stream_lock_read(is, ptr, count, error);
|
||||
if (nbytes == 0 && error.IsDefined()) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -116,7 +113,6 @@ time_to_frame(float t, const AudioFormat *audio_format)
|
||||
static void
|
||||
sndfile_stream_decode(struct decoder *decoder, struct input_stream *is)
|
||||
{
|
||||
GError *error = nullptr;
|
||||
SNDFILE *sf;
|
||||
SF_INFO info;
|
||||
size_t frame_size;
|
||||
@@ -135,12 +131,12 @@ sndfile_stream_decode(struct decoder *decoder, struct input_stream *is)
|
||||
/* for now, always read 32 bit samples. Later, we could lower
|
||||
MPD's CPU usage by reading 16 bit samples with
|
||||
sf_readf_short() on low-quality source files. */
|
||||
Error error;
|
||||
AudioFormat audio_format;
|
||||
if (!audio_format_init_checked(audio_format, info.samplerate,
|
||||
SampleFormat::S32,
|
||||
info.channels, &error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
info.channels, error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -23,6 +23,7 @@
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "InputStream.hxx"
|
||||
#include "OggCodec.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "util/UriUtil.hxx"
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
@@ -80,9 +81,10 @@ static int ogg_seek_cb(void *data, ogg_int64_t offset, int whence)
|
||||
{
|
||||
struct vorbis_input_stream *vis = (struct vorbis_input_stream *)data;
|
||||
|
||||
Error error;
|
||||
return vis->seekable &&
|
||||
(!vis->decoder || decoder_get_command(vis->decoder) != DECODE_COMMAND_STOP) &&
|
||||
input_stream_lock_seek(vis->input_stream, offset, whence, NULL)
|
||||
input_stream_lock_seek(vis->input_stream, offset, whence, error)
|
||||
? 0 : -1;
|
||||
}
|
||||
|
||||
@@ -182,14 +184,12 @@ static void
|
||||
vorbis_stream_decode(struct decoder *decoder,
|
||||
struct input_stream *input_stream)
|
||||
{
|
||||
GError *error = NULL;
|
||||
|
||||
if (ogg_codec_detect(decoder, input_stream) != OGG_CODEC_VORBIS)
|
||||
return;
|
||||
|
||||
/* rewind the stream, because ogg_codec_detect() has
|
||||
moved it */
|
||||
input_stream_lock_seek(input_stream, 0, SEEK_SET, NULL);
|
||||
input_stream_lock_seek(input_stream, 0, SEEK_SET, IgnoreError());
|
||||
|
||||
struct vorbis_input_stream vis;
|
||||
OggVorbis_File vf;
|
||||
@@ -202,6 +202,7 @@ vorbis_stream_decode(struct decoder *decoder,
|
||||
return;
|
||||
}
|
||||
|
||||
Error error;
|
||||
AudioFormat audio_format;
|
||||
if (!audio_format_init_checked(audio_format, vi->rate,
|
||||
#ifdef HAVE_TREMOR
|
||||
@@ -209,9 +210,8 @@ vorbis_stream_decode(struct decoder *decoder,
|
||||
#else
|
||||
SampleFormat::FLOAT,
|
||||
#endif
|
||||
vi->channels, &error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
vi->channels, error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include "CheckAudioFormat.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "ApeTag.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <wavpack/wavpack.h>
|
||||
#include <glib.h>
|
||||
@@ -137,7 +138,6 @@ wavpack_bits_to_sample_format(bool is_float, int bytes_per_sample)
|
||||
static void
|
||||
wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek)
|
||||
{
|
||||
GError *error = NULL;
|
||||
bool is_float;
|
||||
SampleFormat sample_format;
|
||||
AudioFormat audio_format;
|
||||
@@ -150,12 +150,12 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek)
|
||||
wavpack_bits_to_sample_format(is_float,
|
||||
WavpackGetBytesPerSample(wpc));
|
||||
|
||||
Error error;
|
||||
if (!audio_format_init_checked(audio_format,
|
||||
WavpackGetSampleRate(wpc),
|
||||
sample_format,
|
||||
WavpackGetNumChannels(wpc), &error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
WavpackGetNumChannels(wpc), error)) {
|
||||
g_warning("%s", error.GetMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -401,14 +401,16 @@ wavpack_input_get_pos(void *id)
|
||||
static int
|
||||
wavpack_input_set_pos_abs(void *id, uint32_t pos)
|
||||
{
|
||||
return input_stream_lock_seek(wpin(id)->is, pos, SEEK_SET, NULL)
|
||||
Error error;
|
||||
return input_stream_lock_seek(wpin(id)->is, pos, SEEK_SET, error)
|
||||
? 0 : -1;
|
||||
}
|
||||
|
||||
static int
|
||||
wavpack_input_set_pos_rel(void *id, int32_t delta, int mode)
|
||||
{
|
||||
return input_stream_lock_seek(wpin(id)->is, delta, mode, NULL)
|
||||
Error error;
|
||||
return input_stream_lock_seek(wpin(id)->is, delta, mode, error)
|
||||
? 0 : -1;
|
||||
}
|
||||
|
||||
@@ -476,7 +478,9 @@ wavpack_open_wvc(struct decoder *decoder, const char *uri,
|
||||
return nullptr;
|
||||
|
||||
wvc_url = g_strconcat(uri, "c", NULL);
|
||||
is_wvc = input_stream_open(wvc_url, mutex, cond, NULL);
|
||||
|
||||
Error error;
|
||||
is_wvc = input_stream_open(wvc_url, mutex, cond, error);
|
||||
g_free(wvc_url);
|
||||
|
||||
if (is_wvc == NULL)
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "WildmidiDecoderPlugin.hxx"
|
||||
#include "DecoderAPI.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "fs/Path.hxx"
|
||||
#include "fs/FileSystem.hxx"
|
||||
#include "system/FatalError.hxx"
|
||||
@@ -39,10 +40,10 @@ static constexpr unsigned WILDMIDI_SAMPLE_RATE = 48000;
|
||||
static bool
|
||||
wildmidi_init(const config_param ¶m)
|
||||
{
|
||||
GError *error = nullptr;
|
||||
Error error;
|
||||
const Path path = param.GetBlockPath("config_file",
|
||||
"/etc/timidity/timidity.cfg",
|
||||
&error);
|
||||
error);
|
||||
if (path.IsNull())
|
||||
FatalError(error);
|
||||
|
||||
|
Reference in New Issue
Block a user