]> git.sesse.net Git - kdenlive/commitdiff
all transitions can now added
authorMarco Gittler <marco@gitma.de>
Fri, 21 Mar 2008 14:15:06 +0000 (14:15 +0000)
committerMarco Gittler <marco@gitma.de>
Fri, 21 Mar 2008 14:15:06 +0000 (14:15 +0000)
svn path=/branches/KDE4/; revision=2092

src/renderer.cpp
src/transitionsettings.cpp

index 7d4693f59aee5ab353c99bbda3b979d99f0f2647..aeec8a0474b9a7ed529f143cd72800aca657e63e 100644 (file)
@@ -1351,206 +1351,75 @@ void Render::mltUpdateTransition(QString oldTag, QString tag, int a_track, int b
 
     mltDeleteTransition(oldTag, a_track, b_track, in, out, args);
     mltAddTransition(tag, a_track, b_track, in, out, args);
-    m_isBlocked = false;
+    mltSavePlaylist();
 }
-typedef struct {
-    int size;
-    int count;
-    mlt_service *in;
-    mlt_service out;
-    int filter_count;
-    int filter_size;
-    mlt_filter *filters;
-    pthread_mutex_t mutex;
+
+void Render::replaceTimelineTractor(Mlt::Tractor t) {
+    Mlt::Service service(m_mltProducer->get_service());
+    Mlt::Playlist prod(service);
+    Mlt::Service service_playlist(prod.get_clip(0)->get_service());
+    prod.remove(0);
+    prod.insert(t, 0);
+    kDebug() << "newTractor inserted";
 }
-mlt_service_base;
 
 void Render::mltDeleteTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QMap <QString, QString> args) {
 
     Mlt::Tractor tractor(getTractor());
+
+    Mlt::Tractor newTractor;
+    mlt_service service = tractor.get_service();
+    mlt_service nextservice = mlt_service_get_producer(service);
+
     for (int track = 0;track < 10;track++) {
         Mlt::Producer *trackprod = tractor.track(track);
         if (!trackprod)
             continue;
-        Mlt::Producer trackProducer(trackprod);
-        Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
-        Mlt::Producer *prod = NULL;
-        int g = 0;
-        do {
-            prod = trackPlaylist.get_clip(g++);
-            if (prod) {
-
-                for (int j = 0;j < prod->count();j++) {
-
-                    kDebug() << prod->get_name(j) << " " << prod->get(j);
-                }
-                Mlt::Producer parprod = prod->parent();
-                for (int j = 0;j < parprod.count();j++) {
-
-                    kDebug() << "  " << parprod.get_name(j) << " " << parprod.get(j);
-                }
-                Mlt::Tractor tractor(parprod);
-                if (tractor.is_valid()) {
-                    kDebug() << "---------ja";
-                }
-            }
-            kDebug() << "track=" << track << " " << g << " " << prod;
-
-            /*Mlt::Tractor parent(prod->parent());
-             if (!parent.get_tractor())
-              continue;
-             Mlt::Producer *prod1=parent.track(1);
-             if (!prod1)
-              continue;*/
-        } while (g < 10);
+        newTractor.multitrack()->connect(*trackprod, track);
     }
-
-#if 0
-    return;
-    m_isBlocked = true;
-    m_mltConsumer->set("refresh", 0);
-    mlt_service serv = m_mltProducer->parent().get_service();
-    Mlt::Service service(m_mltProducer->parent().get_service());
-
-    Mlt::Tractor tractor(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");
-    int old_pos = (in.frames(m_fps) + out.frames(m_fps)) / 2;
-    int trackOffset = 0;
-    int new_in = in.frames(m_fps);
-    int new_out = out.frames(m_fps) - 1;
-    while (mlt_type == "transition") {
-        mlt_transition tr = (mlt_transition) nextservice;
-        int currentTrack = mlt_transition_get_b_track(tr);
-        int currentIn = (int) mlt_transition_get_in(tr);
-        int currentOut = (int) mlt_transition_get_out(tr);
-        kDebug() << "// FOUND EXISTING TRANS, IN: " << currentIn << ", OUT: " << currentOut << ", TRACK: " << currentTrack;
-        //kDebug()<<"// LOOKING FOR IN: "<<old_in<<", OUT: "<<old_out;
-        kDebug() << "// OLD IN: " << in.frames(m_fps) << " // OLD OUT: " << out.frames(m_fps) << ", TRACK: " << a_track << ", MID POS: " << old_pos;
-        if (/*resource == type &&*/ b_track == currentTrack && currentIn <= old_pos && currentOut >= old_pos) {
-            kDebug() << "found transition that matches" << resource;
-            //mlt_transition_set_in_and_out(tr, new_in, new_out);
-            Mlt::Field *field = tractor.field();
-            Mlt::Transition tt(*m_mltProfile, "mix");
-            field->plant_transition(tt, a_track, b_track);
-#if 0
-            mlt_service service = MLT_TRANSITION_SERVICE(tr);
-            mlt_service_base *base = (mlt_service_base*)service->local;
-            for (int i = 0;i < base->count;i++) {
-                kDebug() << base->in[i] << " " << tr << " " << service << nextservice;
-            }
-            mlt_service service1 = MLT_TRACTOR_SERVICE(tractor.get_tractor());
-            mlt_service_base *base1 = (mlt_service_base*)service1->local;
-            for (int i = 0;i < base1->count;i++) {
-                kDebug() << base1->in[i] << " " << tr << " " << service << nextservice;
-                if (base1->in[i] == (mlt_service_s*)tr) {
-                    mlt_service_lock(MLT_SERVICE_PROPERTIES(tr));
-                    //mlt_properties_dec_ref( MLT_SERVICE_PROPERTIES( tr ) );
-                    /*mlt_service_unlock(MLT_SERVICE_PROPERTIES(tr));
-
-
-                    mlt_events_disconnect(properties, nextservice);
-                    mlt_transition_close(tr);
-                    //base1->in[i]=NULL;
-                    base1->out = NULL;*/
-                    base1->in[i] = NULL;
-
-                    base1->count--;
-                    mlt_service_base *basetr = (mlt_service_base*)service1->local;
-                    basetr->out = NULL;
-                    return;
-                }
-            }
-
-            //service->child=NULL;
-            ///mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr);
-            ///mlt_properties_set ( properties , "active" , 0 );
-            ///7mlt_events_disconnect(properties, nextservice);
-            //mlt_events_fire(MLT_SERVICE_PROPERTIES(nextservice), "service-changed", NULL);
-            //mlt_properties_set_int(properties, "a_track", mlt_transition_get_a_track(tr) + trackOffset);
-            //mlt_properties_set_int(properties, "b_track", mlt_transition_get_b_track(tr) + trackOffset);
-            //}
-#endif
-            break;
+    for (int i = 2;i <= 5;i++) {
+        Mlt::Transition tr(*m_mltProfile, "mix");
+        tr.set("combine", 1);
+        tr.set("internal_added", 237);
+        tr.set_in_and_out(0, 15000);
+        newTractor.plant_transition(tr, 1, i);
+    }
+    while (nextservice != NULL) {
+        mlt_properties prop = MLT_SERVICE_PROPERTIES(nextservice);
+        kDebug() << mlt_properties_get(prop, "mlt_type") << mlt_properties_get(prop, "id");
+        if (QString(mlt_properties_get(prop, "mlt_type")) == "transition" && QString(mlt_properties_get(prop, "internal_added")) != "237") {
+
+            mlt_transition tr = (mlt_transition) nextservice;
+            Mlt::Transition transition(tr);
+            int current_a_track = mlt_transition_get_a_track(tr);
+            int current_b_track = mlt_transition_get_b_track(tr);
+            int currentIn = (int) mlt_transition_get_in(tr);
+            int currentOut = (int) mlt_transition_get_in(tr);
+            int old_pos = (int)((in.frames(m_fps) + out.frames(m_fps)) / 2);
+
+            if (current_a_track == a_track &&  b_track == current_b_track && currentIn <= old_pos && currentOut >= old_pos) {
+
+            } else
+                newTractor.plant_transition(transition, current_a_track, current_b_track);
         }
         nextservice = mlt_service_producer(nextservice);
-        properties = MLT_SERVICE_PROPERTIES(nextservice);
-        mlt_type = mlt_properties_get(properties, "mlt_type");
-        resource = mlt_properties_get(properties, "mlt_service");
     }
-    m_isBlocked = false;
-#endif
+
+    replaceTimelineTractor(newTractor);
+
 }
 
 void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QMap <QString, QString> args) {
-#if 0
 
-    Mlt::Tractor tractor(getTractor());
-    for (int track = 0;track < 10;track++) {
-        Mlt::Producer *trackprod = tractor.track(track);
-        if (!trackprod)
-            continue;
-        Mlt::Producer trackProducer(trackprod);
-        Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
-
-        int clipindex = trackPlaylist.get_clip_index_at(in.frames(m_fps));
-        if (clipindex != 0 && track == 5) {
-            Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, decodedString(tag));
-            if (!transition || !transition->get_transition())
-                return;
-            transition->set_in_and_out((int) in.frames(m_fps), (int) out.frames(m_fps));
-            QMap<QString, QString>::Iterator it;
-            QString key;
-
-            kDebug() << " ------  ADDING TRANSITION PARAMs: " << args.count() << "on track " << track;
-
-            for (it = args.begin(); it != args.end(); ++it) {
-                key = it.key();
-                char *name = decodedString(key);
-                char *value = decodedString(it.value());
-                transition->set(name, value);
-                kDebug() << " ------  ADDING TRANS PARAM: " << name << ": " << value;
-                //filter->set("kdenlive_id", id);
-                delete[] name;
-                delete[] value;
-            }
-            Mlt::Producer *left = trackPlaylist.get_clip(clipindex - 1);
-            Mlt::Producer *right = trackPlaylist.get_clip(clipindex);
-            kDebug() << "left=" << left << " right=" << right;
-            Mlt::Tractor mixer;
-            Mlt::Playlist track0;
-            mixer.set_track(track0, 0);
-            /** read from track down */
-            Mlt::Producer *trackprod2 = tractor.track(4);
-            Mlt::Producer trackProducer2(trackprod2);
-            Mlt::Playlist trackPlaylist2((mlt_playlist) trackProducer2.get_service());
-
-            int clipindex2 = trackPlaylist2.get_clip_index_at(in.frames(m_fps));
-            kDebug() << clipindex2;
-            left = trackPlaylist2.get_clip(clipindex2);
-            //left->cut(40,left->get_playtime() );
-            Mlt::Producer *lastleft = left->cut(left->get_in() + left->get_playtime() - 20, left->get_in() + left->get_playtime());
-            mixer.set_track(*lastleft, 0);
-            //track0.repeat(0, 20);
-            mixer.set_track(*right, 1);
-            transition->set_in_and_out(0, 20 - 1);
-            mixer.plant_transition(transition);
-            trackPlaylist.insert(mixer, clipindex, 0, mixer.get_playtime());
-            trackPlaylist.remove(clipindex + 1);
-        }
-    }
-    mltSavePlaylist();
-#else
     m_isBlocked = true;
     Mlt::Tractor tractor(getTractor());
     Mlt::Field *field = tractor.field();
     char *transId = decodedString(tag);
     Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, transId);
-    if (!transition || !transition->get_transition())
+    if (!transition || !transition->get_transition()) {
+        kDebug() << "NO transition is " << transition << "requested was " << tag << a_track << b_track << in.frames(m_fps) << out.frames(m_fps);
         return;
+    }
     transition->set_in_and_out((int) in.frames(m_fps), (int) out.frames(m_fps));
     QMap<QString, QString>::Iterator it;
     QString key;
@@ -1572,8 +1441,6 @@ void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in,
     delete[] transId;
     m_isBlocked = false;
     refresh();
-    mltSavePlaylist();
-#endif
 }
 
 void Render::mltSavePlaylist() {
@@ -1589,3 +1456,4 @@ void Render::mltSavePlaylist() {
 }
 
 #include "renderer.moc"
+
index 83aa0d606b013af0b8251c32e4717e47d6ad605b..7c9b3a568b12964cf6d83c1a6bfb850b53a9fd9d 100644 (file)
@@ -31,7 +31,10 @@ TransitionSettings::TransitionSettings(EffectsList *transitions, QWidget* parent
 void TransitionSettings::slotTransitionChanged() {
     QDomElement e = m_usedTransition->toXML();
     QDomElement newElement = e.cloneNode().toElement();
-    newElement.setAttribute("type", ui.listWidget->currentItem()->text());
+
+    QDomElement desc = m_transitions->getEffectByName(ui.listWidget->currentItem()->text());
+
+    newElement.setAttribute("type", desc.attribute("tag"));
     emit transitionUpdated(e, newElement);
 }