aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/decoder/plugins/SndfileDecoderPlugin.cxx12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/decoder/plugins/SndfileDecoderPlugin.cxx b/src/decoder/plugins/SndfileDecoderPlugin.cxx
index a1a426752..388c2d594 100644
--- a/src/decoder/plugins/SndfileDecoderPlugin.cxx
+++ b/src/decoder/plugins/SndfileDecoderPlugin.cxx
@@ -154,6 +154,12 @@ sndfile_sample_format(const SF_INFO &info)
return SampleFormat::S32;
}
+static sf_count_t
+sndfile_read_frames(SNDFILE *sf, void *buffer, sf_count_t n_frames)
+{
+ return sf_readf_int(sf, (int *)buffer, n_frames);
+}
+
static void
sndfile_stream_decode(Decoder &decoder, InputStream &is)
{
@@ -183,14 +189,16 @@ sndfile_stream_decode(Decoder &decoder, InputStream &is)
decoder_initialized(decoder, audio_format, info.seekable,
sndfile_duration(info));
- int buffer[4096];
+ char buffer[16384];
const size_t frame_size = audio_format.GetFrameSize();
const sf_count_t read_frames = sizeof(buffer) / frame_size;
DecoderCommand cmd;
do {
- sf_count_t num_frames = sf_readf_int(sf, buffer, read_frames);
+ sf_count_t num_frames =
+ sndfile_read_frames(sf,
+ buffer, read_frames);
if (num_frames <= 0)
break;