QDomElement e = params.item(i).toElement();
if (e.attribute("tag") == "resource") {
e.setAttribute("paramlistdisplay", imagenamelist.join(","));
- e.setAttribute("paramlist", imagefiles.join(","));
+ e.setAttribute("paramlist", imagefiles.join(";"));
break;
}
}
QDomElement e = params.item(i).toElement();
if (e.attribute("tag") == "luma") {
e.setAttribute("paramlistdisplay", imagenamelist.join(","));
- e.setAttribute("paramlist", imagefiles.join(","));
+ e.setAttribute("paramlist", imagefiles.join(";"));
break;
}
}
// Fill transitions list.
fillTransitionsList(repository, &MainWindow::transitions, transitionsItemList);
- //WARNING: deprecated, we now use MLT to detect LADSPA filters
- /*
- // Set the directories to look into for ladspa plugins.
- KGlobal::dirs()->addResourceType("ladspa_plugin", 0, "lib/ladspa");
- KGlobal::dirs()->addResourceDir("ladspa_plugin", "/usr/lib/ladspa");
- KGlobal::dirs()->addResourceDir("ladspa_plugin", "/usr/local/lib/ladspa");
- KGlobal::dirs()->addResourceDir("ladspa_plugin", "/opt/lib/ladspa");
- KGlobal::dirs()->addResourceDir("ladspa_plugin", "/opt/local/lib/ladspa");
- KGlobal::dirs()->addResourceDir("ladspa_plugin", "/usr/lib64/ladspa");
- KGlobal::dirs()->addResourceDir("ladspa_plugin", "/usr/local/lib64/ladspa");*/
-
// Remove blacklisted effects from the filters list.
QStringList mltFiltersList = filtersList;
QFile file2(KStandardDirs::locate("appdata", "blacklisted_effects.txt"));
kDebug() << "Effect broken: " << name;
return;
}
-
+ QLocale locale;
+ bool needsLocaleConversion = false;
for (int i = 0; !effects.item(i).isNull(); ++i) {
documentElement = effects.item(i).toElement();
QString tag = documentElement.attribute("tag", QString());
-
+ if (documentElement.hasAttribute("LC_NUMERIC")) {
+ // set a locale for that file
+ locale = QLocale(documentElement.attribute("LC_NUMERIC"));
+ if (locale.decimalPoint() != QLocale().decimalPoint()) {
+ needsLocaleConversion = true;
+ }
+ }
if (documentElement.hasAttribute("version")) {
// a specific version of the filter is required
Mlt::Properties *metadata = repository->metadata(filter_type, tag.toUtf8().data());
if (metadata && metadata->is_valid()) {
double version = metadata->get_double("version");
- if (documentElement.attribute("version").toDouble() > version) {
+ if (locale.toDouble(documentElement.attribute("version")) > version) {
delete metadata;
return;
}
delete metadata;
}
+ if (needsLocaleConversion) {
+ // we need to convert all numbers to the system's locale (for example 0.5 -> 0,5)
+ QChar separator = QLocale().decimalPoint();
+ QChar oldSeparator = locale.decimalPoint();
+ QDomNodeList params = documentElement.elementsByTagName("parameter");
+ for (int j = 0; j < params.count(); j++) {
+ QDomNamedNodeMap attrs = params.at(j).attributes();
+ for (int k = 0; k < attrs.count(); k++) {
+ QString name = attrs.item(k).nodeName();
+ if (name != "type" && name != "name") {
+ QString val = attrs.item(k).nodeValue();
+ if (val.contains(oldSeparator)) {
+ QString newVal = val.replace(oldSeparator, separator);
+ attrs.item(k).setNodeValue(newVal);
+ }
+ }
+ }
+ }
+ }
+
// Parse effect information.
if ((filtersList.contains(tag) || producersList.contains(tag))) {
QString type = documentElement.attribute("type", QString());
}
}
-//static
-const char* initEffects::ladspaEffectString(int ladspaId, QStringList params)
-{
- if (ladspaId == 1433) //Pitch
- return ladspaPitchEffectString(params);
- else if (ladspaId == 1216) //Room Reverb
- return ladspaRoomReverbEffectString(params);
- else if (ladspaId == 1423) //Reverb
- return ladspaReverbEffectString(params);
- else if (ladspaId == 1901) //Reverb
- return ladspaEqualizerEffectString(params);
- else {
- kDebug() << "++++++++++ ASKING FOR UNKNOWN LADSPA EFFECT: " << ladspaId << endl;
- return "<jackrack></jackrack>";
- }
-}
-
-//static
-void initEffects::ladspaEffectFile(const QString & fname, int ladspaId, QStringList params)
-{
- const char *filterString;
- switch (ladspaId) {
- case 1433: //Pitch
- filterString = ladspaPitchEffectString(params);
- break;
- case 1905: //Vinyl
- filterString = ladspaVinylEffectString(params);
- break;
- case 1216 : //Room Reverb
- filterString = ladspaRoomReverbEffectString(params);
- break;
- case 1423: //Reverb
- filterString = ladspaReverbEffectString(params);
- break;
- case 1195: //Declipper
- filterString = ladspaDeclipEffectString(params);
- break;
- case 1901: //Reverb
- filterString = ladspaEqualizerEffectString(params);
- break;
- case 1913: // Limiter
- filterString = ladspaLimiterEffectString(params);
- break;
- case 1193: // Pitch Shifter
- filterString = ladspaPitchShifterEffectString(params);
- break;
- case 1417: // Rate Scaler
- filterString = ladspaRateScalerEffectString(params);
- break;
- case 1217: // Phaser
- filterString = ladspaPhaserEffectString(params);
- break;
- case 1197: // 15 Band Equalizer
- filterString = ladspaEqualizer15EffectString(params);
- break;
- default:
- kDebug() << "++++++++++ ASKING FOR UNKNOWN LADSPA EFFECT: " << ladspaId << endl;
- return;
- break;
- }
-
- QFile f(fname);
- if (f.open(QIODevice::WriteOnly)) {
- QTextStream stream(&f);
- stream << filterString;
- f.close();
- } else kDebug() << "++++++++++ ERROR CANNOT WRITE TO: " << KdenliveSettings::currenttmpfolder() + fname << endl;
- delete [] filterString;
-}
-
-const QString jackString = "<?xml version=\"1.0\"?><!DOCTYPE jackrack SYSTEM \"http://purge.bash.sh/~rah/jack_rack_1.2.dtd\"><jackrack><channels>2</channels><samplerate>48000</samplerate><plugin><id>";
-
-
-const char* initEffects::ladspaDeclipEffectString(QStringList)
-{
- return qstrdup(QString(jackString + "1195</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall></plugin></jackrack>").toUtf8());
-}
-
-/*
-const char* initEffects::ladspaVocoderEffectString(QStringList params)
-{
- return qstrdup( QString(jackString + "1441</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>0.000000</value><value>0.000000</value></controlrow><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).arg(params[3]));
-}*/
-
-const char* initEffects::ladspaVinylEffectString(QStringList params)
-{
- return qstrdup(QString(jackString + "1905</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><controlrow><value>%1</value></controlrow><controlrow><value>%2</value></controlrow><controlrow><value>%3</value></controlrow><controlrow><value>%4</value></controlrow><controlrow><value>%5</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).arg(params[3]).arg(params[4]).toUtf8());
-}
-
-const char* initEffects::ladspaPitchEffectString(QStringList params)
-{
- return qstrdup(QString(jackString + "1433</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.0</value><value>1.0</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>4.000000</value><value>4.000000</value></controlrow></plugin></jackrack>").arg(params[0]).toUtf8());
-}
-
-const char* initEffects::ladspaRoomReverbEffectString(QStringList params)
-{
- return qstrdup(QString(jackString + "1216</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>0.750000</value><value>0.750000</value></controlrow><controlrow><lock>true</lock><value>-70.000000</value><value>-70.000000</value></controlrow><controlrow><lock>true</lock><value>0.000000</value><value>0.000000</value></controlrow><controlrow><lock>true</lock><value>-17.500000</value><value>-17.500000</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).toUtf8());
-}
-
-const char* initEffects::ladspaReverbEffectString(QStringList params)
-{
- return qstrdup(QString(jackString + "1423</id><enabled>true</enabled> <wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked> <wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values> <lockall>true</lockall><controlrow><lock>true</lock><value>%1</value> <value>%1</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>0.250000</value><value>0.250000</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).toUtf8());
-}
-
-const char* initEffects::ladspaEqualizerEffectString(QStringList params)
-{
- return qstrdup(QString(jackString + "1901</id><enabled>true</enabled> <wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked> <wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><controlrow><value>%1</value></controlrow><controlrow><value>%2</value></controlrow> <controlrow><value>%3</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).toUtf8());
-}
-
-const char* initEffects::ladspaLimiterEffectString(QStringList params)
-{
- return qstrdup(QString(jackString + "1913</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><controlrow><value>%1</value></controlrow><controlrow><value>%2</value></controlrow><controlrow><value>%3</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).toUtf8());
-}
-
-const char* initEffects::ladspaPitchShifterEffectString(QStringList params)
-{
- return qstrdup(QString(jackString + "1193</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow></plugin></jackrack>").arg(params[0]).toUtf8());
-}
-
-const char* initEffects::ladspaRateScalerEffectString(QStringList params)
-{
- return qstrdup(QString(jackString + "1417</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow></plugin></jackrack>").arg(params[0]).toUtf8());
-}
-
-const char* initEffects::ladspaPhaserEffectString(QStringList params)
-{
- return qstrdup(QString(jackString + "1217</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).arg(params[3]).toUtf8());
-}
-const char* initEffects::ladspaEqualizer15EffectString(QStringList params)
-{
- return qstrdup(QString(jackString + "1197</id><enabled>true</enabled><wet_dry_enabled>false</wet_dry_enabled><wet_dry_locked>true</wet_dry_locked><wet_dry_values><value>1.000000</value><value>1.000000</value></wet_dry_values><lockall>true</lockall><controlrow><lock>true</lock><value>%1</value><value>%1</value></controlrow><controlrow><lock>true</lock><value>%2</value><value>%2</value></controlrow><controlrow><lock>true</lock><value>%3</value><value>%3</value></controlrow><controlrow><lock>true</lock><value>%4</value><value>%4</value></controlrow><controlrow><lock>true</lock><value>%5</value><value>%5</value></controlrow><controlrow><lock>true</lock><value>%6</value><value>%6</value></controlrow><controlrow><lock>true</lock><value>%7</value><value>%7</value></controlrow><controlrow><lock>true</lock><value>%8</value><value>%8</value></controlrow><controlrow><lock>true</lock><value>%9</value><value>%9</value></controlrow><controlrow><lock>true</lock><value>%10</value><value>%10</value></controlrow><controlrow><lock>true</lock><value>%11</value><value>%11</value></controlrow><controlrow><lock>true</lock><value>%12</value><value>%12</value></controlrow><controlrow><lock>true</lock><value>%13</value><value>%13</value></controlrow><controlrow><lock>true</lock><value>%14</value><value>%14</value></controlrow><controlrow><lock>true</lock><value>%15</value><value>%15</value></controlrow></plugin></jackrack>").arg(params[0]).arg(params[1]).arg(params[2]).arg(params[3]).arg(params[4]).arg(params[5]).arg(params[6]).arg(params[7]).arg(params[8]).arg(params[9]).arg(params[10]).arg(params[11]).arg(params[12]).arg(params[13]).arg(params[14]).toUtf8());
-}
-
-
QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* repository, const QString& /*type*/, const QString& filtername)
{
paramList.append(quickParameterFill(ret, i18n("Softness"), "softness", "double", "0", "0", "100", "", "", "100"));
paramList.append(quickParameterFill(ret, i18nc("@property: means that the image is inverted", "Invert"), "invert", "bool", "0", "0", "1"));
- paramList.append(quickParameterFill(ret, i18n("Image File"), "resource", "list", "", "", "", imagefiles.join(","), imagenamelist.join(",")));
+ paramList.append(quickParameterFill(ret, i18n("Image File"), "resource", "list", "", "", "", imagefiles.join(";"), imagenamelist.join(",")));
paramList.append(quickParameterFill(ret, i18n("Reverse Transition"), "reverse", "bool", "0", "0", "1"));
//thumbnailer.prepareThumbnailsCall(imagelist);
} else if (name == "composite") {
ktrans.setAttribute("id", name);
tname.appendChild(ret.createTextNode(i18n("Composite")));
desc.appendChild(ret.createTextNode(i18n("A key-framable alpha-channel compositor for two frames.")));
- paramList.append(quickParameterFill(ret, i18n("Geometry"), "geometry", "geometry", "0%,0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100"));
+ paramList.append(quickParameterFill(ret, i18n("Geometry"), "geometry", "geometry", "0%/0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100"));
paramList.append(quickParameterFill(ret, i18n("Alpha Channel Operation"), "operator", "list", "over", "", "", "over,and,or,xor", i18n("Over,And,Or,Xor")));
paramList.append(quickParameterFill(ret, i18n("Align"), "aligned", "bool", "1", "0", "1"));
paramList.append(quickParameterFill(ret, i18n("Fill"), "fill", "bool", "1", "0", "1"));
paramList.append(quickParameterFill(ret, i18n("Distort"), "distort", "bool", "0", "0", "1"));
- paramList.append(quickParameterFill(ret, i18n("Wipe File"), "luma", "list", "", "", "", imagefiles.join(","), imagenamelist.join(",")));
+ paramList.append(quickParameterFill(ret, i18n("Wipe File"), "luma", "list", "", "", "", imagefiles.join(";"), imagenamelist.join(",")));
paramList.append(quickParameterFill(ret, i18n("Wipe Softness"), "softness", "double", "0", "0", "100", "", "", "100"));
paramList.append(quickParameterFill(ret, i18n("Wipe Invert"), "luma_invert", "bool", "0", "0", "1"));
paramList.append(quickParameterFill(ret, i18n("Force Progressive Rendering"), "progressive", "bool", "1", "0", "1"));
paramList.append(quickParameterFill(ret, i18n("Fix Shear Z"), "fix_shear_z", "double", "0", "0", "360"));*/
paramList.append(quickParameterFill(ret, "keyed", "keyed", "fixed", "1", "1", "1"));
- paramList.append(quickParameterFill(ret, i18n("Geometry"), "geometry", "geometry", "0,0,100%,100%,100%", "0,0,100%,100%,100%", "0,0,100%,100%,100%", "", "", "", "", "", "true"));
+ paramList.append(quickParameterFill(ret, i18n("Geometry"), "geometry", "geometry", "0/0:100%x100%:100%", "0/0:100%x100%:100%", "0/0:100%x100%:100%", "", "", "", "", "", "true"));
paramList.append(quickParameterFill(ret, i18n("Rotate X"), "rotate_x", "addedgeometry", "0", "-1800", "1800", QString(), QString(), "10"));
paramList.append(quickParameterFill(ret, i18n("Rotate Y"), "rotate_y", "addedgeometry", "0", "-1800", "1800", QString(), QString(), "10"));
tname.appendChild(ret.createTextNode(i18n("Region")));
desc.appendChild(ret.createTextNode(i18n("Use alpha channel of another clip to create a transition.")));
paramList.append(quickParameterFill(ret, i18n("Transparency clip"), "resource", "url", "", "", "", "", "", ""));
- paramList.append(quickParameterFill(ret, i18n("Geometry"), "composite.geometry", "geometry", "0%,0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100"));
+ paramList.append(quickParameterFill(ret, i18n("Geometry"), "composite.geometry", "geometry", "0%/0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100"));
paramList.append(quickParameterFill(ret, i18n("Alpha Channel Operation"), "composite.operator", "list", "over", "", "", "over,and,or,xor", i18n("Over,And,Or,Xor")));
paramList.append(quickParameterFill(ret, i18n("Align"), "composite.aligned", "bool", "1", "0", "1"));
paramList.append(quickParameterFill(ret, i18n("Fill"), "composite.fill", "bool", "1", "0", "1"));
paramList.append(quickParameterFill(ret, i18n("Distort"), "composite.distort", "bool", "0", "0", "1"));
- paramList.append(quickParameterFill(ret, i18n("Wipe File"), "composite.luma", "list", "", "", "", imagefiles.join(","), imagenamelist.join(",")));
+ paramList.append(quickParameterFill(ret, i18n("Wipe File"), "composite.luma", "list", "", "", "", imagefiles.join(";"), imagenamelist.join(",")));
paramList.append(quickParameterFill(ret, i18n("Wipe Softness"), "composite.softness", "double", "0", "0", "100", "", "", "100"));
paramList.append(quickParameterFill(ret, i18n("Wipe Invert"), "composite.luma_invert", "bool", "0", "0", "1"));
paramList.append(quickParameterFill(ret, i18n("Force Progressive Rendering"), "composite.progressive", "bool", "1", "0", "1"));