{
float buftime = (float)(*it)->m_inputBuffers->m_format.m_frames / (*it)->m_inputBuffers->m_format.m_sampleRate;
time += buftime * (*it)->m_processingSamples.size();
- while (time < MAX_CACHE_LEVEL && !(*it)->m_inputBuffers->m_freeSamples.empty())
+ while ((time < MAX_CACHE_LEVEL || (*it)->m_streamIsBuffering) && !(*it)->m_inputBuffers->m_freeSamples.empty())
{
buffer = (*it)->m_inputBuffers->GetFreeBuffer();
(*it)->m_processingSamples.push_back(buffer);
if ((*it)->m_fadingSamples == -1)
{
(*it)->m_fadingSamples = m_internalFormat.m_sampleRate * (float)(*it)->m_fadingTime / 1000.0f;
- (*it)->m_volume = (*it)->m_fadingBase;
+ if ((*it)->m_fadingSamples > 0)
+ (*it)->m_volume = (*it)->m_fadingBase;
+ else
+ {
+ (*it)->m_volume = (*it)->m_fadingTarget;
+ CSingleLock lock((*it)->m_streamLock);
+ (*it)->m_streamFading = false;
+ }
}
if ((*it)->m_fadingSamples > 0)
{