]> git.sesse.net Git - kdenlive/commitdiff
Fix forcing some clip properties not always working correctly
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 25 Jan 2013 18:09:53 +0000 (19:09 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 25 Jan 2013 18:09:53 +0000 (19:09 +0100)
src/clipmanager.cpp
src/clipmanager.h
src/clipproperties.cpp
src/clipproperties.h
src/customruler.cpp
src/kthumb.cpp
src/mainwindow.cpp
src/projectlist.cpp
src/smallruler.cpp
src/widgets/clipproperties_ui.ui

index 83e348490129ff16e46672b9fda7c5d0eb3628fd..f8d556f0a43f784c6a8bfabe7fe0290cdcb47671 100644 (file)
@@ -123,7 +123,7 @@ void ClipManager::clearCache()
 #endif
 }
 
-void ClipManager::requestThumbs(const QString id, QList <int> frames)
+void ClipManager::slotRequestThumbs(const QString id, QList <int> frames)
 {
     m_thumbsMutex.lock();
     foreach (int frame, frames) {
index ca85ab05894691660a039c815358e1302188f054..9f093bf95d67643f636c8c72422a703814dc1b55 100644 (file)
@@ -123,8 +123,6 @@ Q_OBJECT public:
     void removeGroup(AbstractGroupItem *group);
     QDomElement groupsXml() const;
     int clipsCount() const;
-    /** @brief Request creation of a clip thumbnail for specified frames. */
-    void requestThumbs(const QString id, QList <int> frames);
     /** @brief remove a clip id from the queue list. */
     void stopThumbs(const QString &id);
     void projectTreeThumbReady(const QString &id, int frame, QImage img, int type);
@@ -133,6 +131,10 @@ Q_OBJECT public:
     KImageCache* pixmapCache;
 #endif
 
+public slots:
+    /** @brief Request creation of a clip thumbnail for specified frames. */
+    void slotRequestThumbs(const QString id, QList <int> frames);
+    
 private slots:
     /** A clip was externally modified, monitor for more changes and prepare for reload */
     void slotClipModified(const QString &path);
index afa96660e0298ab63f7eb31d54522697daa8d8e0..9ba02d3c211a23c3953bf72131316b79dbe53eb6 100644 (file)
@@ -124,14 +124,16 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
     }
     connect(m_view.clip_force_framerate, SIGNAL(toggled(bool)), this, SLOT(slotModified()));
     connect(m_view.clip_framerate, SIGNAL(valueChanged(double)), this, SLOT(slotModified()));
+    m_view.clip_progressive->addItem(i18n("Interlaced"), 0);
+    m_view.clip_progressive->addItem(i18n("Progressive"), 1);
 
     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());
+        m_view.clip_progressive->setCurrentIndex(props.value("force_progressive").toInt());
     }
     connect(m_view.clip_force_progressive, SIGNAL(toggled(bool)), this, SLOT(slotModified()));
-    connect(m_view.clip_progressive, SIGNAL(valueChanged(int)), this, SLOT(slotModified()));
+    connect(m_view.clip_progressive, SIGNAL(currentIndexChanged(int)), this, SLOT(slotModified()));
 
     m_view.clip_fieldorder->addItem(i18n("Bottom first"), 0);
     m_view.clip_fieldorder->addItem(i18n("Top first"), 1);
@@ -409,34 +411,7 @@ ClipProperties::ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidg
         m_view.clip_aproperties->setItemDelegate(del2);
         m_view.clip_aproperties->setStyleSheet(QString("QTreeWidget { background-color: transparent;}"));
         m_view.clip_vproperties->setStyleSheet(QString("QTreeWidget { background-color: transparent;}"));
