From 515478642cdca3a049c55d4cccbcafef823a4f5d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Wed, 24 Oct 2012 16:09:26 +0200 Subject: [PATCH] Cleanup filter jobs --- effects/automask.xml | 13 +++++- effects/sox_gain.xml | 4 +- src/customtrackview.cpp | 9 ++-- src/customtrackview.h | 2 +- src/docclipbase.cpp | 13 +++++- src/effectstack/collapsibleeffect.cpp | 2 +- src/effectstack/collapsibleeffect.h | 2 +- src/effectstack/effectstackview2.cpp | 6 +-- src/effectstack/effectstackview2.h | 4 +- src/effectstack/parametercontainer.cpp | 9 +++- src/effectstack/parametercontainer.h | 2 +- src/mainwindow.cpp | 6 +-- src/projectlist.cpp | 60 +++++++++++--------------- src/projectlist.h | 8 ++-- src/projecttree/meltjob.cpp | 29 +++---------- src/projecttree/meltjob.h | 6 +-- 16 files changed, 91 insertions(+), 84 deletions(-) diff --git a/effects/automask.xml b/effects/automask.xml index ae2c51e3..ae68503a 100644 --- a/effects/automask.xml +++ b/effects/automask.xml @@ -12,6 +12,12 @@ Macroblock height + + Maximum x distance + + + Maximum y distance + Denoise @@ -21,7 +27,12 @@ Obscure - + + + + motion_vector_list + autotrack_rectangle + Motion vectors Analyse diff --git a/effects/sox_gain.xml b/effects/sox_gain.xml index 0a67a674..11f7a8db 100644 --- a/effects/sox_gain.xml +++ b/effects/sox_gain.xml @@ -6,7 +6,9 @@ Gain - + + gain + sox_gain Normalize diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index a0833a0d..cba00f15 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -2684,7 +2684,8 @@ void CustomTrackView::dropEvent(QDropEvent * event) groupSelectedItems(true); } else if (items.count() == 1) { m_dragItem = static_cast (items.at(0)); - emit clipItemSelected((ClipItem*)m_dragItem, false); + ClipItem *selected = static_cast (m_dragItem); + emit clipItemSelected(selected, false); } event->setDropAction(Qt::MoveAction); event->accept(); @@ -7491,16 +7492,16 @@ void CustomTrackView::adjustEffects(ClipItem* item, ItemInfo oldInfo, QUndoComma } -void CustomTrackView::slotGotFilterJobResults(const QString &/*id*/, int startPos, int track, const QString &filter, stringMap filterParams, QStringList extra) +void CustomTrackView::slotGotFilterJobResults(const QString &/*id*/, int startPos, int track, stringMap filterParams, stringMap extra) { ClipItem *clip = getClipItemAt(GenTime(startPos, m_document->fps()), track); if (clip == NULL) { - emit displayMessage(i18n("Cannot find clip for effect update %1.", filter), ErrorMessage); + emit displayMessage(i18n("Cannot find clip for effect update %1.", extra.value("finalfilter")), ErrorMessage); return; } QDomElement newEffect; QDomElement effect = clip->getEffectAtIndex(clip->selectedEffectIndex()); - if (effect.attribute("id") == filter) { + if (effect.attribute("id") == extra.value("finalfilter")) { newEffect = effect.cloneNode().toElement(); QMap::const_iterator i = filterParams.constBegin(); while (i != filterParams.constEnd()) { diff --git a/src/customtrackview.h b/src/customtrackview.h index 74f9b9e3..3312e74e 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -495,7 +495,7 @@ private slots: * @param resetThumbs Should we recreate the timeline thumbnails. */ void slotRefreshThumbs(const QString &id, bool resetThumbs); /** @brief A Filter job producer results. */ - void slotGotFilterJobResults(const QString &id, int startPos, int track, const QString &filter, stringMap filterParams, QStringList extra); + void slotGotFilterJobResults(const QString &id, int startPos, int track, stringMap filterParams, stringMap extra); signals: diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index 5dd95e56..5f2f01a1 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -1279,7 +1279,18 @@ QImage DocClipBase::extractImage(int frame, int width, int height) void DocClipBase::setAnalysisData(const QString &name, const QString &data) { if (data.isEmpty()) m_analysisdata.remove(name); - else m_analysisdata.insert(name, data); + else { + if (m_analysisdata.contains(name)) { + int i = 1; + QString newname = name + " " + QString::number(i); + while (m_analysisdata.contains(newname)) { + i++; + newname = name + " " + QString::number(i); + } + m_analysisdata.insert(newname, data); + } + else m_analysisdata.insert(name, data); + } } QMap DocClipBase::analysisData() const diff --git a/src/effectstack/collapsibleeffect.cpp b/src/effectstack/collapsibleeffect.cpp index 7ca82375..70733f31 100644 --- a/src/effectstack/collapsibleeffect.cpp +++ b/src/effectstack/collapsibleeffect.cpp @@ -455,7 +455,7 @@ void CollapsibleEffect::setupWidget(ItemInfo info, EffectMetaInfo *metaInfo) } connect (m_paramWidget, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)), this, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int))); - connect(m_paramWidget, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QStringList)), this, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QStringList))); + connect(m_paramWidget, SIGNAL(startFilterJob(QString,QString,QString,QString,const QMap )), this, SIGNAL(startFilterJob(QString,QString,QString,QString,const QMap ))); connect (this, SIGNAL(syncEffectsPos(int)), m_paramWidget, SIGNAL(syncEffectsPos(int))); connect (m_paramWidget, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int))); diff --git a/src/effectstack/collapsibleeffect.h b/src/effectstack/collapsibleeffect.h index 54daa70b..0d053546 100644 --- a/src/effectstack/collapsibleeffect.h +++ b/src/effectstack/collapsibleeffect.h @@ -129,7 +129,7 @@ signals: void checkMonitorPosition(int); void seekTimeline(int); /** @brief Start an MLT filter job on this clip. */ - void startFilterJob(QString filterName, QString filterParams, QString finalFilterName, QString consumer, QString consumerParams, QStringList extraParams); + void startFilterJob(QString filterName, QString filterParams, QString consumer, QString consumerParams, const QMap extraParams); /** @brief An effect was reset, trigger param reload. */ void resetEffect(int ix); /** @brief Ask for creation of a group. */ diff --git a/src/effectstack/effectstackview2.cpp b/src/effectstack/effectstackview2.cpp index 7366b753..69c28d75 100644 --- a/src/effectstack/effectstackview2.cpp +++ b/src/effectstack/effectstackview2.cpp @@ -271,7 +271,7 @@ void EffectStackView2::connectEffect(CollapsibleEffect *currentEffect) // Check drag & drop currentEffect->installEventFilter( this ); connect(currentEffect, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)), this , SLOT(slotUpdateEffectParams(const QDomElement, const QDomElement, int))); - connect(currentEffect, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QStringList)), this , SLOT(slotStartFilterJob(QString,QString,QString,QString,QString,QStringList))); + connect(currentEffect, SIGNAL(startFilterJob(QString,QString,QString,QString,const QMap )), this , SLOT(slotStartFilterJob(QString,QString,QString,QString,const QMap ))); connect(currentEffect, SIGNAL(deleteEffect(const QDomElement)), this , SLOT(slotDeleteEffect(const QDomElement))); connect(currentEffect, SIGNAL(reloadEffects()), this , SIGNAL(reloadEffects())); connect(currentEffect, SIGNAL(resetEffect(int)), this , SLOT(slotResetEffect(int))); @@ -644,10 +644,10 @@ void EffectStackView2::slotMoveEffectUp(QList indexes, bool up) else emit changeEffectPosition(m_clipref, -1, indexes, endPos); } -void EffectStackView2::slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QStringList &extraParams) +void EffectStackView2::slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&consumer, const QString&consumerParams, const QMap &extraParams) { if (!m_clipref) return; - emit startFilterJob(m_clipref->info(), m_clipref->clipProducer(), filterName, filterParams, finalFilterName, consumer, consumerParams, extraParams); + emit startFilterJob(m_clipref->info(), m_clipref->clipProducer(), filterName, filterParams, consumer, consumerParams, extraParams); } void EffectStackView2::slotResetEffect(int ix) diff --git a/src/effectstack/effectstackview2.h b/src/effectstack/effectstackview2.h index 6c878505..dd34fe09 100644 --- a/src/effectstack/effectstackview2.h +++ b/src/effectstack/effectstackview2.h @@ -167,7 +167,7 @@ private slots: void slotSetCurrentEffect(int ix); /** @brief Triggers a filter job on this clip. */ - void slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QStringList &extraParams); + void slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&consumer, const QString&consumerParams, const QMap &extraParams); /** @brief Reset an effect to its default values. */ void slotResetEffect(int ix); @@ -223,7 +223,7 @@ signals: void updateClipRegion(ClipItem*, int, QString); void displayMessage(const QString&, int); void showComments(bool show); - void startFilterJob(ItemInfo info, const QString &clipId, const QString &filterName, const QString &filterParams, const QString&finalFilterName, const QString &consumer, const QString &consumerParams, const QStringList &extraParams); + void startFilterJob(ItemInfo info, const QString &clipId, const QString &filterName, const QString &filterParams, const QString &consumer, const QString &consumerParams, const QMap &extraParams); void addEffect(ClipItem*,QDomElement); void importClipKeyframes(GRAPHICSRECTITEM = AVWIDGET); }; diff --git a/src/effectstack/parametercontainer.cpp b/src/effectstack/parametercontainer.cpp index bcaeec55..b3820c6f 100644 --- a/src/effectstack/parametercontainer.cpp +++ b/src/effectstack/parametercontainer.cpp @@ -820,8 +820,13 @@ void ParameterContainer::slotStartFilterJobAction() paramData.append(parameters.at(j).name()+"="+parameters.at(j).value()+" "); filterparams.replace("%params", paramData); } - QStringList extra = pa.attribute("extraparams").split(' ', QString::SkipEmptyParts); - emit startFilterJob(pa.attribute("filtertag"), filterparams, pa.attribute("finalfilter"), pa.attribute("consumer"), pa.attribute("consumerparams"), extra); + QMap extraParams; + QDomNodeList jobparams = pa.elementsByTagName("jobparam"); + for (int j = 0; j < jobparams.count(); j++) { + QDomElement e = jobparams.item(j).toElement(); + extraParams.insert(e.attribute("name"), e.text().toUtf8()); + } + emit startFilterJob(pa.attribute("filtertag"), filterparams, pa.attribute("consumer"), pa.attribute("consumerparams"), extraParams); kDebug()<<" - - -PROPS:\n"<extra); /** @brief Request import of keyframes from clip data. */ void importClipKeyframes(); }; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 6aee6888..49bf5018 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -280,7 +280,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_effectStack = new EffectStackView2(m_projectMonitor); m_effectStackDock->setWidget(m_effectStack); addDockWidget(Qt::TopDockWidgetArea, m_effectStackDock); - connect(m_effectStack, SIGNAL(startFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QStringList&)), m_projectList, SLOT(slotStartFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QStringList&))); + connect(m_effectStack, SIGNAL(startFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QMap &)), m_projectList, SLOT(slotStartFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QMap &))); m_transitionConfigDock = new QDockWidget(i18n("Transition"), this); m_transitionConfigDock->setObjectName("transition"); @@ -2523,7 +2523,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha disconnect(m_activeTimeline->projectView(), SIGNAL(playMonitor()), m_projectMonitor, SLOT(slotPlay())); disconnect(m_activeTimeline->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType))); disconnect(m_activeTimeline->projectView(), SIGNAL(showClipFrame(DocClipBase *, QPoint, bool, const int)), m_clipMonitor, SLOT(slotSetClipProducer(DocClipBase *, QPoint, bool, const int))); - disconnect(m_projectList, SIGNAL(gotFilterJobResults(const QString &, int, int, const QString &, stringMap,QStringList)), m_activeTimeline->projectView(), SLOT(slotGotFilterJobResults(const QString &, int, int, const QString &, stringMap,QStringList))); + disconnect(m_projectList, SIGNAL(gotFilterJobResults(const QString &, int, int, stringMap,stringMap)), m_activeTimeline->projectView(), SLOT(slotGotFilterJobResults(const QString &, int, int, stringMap, stringMap))); disconnect(m_activeTimeline, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(slotActivateMonitor())); disconnect(m_activeTimeline, SIGNAL(configTrack(int)), this, SLOT(slotConfigTrack(int))); @@ -2605,7 +2605,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha connect(trackView->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), m_projectMonitor, SLOT(slotSetSelectedClip(Transition*))); - connect(m_projectList, SIGNAL(gotFilterJobResults(const QString &, int, int, const QString &, stringMap,QStringList)), trackView->projectView(), SLOT(slotGotFilterJobResults(const QString &, int, int, const QString &, stringMap,QStringList))); + connect(m_projectList, SIGNAL(gotFilterJobResults(const QString &, int, int, stringMap,stringMap)), trackView->projectView(), SLOT(slotGotFilterJobResults(const QString &, int, int, stringMap,stringMap))); connect(m_projectList, SIGNAL(addMarkers(const QString &, QList )), trackView->projectView(), SLOT(slotAddClipMarker(const QString &, QList ))); diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 70ea5a10..022b1971 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -3009,9 +3009,9 @@ void ProjectList::slotProcessJobs() MeltJob *jb = static_cast (job); jb->setProducer(currentClip->getProducer(), currentClip->fileURL()); if (jb->isProjectFilter()) - connect(job, SIGNAL(gotFilterJobResults(QString,int, int, QString,stringMap,QStringList)), this, SLOT(slotGotFilterJobResults(QString,int, int, QString,stringMap,QStringList))); + connect(job, SIGNAL(gotFilterJobResults(QString,int, int, stringMap,stringMap)), this, SLOT(slotGotFilterJobResults(QString,int, int,stringMap,stringMap))); else - connect(job, SIGNAL(gotFilterJobResults(QString,int, int, QString,stringMap,QStringList)), this, SIGNAL(gotFilterJobResults(QString,int, int, QString,stringMap,QStringList))); + connect(job, SIGNAL(gotFilterJobResults(QString,int, int, stringMap,stringMap)), this, SIGNAL(gotFilterJobResults(QString,int, int,stringMap,stringMap))); } job->startJob(); if (job->jobStatus == JOBDONE) { @@ -3436,19 +3436,19 @@ void ProjectList::discardJobs(const QString &id, JOBTYPE type) { } } -void ProjectList::slotStartFilterJob(ItemInfo info, const QString&id, const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QStringList &extraParams) +void ProjectList::slotStartFilterJob(ItemInfo info, const QString&id, const QString&filterName, const QString&filterParams, const QString&consumer, const QString&consumerParams, const QMap &extraParams) { ProjectItem *item = getItemById(id); if (!item) return; QStringList jobParams; jobParams << QString::number(info.cropStart.frames(m_fps)) << QString::number((info.cropStart + info.cropDuration).frames(m_fps)); - jobParams << QString() << filterName << filterParams << consumer << consumerParams << QString::number(info.startPos.frames(m_fps)) << QString::number(info.track) << finalFilterName; + jobParams << QString() << filterName << filterParams << consumer << consumerParams << QString::number(info.startPos.frames(m_fps)) << QString::number(info.track); MeltJob *job = new MeltJob(item->clipType(), id, jobParams, extraParams); if (job->isExclusive() && hasPendingJob(item, job->jobType)) { delete job; return; } - job->description = i18n("Filter %1", finalFilterName); + job->description = i18n("Filter %1", extraParams.value("finalfilter")); m_jobList.append(job); setJobStatus(item, job->jobType, JOBWAITING, 0, job->statusMessage()); slotCheckJobProcess(); @@ -3492,16 +3492,16 @@ void ProjectList::startClipFilterJob(const QString &filterName, const QString &c jobParams << filterName << "bounding=\"25%x25%:25%x25\" shot_change_list=0"; // Consumer jobParams << "null" << "all=1 terminate_on_pause=1 real_time=-1"; - QStringList extraParams; - extraParams << "key:shot_change_list"; - extraParams << "projecttreefilter"; + QMap extraParams; + extraParams.insert("key", "shot_change_list"); + extraParams.insert("projecttreefilter", "1"); if (ui.add_markers->isChecked()) { // We want to create markers - extraParams << QString("addmarkers:%1").arg(ui.marker_type->currentIndex()); + extraParams.insert("addmarkers", QString::number(ui.marker_type->currentIndex())); } if (ui.cut_scenes->isChecked()) { // We want to cut scenes - extraParams << "cutscenes"; + extraParams.insert("cutscenes", "1"); } delete d; processClipJob(ids, QString(), false, jobParams, i18n("Auto split"), extraParams); @@ -3509,15 +3509,15 @@ void ProjectList::startClipFilterJob(const QString &filterName, const QString &c else { QPointer d = new ClipStabilize(destination, ids.count(), filterName); if (d->exec() == QDialog::Accepted) { - QStringList extraParams; - extraParams << "producer_profile"; + QMap extraParams; + extraParams.insert("producer_profile", "1"); processClipJob(ids, d->destination(), d->autoAddClip(), d->params(), d->desc(), extraParams); } delete d; } } -void ProjectList::processClipJob(QStringList ids, const QString&destination, bool autoAdd, QStringList jobParams, const QString &description, QStringList extraParams) +void ProjectList::processClipJob(QStringList ids, const QString&destination, bool autoAdd, QStringList jobParams, const QString &description, QMap extraParams) { QStringList preParams; // in and out @@ -3611,38 +3611,31 @@ void ProjectList::slotClosePopup() m_errorLog.clear(); } -void ProjectList::slotGotFilterJobResults(QString id, int , int , QString filter, stringMap results, QStringList extra) +void ProjectList::slotGotFilterJobResults(QString id, int , int , stringMap results, stringMap filterInfo) { + // Currently, only the first value of results is used + kDebug()<<"// FILTER RES:\n"<setText(i18n("Auto Split Clip")); - foreach (QString pos, returnData) { + foreach (QString pos, value) { if (!pos.contains("=")) continue; int newPos = pos.section("=", 0, 0).toInt(); // Don't use scenes shorter than 1 second @@ -3662,7 +3655,7 @@ void ProjectList::slotGotFilterJobResults(QString id, int , int , QString filter command->setText(i18n("Add Markers")); QList markersList; int index = 1; - foreach (QString pos, returnData) { + foreach (QString pos, value) { if (!pos.contains("=")) continue; int newPos = pos.section("=", 0, 0).toInt(); // Don't use scenes shorter than 1 second @@ -3674,10 +3667,9 @@ void ProjectList::slotGotFilterJobResults(QString id, int , int , QString filter } emit addMarkers(id, markersList); } - if (!dataProcessed || extra.contains("storedata")) { + if (!dataProcessed || filterInfo.contains("storedata")) { // Store returned data as clip extra data - - clip->referencedClip()->setAnalysisData(i18n("Motion vectors"), results.value(returnKey)); + clip->referencedClip()->setAnalysisData(filterInfo.contains("displaydataname") ? filterInfo.value("displaydataname") : key, results.value(key)); emit updateAnalysisData(clip->referencedClip()); } } diff --git a/src/projectlist.h b/src/projectlist.h index 1f906a5d..ef290dad 100644 --- a/src/projectlist.h +++ b/src/projectlist.h @@ -330,7 +330,7 @@ public slots: /** @brief Start transcoding selected clips. */ void slotTranscodeClipJob(const QString &condition, QString params, QString desc); /** @brief Start an MLT process job. */ - void slotStartFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QString&,const QStringList&); + void slotStartFilterJob(ItemInfo, const QString&,const QString&,const QString&,const QString&,const QString&,const QMap &); void slotSetThumbnail(const QString &id, int framePos, QImage img); @@ -425,7 +425,7 @@ private: /** @brief Get the list of job names for current clip. */ QStringList getPendingJobs(const QString &id); /** @brief Start an MLT process job. */ - void processClipJob(QStringList ids, const QString&destination, bool autoAdd, QStringList jobParams, const QString &description, QStringList extraParams = QStringList()); + void processClipJob(QStringList ids, const QString&destination, bool autoAdd, QStringList jobParams, const QString &description, QMap extraParams = QMap ()); private slots: void slotClipSelected(); @@ -492,7 +492,7 @@ private slots: /** @brief close warning info passive popup. */ void slotClosePopup(); /** @brief process clip job result. */ - void slotGotFilterJobResults(QString ,int , int, QString, stringMap, QStringList); + void slotGotFilterJobResults(QString ,int , int, stringMap, stringMap); signals: void clipSelected(DocClipBase *, QPoint zone = QPoint(), bool forceUpdate = false); @@ -525,7 +525,7 @@ signals: void gotProxy(const QString); void checkJobProcess(); /** @brief A Filter Job produced results, send them back to the clip. */ - void gotFilterJobResults(const QString &id, int startPos, int track, const QString &filterName, stringMap params, QStringList extre); + void gotFilterJobResults(const QString &id, int startPos, int track, stringMap params, stringMap extra); void pauseMonitor(); void updateAnalysisData(DocClipBase *); void addMarkers(const QString &, QList ); diff --git a/src/projecttree/meltjob.cpp b/src/projecttree/meltjob.cpp index ed170fdb..55926077 100644 --- a/src/projecttree/meltjob.cpp +++ b/src/projecttree/meltjob.cpp @@ -35,7 +35,7 @@ static void consumer_frame_render(mlt_consumer, MeltJob * self, mlt_frame /*fram self->emitFrameNumber(); } -MeltJob::MeltJob(CLIPTYPE cType, const QString &id, QStringList parameters, QStringList extraParams) : AbstractClipJob(MLTJOB, cType, id, parameters), +MeltJob::MeltJob(CLIPTYPE cType, const QString &id, QStringList parameters, QMap extraParams) : AbstractClipJob(MLTJOB, cType, id, parameters), addClipToProject(0), m_producer(NULL), m_profile(NULL), @@ -80,19 +80,7 @@ void MeltJob::startJob() if (!m_params.isEmpty()) startPos = m_params.takeFirst().toInt(); int track = -1; if (!m_params.isEmpty()) track = m_params.takeFirst().toInt(); - QString finalFilter; - if (!m_params.isEmpty()) finalFilter = m_params.takeFirst(); - else finalFilter = filter; - - // Check if we want to return analysis data - QString properties; - for (int i = 0; i < m_extra.count(); i++) { - if (m_extra.at(i).startsWith("key:")) { - properties = m_extra.at(i).section(':', 1); - break; - } - } - + if (!m_extra.contains("finalfilter")) m_extra.insert("finalfilter", filter); if (out != -1 && out <= in) { m_errorMessage.append(i18n("Clip zone undefined (%1 - %2).", in, out)); @@ -115,7 +103,7 @@ void MeltJob::startJob() prod = tmp->cut(in, out); delete tmp; } - if (m_extra.contains("prducer_profile")) { + if (m_extra.contains("producer_profile")) { m_profile->from_producer(*prod); m_profile->set_explicit(true); } @@ -174,13 +162,10 @@ void MeltJob::startJob() } m_consumer->stop(); - QStringList wanted = properties.split(',', QString::SkipEmptyParts); - stringMap jobResults; - foreach(const QString &key, wanted) { - QString value = mltFilter.get(key.toUtf8().constData()); - jobResults.insert(key, value); - } - if (!jobResults.isEmpty() && jobStatus != JOBABORTED) emit gotFilterJobResults(m_clipId, startPos, track, finalFilter, jobResults, m_extra); + QMap jobResults; + if (m_extra.contains("key")) + jobResults.insert(m_extra.value("key"), mltFilter.get(m_extra.value("key").toUtf8().constData())); + if (!jobResults.isEmpty() && jobStatus != JOBABORTED) emit gotFilterJobResults(m_clipId, startPos, track, jobResults, m_extra); setStatus(JOBDONE); delete m_consumer; delete prod; diff --git a/src/projecttree/meltjob.h b/src/projecttree/meltjob.h index d3736503..41671a6b 100644 --- a/src/projecttree/meltjob.h +++ b/src/projecttree/meltjob.h @@ -41,7 +41,7 @@ class MeltJob : public AbstractClipJob Q_OBJECT public: - MeltJob(CLIPTYPE cType, const QString &id, QStringList parameters, QStringList extraParams = QStringList()); + MeltJob(CLIPTYPE cType, const QString &id, QStringList parameters, QMap extraParams = QMap ()); virtual ~ MeltJob(); const QString destination() const; void startJob(); @@ -62,10 +62,10 @@ private: QString m_dest; QString m_url; int m_length; - QStringList m_extra; + QMap m_extra; signals: - void gotFilterJobResults(const QString &id, int startPos, int track, const QString &filterName, stringMap params, QStringList extraParam); + void gotFilterJobResults(const QString &id, int startPos, int track, stringMap result, stringMap extra); }; #endif -- 2.39.5