]> git.sesse.net Git - kdenlive/commitdiff
Add center-crop option to slideshow clip.
authorDan Dennedy <dan@dennedy.org>
Mon, 30 Aug 2010 03:32:46 +0000 (03:32 +0000)
committerDan Dennedy <dan@dennedy.org>
Mon, 30 Aug 2010 03:32:46 +0000 (03:32 +0000)
svn path=/trunk/kdenlive/; revision=4781

12 files changed:
src/clipmanager.cpp
src/clipmanager.h
src/clipproperties.cpp
src/docclipbase.cpp
src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/projectlist.cpp
src/renderer.cpp
src/slideshowclip.cpp
src/slideshowclip.h
src/widgets/clipproperties_ui.ui
src/widgets/slideshowclip_ui.ui

index 2e9367b9eb84c2842bbac02a76daab5c0baad67e..fc48734fd9e760017628d5cd54d84c1d23010733 100644 (file)
@@ -372,7 +372,7 @@ void ClipManager::slotAddColorClipFile(const QString name, const QString color,
     m_doc->commandStack()->push(command);
 }
 
-void ClipManager::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, QString group, const QString &groupId)
+void ClipManager::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool crop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, QString group, const QString &groupId)
 {
     QDomDocument doc;
     QDomElement prod = doc.createElement("producer");
@@ -387,6 +387,7 @@ void ClipManager::slotAddSlideshowClipFile(const QString name, const QString pat
     prod.setAttribute("luma_duration", m_doc->getFramePos(luma_duration));
     prod.setAttribute("name", name);
     prod.setAttribute("loop", loop);
+    prod.setAttribute("crop", crop);
     prod.setAttribute("fade", fade);
     prod.setAttribute("softness", QString::number(softness));
     prod.setAttribute("luma_file", luma_file);
index 4ba673eb15900fb8b157671decacece2aaaa3cac..8ea9b4a8673aa5bfedc36009a5f9beefffa68032 100644 (file)
@@ -76,7 +76,7 @@ Q_OBJECT public:
     void slotAddTextTemplateClip(QString titleName, const KUrl path, const QString group, const QString &groupId);
     void slotAddXmlClipFile(const QString name, const QDomElement xml, const QString group, const QString &groupId);
     void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId);
-    void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const QString &groupId);
+    void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool crop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const QString &groupId);
     DocClipBase *getClipById(QString clipId);
     const QList <DocClipBase *> getClipByResource(QString resource);
     void slotDeleteClips(QStringList ids);
index 5bbc0e323cf1e08100d596c2089c6a9e92f7a7f6..4ff65f02550b139de7a2e216473f53fc2c07c5a6 100644 (file)
@@ -185,6 +185,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
         m_view.image_type->addItem("Open EXR (*.exr)", "exr");
 
         m_view.slide_loop->setChecked(props.value("loop").toInt());
+        m_view.slide_crop->setChecked(props.value("crop").toInt());
         m_view.slide_fade->setChecked(props.value("fade").toInt());
         m_view.luma_softness->setValue(props.value("softness").toInt());
         QString path = props.value("resource");
@@ -575,6 +576,8 @@ QMap <QString, QString> ClipProperties::properties()
     } else if (t == SLIDESHOW) {
         QString value = QString::number((int) m_view.slide_loop->isChecked());
         if (m_old_props.value("loop") != value) props["loop"] = value;
+        value = QString::number((int) m_view.slide_crop->isChecked());
+        if (m_old_props.value("crop") != value) props["crop"] = value;
         value = QString::number((int) m_view.slide_fade->isChecked());
         if (m_old_props.value("fade") != value) props["fade"] = value;
         value = QString::number((int) m_view.luma_softness->value());
index f75b0041fb373369068dd9e912ecefeb33293b2f..fc74fbf14a29dd36343dd1bb0fd80d2b275d6d09 100644 (file)
@@ -702,6 +702,36 @@ void DocClipBase::slotRefreshProducer()
                 filter = clipService.filter(ct);
             }
         }