-
-        if (props.contains("videocodec"))
-            new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Video codec") << props.value("videocodec"));
-       else if (props.contains("videocodecid"))
-            new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Video codec") << props.value("videocodecid"));
-
-        if (props.contains("frame_size"))
-            new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Frame size") << props.value("frame_size"));
-
-        if (props.contains("fps")) {
-            new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Frame rate") << props.value("fps"));
-            if (!m_view.clip_framerate->isEnabled()) m_view.clip_framerate->setValue(props.value("fps").toDouble());
-        }
-
-        if (props.contains("progressive")) {
-            int scanning = props.value("progressive").toInt();
-            QString txt = scanning == 1 ? i18n("Progressive") : i18n("Interlaced");
-            new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Scanning") << txt);
-        }
-        
-        if (props.contains("aspect_ratio"))
-            new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Pixel aspect ratio") << props.value("aspect_ratio"));
-
-        if (props.contains("pix_fmt"))
-            new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Pixel format") << props.value("pix_fmt"));
-
-        if (props.contains("colorspace"))
-            new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Colorspace") << ProfilesDialog::getColorspaceDescription(props.value("colorspace").toInt()));
+       loadVideoProperties(props);      
         
        m_view.clip_thumb->setMinimumSize(180 * KdenliveSettings::project_display_ratio(), 180);
         
@@ -563,7 +538,7 @@ ClipProperties::ClipProperties(QList <DocClipBase *>cliplist, Timecode tc, QMap
     if (commonproperties.contains("force_progressive") && !commonproperties.value("force_progressive").isEmpty()) {
         m_view.clip_force_progressive->setChecked(true);
         m_view.clip_progressive->setEnabled(true);
-        m_view.clip_progressive->setValue(commonproperties.value("force_progressive").toInt());
+        m_view.clip_progressive->setCurrentIndex(commonproperties.value("force_progressive").toInt());
     }
 
     if (commonproperties.contains("force_tff") && !commonproperties.value("force_tff").isEmpty()) {
@@ -678,6 +653,39 @@ ClipProperties::~ClipProperties()
     if (del2) delete del2;
 }
 
+
+void ClipProperties::loadVideoProperties(QMap <QString, QString> props)
+{
+    m_view.clip_vproperties->clear();
+    if (props.contains("videocodec"))
+       new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Video codec") << props.value("videocodec"));
+    else if (props.contains("videocodecid"))
+       new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Video codec") << props.value("videocodecid"));
+
+    if (props.contains("frame_size"))
+       new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Frame size") << props.value("frame_size"));
+
+    if (props.contains("fps")) {
+       new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Frame rate") << props.value("fps"));
+        if (!m_view.clip_framerate->isEnabled()) m_view.clip_framerate->setValue(props.value("fps").toDouble());
+    }
+
+    if (props.contains("progressive")) {
+       int scanning = props.value("progressive").toInt();
+        QString txt = scanning == 1 ? i18n("Progressive") : i18n("Interlaced");
+        new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Scanning") << txt);
+    }
+        
+    if (props.contains("aspect_ratio"))
+       new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Pixel aspect ratio") << props.value("aspect_ratio"));
+
+    if (props.contains("pix_fmt"))
+       new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Pixel format") << props.value("pix_fmt"));
+
+    if (props.contains("colorspace"))
+       new QTreeWidgetItem(m_view.clip_vproperties, QStringList() << i18n("Colorspace") << ProfilesDialog::getColorspaceDescription(props.value("colorspace").toInt()));
+}
+
 void ClipProperties::slotGotThumbnail(const QString &id, QImage img)
 {
     if (id != m_clip->getId()) return;
@@ -698,10 +706,24 @@ void ClipProperties::slotApplyProperties()
     if (m_clip != NULL) {
         QMap <QString, QString> props = properties();
         emit applyNewClipProperties(m_clip->getId(), m_clip->currentProperties(props), props, needsTimelineRefresh(), needsTimelineReload());
+       QTimer::singleShot(1000, this, SLOT(slotReloadVideoProperties()));
+       if (props.contains("force_aspect_num")) QTimer::singleShot(1000, this, SLOT(slotReloadVideoThumb()));
     }
     m_view.buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false);
 }
 
