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();
//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: "<<mlt_service_cache_get_size(service.get_service(), "producer_avformat");
+ }
+}
+
const QString Render::sceneList()
{
QString playlist;
if (!videoTrack) newProd.set("hide", 1);
}
+ checkMaxThreads();
+
// Move transitions
mlt_service serv = m_mltProducer->parent().get_service();
mlt_service nextservice = mlt_service_get_producer(serv);