From 77b64f231144c0a93a9714dfdeca99dce029302a Mon Sep 17 00:00:00 2001 From: Laszlo Papp Date: Tue, 13 Dec 2011 23:53:12 +0200 Subject: Make a dirty and nasty hackaround for compilation, but needs to be revisited.. --- src/decoders/qalflacaudiodecoder.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/decoders/qalflacaudiodecoder.cpp b/src/decoders/qalflacaudiodecoder.cpp index c25ad03..5f854ce 100644 --- a/src/decoders/qalflacaudiodecoder.cpp +++ b/src/decoders/qalflacaudiodecoder.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include @@ -263,12 +264,29 @@ qint64 QALFlacAudioDecoder::decodeData(char *decodedData, qint64 maxlen) { if (FLAC__stream_decoder_get_state(d->flacStreamDecoder) == FLAC__STREAM_DECODER_SEEK_ERROR - && FLAC__stream_decoder_reset(d->flacStreamDecoder) == false) + && FLAC__stream_decoder_reset(d->flacStreamDecoder) == false) { { qWarning() << Q_FUNC_INFO << "Failed to allocate memory while resetting before decoding";; return -1; } } - return sf_readf_short(d->sndFile, reinterpret_cast(decodedData), maxlen); + int tmplen = 0; + + if (d->initialData.size() > 0) + { + tmplen = qMin(qint64(d->initialData.size()), maxlen); + decodedData = reinterpret_cast(d->initialData.mid(0, tmplen).data()); + d->initialData.remove(0, tmplen); + } + + while (tmplen < maxlen) + { + if (FLAC__stream_decoder_process_single(d->flacStreamDecoder) == false + || FLAC__stream_decoder_get_state(d->flacStreamDecoder) == FLAC__STREAM_DECODER_END_OF_STREAM) { + break; + } + } + + return tmplen; } -- cgit v1.2.3