]> git.sesse.net Git - kdenlive/commitdiff
ugly hack to read all parameters to set.
authorMarco Gittler <marco@gitma.de>
Tue, 22 Nov 2011 21:26:00 +0000 (22:26 +0100)
committerMarco Gittler <marco@gitma.de>
Tue, 22 Nov 2011 21:26:00 +0000 (22:26 +0100)
should we cange some more in kdenlive to read this from mlt itself ?

src/clipstabilize.cpp
src/clipstabilize.h
src/mainwindow.cpp
src/widgets/clipstabilize_ui.ui

index 4ec8c27c69880c082c14f89261c8ec2fde821b7a..e00b1e476bd212981aa770d22e3d6d58a224b6f9 100644 (file)
 #include <KMessageBox>
 #include <QtConcurrentRun>
 #include <QTimer>
+#include <QSlider>
 #include <KFileDialog>
 
 
-ClipStabilize::ClipStabilize(KUrl::List urls, const QString &params, 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 &params, 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 &params, 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<QString,QHash<QString,QString> > hi(m_ui_params);
+       while(hi.hasNext()){
+               hi.next();
+               qDebug() << hi.key() << hi.value();
+               QHash<QString,QString> 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 <QString,QHash<QString,QString> > 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;i<vbox->count();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"
 
index 0b29dc6688ebc26290464e8d122bcdde540a123b..f814a6a5e8d755d1bb1af710e013a81c290e08f7 100644 (file)
@@ -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 &params, QWidget * parent = 0);
+    ClipStabilize(KUrl::List urls, const QString &params, 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<QString,QHash<QString,QString> > m_ui_params;
+       QVBoxLayout *vbox;
+       void fillParamaters(QStringList);
 
 signals:
     void addClip(KUrl url);
index db917bcf34f088f954663fa3dc3049cc0add00bd..9927ddcf11f3d82bc6604f3da1c7a1deb1846c05 100644 (file)
@@ -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();
 
index b7a7aecf95f78689afe5d270128adbc6847c1d06..5aca677274d70c46141fc3cfb1bb35f7fff7bd4a 100644 (file)
@@ -42,7 +42,7 @@
     </widget>
    </item>
    <item row="6" column="0" colspan="3">
-    <widget class="QTextEdit" name="ffmpeg_params">
+    <widget class="QWidget" name="optionsbox">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
        <horstretch>0</horstretch>