#include "slideshowclip.h"
#include <KIO/NetAccess>
+#include <KStandardDirs>
#include <KDebug>
#include <QCryptographicHash>
+#include <QtConcurrentRun>
#include <cstdio>
return QString();
}
-void DocClipBase::clearProducers()
-{
- m_baseTrackProducers.clear();
-}
-
void DocClipBase::deleteProducers(bool clearThumbCreator)
{
- kDebug() << "// CLIP KILL PRODS ct: " << m_baseTrackProducers.count();
if (clearThumbCreator && m_thumbProd) m_thumbProd->clearProducer();
/*kDebug()<<"// CLIP KILL PRODS ct: "<<m_baseTrackProducers.count();
int max = m_baseTrackProducers.count();
//m_clipProducer->set("transparency", m_properties.value("transparency").toInt());
}
+static double getPixelAspect(QMap<QString, QString>& props) {
+ int width = props.value("frame_size").section('x', 0, 0).toInt();
+ int height = props.value("frame_size").section('x', 1, 1).toInt();
+ int aspectNumerator = props.value("force_aspect_num").toInt();
+ int aspectDenominator = props.value("force_aspect_den").toInt();
+ if (aspectDenominator != 0 && width != 0)
+ return double(height) * aspectNumerator / aspectDenominator / width;
+ else
+ return 1.0;
+}
+
Mlt::Producer *DocClipBase::audioProducer(int track)
{
if (m_audioTrackProducers.count() <= track) {
if (m_audioTrackProducers.at(track) == NULL) {
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_aspect_num") && m_properties.contains("force_aspect_den") && m_properties.contains("frame_size"))
+ m_audioTrackProducers.at(track)->set("force_aspect_ratio", getPixelAspect(m_properties));
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("force_tff")) m_audioTrackProducers.at(track)->set("force_tff", m_properties.value("force_tff").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 (m_properties.contains("audio_index")) m_audioTrackProducers.at(track)->set("audio_index", m_properties.value("audio_index").toInt());
if (m_baseTrackProducers.at(i) != NULL) break;
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_aspect_num") && m_properties.contains("force_aspect_den") && m_properties.contains("frame_size"))
+ m_videoOnlyProducer->set("force_aspect_ratio", getPixelAspect(m_properties));
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("force_tff")) m_videoOnlyProducer->set("force_tff", m_properties.value("force_tff").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("video_index")) m_videoOnlyProducer->set("video_index", m_properties.value("video_index").toInt());
m_baseTrackProducers[track] = NULL;
return NULL;
}
- 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_aspect_num") && m_properties.contains("force_aspect_den") && m_properties.contains("frame_size"))
+ m_baseTrackProducers[track]->set("force_aspect_ratio", getPixelAspect(m_properties));
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("force_tff")) m_baseTrackProducers[track]->set("force_tff", m_properties.value("force_tff").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());
if (m_properties.contains("audio_index")) m_baseTrackProducers[track]->set("audio_index", m_properties.value("audio_index").toInt());
m_baseTrackProducers[track]->set("id", QString(getId() + '_' + QString::number(track)).toUtf8().data());
- if (KdenliveSettings::dropbframes() && m_baseTrackProducers.at(i)->get("skip_loop_filter") && strcmp(m_baseTrackProducers.at(i)->get("skip_loop_filter"), "all") == 0) {
- m_baseTrackProducers[track]->set("skip_loop_filter", "all");
- m_baseTrackProducers[track]->set("skip_frame", "bidir");
- }
+
if (m_properties.contains("force_colorspace")) m_baseTrackProducers[track]->set("force_colorspace", m_properties.value("force_colorspace").toInt());
if (m_properties.contains("full_luma")) m_baseTrackProducers[track]->set("set.force_full_luma", m_properties.value("full_luma").toInt());
}
void DocClipBase::slotRefreshProducer()
{
if (m_baseTrackProducers.count() == 0) return;
- kDebug() << "//////////// REFRESH CLIP !!!!!!!!!!!!!!!!";
if (m_clipType == SLIDESHOW) {
/*Mlt::Producer producer(*(m_clipProducer->profile()), getProperty("resource").toUtf8().data());
delete m_clipProducer;
if (m_clipType == SLIDESHOW) hash = QCryptographicHash::hash(m_properties.value("resource").toAscii().data(), QCryptographicHash::Md5).toHex();
else if (m_clipType == COLOR) hash = QCryptographicHash::hash(m_properties.value("colour").toAscii().data(), QCryptographicHash::Md5).toHex();
else if (m_clipType == TEXT) hash = QCryptographicHash::hash(QString("title" + getId() + m_properties.value("xmldata")).toUtf8().data(), QCryptographicHash::Md5).toHex();
- else hash = m_properties.value("file_hash");
+ else {
+ if (m_properties.contains("file_hash")) hash = m_properties.value("file_hash");
+ else hash = getHash(fileURL().path());
+
+ }
return hash;
}
} else if (key == "xmldata") {
setProducerProperty("xmldata", value.toUtf8().data());
setProducerProperty("force_reload", 1);
- } else if (key == "force_aspect_ratio") {
+ } else if (key == "force_aspect_num") {
if (value.isEmpty()) {
- m_properties.remove("force_aspect_ratio");
+ m_properties.remove("force_aspect_num");
resetProducerProperty("force_aspect_ratio");
- } else setProducerProperty("force_aspect_ratio", value.toDouble());
+ } else setProducerProperty("force_aspect_ratio", getPixelAspect(m_properties));
+ } else if (key == "force_aspect_den") {
+ if (value.isEmpty()) {
+ m_properties.remove("force_aspect_den");
+ resetProducerProperty("force_aspect_ratio");
+ } else setProducerProperty("force_aspect_ratio", getPixelAspect(m_properties));
} else if (key == "force_fps") {
if (value.isEmpty()) {
m_properties.remove("force_fps");
m_properties.remove("force_progressive");
resetProducerProperty("force_progressive");
} else setProducerProperty("force_progressive", value.toInt());
+ } else if (key == "force_tff") {
+ if (value.isEmpty()) {
+ m_properties.remove("force_tff");
+ resetProducerProperty("force_tff");
+ } else setProducerProperty("force_tff", value.toInt());
} else if (key == "threads") {
if (value.isEmpty()) {
m_properties.remove("threads");
resetProducerProperty("set.force_full_luma");
} else setProducerProperty("set.force_full_luma", value.toInt());
}
+ else if (key == "proxy") {
+ // If value is "-", that means user manually disabled proxy on this clip
+ if (value.isEmpty() || value == "-") {
+ // reset proxy
+ emit abortProxy(m_id);
+ }
+ else {
+ emit createProxy(m_id);
+ }
+ }
}
QMap <QString, QString> DocClipBase::properties() const
return prod->get(property) == codec;
}
+
+