]> git.sesse.net Git - kdenlive/commitdiff
* New: split monitor to view several tracks at once
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 21 Jul 2008 15:18:50 +0000 (15:18 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 21 Jul 2008 15:18:50 +0000 (15:18 +0000)
* Fixed audio mixing stopping at 10 minutes

svn path=/branches/KDE4/; revision=2334

src/docclipbase.cpp
src/kdenlivedoc.cpp
src/monitor.cpp
src/projectlist.cpp
src/renderer.cpp
src/renderer.h

index 0cdc17a700aa4c2146d339cbdb94ad5d043d4453..0dc9b1a8322c5959ecaaf95420896fe5fb0be8e5 100644 (file)
@@ -398,10 +398,10 @@ void DocClipBase::slotRefreshProducer() {
                 char *tmp = (char *) qstrdup(resource.toUtf8().data());
                 filter->set("luma.resource", tmp);
                 delete[] tmp;
-               if (getProperty("softness") != QString()) {
-                   int soft = getProperty("softness").toInt();
-                   filter->set("luma.softness", (double) soft / 100.0);
-               }
+                if (getProperty("softness") != QString()) {
+                    int soft = getProperty("softness").toInt();
+                    filter->set("luma.softness", (double) soft / 100.0);
+                }
             } else {
                 // filter does not exist, create it...
                 Mlt::Filter *filter = new Mlt::Filter(*(m_clipProducer->profile()), "luma");
@@ -411,10 +411,10 @@ void DocClipBase::slotRefreshProducer() {
                 char *tmp = (char *) qstrdup(resource.toUtf8().data());
                 filter->set("luma.resource", tmp);
                 delete[] tmp;
-               if (getProperty("softness") != QString()) {
-                   int soft = getProperty("softness").toInt();
-                   filter->set("luma.softness", (double) soft / 100.0);
-               }
+                if (getProperty("softness") != QString()) {
+                    int soft = getProperty("softness").toInt();
+                    filter->set("luma.softness", (double) soft / 100.0);
+                }
                 clipService.attach(*filter);
             }
         } else {
index c0fd48c37c4d81e7c662aabcbdef801f943460c3..e08946c7580c55376fbf3e7cb543a72e03bb6c66 100644 (file)
@@ -161,9 +161,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, MltVideoPro
 
         for (uint i = 2; i < total ; i++) {
             QDomElement transition = m_document.createElement("transition");
-            transition.setAttribute("in", "0");
-            //TODO: Make audio mix last for all project duration
-            transition.setAttribute("out", "15000");
+            transition.setAttribute("always_active", "1");
 
             QDomElement property = m_document.createElement("property");
             property.setAttribute("name", "a_track");
index 03cc00dbe148c6e3d1ada2866835149dbc4cc4e5..a87e389dead1cb578ab9d79e0a388c2a1b7eb09f 100644 (file)
@@ -104,6 +104,9 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
     if (name != "clip") {
         connect(render, SIGNAL(rendererPosition(int)), this, SIGNAL(renderPosition(int)));
         connect(render, SIGNAL(durationChanged(int)), this, SIGNAL(durationChanged(int)));
+        QAction *splitView = m_contextMenu->addAction(KIcon("document-new"), i18n("Split view"));
+        splitView->setCheckable(true);
+        connect(splitView, SIGNAL(toggled(bool)), render, SLOT(slotSplitView(bool)));
     } else {
         QAction *setThumbFrame = m_contextMenu->addAction(KIcon("document-new"), i18n("Set current image as thumbnail"));
         connect(setThumbFrame, SIGNAL(triggered()), this, SLOT(slotSetThumbFrame()));
index 8cec2bcf47f99005e60add9490551db44ebf4c8a..d11deaf51639082e1d3cb97c83238cf34cb5722e 100644 (file)
@@ -386,7 +386,7 @@ void ProjectList::slotAddSlideshowClip() {
             groupId = item->clipId();
         }
 
-        m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), dia->softness(),group, groupId);
+        m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), dia->softness(), group, groupId);
     }
     delete dia;
 }
index 324d03a33fb917ee20b40487394ad6f3234922f7..23e08fc5de9e8d31d9e19804a2a486dc285955ef 100644 (file)
@@ -381,6 +381,71 @@ const double Render::dar() const {
     return m_mltProfile->dar();
 }
 
