]> git.sesse.net Git - kdenlive/commitdiff
Allow user to force clip fps from clip properties dialog
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 19 Dec 2009 09:12:23 +0000 (09:12 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 19 Dec 2009 09:12:23 +0000 (09:12 +0000)
svn path=/trunk/kdenlive/; revision=4184

src/clipproperties.cpp
src/docclipbase.cpp
src/projectlist.cpp
src/renderer.cpp
src/widgets/clipproperties_ui.ui

index 8c058c6fe419f0bdfaef466b7ab9c0381a5d11fd..423a2814828349da2a40954ca0fb907d62f3963a 100644 (file)
@@ -60,6 +60,12 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
         m_view.clip_ar->setValue(props.value("force_aspect_ratio").toDouble());
     }
 
+    if (props.contains("force_fps") && props.value("force_fps").toDouble() > 0) {
+        m_view.clip_force_framerate->setChecked(true);
+        m_view.clip_framerate->setEnabled(true);
+        m_view.clip_framerate->setValue(props.value("force_fps").toDouble());
+    }
+
     if (props.contains("force_progressive")) {
         m_view.clip_force_progressive->setChecked(true);
         m_view.clip_progressive->setEnabled(true);
@@ -103,6 +109,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
     }
 
     connect(m_view.clip_force_ar, SIGNAL(toggled(bool)), m_view.clip_ar, SLOT(setEnabled(bool)));
+    connect(m_view.clip_force_framerate, SIGNAL(toggled(bool)), m_view.clip_framerate, SLOT(setEnabled(bool)));
     connect(m_view.clip_force_progressive, SIGNAL(toggled(bool)), m_view.clip_progressive, SLOT(setEnabled(bool)));
     connect(m_view.clip_force_threads, SIGNAL(toggled(bool)), m_view.clip_threads, SLOT(setEnabled(bool)));
     connect(m_view.clip_force_vindex, SIGNAL(toggled(bool)), m_view.clip_vindex, SLOT(setEnabled(bool)));
@@ -229,8 +236,10 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
             m_view.clip_size->setText(props.value("frame_size"));
         if (props.contains("videocodec"))
             m_view.clip_vcodec->setText(props.value("videocodec"));
-        if (props.contains("fps"))
+        if (props.contains("fps")) {
             m_view.clip_fps->setText(props.value("fps"));
+            if (!m_view.clip_framerate->isEnabled()) m_view.clip_framerate->setValue(props.value("fps").toDouble());
+        }
         if (props.contains("aspect_ratio"))
             m_view.clip_ratio->setText(props.value("aspect_ratio"));
         int width = 180.0 * KdenliveSettings::project_display_ratio();
@@ -290,6 +299,12 @@ ClipProperties::ClipProperties(QList <DocClipBase *>cliplist, QMap <QString, QSt
         m_view.clip_ar->setValue(commonproperties.value("force_aspect_ratio").toDouble());
     }
 
+    if (commonproperties.contains("force_fps") && !commonproperties.value("force_fps").isEmpty() && commonproperties.value("force_fps").toDouble() > 0) {
+        m_view.clip_force_framerate->setChecked(true);
+        m_view.clip_framerate->setEnabled(true);
+        m_view.clip_framerate->setValue(commonproperties.value("force_fps").toDouble());
+    }
+
     if (commonproperties.contains("force_progressive") && !commonproperties.value("force_progressive").isEmpty()) {
         m_view.clip_force_progressive->setChecked(true);
         m_view.clip_progressive->setEnabled(true);
@@ -443,6 +458,17 @@ QMap <QString, QString> ClipProperties::properties()
         m_clipNeedsRefresh = true;
     }
 
