if (delay < 0)
delay = 0.0;
- delay += stream->m_bufferedTime;
+ delay += stream->m_bufferedTime / stream->m_streamResampleRatio;
return delay;
}
{
format.m_dataFormat = AE_FMT_AC3;
format.m_sampleRate = 48000;
+ format.m_encodedRate = 48000;
format.m_channelLayout = AE_CH_LAYOUT_2_0;
if (mode)
*mode = MODE_TRANSCODE;
CSampleBuffer *buffer;
if (!(*it)->m_drain)
{
- while (time < MAX_CACHE_LEVEL && !(*it)->m_inputBuffers->m_freeSamples.empty())
+ 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_streamIsBuffering) && !(*it)->m_inputBuffers->m_freeSamples.empty())
{
buffer = (*it)->m_inputBuffers->GetFreeBuffer();
(*it)->m_processingSamples.push_back(buffer);
(*it)->m_streamPort->SendInMessage(CActiveAEDataProtocol::STREAMBUFFER, &buffer, sizeof(CSampleBuffer*));
(*it)->IncFreeBuffers();
- time += (float)buffer->pkt->max_nb_samples / buffer->pkt->config.sample_rate;
+ time += buftime;
}
}
else
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)
{
CSampleBuffer *buffer;
for (it = m_streams.begin(); it != m_streams.end(); ++it)
{
- if (!(*it)->m_resampleBuffers->m_outputSamples.empty())
+ if (!(*it)->m_resampleBuffers->m_outputSamples.empty() && !(*it)->m_paused)
{
buffer = (*it)->m_resampleBuffers->m_outputSamples.front();
(*it)->m_resampleBuffers->m_outputSamples.pop_front();