size_t ASFStream::readBuffer(int16 *buffer, const size_t numSamples) { size_t samplesDecoded = 0; for (;;) { if (_curAudioStream) { const size_t n = _curAudioStream->readBuffer(buffer + samplesDecoded, numSamples - samplesDecoded); if (n == kSizeInvalid) return kSizeInvalid; samplesDecoded += n; if (_curAudioStream->endOfData()) { delete _curAudioStream; _curAudioStream = 0; } } if (samplesDecoded == numSamples || endOfData()) break; if (!_curAudioStream) { _curAudioStream = createAudioStream(); } } return samplesDecoded; }
int QueuingAudioStreamImpl::readBuffer(int16 *buffer, const int numSamples) { Common::StackLock lock(_mutex); int samplesDecoded = 0; while (samplesDecoded < numSamples && !_queue.empty()) { AudioStream *stream = _queue.front()._stream; samplesDecoded += stream->readBuffer(buffer + samplesDecoded, numSamples - samplesDecoded); if (stream->endOfData()) { StreamHolder tmp = _queue.pop(); if (tmp._disposeAfterUse == DisposeAfterUse::YES) delete stream; } } return samplesDecoded; }
size_t QueuingAudioStreamImpl::readBuffer(int16 *buffer, const size_t numSamples) { Common::StackLock lock(_mutex); size_t samplesDecoded = 0; while (samplesDecoded < numSamples && !_queue.empty()) { AudioStream *stream = _queue.front()._stream; const size_t n = stream->readBuffer(buffer + samplesDecoded, numSamples - samplesDecoded); if (n == kSizeInvalid) return kSizeInvalid; samplesDecoded += n; if (stream->endOfData()) { StreamHolder tmp = _queue.front(); _queue.pop(); if (tmp._disposeAfterUse) delete stream; } } return samplesDecoded; }
int QueuingAudioStreamImpl::readBuffer(int16 *buffer, const int numSamples) { Common::StackLock lock(_mutex); int samplesDecoded = 0; while (samplesDecoded < numSamples && !_queue.empty()) { AudioStream *stream = _queue.front()._stream; samplesDecoded += stream->readBuffer(buffer + samplesDecoded, numSamples - samplesDecoded); // Done with the stream completely if (stream->endOfStream()) { StreamHolder tmp = _queue.pop(); if (tmp._disposeAfterUse == DisposeAfterUse::YES) delete stream; continue; } // Done with data but not the stream, bail out if (stream->endOfData()) break; } return samplesDecoded; }
int ASFStream::readBuffer(int16 *buffer, const int numSamples) { int samplesDecoded = 0; for (;;) { if (_curAudioStream) { samplesDecoded += _curAudioStream->readBuffer(buffer + samplesDecoded, numSamples - samplesDecoded); if (_curAudioStream->endOfData()) { delete _curAudioStream; _curAudioStream = 0; } } if (samplesDecoded == numSamples || endOfData()) break; if (!_curAudioStream) { _curAudioStream = createAudioStream(); } } return samplesDecoded; }