commit 47db2052f927c0253d02d4078e085836a2fe7479
parent cd663edf130f2edab7170fa0f2ab29d0be0cec94
Author: Fabian Wermelinger <fabianw@mavt.ethz.ch>
Date: Thu, 28 Apr 2016 18:28:32 +0200
added SceneProcessor
Diffstat:
2 files changed, 133 insertions(+), 0 deletions(-)
diff --git a/apps/polaroidCamera/SceneProcessor.cpp b/apps/polaroidCamera/SceneProcessor.cpp
@@ -0,0 +1,96 @@
+// File : SceneProcessor.cpp
+// Date : Thu 28 Apr 2016 05:43:50 PM CEST
+// Author : Fabian Wermelinger
+// Description: Scene Processor implementation
+// Copyright 2016 ETH Zurich. All Rights Reserved.
+#include <iostream>
+#include <cstdlib>
+#include <cstdio>
+#include "SceneProcessor.h"
+
+using namespace std;
+
+
+void SceneProcessor::_set_cartridge()
+{
+}
+
+void SceneProcessor::_set_paper()
+{
+}
+
+void _load_cam(Polaroid& cam, const char* const fname) const
+{
+ const double fraction = m_parser("-fraction").asDouble(0.5);
+ const int direction = m_parser("-direction").asInt(0);
+ const int channel = m_parser("-channel").asInt(0);
+ const bool byte_swap = m_parser("-swap").asBool(false);
+ const int wavelet_type = m_parser("-wtype").asInt(1);
+ const string input_type = m_parser("-input").asString("hdf5");
+
+ if (input_type == "hdf5")
+ cam.load_hdf5(fname, fraction, direction, channel);
+ else if (input_type == "wavelet")
+ cam.load_wavelet(fname, fraction, direction, channel, byte_swap, wavelet_type);
+ else
+ {
+ if (isroot)
+ cerr << "ERROR: Undefined input type \"" << input_type << "\"" << endl;
+ abort();
+ }
+}
+
+void sceneprocessor::process1212(const vector<char*>& scenes, const bool isroot)
+{
+ Polaroid mycam;
+ _set_cartridge();
+ _set_paper();
+
+ for (size_t i=0; i<scenes.size(); ++i)
+ {
+ _load_cam(mycam, scenes[i]);
+
+ string basename(scenes[i]);
+ if (basename.find_last_of(".") != string::npos)
+ basename = basename.substr(0, basename.find_last_of("."));
+
+ m_photo->make_new(basename+"-polaroid", mycam.width(), mycam.height());
+ mycam.capture(*m_cartridge, *m_photo);
+
+ if (isroot)
+ printf("[Progress %3.1f %%]\n", static_cast<double>(i)/scenes.size()*100.0);
+ }
+}
+
+void sceneprocessor::process1122(const vector<char*>& scenes)
+{
+ vector<Polaroid> mycams(scenes.size());
+
+ // 1.) load scenes
+ for (size_t i=0; i<scenes.size(); ++i)
+ {
+ Polaroid& cam = mycams[i];
+ _load_cam(cam, scenes[i]);
+ if (isroot)
+ printf("[Load Progress %3.1f %%]\n", static_cast<double>(i)/scenes.size()*100.0);
+ }
+
+ _set_cartridge();
+ _set_paper();
+
+ // 2.) compute photos
+ for (size_t i=0; i<scenes.size(); ++i)
+ {
+ Polaroid& cam = mycams[i];
+
+ string basename(scenes[i]);
+ if (basename.find_last_of(".") != string::npos)
+ basename = basename.substr(0, basename.find_last_of("."));
+
+ m_photo->make_new(basename+"-polaroid", cam.width(), cam.height());
+ cam.capture(*m_cartridge, *m_photo);
+
+ if (isroot)
+ printf("[Photo Progress %3.1f %%]\n", static_cast<double>(i)/scenes.size()*100.0);
+ }
+}
diff --git a/apps/polaroidCamera/SceneProcessor.h b/apps/polaroidCamera/SceneProcessor.h
@@ -0,0 +1,37 @@
+// File : SceneProcessor.h
+// Date : Thu 28 Apr 2016 05:08:33 PM CEST
+// Author : Fabian Wermelinger
+// Description: Scene Processing
+// Copyright 2016 ETH Zurich. All Rights Reserved.
+#ifndef SCENEPROCESSOR_H_UWGYBVIW
+#define SCENEPROCESSOR_H_UWGYBVIW
+
+#include <string>
+#include <vector>
+
+#include "ArgumentParser.h"
+#include "Polaroid.h"
+#include "Cartridges.h"
+#include "PhotoFormats.h"
+
+class SceneProcessor
+{
+private:
+ ArgumentParser& m_parser;
+ Cartridge* m_cartridge;
+ PhotoPaper* m_photo;
+
+ // helper
+ void _set_cartridge();
+ void _set_paper();
+ void _load_cam(Polaroid& cam, const char* const fname) const;
+
+public:
+ SceneProcessor(ArgumentParser& parser) : m_parser(parser), m_cartridge(nullptr), m_photo(nullptr) {}
+ ~SceneProcessor() {}
+
+ void process1212(const std::vector<char*>& scenes, const bool isroot=true);
+ void process1122(const std::vector<char*>& scenes, const bool isroot=true);
+};
+
+#endif /* SCENEPROCESSOR_H_UWGYBVIW */