diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-05-19 13:17:10 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-05-21 00:27:47 +0200 |
| commit | dbf5796e3c750170493436e706d7a0db6a028d95 (patch) | |
| tree | 98af5a56273185f468e024a49770b6383aaa81c0 | |
| parent | 83416808c0b1ca732e7a186d3811f1ec796fea08 (diff) | |
Hacks.no-use-video-fixes
| -rw-r--r-- | src/lib/dcp_content.cc | 4 | ||||
| -rw-r--r-- | test/no_use_video_test.cc | 137 | ||||
| -rw-r--r-- | test/wscript | 1 |
3 files changed, 140 insertions, 2 deletions
diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index 4280ad13a..ca210b558 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -610,7 +610,7 @@ DCPContent::can_reference (shared_ptr<const Film> film, function<bool (shared_pt static bool check_video (shared_ptr<const Content> c) { - return static_cast<bool>(c->video); + return static_cast<bool>(c->video) && c->video->use(); } bool @@ -643,7 +643,7 @@ DCPContent::can_reference_video (shared_ptr<const Film> film, string& why_not) c static bool check_audio (shared_ptr<const Content> c) { - return static_cast<bool>(c->audio); + return static_cast<bool>(c->audio) && !c->audio->mapping().mapped_output_channels().empty(); } bool diff --git a/test/no_use_video_test.cc b/test/no_use_video_test.cc new file mode 100644 index 000000000..c3d728168 --- /dev/null +++ b/test/no_use_video_test.cc @@ -0,0 +1,137 @@ +/* + Copyright (C) 2020 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/>. + +*/ + + +/** @file test/test_no_use_video.cc + * @brief Test some cases where the video parts of inputs are ignored, to + * check that the right DCPs are made. + * @ingroup completedcp + */ + + +#include "lib/audio_content.h" +#include "lib/content.h" +#include "lib/content_factory.h" +#include "lib/film.h" +#include "lib/dcp_content.h" +#include "lib/video_content.h" +#include "test.h" +#include <boost/test/unit_test.hpp> + + +using boost::dynamic_pointer_cast; +using boost::shared_ptr; + + +/** Overlay two video-only bits of content, don't use the video on one and + * make sure the other one is in the DCP. + */ +BOOST_AUTO_TEST_CASE (no_use_video_test1) +{ + shared_ptr<Film> film = new_test_film2 ("no_use_video_test1"); + shared_ptr<Content> A = content_factory ("test/data/flat_red.png").front(); + shared_ptr<Content> B = content_factory ("test/data/flat_green.png").front(); + film->examine_and_add_content (A); + film->examine_and_add_content (B); + BOOST_REQUIRE (!wait_for_jobs()); + + A->set_position (film, dcpomatic::DCPTime()); + B->set_position (film, dcpomatic::DCPTime()); + A->video->set_use (false); + + film->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs()); + + check_dcp ("test/data/no_use_video_test1", film); +} + + +/** Overlay two muxed sources and disable the video on one */ +BOOST_AUTO_TEST_CASE (no_use_video_test2) +{ + shared_ptr<Film> film = new_test_film2 ("no_use_video_test2"); + shared_ptr<Content> A = content_factory (TestPaths::private_data / "dolby_aurora.vob").front(); + shared_ptr<Content> B = content_factory (TestPaths::private_data / "big_buck_bunny_trailer_480p.mov").front(); + film->examine_and_add_content (A); + film->examine_and_add_content (B); + BOOST_REQUIRE (!wait_for_jobs()); + + A->set_position (film, dcpomatic::DCPTime()); + B->set_position (film, dcpomatic::DCPTime()); + A->video->set_use (false); + + film->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs()); + + check_dcp ("test/data/no_use_video_test2", film); +} + + +/** Make two DCPs and make a VF with the audio from one and the video from another */ +BOOST_AUTO_TEST_CASE (no_use_video_test3) +{ + shared_ptr<Film> ov_a = new_test_film2 ("no_use_video_test3_ov_a"); + shared_ptr<Content> ov_a_pic = content_factory ("test/data/flat_red.png").front(); + BOOST_REQUIRE (ov_a_pic); + shared_ptr<Content> ov_a_snd = content_factory ("test/data/sine_16_48_220_10.wav").front(); + BOOST_REQUIRE (ov_a_snd); + ov_a->examine_and_add_content (ov_a_pic); + ov_a->examine_and_add_content (ov_a_snd); + BOOST_REQUIRE (!wait_for_jobs()); + ov_a->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs()); + + shared_ptr<Film> ov_b = new_test_film2 ("no_use_video_test3_ov_b"); + shared_ptr<Content> ov_b_pic = content_factory ("test/data/flat_green.png").front(); + BOOST_REQUIRE (ov_b_pic); + shared_ptr<Content> ov_b_snd = content_factory ("test/data/sine_16_48_880_10.wav").front(); + BOOST_REQUIRE (ov_b_snd); + ov_b->examine_and_add_content (ov_b_pic); + ov_b->examine_and_add_content (ov_b_snd); + BOOST_REQUIRE (!wait_for_jobs()); + ov_b->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs()); + + shared_ptr<Film> vf = new_test_film2 ("no_use_video_test3_vf"); + shared_ptr<DCPContent> A (new DCPContent(ov_a->dir(ov_a->dcp_name()))); + BOOST_REQUIRE (A); + shared_ptr<DCPContent> B (new DCPContent(ov_b->dir(ov_b->dcp_name()))); + BOOST_REQUIRE (B); + vf->examine_and_add_content (A); + vf->examine_and_add_content (B); + BOOST_REQUIRE (!wait_for_jobs()); + + A->set_position (vf, dcpomatic::DCPTime()); + A->video->set_use (false); + B->set_position (vf, dcpomatic::DCPTime()); + AudioMapping mapping (16, 16); + mapping.make_zero (); + B->audio->set_mapping(mapping); + + A->set_reference_audio (true); + B->set_reference_video (false); + + vf->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs()); + + /* XXX: will need some more clever checking of VFs with OVs */ +} + + diff --git a/test/wscript b/test/wscript index 1c3d750c3..9c67eacc4 100644 --- a/test/wscript +++ b/test/wscript @@ -94,6 +94,7 @@ def build(bld): job_test.cc kdm_naming_test.cc make_black_test.cc + no_use_video_test.cc optimise_stills_test.cc pixel_formats_test.cc player_test.cc |
