From 79ffa87989ad10625f86e47e4d26ea905589e29d Mon Sep 17 00:00:00 2001 From: Maksym Veremeyenko Date: Fri, 22 Jul 2011 14:21:11 -0700 Subject: [PATCH] Prevent decklink audio buffer overflow. Flush audio buffer if it more then preroll configured length. --- src/modules/decklink/consumer_decklink.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/modules/decklink/consumer_decklink.cpp b/src/modules/decklink/consumer_decklink.cpp index 1d3eaab7..df9e89ae 100644 --- a/src/modules/decklink/consumer_decklink.cpp +++ b/src/modules/decklink/consumer_decklink.cpp @@ -54,6 +54,7 @@ private: int m_isKeyer; IDeckLinkKeyer* m_deckLinkKeyer; bool m_terminate_on_pause; + uint32_t m_preroll; IDeckLinkDisplayMode* getDisplayMode() { @@ -233,6 +234,8 @@ public: return false; } + m_preroll = preroll; + // preroll frames for( i = 0; i < preroll; i++ ) ScheduleNextFrame( true ); @@ -281,7 +284,12 @@ public: { uint32_t written = 0; BMDTimeValue streamTime = m_count * frequency * m_duration / m_timescale; - + m_deckLinkOutput->GetBufferedAudioSampleFrameCount(&written); + if ( written > (m_preroll + 1) * samples ) + { + mlt_log_verbose( getConsumer(), "renderAudio: will flush %d audiosamples\n", written); + m_deckLinkOutput->FlushBufferedAudioSamples(); + }; #ifdef WIN32 m_deckLinkOutput->ScheduleAudioSamples( pcm, samples, streamTime, frequency, (unsigned long*) &written ); #else -- 2.39.2