diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp index 5f75c5dff1170..77e1b5b5412fc 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp @@ -902,6 +902,7 @@ unsigned int CActiveAESink::OutputSamples(CSampleBuffer* samples) unsigned int written = 0; std::unique_ptr mergebuffer; uint8_t* p_mergebuffer = NULL; + AEDelayStatus status; if (m_requestedFormat.m_dataFormat == AE_FMT_RAW) { @@ -981,10 +982,16 @@ unsigned int CActiveAESink::OutputSamples(CSampleBuffer* samples) totalFrames = size / m_sinkFormat.m_frameSize; frames = totalFrames; } + if (samples->pkt->pause_burst_ms > 0) + { + m_sink->AddPause(samples->pkt->pause_burst_ms); + m_sink->GetDelay(status); + m_stats->UpdateSinkDelay(status, samples->pool ? 1 : 0); + return status.delay * 1000; + } } } - AEDelayStatus status; int framesOrPackets; while(frames > 0) diff --git a/xbmc/cores/AudioEngine/Interfaces/AESink.h b/xbmc/cores/AudioEngine/Interfaces/AESink.h index e0ef40d8eedc2..3a076c05d50dd 100644 --- a/xbmc/cores/AudioEngine/Interfaces/AESink.h +++ b/xbmc/cores/AudioEngine/Interfaces/AESink.h @@ -65,6 +65,11 @@ class IAESink */ virtual unsigned int AddPackets(uint8_t **data, unsigned int frames, unsigned int offset) = 0; + /*! + * @brief instruct the sink to add a pause + * @param millis ms to pause + */ + virtual void AddPause(unsigned int millis) {}; /*! * @brief Return a timestamped status structure with delay and sink info