diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-09-29 14:16:56 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-02-15 03:16:16 +0100 |
| commit | 42a6003535d3153224da33b973bb79662d296e02 (patch) | |
| tree | f17b37e110fbd93355c21515614d9ecad5364fdf /test | |
| parent | a632e34e3c9ca94574fcab1b3006227ed2833766 (diff) | |
Basic handling of overlapping video (#1848).
Diffstat (limited to 'test')
| -rw-r--r-- | test/overlap_video_test.cc | 111 | ||||
| -rw-r--r-- | test/wscript | 1 |
2 files changed, 112 insertions, 0 deletions
diff --git a/test/overlap_video_test.cc b/test/overlap_video_test.cc new file mode 100644 index 000000000..246a75834 --- /dev/null +++ b/test/overlap_video_test.cc @@ -0,0 +1,111 @@ +/* + Copyright (C) 2020-2021 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/content.h" +#include "lib/content_factory.h" +#include "lib/dcpomatic_time.h" +#include "lib/film.h" +#include "lib/player.h" +#include "lib/video_content.h" +#include "test.h" +#include <dcp/cpl.h> +#include <dcp/dcp.h> +#include <dcp/j2k_transcode.h> +#include <dcp/mono_picture_asset.h> +#include <dcp/mono_picture_frame.h> +#include <dcp/openjpeg_image.h> +#include <dcp/reel.h> +#include <dcp/reel_mono_picture_asset.h> +#include <boost/shared_ptr.hpp> +#include <boost/test/unit_test.hpp> + + +using std::dynamic_pointer_cast; +using std::make_shared; +using std::shared_ptr; + + +BOOST_AUTO_TEST_CASE (overlap_video_test1) +{ + auto film = new_test_film2 ("overlap_video_test1"); + film->set_sequence (false); + auto A = content_factory("test/data/flat_red.png").front(); + film->examine_and_add_content (A); + auto B = content_factory("test/data/flat_green.png").front(); + film->examine_and_add_content (B); + BOOST_REQUIRE (!wait_for_jobs()); + + A->video->set_length (72); + B->video->set_length (24); + B->set_position (film, dcpomatic::DCPTime::from_seconds(1)); + + auto player = make_shared<Player>(film); + auto pieces = player->_pieces; + BOOST_REQUIRE_EQUAL (pieces.size(), 2U); + BOOST_CHECK_EQUAL (pieces.front()->content, A); + BOOST_CHECK_EQUAL (pieces.back()->content, B); + BOOST_CHECK (pieces.front()->ignore_video); + BOOST_CHECK (pieces.front()->ignore_video.get() == dcpomatic::DCPTimePeriod(dcpomatic::DCPTime::from_seconds(1), dcpomatic::DCPTime::from_seconds(1) + B->length_after_trim(film))); + + BOOST_CHECK (player->_black.done()); + + film->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs()); + + dcp::DCP back (film->dir(film->dcp_name())); + back.read (); + BOOST_REQUIRE_EQUAL (back.cpls().size(), 1U); + auto cpl = back.cpls()[0]; + BOOST_REQUIRE_EQUAL (cpl->reels().size(), 1U); + auto reel = cpl->reels()[0]; + BOOST_REQUIRE (reel->main_picture()); + auto mono_picture = dynamic_pointer_cast<dcp::ReelMonoPictureAsset>(reel->main_picture()); + BOOST_REQUIRE (mono_picture); + auto asset = mono_picture->mono_asset(); + BOOST_REQUIRE (asset); + BOOST_CHECK_EQUAL (asset->intrinsic_duration(), 72); + auto reader = asset->start_read (); + + for (int i = 0; i < 24; ++i) { + auto frame = reader->get_frame (i); + auto image = dcp::decompress_j2k(*frame.get(), 0); + BOOST_CHECK_EQUAL (image->data(0)[0], 2808); + BOOST_CHECK_EQUAL (image->data(1)[0], 2176); + BOOST_CHECK_EQUAL (image->data(2)[0], 865); + } + + for (int i = 24; i < 48; ++i) { + auto frame = reader->get_frame (i); + auto image = dcp::decompress_j2k(*frame.get(), 0); + BOOST_CHECK_EQUAL (image->data(0)[0], 2657); + BOOST_CHECK_EQUAL (image->data(1)[0], 3470); + BOOST_CHECK_EQUAL (image->data(2)[0], 1742); + } + + for (int i = 48; i < 72; ++i) { + auto frame = reader->get_frame (i); + auto image = dcp::decompress_j2k(*frame.get(), 0); + BOOST_CHECK_EQUAL (image->data(0)[0], 2808); + BOOST_CHECK_EQUAL (image->data(1)[0], 2176); + BOOST_CHECK_EQUAL (image->data(2)[0], 865); + } +} + diff --git a/test/wscript b/test/wscript index 70aad81a3..cbe2c176c 100644 --- a/test/wscript +++ b/test/wscript @@ -98,6 +98,7 @@ def build(bld): markers_test.cc no_use_video_test.cc optimise_stills_test.cc + overlap_video_test.cc pixel_formats_test.cc player_test.cc pulldown_detect_test.cc |
