#include #include #include #include #include "configuration.hh" #include "encoder/video.hh" #include "encoder/video_reader.hh" #include "encoder/video_writer.hh" bool parse_cli(Configuration& conf, int argc, char** argv) { namespace po = boost::program_options; // Register all possible options po::options_description desc("Allowed options"); desc.add_options() ("help,h", "produce help message") ("filter,f", po::value>(), "apply a filter") ("input-file,i", po::value>(), "file to treat") ("output,o", po::value(), "output file") ("codec,c", po::value(), "output codec") ; // Handle ./prpa file.avi instead of ./prpa --input-file=file.avi po::positional_options_description p; p.add("input-file", -1); // Read command line po::variables_map vm; try { po::store(po::command_line_parser(argc, argv). options(desc).positional(p).run(), vm); } catch (po::invalid_command_line_syntax e) { std::cerr << argv[0] << ": " << e.what() << std::endl; return false; } po::notify(vm); // Handle -h and --help if (argc <= 1 || vm.count("help")) { std::cout << desc << "\n"; return false; } // GO! std::cout << "Given filters: "; if (vm.count("filter")) std::cout << vm["filter"].as > ().size() << std::endl; else std::cout << 0 << std::endl; std::cout << "Given files: "; if (vm.count("input-file")) std::cout << vm["input-file"].as > ().size() << std::endl; else std::cout << 0 << std::endl; /* Store configuration */ conf.output = std::string(vm["output"].as()); conf.codec = std::string(vm["codec"].as()); std::vector vs; if (vm.count("input-file")) { vs = vm["input-file"].as>(); for (auto it = vs.begin(); it != vs.end(); ++it) conf.input.push_back(std::string(*it)); } if (vm.count("filter")) { vs = vm["filter"].as> (); for (auto it = vs.begin(); it != vs.end(); ++it) conf.filters.push_back(std::string(*it)); } return true; } int main (int argc, char** argv) { Configuration conf = Configuration(); if (!parse_cli(conf, argc, argv)) return 1; VideoReader vr(conf.input.front()); VideoWriter vw = VideoWriter(); vw.open(conf.output, conf.codec, vr.fps_get(), vr.width_get(), vr.height_get()); vw.copy(vr); vw.write(); return 0; }