+MltVideoProfile ProfilesDialog::getVideoProfile(const QString &name)
+{
+ MltVideoProfile result;
+ QStringList profilesNames;
+ QStringList profilesFiles;
+ QStringList profilesFilter;
+ profilesFilter << "*";
+ QString path;
+ bool isCustom = false;
+ if (name.contains('/')) isCustom = true;
+
+ if (!isCustom) {
+ // List the Mlt profiles
+ profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
+ if (profilesFiles.contains(name)) path = KdenliveSettings::mltpath() + name;
+ }
+ if (isCustom || path.isEmpty()) {
+ path = name;
+ }
+
+ if (path.isEmpty() || !QFile::exists(path)) {
+ if (name == "dv_pal") {
+ kDebug() << "!!! WARNING, COULD NOT FIND DEFAULT MLT PROFILE";
+ return result;
+ }
+ if (name == KdenliveSettings::default_profile()) KdenliveSettings::setDefault_profile("dv_pal");
+ kDebug() << "// WARNING, COULD NOT FIND PROFILE " << name;
+ return result;
+ }
+ KConfig confFile(path, KConfig::SimpleConfig);
+ result.path = name;
+ result.description = confFile.entryMap().value("description");
+ result.frame_rate_num = confFile.entryMap().value("frame_rate_num").toInt();
+ result.frame_rate_den = confFile.entryMap().value("frame_rate_den").toInt();
+ result.width = confFile.entryMap().value("width").toInt();
+ result.height = confFile.entryMap().value("height").toInt();
+ result.progressive = confFile.entryMap().value("progressive").toInt();
+ result.sample_aspect_num = confFile.entryMap().value("sample_aspect_num").toInt();
+ result.sample_aspect_den = confFile.entryMap().value("sample_aspect_den").toInt();
+ result.display_aspect_num = confFile.entryMap().value("display_aspect_num").toInt();
+ result.display_aspect_den = confFile.entryMap().value("display_aspect_den").toInt();
+ result.colorspace = confFile.entryMap().value("colorspace").toInt();
+ return result;
+}
+
+// static
+double ProfilesDialog::getStringEval(const MltVideoProfile &profile, QString eval, const QPoint& frameSize)
+{
+ QScriptEngine sEngine;
+ sEngine.globalObject().setProperty("maxWidth", profile.width > frameSize.x() ? profile.width : frameSize.x());
+ sEngine.globalObject().setProperty("maxHeight", profile.height > frameSize.y() ? profile.height : frameSize.y());
+ sEngine.globalObject().setProperty("width", profile.width);
+ sEngine.globalObject().setProperty("height", profile.height);
+ return sEngine.evaluate(eval.remove('%')).toNumber();
+}
+
+
+// static
+bool ProfilesDialog::existingProfileDescription(const QString &desc)
+{
+ QStringList profilesFilter;
+ profilesFilter << "*";
+
+ // List the Mlt profiles
+ QStringList profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
+ for (int i = 0; i < profilesFiles.size(); ++i) {
+ KConfig confFile(KdenliveSettings::mltpath() + profilesFiles.at(i), KConfig::SimpleConfig);
+ if (desc == confFile.entryMap().value("description")) return true;
+ }
+
+ // List custom profiles
+ QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
+ for (int i = 0; i < customProfiles.size(); ++i) {
+ profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
+ for (int j = 0; j < profilesFiles.size(); ++j) {
+ KConfig confFile(customProfiles.at(i) + profilesFiles.at(j), KConfig::SimpleConfig);
+ if (desc == confFile.entryMap().value("description")) return true;
+ }
+ }
+ return false;
+}
+
+// static
+QString ProfilesDialog::existingProfile(const MltVideoProfile &profile)
+{
+ // Check if the profile has a matching entry in existing ones
+ QStringList profilesFilter;
+ profilesFilter << "*";
+
+ // Check the Mlt profiles
+ QStringList profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
+ for (int i = 0; i < profilesFiles.size(); ++i) {
+ KConfig confFile(KdenliveSettings::mltpath() + profilesFiles.at(i), KConfig::SimpleConfig);
+ if (profile.display_aspect_den != confFile.entryMap().value("display_aspect_den").toInt()) continue;
+ if (profile.display_aspect_num != confFile.entryMap().value("display_aspect_num").toInt()) continue;
+ if (profile.sample_aspect_den != confFile.entryMap().value("sample_aspect_den").toInt()) continue;
+ if (profile.sample_aspect_num != confFile.entryMap().value("sample_aspect_num").toInt()) continue;
+ if (profile.width != confFile.entryMap().value("width").toInt()) continue;
+ if (profile.height != confFile.entryMap().value("height").toInt()) continue;
+ if (profile.frame_rate_den != confFile.entryMap().value("frame_rate_den").toInt()) continue;
+ if (profile.frame_rate_num != confFile.entryMap().value("frame_rate_num").toInt()) continue;
+ if (profile.progressive != confFile.entryMap().value("progressive").toInt()) continue;
+ if (profile.colorspace != confFile.entryMap().value("colorspace").toInt()) continue;
+ return profilesFiles.at(i);
+ }
+
+ // Check custom profiles
+ QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
+ for (int i = 0; i < customProfiles.size(); ++i) {
+ profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
+ for (int j = 0; j < profilesFiles.size(); ++j) {
+ KConfig confFile(customProfiles.at(i) + profilesFiles.at(j), KConfig::SimpleConfig);
+ if (profile.display_aspect_den != confFile.entryMap().value("display_aspect_den").toInt()) continue;
+ if (profile.display_aspect_num != confFile.entryMap().value("display_aspect_num").toInt()) continue;
+ if (profile.sample_aspect_den != confFile.entryMap().value("sample_aspect_den").toInt()) continue;
+ if (profile.sample_aspect_num != confFile.entryMap().value("sample_aspect_num").toInt()) continue;
+ if (profile.width != confFile.entryMap().value("width").toInt()) continue;
+ if (profile.height != confFile.entryMap().value("height").toInt()) continue;
+ if (profile.frame_rate_den != confFile.entryMap().value("frame_rate_den").toInt()) continue;
+ if (profile.frame_rate_num != confFile.entryMap().value("frame_rate_num").toInt()) continue;
+ if (profile.progressive != confFile.entryMap().value("progressive").toInt()) continue;
+ if (profile.colorspace != confFile.entryMap().value("colorspace").toInt()) continue;
+ return customProfiles.at(i) + profilesFiles.at(j);
+ }
+ }
+ return QString();
+}
+
+// static
+QMap <QString, QString> ProfilesDialog::getProfilesInfo()
+{
+ QMap <QString, QString> result;
+ QStringList profilesFilter;
+ profilesFilter << "*";
+
+ // List the Mlt profiles
+ QStringList profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);
+ for (int i = 0; i < profilesFiles.size(); ++i) {
+ KConfig confFile(KdenliveSettings::mltpath() + profilesFiles.at(i), KConfig::SimpleConfig);
+ QString desc = confFile.entryMap().value("description");
+ if (!desc.isEmpty()) result.insert(desc, profilesFiles.at(i));
+ }
+
+ // List custom profiles
+ QStringList customProfiles = KGlobal::dirs()->findDirs("appdata", "profiles");
+ for (int i = 0; i < customProfiles.size(); ++i) {
+ profilesFiles = QDir(customProfiles.at(i)).entryList(profilesFilter, QDir::Files);
+ for (int j = 0; j < profilesFiles.size(); ++j) {
+ KConfig confFile(customProfiles.at(i) + profilesFiles.at(j), KConfig::SimpleConfig);
+ QString desc = confFile.entryMap().value("description");
+ if (!desc.isEmpty()) result.insert(desc, customProfiles.at(i) + profilesFiles.at(j));
+ }
+ }
+ return result;
+}
+
+// static
+QMap< QString, QString > ProfilesDialog::getSettingsFromFile(const QString& path)
+{
+ QStringList profilesNames;
+ QStringList profilesFiles;
+ QStringList profilesFilter;
+ profilesFilter << "*";
+
+ if (!path.contains('/')) {
+ // This is an MLT profile
+ KConfig confFile(KdenliveSettings::mltpath() + path, KConfig::SimpleConfig);
+ return confFile.entryMap();
+ } else {
+ // This is a custom profile
+ KConfig confFile(path, KConfig::SimpleConfig);
+ return confFile.entryMap();
+ }
+}
+
+// static
+QMap< QString, QString > ProfilesDialog::getSettingsForProfile(const QString& profileName)
+{
+ QStringList profilesNames;
+ QStringList profilesFiles;
+ QStringList profilesFilter;
+ profilesFilter << "*";
+
+ // List the Mlt profiles
+ profilesFiles = QDir(KdenliveSettings::mltpath()).entryList(profilesFilter, QDir::Files);