decoder/{dsdiff,dsf,mpg123,wavpack}: avoid exceptions in scan methods
The scan methods must be "noexcept".
This commit is contained in:
parent
47fa8c4cf6
commit
fd0a5a1116
|
@ -460,14 +460,15 @@ dsdiff_scan_stream(InputStream &is,
|
|||
if (!dsdiff_read_metadata(nullptr, is, &metadata, &chunk_header))
|
||||
return false;
|
||||
|
||||
auto audio_format = CheckAudioFormat(metadata.sample_rate / 8,
|
||||
SampleFormat::DSD,
|
||||
metadata.channels);
|
||||
const auto sample_rate = metadata.sample_rate / 8;
|
||||
if (!audio_valid_sample_rate(sample_rate) ||
|
||||
!audio_valid_channel_count(metadata.channels))
|
||||
return false;
|
||||
|
||||
/* calculate song time and add as tag */
|
||||
uint64_t n_frames = metadata.chunk_size / audio_format.channels;
|
||||
uint64_t n_frames = metadata.chunk_size / metadata.channels;
|
||||
auto songtime = SongTime::FromScale<uint64_t>(n_frames,
|
||||
audio_format.sample_rate);
|
||||
sample_rate);
|
||||
tag_handler_invoke_duration(handler, handler_ctx, songtime);
|
||||
|
||||
/* Read additional metadata and created tags if available */
|
||||
|
|
|
@ -334,14 +334,14 @@ dsf_scan_stream(InputStream &is,
|
|||
if (!dsf_read_metadata(nullptr, is, &metadata))
|
||||
return false;
|
||||
|
||||
auto audio_format = CheckAudioFormat(metadata.sample_rate / 8,
|
||||
SampleFormat::DSD,
|
||||
metadata.channels);
|
||||
const auto sample_rate = metadata.sample_rate / 8;
|
||||
if (!audio_valid_sample_rate(sample_rate))
|
||||
return false;
|
||||
|
||||
/* calculate song time and add as tag */
|
||||
const auto n_blocks = metadata.n_blocks;
|
||||
auto songtime = SongTime::FromScale<uint64_t>(n_blocks * DSF_BLOCK_SIZE,
|
||||
audio_format.sample_rate);
|
||||
sample_rate);
|
||||
tag_handler_invoke_duration(handler, handler_ctx, songtime);
|
||||
|
||||
#ifdef ENABLE_ID3TAG
|
||||
|
|
|
@ -292,7 +292,12 @@ mpd_mpg123_scan_file(Path path_fs,
|
|||
}
|
||||
|
||||
AudioFormat audio_format;
|
||||
if (!mpd_mpg123_open(handle, path_fs.c_str(), audio_format)) {
|
||||
try {
|
||||
if (!mpd_mpg123_open(handle, path_fs.c_str(), audio_format)) {
|
||||
mpg123_delete(handle);
|
||||
return false;
|
||||
}
|
||||
} catch (...) {
|
||||
mpg123_delete(handle);
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -581,7 +581,14 @@ static bool
|
|||
wavpack_scan_file(Path path_fs,
|
||||
const TagHandler &handler, void *handler_ctx) noexcept
|
||||
{
|
||||
auto *wpc = WavpackOpenInput(path_fs, OPEN_DSD_FLAG, 0);
|
||||
WavpackContext *wpc;
|
||||
|
||||
try {
|
||||
wpc = WavpackOpenInput(path_fs, OPEN_DSD_FLAG, 0);
|
||||
} catch (...) {
|
||||
return false;
|
||||
}
|
||||
|
||||
AtScopeExit(wpc) {
|
||||
WavpackCloseFile(wpc);
|
||||
};
|
||||
|
@ -598,8 +605,15 @@ wavpack_scan_stream(InputStream &is,
|
|||
const TagHandler &handler, void *handler_ctx) noexcept
|
||||
{
|
||||
WavpackInput isp(nullptr, is);
|
||||
auto *wpc = WavpackOpenInput(&mpd_is_reader, &isp, nullptr,
|
||||
OPEN_DSD_FLAG, 0);
|
||||
|
||||
WavpackContext *wpc;
|
||||
try {
|
||||
wpc = WavpackOpenInput(&mpd_is_reader, &isp, nullptr,
|
||||
OPEN_DSD_FLAG, 0);
|
||||
} catch (...) {
|
||||
return false;
|
||||
}
|
||||
|
||||
AtScopeExit(wpc) {
|
||||
WavpackCloseFile(wpc);
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue