Introduced parameter class ExporterInput
This commit is contained in:
parent
4de8f3d18e
commit
d705a0c0ee
|
@ -4,8 +4,23 @@
|
||||||
#include "ContinuousTimeline.h"
|
#include "ContinuousTimeline.h"
|
||||||
#include <boost/filesystem/path.hpp>
|
#include <boost/filesystem/path.hpp>
|
||||||
|
|
||||||
|
class ExporterInput {
|
||||||
|
public:
|
||||||
|
ExporterInput(
|
||||||
|
const boost::filesystem::path& inputFilePath,
|
||||||
|
const JoiningContinuousTimeline<Shape>& animation,
|
||||||
|
const ShapeSet& targetShapeSet) :
|
||||||
|
inputFilePath(inputFilePath),
|
||||||
|
animation(animation),
|
||||||
|
targetShapeSet(targetShapeSet) {}
|
||||||
|
|
||||||
|
boost::filesystem::path inputFilePath;
|
||||||
|
JoiningContinuousTimeline<Shape> animation;
|
||||||
|
ShapeSet targetShapeSet;
|
||||||
|
};
|
||||||
|
|
||||||
class Exporter {
|
class Exporter {
|
||||||
public:
|
public:
|
||||||
virtual ~Exporter() {}
|
virtual ~Exporter() {}
|
||||||
virtual void exportAnimation(const boost::filesystem::path& inputFilePath, const JoiningContinuousTimeline<Shape>& animation, const ShapeSet& targetShapeSet, std::ostream& outputStream) = 0;
|
virtual void exportAnimation(const ExporterInput& input, std::ostream& outputStream) = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -34,17 +34,17 @@ string escapeJsonString(const string& s) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonExporter::exportAnimation(const boost::filesystem::path& inputFilePath, const JoiningContinuousTimeline<Shape>& animation, const ShapeSet& targetShapeSet, std::ostream& outputStream) {
|
void JsonExporter::exportAnimation(const ExporterInput& input, std::ostream& outputStream) {
|
||||||
// Export as JSON.
|
// Export as JSON.
|
||||||
// I'm not using a library because the code is short enough without one and it lets me control the formatting.
|
// I'm not using a library because the code is short enough without one and it lets me control the formatting.
|
||||||
outputStream << "{\n";
|
outputStream << "{\n";
|
||||||
outputStream << " \"metadata\": {\n";
|
outputStream << " \"metadata\": {\n";
|
||||||
outputStream << " \"soundFile\": \"" << escapeJsonString(inputFilePath.string()) << "\",\n";
|
outputStream << " \"soundFile\": \"" << escapeJsonString(input.inputFilePath.string()) << "\",\n";
|
||||||
outputStream << " \"duration\": " << formatDuration(animation.getRange().getDuration()) << "\n";
|
outputStream << " \"duration\": " << formatDuration(input.animation.getRange().getDuration()) << "\n";
|
||||||
outputStream << " },\n";
|
outputStream << " },\n";
|
||||||
outputStream << " \"mouthCues\": [\n";
|
outputStream << " \"mouthCues\": [\n";
|
||||||
bool isFirst = true;
|
bool isFirst = true;
|
||||||
for (auto& timedShape : dummyShapeIfEmpty(animation, targetShapeSet)) {
|
for (auto& timedShape : dummyShapeIfEmpty(input.animation, input.targetShapeSet)) {
|
||||||
if (!isFirst) outputStream << ",\n";
|
if (!isFirst) outputStream << ",\n";
|
||||||
isFirst = false;
|
isFirst = false;
|
||||||
outputStream << " { \"start\": " << formatDuration(timedShape.getStart())
|
outputStream << " { \"start\": " << formatDuration(timedShape.getStart())
|
||||||
|
|
|
@ -4,5 +4,5 @@
|
||||||
|
|
||||||
class JsonExporter : public Exporter {
|
class JsonExporter : public Exporter {
|
||||||
public:
|
public:
|
||||||
void exportAnimation(const boost::filesystem::path& inputFilePath, const JoiningContinuousTimeline<Shape>& animation, const ShapeSet& targetShapeSet, std::ostream& outputStream) override;
|
void exportAnimation(const ExporterInput& input, std::ostream& outputStream) override;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
#include "TsvExporter.h"
|
#include "TsvExporter.h"
|
||||||
#include "targetShapeSet.h"
|
#include "targetShapeSet.h"
|
||||||
|
|
||||||
void TsvExporter::exportAnimation(const boost::filesystem::path& inputFilePath, const JoiningContinuousTimeline<Shape>& animation, const ShapeSet& targetShapeSet, std::ostream& outputStream) {
|
void TsvExporter::exportAnimation(const ExporterInput& input, std::ostream& outputStream) {
|
||||||
UNUSED(inputFilePath);
|
|
||||||
|
|
||||||
// Output shapes with start times
|
// Output shapes with start times
|
||||||
for (auto& timedShape : animation) {
|
for (auto& timedShape : input.animation) {
|
||||||
outputStream << formatDuration(timedShape.getStart()) << "\t" << timedShape.getValue() << "\n";
|
outputStream << formatDuration(timedShape.getStart()) << "\t" << timedShape.getValue() << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Output closed mouth with end time
|
// Output closed mouth with end time
|
||||||
outputStream << formatDuration(animation.getRange().getEnd()) << "\t" << convertToTargetShapeSet(Shape::X, targetShapeSet) << "\n";
|
outputStream
|
||||||
|
<< formatDuration(input.animation.getRange().getEnd())
|
||||||
|
<< "\t"
|
||||||
|
<< convertToTargetShapeSet(Shape::X, input.targetShapeSet)
|
||||||
|
<< "\n";
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
|
|
||||||
class TsvExporter : public Exporter {
|
class TsvExporter : public Exporter {
|
||||||
public:
|
public:
|
||||||
void exportAnimation(const boost::filesystem::path& inputFilePath, const JoiningContinuousTimeline<Shape>& animation, const ShapeSet& targetShapeSet, std::ostream& outputStream) override;
|
void exportAnimation(const ExporterInput& input, std::ostream& outputStream) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7,22 +7,22 @@
|
||||||
using std::string;
|
using std::string;
|
||||||
using boost::property_tree::ptree;
|
using boost::property_tree::ptree;
|
||||||
|
|
||||||
void XmlExporter::exportAnimation(const boost::filesystem::path& inputFilePath, const JoiningContinuousTimeline<Shape>& animation, const ShapeSet& targetShapeSet, std::ostream& outputStream) {
|
void XmlExporter::exportAnimation(const ExporterInput& input, std::ostream& outputStream) {
|
||||||
ptree tree;
|
ptree tree;
|
||||||
|
|
||||||
// Add metadata
|
// Add metadata
|
||||||
tree.put("rhubarbResult.metadata.soundFile", inputFilePath.string());
|
tree.put("rhubarbResult.metadata.soundFile", input.inputFilePath.string());
|
||||||
tree.put("rhubarbResult.metadata.duration", formatDuration(animation.getRange().getDuration()));
|
tree.put("rhubarbResult.metadata.duration", formatDuration(input.animation.getRange().getDuration()));
|
||||||
|
|
||||||
// Add mouth cues
|
// Add mouth cues
|
||||||
for (auto& timedShape : dummyShapeIfEmpty(animation, targetShapeSet)) {
|
for (auto& timedShape : dummyShapeIfEmpty(input.animation, input.targetShapeSet)) {
|
||||||
ptree& mouthCueElement = tree.add("rhubarbResult.mouthCues.mouthCue", timedShape.getValue());
|
ptree& mouthCueElement = tree.add("rhubarbResult.mouthCues.mouthCue", timedShape.getValue());
|
||||||
mouthCueElement.put("<xmlattr>.start", formatDuration(timedShape.getStart()));
|
mouthCueElement.put("<xmlattr>.start", formatDuration(timedShape.getStart()));
|
||||||
mouthCueElement.put("<xmlattr>.end", formatDuration(timedShape.getEnd()));
|
mouthCueElement.put("<xmlattr>.end", formatDuration(timedShape.getEnd()));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef BOOST_VERSION //present in version.hpp
|
#ifndef BOOST_VERSION //present in version.hpp
|
||||||
#error "Could not detect Boost version."
|
#error "Could not detect Boost version."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if BOOST_VERSION < 105600 // Support legacy syntax
|
#if BOOST_VERSION < 105600 // Support legacy syntax
|
||||||
|
|
|
@ -4,5 +4,5 @@
|
||||||
|
|
||||||
class XmlExporter : public Exporter {
|
class XmlExporter : public Exporter {
|
||||||
public:
|
public:
|
||||||
void exportAnimation(const boost::filesystem::path& inputFilePath, const JoiningContinuousTimeline<Shape>& animation, const ShapeSet& targetShapeSet, std::ostream& outputStream) override;
|
void exportAnimation(const ExporterInput& input, std::ostream& outputStream) override;
|
||||||
};
|
};
|
||||||
|
|
|
@ -184,7 +184,8 @@ int main(int platformArgc, char *platformArgv[]) {
|
||||||
outputFile = boost::in_place(outputFileName.getValue());
|
outputFile = boost::in_place(outputFileName.getValue());
|
||||||
outputFile->exceptions(std::ifstream::failbit | std::ifstream::badbit);
|
outputFile->exceptions(std::ifstream::failbit | std::ifstream::badbit);
|
||||||
}
|
}
|
||||||
exporter->exportAnimation(inputFilePath, animation, targetShapeSet, outputFile ? *outputFile : std::cout);
|
ExporterInput exporterInput = ExporterInput(inputFilePath, animation, targetShapeSet);
|
||||||
|
exporter->exportAnimation(exporterInput, outputFile ? *outputFile : std::cout);
|
||||||
|
|
||||||
logging::info("Exiting application normally.");
|
logging::info("Exiting application normally.");
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
|
|
Loading…
Reference in New Issue