]> git.sesse.net Git - kdenlive/blobdiff - src/renderer.cpp
cleanup & fix crash on project saving with Qt 4.5:
[kdenlive] / src / renderer.cpp
index 5c3d5e427332d777dc203715be603582e82c2b1b..a4559e7cbd8b9db7f891528aa9fe47df6b720dd2 100644 (file)
@@ -114,7 +114,7 @@ void Render::buildConsumer() {
     m_mltConsumer->set("resize", 1);
     m_mltConsumer->set("window_id", m_winid);
     m_mltConsumer->set("terminate_on_pause", 1);
-    m_mltConsumer->set("window_background", (int) KdenliveSettings::window_background().rgb ());
+    m_mltConsumer->set("window_background", decodedString(KdenliveSettings::window_background().name()));
 
     m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show);
     m_mltConsumer->set("rescale", "nearest");
@@ -461,7 +461,7 @@ void Render::slotSplitView(bool doit) {
     }
 }
 
-void Render::getFileProperties(const QDomElement &xml, const QString &clipId) {
+void Render::getFileProperties(const QDomElement &xml, const QString &clipId, bool replaceProducer) {
     int height = 50;
     int width = (int)(height  * m_mltProfile->dar());
     QMap < QString, QString > filePropertyMap;
@@ -470,7 +470,7 @@ void Render::getFileProperties(const QDomElement &xml, const QString &clipId) {
     KUrl url = KUrl(xml.attribute("resource", QString::null));
     Mlt::Producer *producer = NULL;
     if (xml.attribute("type").toInt() == TEXT && !QFile::exists(url.path())) {
-        emit replyGetFileProperties(clipId, producer, filePropertyMap, metadataPropertyMap);
+        emit replyGetFileProperties(clipId, producer, filePropertyMap, metadataPropertyMap, replaceProducer);
         return;
     }
     if (xml.attribute("type").toInt() == COLOR) {
@@ -684,7 +684,7 @@ void Render::getFileProperties(const QDomElement &xml, const QString &clipId) {
             metadataPropertyMap[ name.section(".", 0, -2)] = value;
     }
 
-    emit replyGetFileProperties(clipId, producer, filePropertyMap, metadataPropertyMap);
+    emit replyGetFileProperties(clipId, producer, filePropertyMap, metadataPropertyMap, replaceProducer);
     kDebug() << "REquested fuile info for: " << url.path();
     if (frame) delete frame;
     //if (producer) delete producer;
@@ -846,7 +846,7 @@ void Render::setSceneList(QString playlist, int position) {
 }
 
 /** Create the producer from the Westley QDomDocument */
-QString Render::sceneList() {
+const QString Render::sceneList() {
     QString playlist;
     Mlt::Consumer westleyConsumer(*m_mltProfile , "westley:kdenlive_playlist");
     m_mltProducer->optimise();
@@ -1639,7 +1639,7 @@ int Render::mltChangeClipSpeed(ItemInfo info, double speed, double oldspeed, Mlt
     int newLength = 0;
     Mlt::Service service(m_mltProducer->parent().get_service());
     if (service.type() != tractor_type) kWarning() << "// TRACTOR PROBLEM";
-    kDebug() << "Changing clip speed, set in and out: " << info.cropStart.frames(m_fps) << " to " << (info.endPos - info.startPos).frames(m_fps) - 1;
+    //kDebug() << "Changing clip speed, set in and out: " << info.cropStart.frames(m_fps) << " to " << (info.endPos - info.startPos).frames(m_fps) - 1;
     Mlt::Tractor tractor(service);
     Mlt::Producer trackProducer(tractor.track(info.track));
     Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
@@ -1648,12 +1648,21 @@ int Render::mltChangeClipSpeed(ItemInfo info, double speed, double oldspeed, Mlt
     int clipLength = trackPlaylist.clip_length(clipIndex);
 
     Mlt::Producer clip(trackPlaylist.get_clip(clipIndex));
-    QString serv = clip.parent().get("mlt_service");
-    QString id = clip.parent().get("id");
-    kDebug() << "CLIP SERVICE: " << clip.parent().get("mlt_service");
+    if (!clip.is_valid() || clip.is_blank()) {
+        // invalid clip
+        return -1;
+    }
+    Mlt::Producer clipparent = clip.parent();
+    if (!clipparent.is_valid() || clipparent.is_blank()) {
+        // invalid clip
+        return -1;
+    }
+    QString serv = clipparent.get("mlt_service");
+    QString id = clipparent.get("id");
+    //kDebug() << "CLIP SERVICE: " << serv;
     if (serv == "avformat" && speed != 1.0) {
         mlt_service_lock(service.get_service());
-        QString url = clip.parent().get("resource");
+        QString url = clipparent.get("resource");
         url.append("?" + QString::number(speed));
         Mlt::Producer *slowprod = m_slowmotionProducers.value(url);
         if (!slowprod || slowprod->get_producer() == NULL) {
@@ -1704,7 +1713,7 @@ int Render::mltChangeClipSpeed(ItemInfo info, double speed, double oldspeed, Mlt
 
     } else if (serv == "framebuffer") {
         mlt_service_lock(service.get_service());
-        QString url = clip.parent().get("resource");
+        QString url = clipparent.get("resource");
         url = url.section("?", 0, 0);
         url.append("?" + QString::number(speed));
         Mlt::Producer *slowprod = m_slowmotionProducers.value(url);
@@ -1731,7 +1740,7 @@ int Render::mltChangeClipSpeed(ItemInfo info, double speed, double oldspeed, Mlt
         Mlt::Producer *cut;
         if (clipIndex + 1 < trackPlaylist.count() && (info.startPos + newDuration).frames(m_fps) > blankEnd) {
             GenTime maxLength = GenTime(blankEnd, m_fps) - info.startPos;
-            cut = slowprod->cut((int)(info.cropStart.frames(m_fps)), (int)(info.cropStart.frames(m_fps) + maxLength.frames(m_fps) - 1));
+            cut = slowprod->cut((int)(info.cropStart.frames(m_fps) / speed), (int)(info.cropStart.frames(m_fps) / speed + maxLength.frames(m_fps) - 1));
         } else cut = slowprod->cut((int)(info.cropStart.frames(m_fps) / speed), (int)((info.cropStart / speed + newDuration).frames(m_fps) - 1));
 
         trackPlaylist.insert_at(startPos, *cut, 1);