From: Marco Gittler Date: Tue, 22 Nov 2011 21:26:00 +0000 (+0100) Subject: ugly hack to read all parameters to set. X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=00d973b02051abac151f5b06214984e76b8cdbf1;p=kdenlive ugly hack to read all parameters to set. should we cange some more in kdenlive to read this from mlt itself ? --- diff --git a/src/clipstabilize.cpp b/src/clipstabilize.cpp index 4ec8c27c..e00b1e47 100644 --- a/src/clipstabilize.cpp +++ b/src/clipstabilize.cpp @@ -28,11 +28,12 @@ #include #include #include +#include #include -ClipStabilize::ClipStabilize(KUrl::List urls, const QString ¶ms, QWidget * parent) : - QDialog(parent), m_urls(urls), m_duration(0),m_profile(NULL),m_consumer(NULL),m_playlist(NULL) +ClipStabilize::ClipStabilize(KUrl::List urls, const QString ¶ms, Mlt::Filter* filter,QWidget * parent) : + QDialog(parent), m_urls(urls), m_duration(0),m_profile(NULL),m_consumer(NULL),m_playlist(NULL),m_filter(filter),vbox(NULL) { setFont(KGlobalSettings::toolBarFont()); setupUi(this); @@ -72,12 +73,53 @@ ClipStabilize::ClipStabilize(KUrl::List urls, const QString ¶ms, QWidget * p } else transcode_info->setHidden(true);*/ } + if (filtername=="videostab"){ + QStringList ls; + ls << "shutterangle,type,int,value,0,min,0,max,100,factor,1"; + fillParamaters(ls); + }else if (filtername=="videostab2"){ + QStringList ls; + ls << "accuracy,type,int,value,4,min,1,max,10,factor,1"; + ls << "stepsize,type,int,value,6,min,0,max,100,factor,1"; + ls << "algo,type,int,value,0,min,0,max,1,factor,1"; + ls << "mincontrast,type,int,value,30,min,0,max,100,factor,100"; + ls << "show,type,int,value,0,min,0,max,2,factor,1"; + ls << "smoothing,type,int,value,10,min,0,max,100,factor,1"; + ls << "maxshift,type,int,value,-1,min,-1,max,1000,factor,1"; + ls << "maxangle,type,int,value,-1,min,-1,max,1000,factor,1"; + ls << "crop,type,int,value,0,min,0,max,1,factor,1"; + ls << "invert,type,int,value,0,min,0,max,1,factor,1"; + ls << "realtive,type,int,value,1,min,0,max,1,factor,1"; + ls << "zoom,type,int,value,0,min,-500,max,500,factor,1"; + ls << "optzoom,type,int,value,1,min,0,max,1,factor,1"; + ls << "sharpen,type,int,value,8,min,0,max,100,factor,10"; + fillParamaters(ls); + + } connect(button_start, SIGNAL(clicked()), this, SLOT(slotStartStabilize())); connect(buttonBox,SIGNAL(rejected()), this, SLOT(slotAbortStabilize())); m_timer=new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(slotShowStabilizeInfo())); + vbox=new QVBoxLayout(optionsbox); + QHashIterator > hi(m_ui_params); + while(hi.hasNext()){ + hi.next(); + qDebug() << hi.key() << hi.value(); + QHash val=hi.value(); + QLabel *l=new QLabel(hi.key(),this); + QSlider* s=new QSlider(Qt::Horizontal,this); + qDebug() << val["max"].toInt() << val["min"].toInt() << val["value"].toInt(); + s->setMaximum(val["max"].toInt()); + s->setMinimum(val["min"].toInt()); + s->setValue(val["value"].toInt()); + s->setObjectName(hi.key()); + connect(s,SIGNAL(sliderMoved(int)),this,SLOT(slotUpdateParams())); + vbox->addWidget(l); + vbox->addWidget(s); + } + adjustSize(); } @@ -99,7 +141,7 @@ void ClipStabilize::slotStartStabilize() m_duration = 0; QStringList parameters; QString destination; - QString params = ffmpeg_params->toPlainText().simplified(); + //QString params = ffmpeg_params->toPlainText().simplified(); if (urls_list->count() > 0) { source_url->setUrl(m_urls.takeFirst()); destination = dest_url->url().path(); @@ -122,6 +164,11 @@ void ClipStabilize::slotStartStabilize() qDebug() << m_profile->description(); m_playlist= new Mlt::Playlist; Mlt::Filter filter(*m_profile,filtername.toUtf8().data()); + QHashIterator > it(m_ui_params); + while (it.hasNext()){ + it.next(); + filter.set(it.key().toAscii().data(),it.value()["value"].toAscii().data()); + } Mlt::Producer p(*m_profile,s_url.toUtf8().data()); m_playlist->append(p); m_playlist->attach(filter); @@ -191,6 +238,41 @@ void ClipStabilize::slotStabilizeFinished(bool success) } +void ClipStabilize::slotUpdateParams() +{ + for (int i=0;icount();i++){ + QWidget* w=vbox->itemAt(i)->widget(); + QString name=w->objectName(); + if (name !="" && m_ui_params.contains(name)){ + if (m_ui_params[name]["type"]=="int"){ + QSlider *s=(QSlider*)w; + m_ui_params[name]["value"]=QString::number((double)(s->value()/m_ui_params[name]["factor"].toInt())); + qDebug() << name << m_ui_params[name]["value"]; + } + } + } +} + +void ClipStabilize::fillParamaters(QStringList lst) +{ + + m_ui_params.clear(); + while (!lst.isEmpty()){ + QString vallist=lst.takeFirst(); + QStringList cont=vallist.split(","); + QString name=cont.takeFirst(); + while (!cont.isEmpty()){ + QString valname=cont.takeFirst(); + QString val; + if (!cont.isEmpty()){ + val=cont.takeFirst(); + } + m_ui_params[name][valname]=val; + } + } + +} + #include "clipstabilize.moc" diff --git a/src/clipstabilize.h b/src/clipstabilize.h index 0b29dc66..f814a6a5 100644 --- a/src/clipstabilize.h +++ b/src/clipstabilize.h @@ -32,6 +32,7 @@ namespace Mlt{ class Profile; class Playlist; class Consumer; + class Filter; }; class ClipStabilize : public QDialog, public Ui::ClipStabilize_UI @@ -39,7 +40,7 @@ class ClipStabilize : public QDialog, public Ui::ClipStabilize_UI Q_OBJECT public: - ClipStabilize(KUrl::List urls, const QString ¶ms, QWidget * parent = 0); + ClipStabilize(KUrl::List urls, const QString ¶ms, Mlt::Filter* filter,QWidget * parent = 0); ~ClipStabilize(); @@ -49,6 +50,7 @@ private slots: void slotStabilizeFinished(bool success); void slotRunStabilize(); void slotAbortStabilize(); + void slotUpdateParams(); private: QString filtername; @@ -57,7 +59,11 @@ private: Mlt::Playlist *m_playlist; KUrl::List m_urls; int m_duration; + Mlt::Filter* m_filter; QTimer *m_timer; + QHash > m_ui_params; + QVBoxLayout *vbox; + void fillParamaters(QStringList); signals: void addClip(KUrl url); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index db917bcf..9927ddcf 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -3836,7 +3836,9 @@ void MainWindow::slotStabilize(KUrl::List urls) m_messageLabel->setMessage(i18n("No clip to transcode"), ErrorMessage); return; } - ClipStabilize *d=new ClipStabilize(urls,filtername); + Mlt::Profile profile; + Mlt::Filter filter(profile,filtername.toUtf8().data()); + ClipStabilize *d=new ClipStabilize(urls,filtername,&filter); connect(d, SIGNAL(addClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl))); d->show(); diff --git a/src/widgets/clipstabilize_ui.ui b/src/widgets/clipstabilize_ui.ui index b7a7aecf..5aca6772 100644 --- a/src/widgets/clipstabilize_ui.ui +++ b/src/widgets/clipstabilize_ui.ui @@ -42,7 +42,7 @@ - + 0