+        if (getProperty("crop") == "1") {
+            // we want a center crop filter effect
+            Mlt::Service clipService(m_baseTrackProducers.at(0)->get_service());
+            int ct = 0;
+            Mlt::Filter *filter = clipService.filter(ct);
+            while (filter) {
+                if (strcmp(filter->get("mlt_service"), "crop") == 0) {
+                    break;
+                }
+                ct++;
+                filter = clipService.filter(ct);
+            }
+
+            if (!filter || strcmp(filter->get("mlt_service"), "crop")) {
+                // filter does not exist, create it...
+                Mlt::Filter *filter = new Mlt::Filter(*(m_baseTrackProducers.at(0)->profile()), "crop");
+                filter->set("center", 1);
+                clipService.attach(*filter);
+            }
+        } else {
+            Mlt::Service clipService(m_baseTrackProducers.at(0)->get_service());
+            int ct = 0;
+            Mlt::Filter *filter = clipService.filter(0);
+            while (filter) {
+                if (strcmp(filter->get("mlt_service"), "crop") == 0) {
+                    clipService.detach(*filter);
+                } else ct++;
+                filter = clipService.filter(ct);
+            }
+        }
     }
 }
 
index 8615b2bad41800b6ae1f83a8bddf41fb4e86beae..88cb4712054024d30998784743693909fba0c395 100644 (file)
@@ -1074,9 +1074,9 @@ void KdenliveDoc::slotCreateColorClip(const QString &name, const QString &color,
     emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
 }
 
-void KdenliveDoc::slotCreateSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, QString group, const QString &groupId)
+void KdenliveDoc::slotCreateSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool crop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, QString group, const QString &groupId)
 {
-    m_clipManager->slotAddSlideshowClipFile(name, path, count, duration, loop, fade, luma_duration, luma_file, softness, group, groupId);
+    m_clipManager->slotAddSlideshowClipFile(name, path, count, duration, loop, crop, fade, luma_duration, luma_file, softness, group, groupId);
     setModified(true);
     emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
 }
index 2274fe8de70960837c7061de155eb8e49fc74883..f34dbabf7222dea98e3ef882db19c6c667c1e5b8 100644 (file)
@@ -154,7 +154,7 @@ private:
 public slots:
     void slotCreateXmlClip(const QString &name, const QDomElement xml, QString group, const QString &groupId);
     void slotCreateColorClip(const QString &name, const QString &color, const QString &duration, QString group, const QString &groupId);
-    void slotCreateSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, QString group, const QString &groupId);
+    void slotCreateSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool crop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, QString group, const QString &groupId);
     void slotCreateTextClip(QString group, const QString &groupId, const QString &templatePath = QString());
     void slotCreateTextTemplateClip(QString group, const QString &groupId, KUrl path);
     /** Set to true if document needs saving, false otherwise */
index 73c7d3b3e62e45f8d6eb90093c4213a7548a8fd5..8b2d0aa5d1dc7a9f69f083a0f1cc690abc469833 100644 (file)
@@ -1103,7 +1103,7 @@ void ProjectList::slotAddClip(const QList <QUrl> givenList, const QString &group
                             fileName.chop(1);
                         }
 
-                        m_doc->slotCreateSlideshowClipFile(fileName, pattern, count, m_timecode.reformatSeparators(KdenliveSettings::sequence_duration()), false, false, m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))), QString(), 0, groupInfo.at(0), groupInfo.at(1));
+                        m_doc->slotCreateSlideshowClipFile(fileName, pattern, count, m_timecode.reformatSeparators(KdenliveSettings::sequence_duration()), false, false, false, m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))), QString(), 0, groupInfo.at(0), groupInfo.at(1));
                         return;
                     }
                 }
@@ -1191,7 +1191,7 @@ void ProjectList::slotAddSlideshowClip()
 
     if (dia->exec() == QDialog::Accepted) {
         QStringList groupInfo = getGroup();
-        m_doc->slotCreateSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(),
+        m_doc->slotCreateSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->crop(), dia->fade(),
                                            dia->lumaDuration(), dia->lumaFile(), dia->softness(), groupInfo.at(0), groupInfo.at(1));
     }
     delete dia;
@@ -1301,7 +1301,7 @@ QDomElement ProjectList::producersList()
     QDomDocument doc;
     QDomElement prods = doc.createElement("producerlist");
     doc.appendChild(prods);
-    kDebug() << "////////////  PRO LIST BUILD PRDSLIST ";
+    kDebug() << "////////////  PRO LIST BUILD PRDSLIST ";
     QTreeWidgetItemIterator it(m_listView);
     while (*it) {
         if ((*it)->type() != PROJECTCLIPTYPE) {
index a964af7edc40836117fb616f79f89e58869e8d1c..47d9bc67aae36aa73405c3beeff363418b72586a 100644 (file)
@@ -732,6 +732,14 @@ void Render::getFileProperties(const QDomElement xml, const QString &clipId, int
                 clipService.attach(*filter);
             }
         }
+        if (xml.attribute("crop") == "1") {
+            // user wants to center crop the slides
+            Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, "crop");
+            if (filter && filter->is_valid()) {
+                filter->set("center", 1);
+                producer->attach(*filter);
+            }
+        }
     }
 
 
