]> git.sesse.net Git - mlt/commitdiff
Prevent decklink audio buffer overflow.
authorMaksym Veremeyenko <verem@m1stereo.tv>
Fri, 22 Jul 2011 21:21:11 +0000 (14:21 -0700)
committerDan Dennedy <dan@dennedy.org>
Fri, 22 Jul 2011 21:21:11 +0000 (14:21 -0700)
Flush audio buffer if it more then preroll configured length.

src/modules/decklink/consumer_decklink.cpp

index 1d3eaab7e55c8be7bfede501e2c2cbbe3488dfe4..df9e89ae60f971b6a757509d8d3edba8b980915d 100644 (file)
@@ -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