diff options
Diffstat (limited to 'src/plugins/Input/vorbis/decoder_vorbis.cpp')
| -rw-r--r-- | src/plugins/Input/vorbis/decoder_vorbis.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/plugins/Input/vorbis/decoder_vorbis.cpp b/src/plugins/Input/vorbis/decoder_vorbis.cpp index dc91ea384..73e19dd92 100644 --- a/src/plugins/Input/vorbis/decoder_vorbis.cpp +++ b/src/plugins/Input/vorbis/decoder_vorbis.cpp @@ -235,3 +235,32 @@ qint64 DecoderVorbis::read(char *data, qint64 maxSize) m_bitrate = ov_bitrate_instant(&oggfile) / 1000; return len; } + +qint64 DecoderVorbis::read(float *data, qint64 samples) +{ + len = -1; + float **pcm = 0; + while (len < 0) + len = ov_read_float(&oggfile, &pcm, samples, &m_section); + + if(len == 0) + return 0; + + int channels = audioParameters().channels(); + + for(int i = 0; i < channels; ++i) + { + float *ptr = &data[i]; + for(int j = 0; j < len; ++j) + { + *ptr = pcm[i][j]; + ptr += channels; + } + } + + if (m_section != m_last_section) + updateTags(); + + m_bitrate = ov_bitrate_instant(&oggfile) / 1000; + return len*channels; +} |