@@ -2433,7 +2441,7 @@ bool Render::mltAddEffect(Mlt::Service service, EffectsParameterList params, int
         params.removeParam("max");
         params.removeParam("factor");
         int offset = 0;
-        // Special case, only one keyframe, means we want a constant value
+        // Special case, only one keyframe, means we want a constant value
         if (keyFrames.count() == 1) {
             Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, filterTag);
             if (filter && filter->is_valid()) {
index 49494fefb80c3346f9f087474ad5ae8f575ccac7..aa8e67ba633f89557f464302c841f52d7abab7a0 100644 (file)
@@ -353,6 +353,11 @@ bool SlideshowClip::loop() const
     return m_view.slide_loop->isChecked();
 }
 
+bool SlideshowClip::crop() const
+{
+    return m_view.slide_crop->isChecked();
+}
+
 bool SlideshowClip::fade() const
 {
     return m_view.slide_fade->isChecked();
index dc9d07bbe70b5b9e9d8bcccd5327a3e5bc412680..9aa3838745b8a4fc5d392df3512da572acac2805 100644 (file)
@@ -43,6 +43,7 @@ public:
     QString lumaDuration() const;
     int imageCount() const;
     bool loop() const;
+    bool crop() const;
     bool fade() const;
     QString lumaFile() const;
     int softness() const;
index 199019bebe9c94bc8b72a92c03f245ca7eee831f..309822c30eedc312bdd2fa57d957fb6cae09edd3 100644 (file)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>295</width>
-    <height>418</height>
+    <width>302</width>
+    <height>424</height>
    </rect>
   </property>
   <property name="windowTitle">
        <item row="1" column="2">
         <widget class="KComboBox" name="slide_duration_format"/>
        </item>
-       <item row="2" column="0" colspan="3">
+       <item row="3" column="0" colspan="3">
         <widget class="QCheckBox" name="slide_loop">
          <property name="text">
           <string>Loop</string>
          </property>
         </widget>
        </item>
-       <item row="3" column="0">
+       <item row="5" column="0">
         <widget class="QCheckBox" name="slide_fade">
          <property name="text">
           <string>Dissolve</string>
          </property>
         </widget>
        </item>
-       <item row="3" column="1" colspan="2">
+       <item row="5" column="1" colspan="2">
         <layout class="QHBoxLayout" name="horizontalLayout">
          <item>
           <widget class="KRestrictedLine" name="luma_duration">
          </item>
         </layout>
        </item>
-       <item row="4" column="0">
+       <item row="6" column="0">
         <widget class="QCheckBox" name="slide_luma">
          <property name="text">
           <string>Wipe</string>
          </property>
         </widget>
        </item>
-       <item row="4" column="1" colspan="2">
+       <item row="6" column="1" colspan="2">
         <widget class="KComboBox" name="luma_file"/>
        </item>
-       <item row="5" column="0">
+       <item row="7" column="0">
         <widget class="QLabel" name="label_softness">
          <property name="text">
           <string>Softness</string>
          </property>
         </widget>
        </item>
-       <item row="5" column="1" colspan="2">
+       <item row="7" column="1" colspan="2">
         <widget class="QSlider" name="luma_softness">
          <property name="maximum">
           <number>100</number>
          </property>
         </widget>
        </item>
-       <item row="6" column="0" colspan="3">
+       <item row="8" column="0" colspan="3">
         <widget class="QLabel" name="slide_info">
          <property name="text">
           <string>No image found</string>
          </property>
         </widget>
        </item>
-       <item row="7" column="1">
+       <item row="9" column="1">
         <spacer name="verticalSpacer_6">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
         </spacer>
        </item>
+       <item row="4" column="0">
+        <widget class="QCheckBox" name="slide_crop">
+         <property name="text">
+          <string>Center crop</string>
+         </property>
+        </widget>
+       </item>
       </layout>
      </widget>
      <widget class="QWidget" name="tab_4">
index 54ce9833127e0afaf5562bae6e9ccd70ab113424..97dbdafd2dd5e01fec094adf9fb37ccbf25d4fd4 100644 (file)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>259</width>
-    <height>412</height>
+    <width>287</width>
+    <height>453</height>
    </rect>
   </property>
   <property name="windowTitle">
      </property>
     </widget>
    </item>
-   <item row="4" column="0">
+   <item row="5" column="0">
     <widget class="QCheckBox" name="slide_fade">
      <property name="text">
       <string>Dissolve</string>
      </property>
     </widget>
    </item>
-   <item row="4" column="2" colspan="2">
+   <item row="5" column="2" colspan="2">
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
       <widget class="KRestrictedLine" name="luma_duration">
      </item>
     </layout>
    </item>
-   <item row="5" column="0">
+   <item row="6" column="0">
     <widget class="QCheckBox" name="luma_fade">
      <property name="enabled">
       <bool>false</bool>
      </property>
     </widget>
    </item>
-   <item row="5" column="2" colspan="2">
+   <item row="6" column="2" colspan="2">
     <widget class="KComboBox" name="luma_file">
      <property name="enabled">
       <bool>false</bool>
      </property>
     </widget>
    </item>
-   <item row="6" column="0">
+   <item row="7" column="0">
     <widget class="QLabel" name="label_softness">
      <property name="enabled">
       <bool>false</bool>
      </property>
     </widget>
    </item>
-   <item row="6" column="2" colspan="2">
+   <item row="7" column="2" colspan="2">
     <widget class="QSlider" name="luma_softness">
      <property name="enabled">
       <bool>false</bool>
      </property>
     </widget>
    </item>
-   <item row="7" column="0" colspan="4">
+   <item row="8" column="0" colspan="4">
     <widget class="KListWidget" name="icon_list"/>
    </item>
-   <item row="8" column="0" colspan="4">
+   <item row="9" column="0" colspan="4">
     <layout class="QHBoxLayout" name="horizontalLayout_3">
      <item>
       <widget class="QCheckBox" name="show_thumbs">
      </item>
     </layout>
    </item>
-   <item row="9" column="2" colspan="2">
+   <item row="10" column="2" colspan="2">
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
     </widget>
    </item>
+   <item row="4" column="0" colspan="2">
+    <widget class="QCheckBox" name="slide_crop">
+     <property name="text">
+      <string>Center crop</string>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <customwidgets>