Due to recent improvements in mlt_consumer_purge(), it is now possible to enable to buffered playback in interactive apps and still have good responsiveness. More info can be found here:
https://sourceforge.net/p/mlt/bugs/187/ (there might be a corresponding kdenlive mantis bug) and here: https://plus.google.com/u/0/111864735906618411659/posts/amBMYp4Q1Td diff --git a/src/renderer.cpp b/src/renderer.cpp index b5d87dd..8b63854 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -241,7 +241,8 @@ void Render::buildConsumer(const QString &profileName) m_mltConsumer->set("terminate_on_pause", 0); m_mltConsumer->set("deinterlace_method", denliveSettings::mltdeinterlacer().toUtf8().constData()); m_mltConsumer->set("rescale", KdenliveSettings::mltinterpolation().toUtf8().constData()); - m_mltConsumer->set("buffer", "1"); + m_mltConsumer->set("buffer", 25); + m_mltConsumer->set("prefill", 1); m_mltConsumer->set("real_time", KdenliveSettings::mltthreads()); } if (m_mltConsumer && m_mltConsumer->is_valid()) { @@ -286,7 +287,6 @@ void Render::buildConsumer(const QString &profileName) m_mltConsumer->set("audio_buffer", 512); m_mltConsumer->set("preview_format", mlt_image_rgb24a); } - m_mltConsumer->set("buffer", "1"); m_showFrameEvent = m_mltConsumer->listen("consumer-frame-show", this, mlt_listener) consumer_gl_frame_show); } } else { @@ -323,6 +323,8 @@ void Render::buildConsumer(const QString &profileName) m_mltConsumer->set("frequency", 48000); m_mltConsumer->set("real_time", KdenliveSettings::mltthreads()); + m_mltConsumer->set("buffer", "25"); + m_mltConsumer->set("prefill", "1"); } Mlt::Producer *Render::invalidProducer(const QString &id) @@ -1607,9 +1609,11 @@ void Render::pause() return; m_paused = true; m_mltProducer->set_speed(0.0); + if (m_mltConsumer) + m_mltConsumer->purge(); /*m_mltConsumer->set("refresh", 0); - //if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop(); - m_mltProducer->seek(m_mltConsumer->position());*/ + //if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();*/ + m_mltProducer->seek(m_mltConsumer->position() + 1); } void Render::setActiveMonitor() @@ -1637,6 +1641,8 @@ void Render::switchPlay(bool play) if (m_winid == 0) { // OpenGL consumer m_mltProducer->set_speed(0.0); + m_mltConsumer->purge(); + m_mltProducer->seek(m_mltConsumer->position() + 1); } else { // SDL consumer, hack to allow pausing near the end of the playlist ------------------------------------------------------------------------------ Try New Relic Now & We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, & servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr _______________________________________________ Kdenlive-devel mailing list Kdenlive-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kdenlive-devel