]> git.sesse.net Git - kdenlive/commitdiff
Add support for forcing a clip to be progressive or interlace.
authorDan Dennedy <dan@dennedy.org>
Mon, 30 Nov 2009 04:52:48 +0000 (04:52 +0000)
committerDan Dennedy <dan@dennedy.org>
Mon, 30 Nov 2009 04:52:48 +0000 (04:52 +0000)
svn path=/trunk/kdenlive/; revision=4160

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

index 6b8f6d3eda5d559c6d05ca60d53bbb30173e90ad..02fa956017c2dfc74242d26227f2db7699059b76 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_progressive")) {
+        m_view.clip_force_progressive->setChecked(true);
+        m_view.clip_progressive->setEnabled(true);
+        m_view.clip_progressive->setValue(props.value("force_progressive").toInt());
+    }
+
     if (props.contains("threads") && props.value("threads").toInt() != 1) {
         m_view.clip_force_threads->setChecked(true);
         m_view.clip_threads->setEnabled(true);
@@ -97,6 +103,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_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)));
     connect(m_view.clip_force_aindex, SIGNAL(toggled(bool)), m_view.clip_aindex, SLOT(setEnabled(bool)));
@@ -355,6 +362,15 @@ QMap <QString, QString> ClipProperties::properties()
         m_clipNeedsRefresh = true;
     }
 
+    int progressive = m_view.clip_progressive->value();
+    if (m_view.clip_force_progressive->isChecked()) {
+        if (progressive != old_props.value("force_progressive").toInt()) {
+            props["force_progressive"] = QString::number(progressive);
+        }
+    } else if (old_props.contains("force_progressive")) {
+        props["force_progressive"].clear();
+    }
+
     int threads = m_view.clip_threads->value();
     if (m_view.clip_force_threads->isChecked()) {
         if (threads != old_props.value("threads").toInt()) {
index ae8a07a03f5fd9b58f5cbc8679e29cd1f3ba1ac3..122ea7e5701486742d17af1bbda95b6757568ba1 100644 (file)
@@ -301,7 +301,7 @@ const QPixmap & DocClipBase::thumbnail() const
 
 void DocClipBase::updateAudioThumbnail(QMap<int, QMap<int, QByteArray> > data)
 {
-    //kDebug() << "CLIPBASE RECIEDVED AUDIO DATA*********************************************";
+    //kDebug() << "CLIPBASE RECIEDVED AUDIO DATA*********************************************";
     m_audioFrameCache = data;
     m_audioThumbCreated = true;
     emit gotAudioData();
@@ -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_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);
         if (m_properties.contains("audio_index")) m_audioTrackProducers.at(track)->set("audio_index", m_properties.value("audio_index").toInt());
@@ -529,6 +530,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_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);
         if (m_properties.contains("video_index")) m_videoOnlyProducer->set("video_index", m_properties.value("video_index").toInt());
@@ -572,6 +574,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_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());
         if (m_properties.contains("audio_index")) m_baseTrackProducers[track]->set("audio_index", m_properties.value("audio_index").toInt());
@@ -808,9 +811,13 @@ void DocClipBase::setProperty(const QString &key, const QString &value)
     } else if (key == "force_aspect_ratio") {
         if (value.isEmpty()) {
             m_properties.remove("force_aspect_ratio");
-            //TODO: find a was to remove the "force_aspect_ratio" property from producer, currently does not work
-            setProducerProperty("force_aspect_ratio", 0);
+            setProducerProperty("force_aspect_ratio", NULL);
         } else setProducerProperty("force_aspect_ratio", value.toDouble());
+    } else if (key == "force_progressive") {
+        if (value.isEmpty()) {
+            m_properties.remove("force_progressive");
+            setProducerProperty("force_progressive", NULL);
+        } else setProducerProperty("force_progressive", value.toInt());
     } else if (key == "threads") {
         if (value.isEmpty()) {
             m_properties.remove("threads");
index ac7d9ed29c671c8de8d7fafb1e5ad7002bcea193..9bff211935928110e280da6bbe440140e59db69d 100644 (file)
@@ -628,6 +628,11 @@ 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_progressive")) {
+        bool ok;
+        int progressive = xml.attribute("force_progressive").toInt(&ok);
+        if (ok) producer->set("force_progressive", progressive);
+    }
     if (xml.hasAttribute("threads")) {
         int threads = xml.attribute("threads").toInt();
         if (threads != 1) producer->set("threads", threads);
@@ -2070,6 +2075,8 @@ int Render::mltChangeClipSpeed(ItemInfo info, ItemInfo speedIndependantInfo, dou
             if (ar != 0.0) slowprod->set("force_aspect_ratio", ar);
             int threads = original->parent().get_int("threads");
             if (threads != 0) slowprod->set("threads", threads);
+            if (original->parent().get("force_progressive"))
+                slowprod->set("force_progressive", original->parent().get_int("force_progressive"));
             int ix = original->parent().get_int("video_index");
             if (ix != 0) slowprod->set("video_index", ix);
             m_slowmotionProducers.insert(url, slowprod);
@@ -2141,6 +2148,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);
+            if (original->parent().get("force_progressive"))
+                slowprod->set("force_progressive", original->parent().get_int("force_progressive"));
             int threads = original->parent().get_int("threads");
             if (threads != 0) slowprod->set("threads", threads);
             int ix = original->parent().get_int("video_index");
index 15591f2ddf9a7e110cb2565e06a2a03146193779..a8367473772702660b6ce5a8afd071eee6943aab 100644 (file)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>286</width>
-    <height>436</height>
+    <width>304</width>
+    <height>451</height>
    </rect>
   </property>
   <property name="windowTitle">
        <string>Advanced</string>
       </attribute>
       <layout class="QGridLayout" name="gridLayout_3">
-       <item row="4" column="2">
+       <item row="6" column="2">
         <spacer name="verticalSpacer">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
         </widget>
        </item>
-       <item row="2" column="2">
+       <item row="3" column="2">
         <widget class="QSpinBox" name="clip_vindex">
          <property name="enabled">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="3" column="2">
+       <item row="4" column="2">
         <widget class="QSpinBox" name="clip_aindex">
          <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_threads">
          <property name="text">
           <string>Decoding threads</string>
          </property>
         </widget>
        </item>
-       <item row="2" column="1">
+       <item row="3" column="1">
         <widget class="QCheckBox" name="clip_force_vindex">
          <property name="text">
           <string>Video index</string>
          </property>
         </widget>
        </item>
-       <item row="3" column="1">
+       <item row="4" column="1">
         <widget class="QCheckBox" name="clip_force_aindex">
          <property name="text">
           <string>Audio index</string>
          </property>
         </widget>
        </item>
-       <item row="1" column="2">
+       <item row="2" column="2">
         <widget class="QSpinBox" name="clip_threads">
          <property name="enabled">
           <bool>false</bool>
          </property>
         </widget>
        </item>
+       <item row="1" column="1">
+        <widget class="QCheckBox" name="clip_force_progressive">
+         <property name="text">
+          <string>Force progressive</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2">
+        <widget class="QSpinBox" name="clip_progressive">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="maximum">
+          <number>1</number>
+         </property>
+         <property name="value">
+          <number>1</number>
+         </property>
+        </widget>
+       </item>
       </layout>
      </widget>
     </widget>