]> git.sesse.net Git - kdenlive/commitdiff
Forgotten file from previous commit, some fixes for the b frame drop option
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 13 Jan 2009 10:46:19 +0000 (10:46 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 13 Jan 2009 10:46:19 +0000 (10:46 +0000)
svn path=/branches/KDE4/; revision=2909

src/clipmanager.cpp
src/docclipbase.cpp
src/docclipbase.h
src/renderer.cpp
src/trackview.cpp

index 62c264395e5a465601f8ddecdd479fcd52539a02..c7506b5fc2895068a83376c489bff539d990387a 100644 (file)
@@ -152,7 +152,7 @@ DocClipBase *ClipManager::getClipByResource(QString resource) {
 void ClipManager::updatePreviewSettings() {
     for (int i = 0; i < m_clipList.count(); i++) {
         if (m_clipList.at(i)->clipType() == AV || m_clipList.at(i)->clipType() == VIDEO) {
-            if (m_clipList.at(i)->producerProperty("meta.media.0.codec.name") == "h264") {
+            if (m_clipList.at(i)->producerProperty("meta.media.0.codec.name") && strcmp(m_clipList.at(i)->producerProperty("meta.media.0.codec.name"), "h264") == 0) {
                 if (KdenliveSettings::dropbframes()) {
                     m_clipList[i]->setProducerProperty("skip_loop_filter", "all");
                     m_clipList[i]->setProducerProperty("skip_frame", "bidir");
index e0f98851a0c86dc3da8121c1debfdb50dd61db6e..1867d253be1bf81c64d07a636a269460a87f5568 100644 (file)
@@ -426,7 +426,7 @@ Mlt::Producer *DocClipBase::producer(int track) {
         char *tmp = (char *) qstrdup(QString(getId() + '_' + QString::number(track)).toUtf8().data());
         m_baseTrackProducers[track]->set("id", tmp);
         delete[] tmp;
-        if (KdenliveSettings::dropbframes()) {
+        if (KdenliveSettings::dropbframes() && m_baseTrackProducers.at(i)->get("skip_loop_filter") && strcmp(m_baseTrackProducers.at(i)->get("skip_loop_filter"), "all") == 0) {
             m_baseTrackProducers[track]->set("skip_loop_filter", "all");
             m_baseTrackProducers[track]->set("skip_frame", "bidir");
         }
@@ -448,15 +448,13 @@ void DocClipBase::setProducerProperty(const char *name, const char *data) {
     }
 }
 
-QString DocClipBase::producerProperty(const char *name) const {
+const char *DocClipBase::producerProperty(const char *name) const {
     for (int i = 0; i < m_baseTrackProducers.count(); i++) {
         if (m_baseTrackProducers.at(i) != NULL) {
-            char *tmp = m_baseTrackProducers.at(i)->get(name);
-            QString result = QString(tmp);
-            return result;
+            return m_baseTrackProducers.at(i)->get(name);
         }
     }
-    return QString();
+    return NULL;
 }
 
 
index 1527627620a414242a62040863705a06d0ec71cf..4d68744f30d2e68273a1828b2bd8138ba2b418f4 100644 (file)
@@ -167,7 +167,7 @@ Q_OBJECT public:
     void askForAudioThumbs();
     QString getClipHash() const;
     void refreshThumbUrl();
-    QString producerProperty(const char *name) const;
+    const char *producerProperty(const char *name) const;
     void setProducerProperty(const char *name, const char *data);
     void deleteProducers();
 
index b42ef96ff24279bdf9e2c0e63d7a39bd343568f4..1e383dd42cb0f3e2af0ed7b8bb30d064e309b924 100644 (file)
@@ -642,6 +642,18 @@ void Render::getFileProperties(const QDomElement &xml, const QString &clipId) {
             if (producer->get(property))
                 filePropertyMap["videocodec"] = producer->get(property);
         }
+
+        if (KdenliveSettings::dropbframes()) {
+            kDebug() << "// LOOKING FOR H264 on: " << default_video;
+            snprintf(property, sizeof(property), "meta.media.%d.codec.name", default_video);
+            kDebug() << "PROP: " << property << " = " << producer->get(property);
+            if (producer->get(property) && strcmp(producer->get(property), "h264") == 0) {
+                kDebug() << "// GOT H264 CLIP, SETTING FAST PROPS";
+                producer->set("skip_loop_filter", "all");
+                producer->set("skip_frame", "bidir");
+            }
+        }
+
     } else kDebug() << " / / / / /WARNING, VIDEO CONTEXT IS NULL!!!!!!!!!!!!!!";
     if (producer->get_int("audio_index") > -1) {
         // Get the audio_index
@@ -722,6 +734,8 @@ void Render::setProducer(Mlt::Producer *producer, int position) {
         m_mltConsumer->stop();
     } else return;
 
+    m_mltConsumer->purge();
+
     m_isBlocked = true;
     if (m_mltProducer) {
         m_mltProducer->set_speed(0);
@@ -729,8 +743,13 @@ void Render::setProducer(Mlt::Producer *producer, int position) {
         m_mltProducer = NULL;
         emit stopped();
     }
-    if (producer) m_mltProducer = new Mlt::Producer(producer->get_producer());
-    else m_mltProducer = new Mlt::Producer();
+    if (producer) {
+        m_mltProducer = new Mlt::Producer(producer->get_producer());
+    } else m_mltProducer = new Mlt::Producer();
+    /*if (KdenliveSettings::dropbframes()) {
+    m_mltProducer->set("skip_loop_filter", "all");
+        m_mltProducer->set("skip_frame", "bidir");
+    }*/
     if (!m_mltProducer || !m_mltProducer->is_valid()) kDebug() << " WARNING - - - - -INVALID PLAYLIST: ";
 
     m_fps = m_mltProducer->get_fps();
index acda3ab43771ca9576271507f0f47dc93e69feda..10a15d25c3817d483a2532d4a127596b4831fb50 100644 (file)
@@ -379,10 +379,8 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml) {
             int in = elem.attribute("in").toInt();
             QString idString = elem.attribute("producer");
             QString id = idString;
-            bool hasSpeedAttribute = false;
-            double speed;
+            double speed = 1.0;
             if (idString.startsWith("slowmotion")) {
-                hasSpeedAttribute = true;
                 id = idString.section(":", 1, 1);
                 speed = idString.section(":", 2, 2).toDouble();
             } else id = id.section('_', 0, 0);
@@ -396,8 +394,7 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml) {
                 clipinfo.cropStart = GenTime(in, m_doc->fps());
                 clipinfo.track = ix;
                 //kDebug() << "// INSERTING CLIP: " << in << "x" << out << ", track: " << ix << ", ID: " << id << ", SCALE: " << m_scale << ", FPS: " << m_doc->fps();
-                ClipItem *item = new ClipItem(clip, clipinfo, m_doc->fps(), false);
-                if (hasSpeedAttribute) item->setSpeed(speed);
+                ClipItem *item = new ClipItem(clip, clipinfo, m_doc->fps(), speed, false);
                 m_scene->addItem(item);
                 clip->addReference();
                 position += (out - in + 1);
@@ -587,7 +584,7 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml) {
                     missingClip = new DocClipBase(m_doc->clipManager(), producerXml, id);
                     m_documentErrors.append(i18n("Boken clip producer %1\n", id));
                 } else m_documentErrors.append(i18n("Replaced wrong clip producer %1 with %2\n", id, missingClip->getId()));
-                ClipItem *item = new ClipItem(missingClip, clipinfo, m_doc->fps(), false);
+                ClipItem *item = new ClipItem(missingClip, clipinfo, m_doc->fps(), 1.0, false);
                 m_scene->addItem(item);
                 missingClip->addReference();
                 position += (out - in + 1);