virtual int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) { assert(input.isStereo() == stereo); #ifdef DEBUG_RATECONV debug("Copy st=%d rev=%d", stereo, reverseStereo); #endif st_size_t len; st_sample_t *ostart = obuf; if (stereo) osamp *= 2; // Reallocate temp buffer, if necessary if (osamp > _bufferSize) { free(_buffer); _buffer = (st_sample_t *)malloc(osamp * 2); _bufferSize = osamp; } // Read up to 'osamp' samples into our temporary buffer len = input.readBuffer(_buffer, osamp); if (len <= 0) return 0; // Mix the data into the output buffer if (stereo && reverseStereo) obuf = ARM_CopyRate_R(len, obuf, vol_l, vol_r, _buffer); else if (stereo) obuf = ARM_CopyRate_S(len, obuf, vol_l, vol_r, _buffer); else obuf = ARM_CopyRate_M(len, obuf, vol_l, vol_r, _buffer); return (obuf-ostart)/2; }
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; }