diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-12-30 00:52:01 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-12-30 00:52:01 +0000 |
| commit | 7d66aefc8a38140f5ea5620432c24ed9b370b481 (patch) | |
| tree | 4e09cc780a86411af5d2c2697458a2cbd76f2d5c /src/tools | |
| parent | ea366080377aae73e7b6720729d3fd1c523e4c48 (diff) | |
Add nascent dcpomatic_create.
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/dcpomatic_create.cc | 128 | ||||
| -rw-r--r-- | src/tools/wscript | 2 |
2 files changed, 129 insertions, 1 deletions
diff --git a/src/tools/dcpomatic_create.cc b/src/tools/dcpomatic_create.cc new file mode 100644 index 000000000..8be468b30 --- /dev/null +++ b/src/tools/dcpomatic_create.cc @@ -0,0 +1,128 @@ +/* + Copyright (C) 2013 Carl Hetherington <cth@carlh.net> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include <string> +#include <iostream> +#include <cstdlib> +#include <getopt.h> +#include <boost/filesystem.hpp> +#include "lib/version.h" +#include "lib/film.h" +#include "lib/util.h" +#include "lib/content_factory.h" +#include "lib/job_manager.h" +#include "lib/ui_signaller.h" +#include "lib/job.h" + +using std::string; +using std::cout; +using std::cerr; +using std::list; +using boost::shared_ptr; + +static void +help (string n) +{ + cerr << "Create a film directory (ready for making a DCP) from some content files.\n" + << "Syntax: " << n << " [OPTION] <CONTENT> [<CONTENT> ...]\n" + << " -v, --version show DCP-o-matic version\n" + << " -h, --help show this help\n" + << " -n, --name film name\n" + << " -o, --output output directory (required)\n"; +} + +int +main (int argc, char* argv[]) +{ + string name; + boost::filesystem::path output; + + int option_index = 0; + while (1) { + static struct option long_options[] = { + { "version", no_argument, 0, 'v'}, + { "help", no_argument, 0, 'h'}, + { "name", required_argument, 0, 'n'}, + { "output", required_argument, 0, 'o'}, + { 0, 0, 0, 0} + }; + + int c = getopt_long (argc, argv, "vhn:o:", long_options, &option_index); + if (c == -1) { + break; + } + + switch (c) { + case 'v': + cout << "dcpomatic version " << dcpomatic_version << " " << dcpomatic_git_commit << "\n"; + exit (EXIT_SUCCESS); + case 'h': + help (argv[0]); + exit (EXIT_SUCCESS); + case 'n': + name = optarg; + break; + case 'o': + output = optarg; + break; + } + } + + if (optind > argc) { + help (argv[0]); + exit (EXIT_FAILURE); + } + + if (output.empty ()) { + cerr << "Missing required option -o or --output.\n" + << "Use " << argv[0] << " --help for help.\n"; + exit (EXIT_FAILURE); + } + + dcpomatic_setup (); + ui_signaller = new UISignaller (); + + shared_ptr<Film> film (new Film (output)); + if (!name.empty ()) { + film->set_name (name); + } + + for (int i = optind; i < argc; ++i) { + film->examine_and_add_content (content_factory (film, argv[i])); + } + + JobManager* jm = JobManager::instance (); + while (jm->work_to_do ()) { + ui_signaller->ui_idle (); + } + + if (jm->errors ()) { + list<shared_ptr<Job> > jobs = jm->get (); + for (list<shared_ptr<Job> >::iterator i = jobs.begin(); i != jobs.end(); ++i) { + if ((*i)->finished_in_error ()) { + cerr << (*i)->error_summary () << "\n" + << (*i)->error_details () << "\n"; + } + } + exit (EXIT_FAILURE); + } + + film->write_metadata (); + return 0; +} diff --git a/src/tools/wscript b/src/tools/wscript index eafad44ec..0fd336676 100644 --- a/src/tools/wscript +++ b/src/tools/wscript @@ -9,7 +9,7 @@ def configure(conf): conf.env.append_value('LINKFLAGS', ['-mconsole']) def build(bld): - for t in ['dcpomatic_cli', 'dcpomatic_server_cli', 'server_test', 'dcpomatic_kdm']: + for t in ['dcpomatic_cli', 'dcpomatic_server_cli', 'server_test', 'dcpomatic_kdm', 'dcpomatic_create']: obj = bld(features = 'cxx cxxprogram') obj.uselib = 'BOOST_THREAD OPENJPEG DCP CXML AVFORMAT AVFILTER AVCODEC AVUTIL SWSCALE POSTPROC WXWIDGETS QUICKMAIL' obj.includes = ['..'] |
