From fe156af311a975e3a4be1b9a736d0436010cae59 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Fri, 25 Jan 2013 19:09:53 +0100 Subject: [PATCH] Fix forcing some clip properties not always working correctly --- src/clipmanager.cpp | 2 +- src/clipmanager.h | 6 ++- src/clipproperties.cpp | 90 ++++++++++++++++++++------------ src/clipproperties.h | 4 ++ src/customruler.cpp | 4 +- src/kthumb.cpp | 2 +- src/mainwindow.cpp | 3 +- src/projectlist.cpp | 6 +-- src/smallruler.cpp | 4 +- src/widgets/clipproperties_ui.ui | 54 +++++++++---------- 10 files changed, 99 insertions(+), 76 deletions(-) diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 83e34849..f8d556f0 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -123,7 +123,7 @@ void ClipManager::clearCache() #endif } -void ClipManager::requestThumbs(const QString id, QList frames) +void ClipManager::slotRequestThumbs(const QString id, QList frames) { m_thumbsMutex.lock(); foreach (int frame, frames) { diff --git a/src/clipmanager.h b/src/clipmanager.h index ca85ab05..9f093bf9 100644 --- a/src/clipmanager.h +++ b/src/clipmanager.h @@ -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 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 frames); + private slots: /** A clip was externally modified, monitor for more changes and prepare for reload */ void slotClipModified(const QString &path); diff --git a/src/clipproperties.cpp b/src/clipproperties.cpp index afa96660..9ba02d3c 100644 --- a/src/clipproperties.cpp +++ b/src/clipproperties.cpp @@ -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 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 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 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() << m_clip->getClipThumbFrame()); +} + void ClipProperties::disableClipId(const QString &id) { if (m_clip && m_view.buttonBox->button(QDialogButtonBox::Ok)->isEnabled()) { @@ -899,9 +921,9 @@ QMap 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 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()) { diff --git a/src/clipproperties.h b/src/clipproperties.h index 8b609f87..690de238 100644 --- a/src/clipproperties.h +++ b/src/clipproperties.h @@ -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 props); signals: void addMarkers(const QString &, QList ); @@ -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 frames); }; diff --git a/src/customruler.cpp b/src/customruler.cpp index 0e5fb104..757ff8b3 100644 --- a/src/customruler.cpp +++ b/src/customruler.cpp @@ -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) diff --git a/src/kthumb.cpp b/src/kthumb.cpp index ef9e98ca..2c8ac9b7 100644 --- a/src/kthumb.cpp +++ b/src/kthumb.cpp @@ -108,7 +108,7 @@ QPixmap KThumb::getImage(KUrl url, int width, int height) void KThumb::extractImage(QList frames) { if (!KdenliveSettings::videothumbnails() || m_producer == NULL) return; - m_clipManager->requestThumbs(m_id, frames); + m_clipManager->slotRequestThumbs(m_id, frames); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 693ba5f2..24d3f1a3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -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() << clip->getClipThumbFrame()); connect(m_activeDocument->clipManager(), SIGNAL(gotClipPropertyThumbnail(const QString&,QImage)), dia, SLOT(slotGotThumbnail(const QString&,QImage))); + connect(dia, SIGNAL(requestThumb(const QString, QList )), m_activeDocument->clipManager(), SLOT(slotRequestThumbs(QString,QList))); + m_activeDocument->clipManager()->slotRequestThumbs(QString('?' + clip->getId()), QList() << clip->getClipThumbFrame()); } connect(dia, SIGNAL(addMarkers(const QString &, QList )), m_activeTimeline->projectView(), SLOT(slotAddClipMarker(const QString &, QList ))); diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 1db09d13..0d6c5eb5 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -951,7 +951,7 @@ void ProjectList::slotUpdateClipProperties(const QString &id, QMap scrollToItem(sub); m_listView->editItem(sub, 1); } - m_doc->clipManager()->requestThumbs(QString('#' + id), QList () << in); + m_doc->clipManager()->slotRequestThumbs(QString('#' + id), QList () << in); monitorItemEditing(true); } emit projectModified(); diff --git a/src/smallruler.cpp b/src/smallruler.cpp index 74c7692b..2d45f57e 100644 --- a/src/smallruler.cpp +++ b/src/smallruler.cpp @@ -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(); } diff --git a/src/widgets/clipproperties_ui.ui b/src/widgets/clipproperties_ui.ui index c6080d51..eee6c775 100644 --- a/src/widgets/clipproperties_ui.ui +++ b/src/widgets/clipproperties_ui.ui @@ -6,8 +6,8 @@ 0 0 - 306 - 539 + 323 + 556 @@ -642,7 +642,7 @@ Advanced - + Qt::Vertical @@ -662,7 +662,7 @@ - + false @@ -675,7 +675,7 @@ - + false @@ -688,28 +688,28 @@ - + Decoding threads - + Video index - + Audio index - + false @@ -725,20 +725,7 @@ - Force progressive - - - - - - - false - - - 1 - - - 1 + Force scanning @@ -773,21 +760,21 @@ - + Force colorspace - + false - + Full luma range @@ -837,28 +824,28 @@ - + Force field order - + false - + Image background - + @@ -872,6 +859,13 @@ + + + + false + + + -- 2.39.2