+void Render::slotSplitView(bool doit) {
+    Mlt::Service service(m_mltProducer->parent().get_service());
+    Mlt::Tractor tractor(service);
+    Mlt::Field *field = tractor.field();
+    if (doit) {
+        int screen = 0;
+        for (int i = 1; i < tractor.count() && screen < 4; i++) {
+            Mlt::Producer trackProducer(tractor.track(i));
+            kDebug() << "// TRACK: " << i << ", HIDE: " << trackProducer.get("hide");
+            if (QString(trackProducer.get("hide")).toInt() != 1) {
+                kDebug() << "// ADIDNG TRACK: " << i;
+                Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, "composite");
+                transition->set("mlt_service", "composite");
+                transition->set("a_track", 0);
+                transition->set("b_track", i);
+                transition->set("distort", 1);
+                transition->set("internal_added", "200");
+                char *tmp;
+                switch (screen) {
+                case 0:
+                    tmp = "0,0:50%x50%";
+                    break;
+                case 1:
+                    tmp = "50%,0:50%x50%";
+                    break;
+                case 2:
+                    tmp = "0,50%:50%x50%";
+                    break;
+                case 3:
+                    tmp = "50%,50%:50%x50%";
+                    break;
+                }
+                transition->set("geometry", tmp);
+                transition->set("always_active", "1");
+                field->plant_transition(*transition, 0, i);
+                //delete[] tmp;
+                screen++;
+            }
+        }
+        m_mltConsumer->set("refresh", 1);
+    } else {
+
+        mlt_service serv = m_mltProducer->parent().get_service();
+
+        mlt_service nextservice = mlt_service_get_producer(serv);
+        mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice);
+        QString mlt_type = mlt_properties_get(properties, "mlt_type");
+        QString resource = mlt_properties_get(properties, "mlt_service");
+
+        while (mlt_type == "transition") {
+            QString added = mlt_properties_get(MLT_SERVICE_PROPERTIES(nextservice), "internal_added");
+            if (added == "200") {
+                mlt_field_disconnect_service(field->get_field(), nextservice);
+            }
+            nextservice = mlt_service_producer(nextservice);
+            if (nextservice == NULL) break;
+            properties = MLT_SERVICE_PROPERTIES(nextservice);
+            mlt_type = mlt_properties_get(properties, "mlt_type");
+            resource = mlt_properties_get(properties, "mlt_service");
+            m_mltConsumer->set("refresh", 1);
+        }
+    }
+
+}
+
 void Render::getFileProperties(const QDomElement &xml, int clipId) {
     int height = 50;
     int width = (int)(height  * m_mltProfile->dar());
@@ -437,10 +502,10 @@ void Render::getFileProperties(const QDomElement &xml, int clipId) {
                 char *tmp = decodedString(xml.attribute("luma_file"));
                 filter->set("luma.resource", tmp);
                 delete[] tmp;
-               if (xml.hasAttribute("softness")) {
-                   int soft = xml.attribute("softness").toInt();
-                   filter->set("luma.softness", (double) soft / 100.0);
-               }
+                if (xml.hasAttribute("softness")) {
+                    int soft = xml.attribute("softness").toInt();
+                    filter->set("luma.softness", (double) soft / 100.0);
+                }
             }
             Mlt::Service clipService(producer->get_service());
             clipService.attach(*filter);
@@ -1796,9 +1861,8 @@ QMap<QString, QString> Render::mltGetTransitionParamsFromXml(QDomElement xml) {
 }
 
 void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool do_refresh) {
-    QMap<QString, QString> args = mltGetTransitionParamsFromXml(xml);
-
 
+    QMap<QString, QString> args = mltGetTransitionParamsFromXml(xml);
     Mlt::Service service(m_mltProducer->parent().get_service());
 
     Mlt::Tractor tractor(service);
@@ -1806,7 +1870,8 @@ void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in,
 
     char *transId = decodedString(tag);
     Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, transId);
-    transition->set_in_and_out((int) in.frames(m_fps), (int) out.frames(m_fps));
+    if (out != GenTime())
+        transition->set_in_and_out((int) in.frames(m_fps), (int) out.frames(m_fps));
     QMap<QString, QString>::Iterator it;
     QString key;
 
index 75a6daed13de236ad11b5fafb46d7a683372ff83..59d3fe58c493d994179a6d8ac5b9c626f90b7f1a 100644 (file)
@@ -253,6 +253,7 @@ public slots:  // Public slots
     void exportFileToFirewire(QString srcFileName, int port, GenTime startTime, GenTime endTime);
     static char *decodedString(QString str);
     void mltSavePlaylist();
+    void slotSplitView(bool doit);
 };
 
 #endif