+void ClipProperties::slotReloadVideoProperties()
+{
+    if (m_clip == NULL) return;
+    loadVideoProperties(m_clip->properties());
+}
+
+void ClipProperties::slotReloadVideoThumb()
+{
+    if (m_clip == NULL) return;
+    emit requestThumb(QString('?' + m_clip->getId()), QList<int>() << m_clip->getClipThumbFrame());
+}
+
 void ClipProperties::disableClipId(const QString &id)
 {
     if (m_clip && m_view.buttonBox->button(QDialogButtonBox::Ok)->isEnabled()) {
@@ -899,9 +921,9 @@ QMap <QString, QString> ClipProperties::properties()
         m_clipNeedsRefresh = true;
     }
 
-    int progressive = m_view.clip_progressive->value();
+    int progressive = m_view.clip_progressive->currentIndex();
     if (m_view.clip_force_progressive->isChecked()) {
-        if (progressive != m_old_props.value("force_progressive").toInt()) {
+        if (!m_old_props.contains("force_progressive") || progressive != m_old_props.value("force_progressive").toInt()) {
             props["force_progressive"] = QString::number(progressive);
         }
     } else if (m_old_props.contains("force_progressive") && !m_old_props.value("force_progressive").isEmpty()) {
@@ -910,7 +932,7 @@ QMap <QString, QString> ClipProperties::properties()
 
     int fieldOrder = m_view.clip_fieldorder->currentIndex();
     if (m_view.clip_force_fieldorder->isChecked()) {
-        if (fieldOrder != m_old_props.value("force_tff").toInt()) {
+        if (!m_old_props.contains("force_tff") || fieldOrder != m_old_props.value("force_tff").toInt()) {
             props["force_tff"] = QString::number(fieldOrder);
         }
     } else if (m_old_props.contains("force_tff") && !m_old_props.value("force_tff").isEmpty()) {
index 8b609f87e5333f12a2da8ffa13b3daab91e9bbb5..690de2381b7e85bd99ee8bb7d90423f80c7e5df0 100644 (file)
@@ -79,6 +79,8 @@ private slots:
     void slotGotThumbnail(const QString &id, QImage img);
     void slotSaveAnalysis();
     void slotLoadAnalysis();
+    void slotReloadVideoProperties();
+    void slotReloadVideoThumb();
 
 private:
     Ui::ClipProperties_UI m_view;
@@ -94,6 +96,7 @@ private:
     bool m_clipNeedsReLoad;
     /** Frame with proxy info / delete button */
     QFrame* m_proxyContainer;
+    void loadVideoProperties(QMap <QString, QString> props);
 
 signals:
     void addMarkers(const QString &, QList <CommentedTime>);
@@ -102,6 +105,7 @@ signals:
     void saveMarkers(const QString &id);
     void loadMarkers(const QString &id);
     void editAnalysis(const QString &id, const QString &name, const QString &value);
+    void requestThumb(const QString id, QList <int> frames);
 };
 
 
index 0e5fb1048c9d306c53325f2adfbc1c4f834dfc39..757ff8b30233dc1149b62e00dc41effa0c534ac5 100644 (file)
@@ -75,7 +75,7 @@ CustomRuler::CustomRuler(Timecode tc, CustomTrackView *parent) :
     LITTLE_MARK_X = BIG_MARK_X + mark_length / 3;
     updateFrameSize();
     m_scale = 3;
-    m_zoneColor = KStatefulBrush(KColorScheme::View, KColorScheme::PositiveBackground, KSharedConfig::openConfig(KdenliveSettings::colortheme())).brush(this).color();
+    m_zoneColor = KStatefulBrush(KColorScheme::View, KColorScheme::FocusColor, KSharedConfig::openConfig(KdenliveSettings::colortheme())).brush(this).color();
     m_zoneStart = 0;
     m_zoneEnd = 100;
     m_contextMenu = new QMenu(this);
@@ -94,7 +94,7 @@ CustomRuler::CustomRuler(Timecode tc, CustomTrackView *parent) :
 
 void CustomRuler::updatePalette()
 {
-    m_zoneColor = KStatefulBrush(KColorScheme::View, KColorScheme::PositiveBackground, KSharedConfig::openConfig(KdenliveSettings::colortheme())).brush(this).color();
+    m_zoneColor = KStatefulBrush(KColorScheme::View, KColorScheme::FocusColor, KSharedConfig::openConfig(KdenliveSettings::colortheme())).brush(this).color();
 }
 
 void CustomRuler::updateProjectFps(Timecode t)
index ef9e98ca3b17080690c65d8f139bfc49d3049a81..2c8ac9b7cfbe628d00b6088334e9e089ec456d5d 100644 (file)
@@ -108,7 +108,7 @@ QPixmap KThumb::getImage(KUrl url, int width, int height)
 void KThumb::extractImage(QList <int>frames)
 {
     if (!KdenliveSettings::videothumbnails() || m_producer == NULL) return;
-    m_clipManager->requestThumbs(m_id, frames);
+    m_clipManager->slotRequestThumbs(m_id, frames);
 }
 
 
index 693ba5f2aaccc9382f4df8305a91b597d2c1ea9a..24d3f1a3fdc2c7fa61ed4ae3221ff3c040aaf53b 100644 (file)
@@ -3368,8 +3368,9 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
 
     if (clip->clipType() == AV || clip->clipType() == VIDEO || clip->clipType() == PLAYLIST || clip->clipType() == SLIDESHOW) {
        // request clip thumbnails
-       m_activeDocument->clipManager()->requestThumbs(QString('?' + clip->getId()), QList<int>() << clip->getClipThumbFrame());
        connect(m_activeDocument->clipManager(), SIGNAL(gotClipPropertyThumbnail(const QString&,QImage)), dia, SLOT(slotGotThumbnail(const QString&,QImage)));
+       connect(dia, SIGNAL(requestThumb(const QString, QList <int>)), m_activeDocument->clipManager(), SLOT(slotRequestThumbs(QString,QList<int>)));
+       m_activeDocument->clipManager()->slotRequestThumbs(QString('?' + clip->getId()), QList<int>() << clip->getClipThumbFrame());
     }
     
     connect(dia, SIGNAL(addMarkers(const QString &, QList <CommentedTime>)), m_activeTimeline->projectView(), SLOT(slotAddClipMarker(const QString &, QList <CommentedTime>)));
index 1db09d13dde10f3e009ebb2d647bbd273aad1ec2..0d6c5eb58daff924ebd4ff23bb36d6c6f0c62645 100644 (file)
@@ -951,7 +951,7 @@ void ProjectList::slotUpdateClipProperties(const QString &id, QMap <QString, QSt
     ProjectItem *item = getItemById(id);
     if (item) {
         slotUpdateClipProperties(item, properties);
-        if (properties.contains("out") || properties.contains("force_fps") || properties.contains("resource") || properties.contains("video_index") || properties.contains("audio_index") || properties.contains("full_luma")) {
+        if (properties.contains("out") || properties.contains("force_fps") || properties.contains("resource") || properties.contains("video_index") || properties.contains("audio_index") || properties.contains("full_luma") || properties.contains("force_progressive") || properties.contains("force_tff") || properties.contains("force_colorspace")) {
             slotReloadClip(id);
         } else if (properties.contains("colour") ||
                    properties.contains("xmldata") ||
@@ -960,7 +960,7 @@ void ProjectList::slotUpdateClipProperties(const QString &id, QMap <QString, QSt
                    properties.contains("templatetext")) {
             slotRefreshClipThumbnail(item);
             emit refreshClip(id, true);
-        } else if (properties.contains("force_colorspace") || properties.contains("loop")) {
+        } else if (properties.contains("loop")) {
             emit refreshClip(id, false);
         }
     }
@@ -2669,7 +2669,7 @@ void ProjectList::addClipCut(const QString &id, int in, int out, const QString d
             m_listView->scrollToItem(sub);
             m_listView->editItem(sub, 1);
         }
-       m_doc->clipManager()->requestThumbs(QString('#' + id), QList <int>() << in);
+       m_doc->clipManager()->slotRequestThumbs(QString('#' + id), QList <int>() << in);
         monitorItemEditing(true);
     }
     emit projectModified();
index 74c7692b29befb7466f774e7ad2c522e1d74f7d5..2d45f57ea49d1b7b821bb38fd87aefea6842d039 100644 (file)
@@ -43,7 +43,7 @@ SmallRuler::SmallRuler(Monitor *monitor, Render *render, QWidget *parent) :
     m_zoneStart = 10;
     m_zoneEnd = 60;
     KSharedConfigPtr config = KSharedConfig::openConfig(KdenliveSettings::colortheme());
-    m_zoneBrush = KStatefulBrush(KColorScheme::View, KColorScheme::PositiveBackground, config);
+    m_zoneBrush = KStatefulBrush(KColorScheme::View, KColorScheme::FocusColor, config);
 
     setMouseTracking(true);
     setMinimumHeight(8);
@@ -301,7 +301,7 @@ void SmallRuler::paintEvent(QPaintEvent *e)
 void SmallRuler::updatePalette()
 {
     KSharedConfigPtr config = KSharedConfig::openConfig(KdenliveSettings::colortheme());
-    m_zoneBrush = KStatefulBrush(KColorScheme::View, KColorScheme::PositiveBackground, config);
+    m_zoneBrush = KStatefulBrush(KColorScheme::View, KColorScheme::FocusColor, config);
     updatePixmap();
 }
 
index c6080d51ab3277230479483c6e8ce1cd2ef7676d..eee6c77522264a0d660b6f5d4f401e23a6122e08 100644 (file)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>306</width>
-    <height>539</height>
+    <width>323</width>
+    <height>556</height>
    </rect>
   </property>
   <property name="windowTitle">
        <string>Advanced</string>
       </attribute>
       <layout class="QGridLayout" name="gridLayout_3">
-       <item row="12" column="2">
+       <item row="13" column="2">
         <spacer name="verticalSpacer">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
         </widget>
        </item>
-       <item row="6" column="2">
+       <item row="7" column="2">
         <widget class="QSpinBox" name="clip_vindex">
          <property name="enabled">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="7" column="2">
+       <item row="8" column="2">
         <widget class="QSpinBox" name="clip_aindex">
          <property name="enabled">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="5" column="1">
+       <item row="6" column="1">
         <widget class="QCheckBox" name="clip_force_threads">
          <property name="text">
           <string>Decoding threads</string>
          </property>
         </widget>
        </item>
-       <item row="6" column="1">
+       <item row="7" column="1">
         <widget class="QCheckBox" name="clip_force_vindex">
          <property name="text">
           <string>Video index</string>
          </property>
         </widget>
        </item>
-       <item row="7" column="1">
+       <item row="8" column="1">
         <widget class="QCheckBox" name="clip_force_aindex">
          <property name="text">
           <string>Audio index</string>
          </property>
         </widget>
        </item>
-       <item row="5" column="2">
+       <item row="6" column="2">
         <widget class="QSpinBox" name="clip_threads">
          <property name="enabled">
           <bool>false</bool>
        <item row="3" column="1">
         <widget class="QCheckBox" name="clip_force_progressive">
          <property name="text">
-          <string>Force progressive</string>
-         </property>
-        </widget>
-       </item>
-       <item row="3" 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>
+          <string>Force scanning</string>
          </property>
         </widget>
        </item>
          </property>
         </widget>
        </item>
-       <item row="8" column="1">
+       <item row="9" column="1">
         <widget class="QCheckBox" name="clip_force_colorspace">
          <property name="text">
           <string>Force colorspace</string>
          </property>
         </widget>
        </item>
-       <item row="8" column="2">
+       <item row="9" column="2">
         <widget class="KComboBox" name="clip_colorspace">
          <property name="enabled">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="9" column="1" colspan="2">
+       <item row="10" column="1" colspan="2">
         <widget class="QCheckBox" name="clip_full_luma">
          <property name="text">
           <string>Full luma range</string>
          </item>
         </layout>
        </item>
-       <item row="4" column="1">
+       <item row="5" column="1">
         <widget class="QCheckBox" name="clip_force_fieldorder">
          <property name="text">
           <string>Force field order</string>
          </property>
         </widget>
        </item>
-       <item row="4" column="2">
+       <item row="5" column="2">
         <widget class="KComboBox" name="clip_fieldorder">
          <property name="enabled">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="10" column="1">
+       <item row="11" column="1">
         <widget class="QCheckBox" name="clip_force_transparency">
          <property name="text">
           <string>Image background</string>
          </property>
         </widget>
        </item>
-       <item row="10" column="2">
+       <item row="11" column="2">
         <widget class="KComboBox" name="clip_transparency">
          <item>
           <property name="text">
          </item>
         </widget>
        </item>
+       <item row="3" column="2">
+        <widget class="KComboBox" name="clip_progressive">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
       </layout>
      </widget>
     </widget>