2012-07-13 20:32:20 +00:00
|
|
|
#include <string>
|
|
|
|
#include <list>
|
|
|
|
#include <vector>
|
|
|
|
#include <iostream>
|
2012-07-12 17:50:16 +00:00
|
|
|
#include "tbb/pipeline.h"
|
|
|
|
|
|
|
|
#include "pipeline.hh"
|
2012-07-13 16:03:45 +00:00
|
|
|
#include "compose.hh"
|
2012-07-12 22:03:02 +00:00
|
|
|
#include "filterSample/grey.hh"
|
2012-07-13 20:32:20 +00:00
|
|
|
#include "filterSample/cartoon.hh"
|
|
|
|
#include "filterSample/blur.hh"
|
2012-07-13 16:03:45 +00:00
|
|
|
#include "filterSample/reverse.hh"
|
|
|
|
#include "filterSample/merge.hh"
|
|
|
|
#include "filterSample/interlace.hh"
|
2012-07-13 20:32:20 +00:00
|
|
|
#include "filterSample/inlay.hh"
|
|
|
|
#include "filterSample/count.hh"
|
2012-07-12 22:03:02 +00:00
|
|
|
|
|
|
|
Pipeline::Pipeline(std::list<VideoReader> input, VideoWriter output)
|
|
|
|
: input_(input), output_(output)
|
|
|
|
{
|
2012-07-13 16:03:45 +00:00
|
|
|
this->input_it_ = this->input_.begin();
|
2012-07-12 22:03:02 +00:00
|
|
|
this->pipeline_.add_filter(this->input_.front());
|
2012-07-13 16:03:45 +00:00
|
|
|
this->input_it_++;
|
2012-07-12 22:03:02 +00:00
|
|
|
}
|
2012-07-12 17:50:16 +00:00
|
|
|
|
2012-07-13 20:32:20 +00:00
|
|
|
bool Pipeline::add_filter(std::string filter, std::vector<int> args)
|
2012-07-12 17:50:16 +00:00
|
|
|
{
|
2012-07-12 22:03:02 +00:00
|
|
|
if (filter == "grey" || filter == "gray")
|
|
|
|
this->pipeline_.add_filter(*(new Grey()));
|
2012-07-13 16:03:45 +00:00
|
|
|
else if (filter == "reverse" || filter == "inverse")
|
|
|
|
this->pipeline_.add_filter(*(new Reverse()));
|
2012-07-13 20:32:20 +00:00
|
|
|
else if (filter == "cartoon")
|
|
|
|
this->pipeline_.add_filter(*(new Cartoon()));
|
|
|
|
else if (filter == "count")
|
|
|
|
this->pipeline_.add_filter(*(new Count()));
|
|
|
|
else if (filter == "blur")
|
|
|
|
{
|
|
|
|
if (args.size() >= 1)
|
|
|
|
this->pipeline_.add_filter(*(new Blur(args[0])));
|
|
|
|
else
|
|
|
|
this->pipeline_.add_filter(*(new Blur()));
|
|
|
|
}
|
2012-07-13 16:03:45 +00:00
|
|
|
else if (filter == "merge" && this->input_it_ != this->input_.end())
|
|
|
|
{
|
|
|
|
this->pipeline_.add_filter(*(new Compose(*this->input_it_)));
|
|
|
|
this->input_it_++;
|
|
|
|
this->pipeline_.add_filter(*(new Merge()));
|
|
|
|
}
|
|
|
|
else if (filter == "interlace" && this->input_it_ != this->input_.end())
|
|
|
|
{
|
|
|
|
this->pipeline_.add_filter(*(new Compose(*this->input_it_)));
|
|
|
|
this->input_it_++;
|
|
|
|
this->pipeline_.add_filter(*(new Interlace()));
|
|
|
|
}
|
2012-07-13 20:32:20 +00:00
|
|
|
else if (filter == "inlay" && this->input_it_ != this->input_.end()
|
|
|
|
&& args.size() >= 3)
|
|
|
|
{
|
|
|
|
this->pipeline_.add_filter(*(new Compose(*this->input_it_)));
|
|
|
|
this->input_it_++;
|
|
|
|
this->pipeline_.add_filter(
|
|
|
|
*(new Inlay(cv::Vec3b { args[0], args[1], args[2] }, 0)));
|
|
|
|
}
|
|
|
|
else if (filter == "strictinlay" && this->input_it_ != this->input_.end()
|
|
|
|
&& args.size() >= 3)
|
|
|
|
{
|
|
|
|
this->pipeline_.add_filter(*(new Compose(*this->input_it_)));
|
|
|
|
this->input_it_++;
|
|
|
|
this->pipeline_.add_filter(
|
|
|
|
*(new Inlay(cv::Vec3b { args[0], args[1], args[2] }, 1)));
|
|
|
|
}
|
2012-07-12 22:03:02 +00:00
|
|
|
else
|
|
|
|
return false;
|
|
|
|
|
2012-07-12 17:50:16 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Pipeline::run()
|
|
|
|
{
|
2012-07-13 20:32:20 +00:00
|
|
|
std::cout << "Applying video filter chain: ";
|
|
|
|
std::flush(std::cout);
|
2012-07-12 17:50:16 +00:00
|
|
|
this->pipeline_.add_filter(this->output_);
|
|
|
|
this->pipeline_.run(CHUNK_SIZE);
|
2012-07-13 20:32:20 +00:00
|
|
|
std::cout << "Done!" << std::endl;
|
2012-07-12 17:50:16 +00:00
|
|
|
}
|