project: improved loading and footage importing

This commit is contained in:
itsmattkc
2020-10-19 14:41:01 +11:00
parent 30e5a442a8
commit db8d321fa7
39 changed files with 630 additions and 329 deletions
+6 -4
View File
@@ -220,10 +220,12 @@ rational Block::MediaToSequenceTime(const rational &media_time) const
void Block::LoadInternal(QXmlStreamReader *reader, XMLNodeData &xml_node_data)
{
if (reader->name() == QStringLiteral("link")) {
xml_node_data.block_links.append({this, reader->readElementText().toULongLong()});
} else {
Node::LoadInternal(reader, xml_node_data);
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("link")) {
xml_node_data.block_links.append({this, reader->readElementText().toULongLong()});
} else {
reader->skipCurrentElement();
}
}
}
+6 -6
View File
@@ -88,7 +88,7 @@ void NodeInput::Load(QXmlStreamReader *reader, XMLNodeData &xml_node_data, const
}
if (attr.name() == QStringLiteral("keyframing")) {
set_is_keyframing(attr.value() == QStringLiteral("1"));
set_is_keyframing(attr.value().toInt());
}
}
}
@@ -199,16 +199,16 @@ void NodeInput::Load(QXmlStreamReader *reader, XMLNodeData &xml_node_data, const
set_property(QStringLiteral("col_view"), reader->readElementText());
} else if (reader->name() == QStringLiteral("cslook")) {
set_property(QStringLiteral("col_look"), reader->readElementText());
} else {
} else if (reader->name() == QStringLiteral("custom")) {
LoadInternal(reader, xml_node_data, cancelled);
} else {
reader->skipCurrentElement();
}
}
}
void NodeInput::Save(QXmlStreamWriter *writer) const
{
writer->writeStartElement("input");
writer->writeAttribute("id", id());
writer->writeAttribute("keyframing", QString::number(keyframing_));
@@ -258,9 +258,9 @@ void NodeInput::Save(QXmlStreamWriter *writer) const
SaveConnections(writer);
writer->writeStartElement(QStringLiteral("custom"));
SaveInternal(writer);
writer->writeEndElement(); // input
writer->writeEndElement(); // custom
}
void NodeInput::SaveConnections(QXmlStreamWriter *writer) const
+14 -10
View File
@@ -187,17 +187,19 @@ void NodeInputArray::RemoveAt(int index)
void NodeInputArray::LoadInternal(QXmlStreamReader *reader, XMLNodeData &xml_node_data, const QAtomicInt* cancelled)
{
if (reader->name() == QStringLiteral("subparameters")) {
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("input")) {
Append();
At(GetSize() - 1)->Load(reader, xml_node_data, cancelled);
} else {
reader->skipCurrentElement();
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("subparameters")) {
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("input")) {
Append();
At(GetSize() - 1)->Load(reader, xml_node_data, cancelled);
} else {
reader->skipCurrentElement();
}
}
} else {
reader->skipCurrentElement();
}
} else {
NodeInput::Load(reader, xml_node_data, cancelled);
}
}
@@ -206,7 +208,9 @@ void NodeInputArray::SaveInternal(QXmlStreamWriter *writer) const
writer->writeStartElement("subparameters");
foreach (NodeInput* sub, sub_params_) {
sub->Save(writer);
writer->writeStartElement(QStringLiteral("input"));
sub->Save(writer);
writer->writeEndElement();
}
writer->writeEndElement(); // subparameters
+42 -15
View File
@@ -95,34 +95,61 @@ void Node::Load(QXmlStreamReader *reader, XMLNodeData& xml_node_data, const QAto
}
param->Load(reader, xml_node_data, cancelled);
} else {
} else if (reader->name() == QStringLiteral("ptr")) {
xml_node_data.node_ptrs.insert(reader->readElementText().toULongLong(), this);
} else if (reader->name() == QStringLiteral("pos")) {
QPointF p;
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("x")) {
p.setX(reader->readElementText().toDouble());
} else if (reader->name() == QStringLiteral("y")) {
p.setY(reader->readElementText().toDouble());
} else {
reader->skipCurrentElement();
}
}
SetPosition(p);
} else if (reader->name() == QStringLiteral("label")) {
SetLabel(reader->readElementText());
} else if (reader->name() == QStringLiteral("custom")) {
LoadInternal(reader, xml_node_data);
} else {
reader->skipCurrentElement();
}
}
}
void Node::Save(QXmlStreamWriter *writer, const QString &custom_name) const
void Node::Save(QXmlStreamWriter *writer) const
{
writer->writeStartElement(custom_name.isEmpty() ? QStringLiteral("node") : custom_name);
writer->writeTextElement(QStringLiteral("ptr"), QString::number(reinterpret_cast<quintptr>(this)));
writer->writeAttribute(QStringLiteral("id"), id());
writer->writeStartElement(QStringLiteral("pos"));
writer->writeTextElement(QStringLiteral("x"), QString::number(GetPosition().x()));
writer->writeTextElement(QStringLiteral("y"), QString::number(GetPosition().y()));
writer->writeEndElement(); // pos
writer->writeAttribute(QStringLiteral("ptr"), QString::number(reinterpret_cast<quintptr>(this)));
writer->writeAttribute(QStringLiteral("pos"),
QStringLiteral("%1:%2").arg(QString::number(GetPosition().x()),
QString::number(GetPosition().y())));
writer->writeAttribute(QStringLiteral("label"),
GetLabel());
writer->writeTextElement(QStringLiteral("label"), GetLabel());
foreach (NodeParam* param, parameters()) {
switch (param->type()) {
case NodeParam::kInput:
writer->writeStartElement(QStringLiteral("input"));
break;
case NodeParam::kOutput:
writer->writeStartElement(QStringLiteral("output"));
break;
}
param->Save(writer);
writer->writeEndElement(); // input/output
}
writer->writeStartElement(QStringLiteral("custom"));
SaveInternal(writer);
writer->writeEndElement(); // node
writer->writeEndElement(); // custom
}
QString Node::ShortName() const
@@ -361,7 +388,7 @@ void Node::Hash(QCryptographicHash &hash, const rational& time) const
hash.addData(stream->footage()->filename().toUtf8());
// Footage last modified date
hash.addData(stream->footage()->timestamp().toString().toUtf8());
hash.addData(QString::number(stream->footage()->timestamp()).toUtf8());
// Footage stream
hash.addData(QString::number(stream->index()).toUtf8());
+1 -1
View File
@@ -95,7 +95,7 @@ public:
/**
* @brief Save this node into a text/XML format
*/
void Save(QXmlStreamWriter* writer, const QString& custom_name = QString()) const;
void Save(QXmlStreamWriter* writer) const;
/**
* @brief Return the name of the node
-4
View File
@@ -63,13 +63,9 @@ void NodeOutput::Load(QXmlStreamReader* reader, XMLNodeData &xml_node_data, cons
void NodeOutput::Save(QXmlStreamWriter *writer) const
{
writer->writeStartElement("output");
writer->writeAttribute("id", id());
writer->writeAttribute("ptr", QString::number(reinterpret_cast<quintptr>(this)));
writer->writeEndElement(); // output
}
OLIVE_NAMESPACE_EXIT
+7 -5
View File
@@ -111,12 +111,14 @@ void TrackOutput::SetTrackHeight(const double &height)
emit TrackHeightChangedInPixels(GetTrackHeightInPixels());
}
void TrackOutput::LoadInternal(QXmlStreamReader *reader, XMLNodeData &xml_node_data)
void TrackOutput::LoadInternal(QXmlStreamReader *reader, XMLNodeData &)
{
if (reader->name() == QStringLiteral("height")) {
SetTrackHeight(reader->readElementText().toDouble());
} else {
Node::LoadInternal(reader, xml_node_data);
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("height")) {
SetTrackHeight(reader->readElementText().toDouble());
} else {
reader->skipCurrentElement();
}
}
}
+14 -6
View File
@@ -212,10 +212,14 @@ void NodeTraverser::PostProcessTable(const Node *node, const TimeRange &range, N
if (!got_cached_frame) {
// Retrieve video frames
foreach (const NodeValue& v, video_footage_to_retrieve) {
QVariant value = ProcessVideoFootage(v.data().value<StreamPtr>(), range.in());
StreamPtr stream = v.data().value<StreamPtr>();
if (!value.isNull()) {
output_params.Push(NodeParam::kTexture, value, node);
if (stream->footage()->IsValid()) {
QVariant value = ProcessVideoFootage(stream, range.in());
if (!value.isNull()) {
output_params.Push(NodeParam::kTexture, value, node);
}
}
}
@@ -240,10 +244,14 @@ void NodeTraverser::PostProcessTable(const Node *node, const TimeRange &range, N
// Retrieve audio samples
foreach (const NodeValue& v, audio_footage_to_retrieve) {
QVariant value = ProcessAudioFootage(v.data().value<StreamPtr>(), range);
StreamPtr stream = v.data().value<StreamPtr>();
if (!value.isNull()) {
output_params.Push(NodeParam::kSamples, value, node);
if (stream->footage()->IsValid()) {
QVariant value = ProcessAudioFootage(v.data().value<StreamPtr>(), range);
if (!value.isNull()) {
output_params.Push(NodeParam::kSamples, value, node);
}
}
}