diff --git a/NEWS b/NEWS index de55a0cd5..44a1ee271 100644 --- a/NEWS +++ b/NEWS @@ -33,6 +33,7 @@ ver 0.19 (not yet released) - vorbis, flac, opus: honor DESCRIPTION= tag in Xiph-based files as a comment to the song - audiofile: support scanning remote files - audiofile: log libaudiofile errors + - sndfile: support scanning remote files - sndfile: support tags "comment", "album", "track", "genre" * encoder: - shine: new encoder plugin diff --git a/src/decoder/plugins/SndfileDecoderPlugin.cxx b/src/decoder/plugins/SndfileDecoderPlugin.cxx index 90a52b7f0..c656302f9 100644 --- a/src/decoder/plugins/SndfileDecoderPlugin.cxx +++ b/src/decoder/plugins/SndfileDecoderPlugin.cxx @@ -234,21 +234,22 @@ static constexpr struct { }; static bool -sndfile_scan_file(Path path_fs, - const struct tag_handler *handler, void *handler_ctx) +sndfile_scan_stream(InputStream &is, + const struct tag_handler *handler, void *handler_ctx) { SF_INFO info; info.format = 0; - SNDFILE *const sf = sf_open(path_fs.c_str(), SFM_READ, &info); + SndfileInputStream sis{nullptr, is}; + SNDFILE *const sf = sf_open_virtual(&vio, SFM_READ, &info, &sis); if (sf == nullptr) return false; if (!audio_valid_sample_rate(info.samplerate)) { sf_close(sf); FormatWarning(sndfile_domain, - "Invalid sample rate in %s", path_fs.c_str()); + "Invalid sample rate in %s", is.GetURI()); return false; } @@ -299,8 +300,8 @@ const struct DecoderPlugin sndfile_decoder_plugin = { nullptr, sndfile_stream_decode, nullptr, - sndfile_scan_file, nullptr, + sndfile_scan_stream, nullptr, sndfile_suffixes, sndfile_mime_types,