+    double fps = m_view.clip_framerate->value();
+    if (m_view.clip_force_framerate->isChecked()) {
+        if (fps != m_old_props.value("force_fps").toDouble()) {
+            props["force_fps"] = QString::number(fps);
+            m_clipNeedsRefresh = true;
+        }
+    } else if (m_old_props.contains("force_fps")) {
+        props["force_fps"].clear();
+        m_clipNeedsRefresh = true;
+    }
+
     int progressive = m_view.clip_progressive->value();
     if (m_view.clip_force_progressive->isChecked()) {
         if (progressive != m_old_props.value("force_progressive").toInt()) {
index 8fd36e282f68176aa2e03129f06cfd5373cdf2aa..7b7574c6404ab171e1763970fccb401d2dcb99d5 100644 (file)
@@ -510,6 +510,7 @@ Mlt::Producer *DocClipBase::audioProducer(int track)
         Mlt::Producer *base = producer();
         m_audioTrackProducers[track] = new Mlt::Producer(*(base->profile()), base->get("resource"));
         if (m_properties.contains("force_aspect_ratio")) m_audioTrackProducers.at(track)->set("force_aspect_ratio", m_properties.value("force_aspect_ratio").toDouble());
+        if (m_properties.contains("force_fps")) m_audioTrackProducers.at(track)->set("force_fps", m_properties.value("force_fps").toDouble());
         if (m_properties.contains("force_progressive")) m_audioTrackProducers.at(track)->set("force_progressive", m_properties.value("force_progressive").toInt());
         if (m_properties.contains("threads")) m_audioTrackProducers.at(track)->set("threads", m_properties.value("threads").toInt());
         m_audioTrackProducers.at(track)->set("video_index", -1);
@@ -530,6 +531,7 @@ Mlt::Producer *DocClipBase::videoProducer()
         if (i >= m_baseTrackProducers.count()) return NULL;
         m_videoOnlyProducer = new Mlt::Producer(*m_baseTrackProducers.at(i)->profile(), m_baseTrackProducers.at(i)->get("resource"));
         if (m_properties.contains("force_aspect_ratio")) m_videoOnlyProducer->set("force_aspect_ratio", m_properties.value("force_aspect_ratio").toDouble());
+        if (m_properties.contains("force_fps")) m_videoOnlyProducer->set("force_fps", m_properties.value("force_fps").toDouble());
         if (m_properties.contains("force_progressive")) m_videoOnlyProducer->set("force_progressive", m_properties.value("force_progressive").toInt());
         if (m_properties.contains("threads")) m_videoOnlyProducer->set("threads", m_properties.value("threads").toInt());
         m_videoOnlyProducer->set("audio_index", -1);
@@ -574,6 +576,7 @@ Mlt::Producer *DocClipBase::producer(int track)
         }
 
         if (m_properties.contains("force_aspect_ratio")) m_baseTrackProducers[track]->set("force_aspect_ratio", m_properties.value("force_aspect_ratio").toDouble());
+        if (m_properties.contains("force_fps")) m_baseTrackProducers[track]->set("force_fps", m_properties.value("force_fps").toDouble());
         if (m_properties.contains("force_progressive")) m_baseTrackProducers[track]->set("force_progressive", m_properties.value("force_progressive").toInt());
         if (m_properties.contains("threads")) m_baseTrackProducers[track]->set("threads", m_properties.value("threads").toInt());
         if (m_properties.contains("video_index")) m_baseTrackProducers[track]->set("video_index", m_properties.value("video_index").toInt());
@@ -821,6 +824,11 @@ void DocClipBase::setProperty(const QString &key, const QString &value)
             m_properties.remove("force_aspect_ratio");
             resetProducerProperty("force_aspect_ratio");
         } else setProducerProperty("force_aspect_ratio", value.toDouble());
