#include <QCryptographicHash>
+#include <cstdio>
+
DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id) :
QObject(),
m_audioFrameCache(),
m_baseTrackProducers(),
m_audioTrackProducers(),
m_videoOnlyProducer(NULL),
- m_snapMarkers(),
+ m_snapMarkers(QList < CommentedTime >()),
m_duration(),
m_audioTimer(NULL),
m_thumbProd(NULL),
QPoint DocClipBase::zone() const
{
QPoint zone;
- zone.setX(m_properties.value("zone_in").toInt());
+ zone.setX(m_properties.value("zone_in", "0").toInt());
zone.setY(m_properties.value("zone_out", "50").toInt());
return zone;
}
return m_snapMarkers;
}
-void DocClipBase::setSnapMarkers(QList < CommentedTime > markers)
-{
- m_snapMarkers = markers;
-}
void DocClipBase::addSnapMarker(const GenTime & time, QString comment)
{
m_audioTrackProducers.clear();
}
+void DocClipBase::setValid()
+{
+ m_placeHolder = false;
+}
+
void DocClipBase::setProducer(Mlt::Producer *producer, bool reset)
{
- if (producer == NULL) return;
+ if (producer == NULL || m_placeHolder) return;
if (reset) {
// Clear all previous producers
kDebug() << "/+++++++++++++++ DELETE ALL PRODS " << producer->get("id");
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());
}
}
+void DocClipBase::resetProducerProperty(const char *name)
+{
+ for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ if (m_baseTrackProducers.at(i) != NULL)
+ m_baseTrackProducers[i]->set(name, (const char*) NULL);
+ }
+}
+
const char *DocClipBase::producerProperty(const char *name) const
{
for (int i = 0; i < m_baseTrackProducers.count(); i++) {
} else if (key == "force_aspect_ratio") {
if (value.isEmpty()) {
m_properties.remove("force_aspect_ratio");
- setProducerProperty("force_aspect_ratio", NULL);
+ 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");
- setProducerProperty("force_progressive", NULL);
+ resetProducerProperty("force_progressive");
} else setProducerProperty("force_progressive", value.toInt());
} else if (key == "threads") {
if (value.isEmpty()) {
return m_cutZones;
}
+bool DocClipBase::hasVideoCodec(const QString &codec) const
+{
+ Mlt::Producer *prod = NULL;
+ if (m_baseTrackProducers.count() == 0) return false;
+ for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ if (m_baseTrackProducers.at(i) != NULL) {
+ prod = m_baseTrackProducers.at(i);
+ break;
+ }
+ }
+
+ if (!prod) return false;
+ int default_video = prod->get_int("video_index");
+ char property[200];
+ snprintf(property, sizeof(property), "meta.media.%d.codec.name", default_video);
+ return prod->get(property) == codec;
+}
+
+bool DocClipBase::hasAudioCodec(const QString &codec) const
+{
+ Mlt::Producer *prod = NULL;
+ if (m_baseTrackProducers.count() == 0) return false;
+ for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ if (m_baseTrackProducers.at(i) != NULL) {
+ prod = m_baseTrackProducers.at(i);
+ break;
+ }
+ }
+ if (!prod) return false;
+ int default_video = prod->get_int("audio_index");
+ char property[200];
+ snprintf(property, sizeof(property), "meta.media.%d.codec.name", default_video);
+ return prod->get(property) == codec;
+}
+