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);
}
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)));
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();
m_view.clip_ar->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);
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()) {
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);
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);
}
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());
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");
QMap <QString, QString> commonproperties;
QList <DocClipBase *> clipList;
commonproperties.insert("force_aspect_ratio", "-");
+ commonproperties.insert("force_fps", "-");
commonproperties.insert("force_progressive", "-");
commonproperties.insert("threads", "-");
commonproperties.insert("video_index", "-");
ProjectItem *item = getItemById(id);
if (item) {
slotUpdateClipProperties(item, properties);
- if (properties.contains("out")) {
+ if (properties.contains("out") || properties.contains("force_fps")) {
slotReloadClip(id);
} else if (properties.contains("colour") || properties.contains("resource") || properties.contains("xmldata") || properties.contains("force_aspect_ratio") || properties.contains("templatetext")) {
slotRefreshClipThumbnail(item);
m_blackClip = new Mlt::Producer(*m_mltProfile , "colour", "black");
m_blackClip->set("id", "black");
+ m_blackClip->set("mlt_type", "producer");
}
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);
// 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"))
// 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");
<item row="6" column="0" colspan="4">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
- <number>1</number>
+ <number>0</number>
</property>
<widget class="QWidget" name="tab_video">
<attribute name="title">
<string>Advanced</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
- <item row="6" column="2">
+ <item row="7" column="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
- <item row="3" column="2">
+ <item row="4" column="2">
<widget class="QSpinBox" name="clip_vindex">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
- <item row="4" column="2">
+ <item row="5" column="2">
<widget class="QSpinBox" name="clip_aindex">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="3" column="1">
<widget class="QCheckBox" name="clip_force_threads">
<property name="text">
<string>Decoding threads</string>
</property>
</widget>
</item>
- <item row="3" column="1">
+ <item row="4" column="1">
<widget class="QCheckBox" name="clip_force_vindex">
<property name="text">
<string>Video index</string>
</property>
</widget>
</item>
- <item row="4" column="1">
+ <item row="5" column="1">
<widget class="QCheckBox" name="clip_force_aindex">
<property name="text">
<string>Audio index</string>
</property>
</widget>
</item>
- <item row="2" column="2">
+ <item row="3" column="2">
<widget class="QSpinBox" name="clip_threads">
<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_progressive">
<property name="text">
<string>Force progressive</string>
</property>
</widget>
</item>
- <item row="1" column="2">
+ <item row="2" column="2">
<widget class="QSpinBox" name="clip_progressive">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="clip_force_framerate">
+ <property name="text">
+ <string>Force frame rate</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="KDoubleNumInput" name="clip_framerate">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</widget>