+    } else if (key == "force_fps") {
+        if (value.isEmpty()) {
+            m_properties.remove("force_fps");
+            resetProducerProperty("force_fps");
+        } else setProducerProperty("force_fps", value.toDouble());
     } else if (key == "force_progressive") {
         if (value.isEmpty()) {
             m_properties.remove("force_progressive");
index 99d6dcad02de27f6419ea3c39ca35eaeff58e687..a064933a8b8b78544ade74cec1a6efeb328429bf 100644 (file)
@@ -227,6 +227,7 @@ void ProjectList::editClipSelection(QList<QTreeWidgetItem *> list)
     QMap <QString, QString> commonproperties;
     QList <DocClipBase *> clipList;
     commonproperties.insert("force_aspect_ratio", "-");
+    commonproperties.insert("force_fps", "-");
     commonproperties.insert("force_progressive", "-");
     commonproperties.insert("threads", "-");
     commonproperties.insert("video_index", "-");
@@ -425,7 +426,7 @@ void ProjectList::slotUpdateClipProperties(const QString &id, QMap <QString, QSt
     ProjectItem *item = getItemById(id);
     if (item) {
         slotUpdateClipProperties(item, properties);
-        if (properties.contains("out")) {
+        if (properties.contains("out") || properties.contains("force_fps")) {
             slotReloadClip(id);
         } else if (properties.contains("colour") || properties.contains("resource") || properties.contains("xmldata") || properties.contains("force_aspect_ratio") || properties.contains("templatetext")) {
             slotRefreshClipThumbnail(item);
index 9bff211935928110e280da6bbe440140e59db69d..47addd677574765aa5b9fd14b1519d9958f79d88 100644 (file)
@@ -232,6 +232,7 @@ void Render::buildConsumer(const QString profileName)
 
     m_blackClip = new Mlt::Producer(*m_mltProfile , "colour", "black");
     m_blackClip->set("id", "black");
+    m_blackClip->set("mlt_type", "producer");
 
 }
 
@@ -628,6 +629,12 @@ void Render::getFileProperties(const QDomElement xml, const QString &clipId, int
         double aspect = xml.attribute("force_aspect_ratio").toDouble();
         if (aspect > 0) producer->set("force_aspect_ratio", aspect);
     }
+
+    if (xml.hasAttribute("force_fps")) {
+        double fps = xml.attribute("force_fps").toDouble();
+        if (fps > 0) producer->set("force_fps", fps);
+    }
+
     if (xml.hasAttribute("force_progressive")) {
         bool ok;
         int progressive = xml.attribute("force_progressive").toInt(&ok);
@@ -2073,6 +2080,8 @@ int Render::mltChangeClipSpeed(ItemInfo info, ItemInfo speedIndependantInfo, dou
             // copy producer props
             double ar = original->parent().get_double("force_aspect_ratio");
             if (ar != 0.0) slowprod->set("force_aspect_ratio", ar);
+            double fps = original->parent().get_double("force_fps");
+            if (fps != 0.0) slowprod->set("force_fps", fps);
             int threads = original->parent().get_int("threads");
             if (threads != 0) slowprod->set("threads", threads);
             if (original->parent().get("force_progressive"))
@@ -2148,6 +2157,8 @@ int Render::mltChangeClipSpeed(ItemInfo info, ItemInfo speedIndependantInfo, dou
             // copy producer props
             double ar = original->parent().get_double("force_aspect_ratio");
             if (ar != 0.0) slowprod->set("force_aspect_ratio", ar);
+            double fps = original->parent().get_double("force_fps");
+            if (fps != 0.0) slowprod->set("force_fps", fps);
             if (original->parent().get("force_progressive"))
                 slowprod->set("force_progressive", original->parent().get_int("force_progressive"));
             int threads = original->parent().get_int("threads");
index dc82651a960730e5f4cf5164870bb435c8921f92..6df3185f9dccdea844a66e885dacd7ea4ca6af57 100644 (file)
    <item row="6" column="0" colspan="4">
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
-      <number>1</number>
+      <number>0</number>
      </property>
      <widget class="QWidget" name="tab_video">
       <attribute name="title">
        <string>Advanced</string>
       </attribute>
       <layout class="QGridLayout" name="gridLayout_3">
-       <item row="6" column="2">
+       <item row="7" column="2">
         <spacer name="verticalSpacer">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
         </widget>
        </item>
-       <item row="3" column="2">
+       <item row="4" column="2">
         <widget class="QSpinBox" name="clip_vindex">
          <property name="enabled">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="4" column="2">
+       <item row="5" column="2">
         <widget class="QSpinBox" name="clip_aindex">
          <property name="enabled">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="2" column="1">
+       <item row="3" column="1">
         <widget class="QCheckBox" name="clip_force_threads">
          <property name="text">
           <string>Decoding threads</string>
          </property>
         </widget>
        </item>
-       <item row="3" column="1">
+       <item row="4" column="1">
         <widget class="QCheckBox" name="clip_force_vindex">
          <property name="text">
           <string>Video index</string>
          </property>
         </widget>
        </item>
-       <item row="4" column="1">
+       <item row="5" column="1">
         <widget class="QCheckBox" name="clip_force_aindex">
          <property name="text">
           <string>Audio index</string>
          </property>
         </widget>
        </item>
-       <item row="2" column="2">
+       <item row="3" column="2">
         <widget class="QSpinBox" name="clip_threads">
          <property name="enabled">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="1" column="1">
+       <item row="2" column="1">
         <widget class="QCheckBox" name="clip_force_progressive">
          <property name="text">
           <string>Force progressive</string>
          </property>
         </widget>
        </item>
-       <item row="1" column="2">
+       <item row="2" column="2">
         <widget class="QSpinBox" name="clip_progressive">
          <property name="enabled">
           <bool>false</bool>
          </property>
         </widget>
        </item>
+       <item row="1" column="1">
+        <widget class="QCheckBox" name="clip_force_framerate">
+         <property name="text">
+          <string>Force frame rate</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2">
+        <widget class="KDoubleNumInput" name="clip_framerate">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
       </layout>
      </widget>
     </widget>