From: Jean-Baptiste Mardelle Date: Sat, 19 Dec 2009 09:12:23 +0000 (+0000) Subject: Allow user to force clip fps from clip properties dialog X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=27ef30d477f96ec39683ed6ebd8f014dc522979f;p=kdenlive Allow user to force clip fps from clip properties dialog svn path=/trunk/kdenlive/; revision=4184 --- diff --git a/src/clipproperties.cpp b/src/clipproperties.cpp index 8c058c6f..423a2814 100644 --- a/src/clipproperties.cpp +++ b/src/clipproperties.cpp @@ -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 cliplist, QMap 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 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()) { diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index 8fd36e28..7b7574c6 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -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"); diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 99d6dcad..a064933a 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -227,6 +227,7 @@ void ProjectList::editClipSelection(QList list) QMap commonproperties; QList 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 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"); diff --git a/src/widgets/clipproperties_ui.ui b/src/widgets/clipproperties_ui.ui index dc82651a..6df3185f 100644 --- a/src/widgets/clipproperties_ui.ui +++ b/src/widgets/clipproperties_ui.ui @@ -102,7 +102,7 @@ - 1 + 0 @@ -572,7 +572,7 @@ Advanced - + Qt::Vertical @@ -599,7 +599,7 @@ - + false @@ -612,7 +612,7 @@ - + false @@ -625,28 +625,28 @@ - + Decoding threads - + Video index - + Audio index - + false @@ -659,14 +659,14 @@ - + Force progressive - + false @@ -679,6 +679,20 @@ + + + + Force frame rate + + + + + + + false + + +