From: Jean-Baptiste Mardelle Date: Fri, 14 Oct 2011 19:55:06 +0000 (+0000) Subject: Tell MLT the maximum number of threads we might need for avformat producer X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=c45bc0a73244411dbc8c6fc486f66e88f152462c;p=kdenlive Tell MLT the maximum number of threads we might need for avformat producer svn path=/trunk/kdenlive/; revision=5965 --- diff --git a/src/renderer.cpp b/src/renderer.cpp index deab382b..2acfe0f6 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -1080,6 +1080,7 @@ int Render::setSceneList(QString playlist, int position) m_mltProducer = m_blackClip->cut(0, 50); error = -1; } + checkMaxThreads(); int volume = KdenliveSettings::volume(); m_mltProducer->set("meta.volume", (double)volume / 100); m_mltProducer->optimise(); @@ -1122,6 +1123,27 @@ int Render::setSceneList(QString playlist, int position) //if (position != 0) emit rendererPosition(position); } +void Render::checkMaxThreads() +{ + // Make sure we don't use too much threads, MLT avformat does not cope with too much threads + // Currently, Kdenlive uses the following avformat threads: + // One thread to get info when adding a clip + // One thread to create the timeline video thumbnails + // One thread to create the audio thumbnails + Mlt::Service service(m_mltProducer->parent().get_service()); + if (service.type() != tractor_type) { + kWarning() << "// TRACTOR PROBLEM"; + return; + } + Mlt::Tractor tractor(service); + int mltMaxThreads = mlt_service_cache_get_size(service.get_service(), "producer_avformat"); + int requestedThreads = tractor.count() + 4; + if (requestedThreads > mltMaxThreads) { + mlt_service_cache_set_size(service.get_service(), "producer_avformat", requestedThreads); + kDebug()<<"// MLT threads updated to: "<parent().get_service(); mlt_service nextservice = mlt_service_get_producer(serv); diff --git a/src/renderer.h b/src/renderer.h index afbf50eb..9acd058a 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -340,6 +340,8 @@ private: /** @brief Make sure our audio mixing transitions are applied to the lowest track */ void fixAudioMixing(Mlt::Tractor tractor); + /** @brief Make sure we inform MLT if we need a lot of threads for avformat producer */ + void checkMaxThreads(); private slots: