diff options
| author | Carl Hetherington <cth@carlh.net> | 2017-05-31 16:20:09 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2017-05-31 16:20:09 +0100 |
| commit | d0a0a4839f0e1e8d37f9f9ad41784c4d18210a6b (patch) | |
| tree | 17cc7260004a09a9d92dbb0f01e6156c0a58cc07 /test | |
| parent | dd879e5254c1e005e60ccd135a37f70cb2fe3a75 (diff) | |
Allow repeat-frame to work with 3D.
Diffstat (limited to 'test')
| -rw-r--r-- | test/optimise_stills_test.cc | 102 | ||||
| -rw-r--r-- | test/test.cc | 1 | ||||
| -rw-r--r-- | test/wscript | 1 |
3 files changed, 104 insertions, 0 deletions
diff --git a/test/optimise_stills_test.cc b/test/optimise_stills_test.cc new file mode 100644 index 000000000..7bd7f3b85 --- /dev/null +++ b/test/optimise_stills_test.cc @@ -0,0 +1,102 @@ +/* + Copyright (C) 2017 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic 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. + + DCP-o-matic 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 DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "lib/dcp_encoder.h" +#include "lib/writer.h" +#include "lib/transcode_job.h" +#include "lib/job_manager.h" +#include "lib/film.h" +#include "lib/ratio.h" +#include "lib/content_factory.h" +#include "lib/dcp_content_type.h" +#include "lib/content.h" +#include "lib/video_content.h" +#include "test.h" +#include <boost/test/unit_test.hpp> +#include <boost/algorithm/string.hpp> + +using std::getline; +using std::ifstream; +using std::string; +using std::vector; +using boost::starts_with; +using boost::split; +using boost::dynamic_pointer_cast; +using boost::shared_ptr; + +static +void +check (string name, int check_full, int check_repeat) +{ + /* The encoder will have been destroyed so parse the logs */ + ifstream log ("build/test/" + name + "/log"); + string line; + int repeat = 0; + int full = 0; + while (getline (log, line)) { + vector<string> bits; + split (bits, line, boost::is_any_of (":")); + if (bits.size() >= 4 && starts_with (bits[3], " Wrote")) { + split (bits, bits[3], boost::is_any_of (" ")); + if (bits.size() >= 7) { + full = atoi (bits[2].c_str()); + repeat = atoi (bits[6].c_str()); + } + } + + } + + BOOST_CHECK_EQUAL (full, check_full); + BOOST_CHECK_EQUAL (repeat, check_repeat); +} + +/** Make a 2D DCP out of a 2D still and check that the J2K encoding is only done once for each frame */ +BOOST_AUTO_TEST_CASE (optimise_stills_test1) +{ + shared_ptr<Film> film = new_test_film ("optimise_stills_test1"); + film->set_container (Ratio::from_id ("185")); + film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); + film->set_name ("frobozz"); + shared_ptr<Content> content = content_factory(film, "test/data/flat_red.png").front (); + film->examine_and_add_content (content); + BOOST_REQUIRE (!wait_for_jobs ()); + film->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs ()); + + check ("optimise_stills_test1", 1, 10 * 24 - 1); +} + +/** Make a 3D DCP out of a 3D L/R still and check that the J2K encoding is only done once for L and R */ +BOOST_AUTO_TEST_CASE (optimise_stills_test2) +{ + shared_ptr<Film> film = new_test_film ("optimise_stills_test2"); + film->set_container (Ratio::from_id ("185")); + film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); + film->set_name ("frobozz"); + shared_ptr<Content> content = content_factory(film, "test/data/flat_red.png").front (); + film->examine_and_add_content (content); + BOOST_REQUIRE (!wait_for_jobs ()); + content->video->set_frame_type (VIDEO_FRAME_TYPE_3D_LEFT_RIGHT); + film->set_three_d (true); + film->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs ()); + + check ("optimise_stills_test2", 2, 10 * 48 - 2); +} diff --git a/test/test.cc b/test/test.cc index 699dea6c3..1b94b3912 100644 --- a/test/test.cc +++ b/test/test.cc @@ -82,6 +82,7 @@ struct TestConfig Config::instance()->set_default_audio_delay (0); Config::instance()->set_default_j2k_bandwidth (100000000); Config::instance()->set_default_interop (false); + Config::instance()->set_default_still_length (10); Config::instance()->set_log_types (LogEntry::TYPE_GENERAL | LogEntry::TYPE_WARNING | LogEntry::TYPE_ERROR); EncodeServerFinder::instance()->stop (); diff --git a/test/wscript b/test/wscript index cb39468a1..3ccc64423 100644 --- a/test/wscript +++ b/test/wscript @@ -75,6 +75,7 @@ def build(bld): j2k_bandwidth_test.cc job_test.cc make_black_test.cc + optimise_stills_test.cc pixel_formats_test.cc player_test.cc ratio_test.cc |
