From: Carl Hetherington Date: Mon, 30 Dec 2013 00:52:01 +0000 (+0000) Subject: Add nascent dcpomatic_create. X-Git-Tag: v2.0.48~1016 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=7d66aefc8a38140f5ea5620432c24ed9b370b481 Add nascent dcpomatic_create. --- diff --git a/ChangeLog b/ChangeLog index a8b8630b7..967b5034f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-30 Carl Hetherington + + * Add nascent dcpomatic_create command-line program to create films. + 2013-12-29 Carl Hetherington * Version 1.53 released. diff --git a/run/dcpomatic_create b/run/dcpomatic_create new file mode 100755 index 000000000..bf3c3c493 --- /dev/null +++ b/run/dcpomatic_create @@ -0,0 +1,18 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=build/src/lib:build/src/wx:build/src/asdcplib/src:$LD_LIBRARY_PATH +if [ "$1" == "--debug" ]; then + shift + gdb --args build/src/tools/dcpomatic_create $* +elif [ "$1" == "--valgrind" ]; then + shift + valgrind --tool="memcheck" build/src/tools/dcpomatic_create $* +elif [ "$1" == "--callgrind" ]; then + shift + valgrind --tool="callgrind" build/src/tools/dcpomatic_create $* +elif [ "$1" == "--perf" ]; then + shift + perf record build/src/tools/dcpomatic_create $* +else + build/src/tools/dcpomatic_create $* +fi 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 + + 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 +#include +#include +#include +#include +#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] [ ...]\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 (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 > jobs = jm->get (); + for (list >::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 = ['..']