X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finiteffects.cpp;h=e2ba6872dad1a9b4bcd3e17290443fce17ab0d87;hb=cde505938910c20394ec2676058012c131c9769d;hp=bc70a1c40a15618764bc49eb15c8891581c79b8b;hpb=2ff4712fe3d190972379a5d4648430d7a3542d4c;p=kdenlive diff --git a/src/initeffects.cpp b/src/initeffects.cpp index bc70a1c4..e2ba6872 100644 --- a/src/initeffects.cpp +++ b/src/initeffects.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -29,15 +30,44 @@ #include "initeffects.h" #include "kdenlivesettings.h" #include "effectslist.h" +#include "effectstackedit.h" +#include "mainwindow.h" + +initEffectsThumbnailer::initEffectsThumbnailer() { + +} + +void initEffectsThumbnailer::prepareThumbnailsCall(const QStringList& list) { + m_list = list; + start(); + kDebug() << "done"; +} + +void initEffectsThumbnailer::run() { + foreach(const QString &entry, m_list) { + kDebug() << entry; + if (!entry.isEmpty() && (entry.endsWith(".png") || entry.endsWith(".pgm"))) { + if (!EffectStackEdit::iconCache.contains(entry)) { + QImage pix(entry); + //if (!pix.isNull()) + EffectStackEdit::iconCache[entry] = pix.scaled(30, 30); + kDebug() << "stored"; + } + } + } +} + +initEffectsThumbnailer initEffects::thumbnailer; initEffects::initEffects() { + } initEffects::~initEffects() { } //static -Mlt::Repository *initEffects::parseEffectFiles(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList* transitionsList) { +Mlt::Repository *initEffects::parseEffectFiles() { QStringList::Iterator more; QStringList::Iterator it; QStringList fileList; @@ -73,7 +103,7 @@ Mlt::Repository *initEffects::parseEffectFiles(EffectsList *audioEffectList, Eff transitionsItemList << transitions->get_name(i); } delete transitions; - fillTransitionsList(repository, transitionsList, transitionsItemList); + fillTransitionsList(repository, &MainWindow::transitions, transitionsItemList); KGlobal::dirs()->addResourceType("ladspa_plugin", 0, "lib/ladspa"); KGlobal::dirs()->addResourceDir("ladspa_plugin", "/usr/lib/ladspa"); @@ -91,14 +121,14 @@ Mlt::Repository *initEffects::parseEffectFiles(EffectsList *audioEffectList, Eff fileList = directory.entryList(QDir::Files); for (it = fileList.begin() ; it != fileList.end() ; ++it) { itemName = KUrl(*more + *it).path(); - parseEffectFile(audioEffectList, videoEffectList, itemName, filtersList, producersList); + parseEffectFile(&MainWindow::audioEffects, &MainWindow::videoEffects, itemName, filtersList, producersList); // kDebug()<<"// FOUND EFFECT FILE: "<append(doc.documentElement()); + MainWindow::videoEffects.append(doc.documentElement()); } return repository; } @@ -232,7 +262,7 @@ char* initEffects::ladspaEffectString(int ladspaId, QStringList params) { return ladspaEqualizerEffectString(params); else { kDebug() << "++++++++++ ASKING FOR UNKNOWN LADSPA EFFECT: " << ladspaId << endl; - return(""); + return (char *) ""; } } @@ -376,10 +406,14 @@ QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* repository, params.setAttribute("type", "constant"); if (QString(paramdesc.get("type")) == "boolean") params.setAttribute("type", "bool"); - if (!QString(paramdesc.get("format")).isEmpty()) { + if (!QString(paramdesc.get("format")).isEmpty() && QString(paramdesc.get("type")) != "geometry") { params.setAttribute("type", "complex"); params.setAttribute("format", paramdesc.get("format")); } + if (!QString(paramdesc.get("format")).isEmpty() && QString(paramdesc.get("type")) == "geometry") { + params.setAttribute("type", "geometry"); + //params.setAttribute("format", paramdesc.get("format")); + } if (paramdesc.get("default")) params.setAttribute("default", paramdesc.get("default")); if (paramdesc.get("value")) { params.setAttribute("value", paramdesc.get("value")); @@ -405,7 +439,7 @@ QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* repository, } void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList* transitions, QStringList names) { - foreach(QString name, names) { + foreach(const QString &name, names) { QDomDocument ret; QDomElement ktrans = ret.createElement("ktransition"); ret.appendChild(ktrans); @@ -415,6 +449,41 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList* Mlt::Properties *metadata = repository->metadata(transition_type, name.toAscii().data()); //kDebug() << filtername; if (metadata && metadata->is_valid()) { + Mlt::Properties param_props((mlt_properties) metadata->get_data("parameters")); + for (int j = 0; param_props.is_valid() && j < param_props.count();j++) { + QDomElement params = ret.createElement("parameter"); + + Mlt::Properties paramdesc((mlt_properties) param_props.get_data(param_props.get_name(j))); + + params.setAttribute("name", paramdesc.get("identifier")); + + if (paramdesc.get("maximum")) params.setAttribute("max", paramdesc.get("maximum")); + if (paramdesc.get("minimum")) params.setAttribute("min", paramdesc.get("minimum")); + if (QString(paramdesc.get("type")) == "integer") { + params.setAttribute("type", "constant"); + params.setAttribute("factor", "100"); + } + if (QString(paramdesc.get("type")) == "boolean") + params.setAttribute("type", "bool"); + if (!QString(paramdesc.get("format")).isEmpty()) { + params.setAttribute("type", "complex"); + params.setAttribute("format", paramdesc.get("format")); + + } + if (paramdesc.get("default")) params.setAttribute("default", paramdesc.get("default")); + if (paramdesc.get("value")) { + params.setAttribute("value", paramdesc.get("value")); + } else { + params.setAttribute("value", paramdesc.get("default")); + } + + + QDomElement pname = ret.createElement("name"); + pname.appendChild(ret.createTextNode(paramdesc.get("title"))); + params.appendChild(pname); + + ktrans.appendChild(params); + } ret.appendChild(ktrans); if (metadata->get("title") && metadata->get("identifier")) { @@ -426,8 +495,6 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList* //kDebug() << ret.toString(); } else { - - if (name == "luma") { tname.appendChild(ret.createTextNode("Luma")); @@ -438,18 +505,23 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList* mlt_properties_dir_list(entries.get_properties(), path.toAscii().data(), "*.*", 1); kDebug() << path << entries.count(); QString imagefiles; + //QStringList imagelist; + QString imagenamelist; for (int i = 0;i < entries.count();i++) { //if (!imagefiles.isEmpty()) // add empty entry too imagefiles.append(","); imagefiles.append(entries.get(i)); + //imagelist << entries.get(i); + imagenamelist.append(","); + imagenamelist.append(KUrl(entries.get(i)).fileName()); } - paramList.append(quickParameterFill(ret, "Softness", "softness", "double", "0", "0", "100", "", "100")); + paramList.append(quickParameterFill(ret, "Softness", "softness", "double", "0", "0", "100", "", "", "100")); paramList.append(quickParameterFill(ret, "Invert", "invert", "bool", "0", "0", "1")); - paramList.append(quickParameterFill(ret, "ImageFile", "resource", "list", "", "", "", imagefiles)); - + paramList.append(quickParameterFill(ret, "ImageFile", "resource", "list", "", "", "", imagefiles, imagenamelist)); + //thumbnailer.prepareThumbnailsCall(imagelist); } else if (name == "composite") { - paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0%,0%:100%x100%", "0%,0%:100%x100%", "0%,0%:100%x100%")); + paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0;0;100;100;100", "0;0;100;100;100", "0;0;100;100;100")); tname.appendChild(ret.createTextNode("Composite")); QDomDocument ret1; @@ -477,29 +549,37 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList* paramList.append(quickParameterFill(ret, "Fix Shear Z", "fix_shear_z", "double", "0", "0", "360")); paramList.append(quickParameterFill(ret, "Mirror", "mirror_off", "bool", "0", "0", "1")); paramList.append(quickParameterFill(ret, "Repeat", "repeat_off", "bool", "0", "0", "1")); - paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0%,0%:100%x100%", "0,0:100%x100%", "0,0:100%x100%")); + paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0;0;100;100;100", "0;0;100;100;100", "0;0;100;100;100")); + tname.appendChild(ret.createTextNode("Composite")); } else if (name == "region") { tname.appendChild(ret.createTextNode("Region")); } } - paramList.append(quickParameterFill(ret, "Reverse Transition", "reverse", "bool", "1", "0", "1")); + paramList.append(quickParameterFill(ret, "Reverse Transition", "reverse", "bool", "0", "0", "1")); ktrans.appendChild(tname); - foreach(QDomElement e, paramList) { + foreach(const QDomElement &e, paramList) { ktrans.appendChild(e); } transitions->append(ret.documentElement()); + kDebug() << "//// //// TRANSITON XML"; + kDebug() << ret.toString(); /* */ } + + QString wipetrans = "Wipe Direction Reverse Transition"; + QDomDocument ret; + ret.setContent(wipetrans); + transitions->append(ret.documentElement()); } -QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def, QString min, QString max, QString list, QString factor) { +QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def, QString min, QString max, QString list, QString listdisplaynames, QString factor, QString namedesc, QString format) { QDomElement parameter = doc.createElement("parameter"); parameter.setAttribute("tag", tag); parameter.setAttribute("default", def); @@ -509,8 +589,14 @@ QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QS parameter.setAttribute("min", min); if (!list.isEmpty()) parameter.setAttribute("paramlist", list); + if (!listdisplaynames.isEmpty()) + parameter.setAttribute("paramlistdisplay", listdisplaynames); if (!factor.isEmpty()) parameter.setAttribute("factor", factor); + if (!namedesc.isEmpty()) + parameter.setAttribute("namedesc", namedesc); + if (!format.isEmpty()) + parameter.setAttribute("format", format); QDomElement pname = doc.createElement("name"); pname.appendChild(doc.createTextNode(name)); parameter.appendChild(pname);