X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=test%2Fburnt_subtitle_test.cc;h=e01e1e3d180e9dd96a74231f97116f87155ce44f;hp=d10d1ed25239e54dac342c0bce6bcef40d0a94d6;hb=c1f98c84cdf3829b31929453b8a89fdcbdcd0c42;hpb=391d85619ac19a2a93696ddc35c222eb9bb5d9d6 diff --git a/test/burnt_subtitle_test.cc b/test/burnt_subtitle_test.cc index d10d1ed25..e01e1e3d1 100644 --- a/test/burnt_subtitle_test.cc +++ b/test/burnt_subtitle_test.cc @@ -1,36 +1,56 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-2016 Carl Hetherington - This program is free software; you can redistribute it and/or modify + 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. - This program is distributed in the hope that it will be useful, + 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 this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ /** @file test/burnt_subtitle_test.cc * @brief Test the burning of subtitles into the DCP. + * @ingroup specific */ -#include -#include "lib/subrip_content.h" -#include "lib/dcp_subtitle_content.h" +#include "lib/plain_text_content.h" +#include "lib/dcp_text_content.h" #include "lib/film.h" #include "lib/ratio.h" #include "lib/dcp_content_type.h" +#include "lib/text_content.h" +#include "lib/dcp_content.h" +#include "lib/content_factory.h" +#include "lib/config.h" +#include "lib/log_entry.h" #include "test.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include using std::cout; +using std::map; using boost::shared_ptr; +using boost::dynamic_pointer_cast; /** Build a small DCP with no picture and a single subtitle overlaid onto it from a SubRip file */ BOOST_AUTO_TEST_CASE (burnt_subtitle_test_subrip) @@ -39,9 +59,9 @@ BOOST_AUTO_TEST_CASE (burnt_subtitle_test_subrip) film->set_container (Ratio::from_id ("185")); film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); film->set_name ("frobozz"); - film->set_burn_subtitles (true); - shared_ptr content (new SubRipContent (film, "test/data/subrip2.srt")); - content->set_use_subtitles (true); + shared_ptr content (new PlainText (film, "test/data/subrip2.srt")); + content->subtitle->set_use (true); + content->subtitle->set_burn (true); film->examine_and_add_content (content); wait_for_jobs (); film->make_dcp (); @@ -57,9 +77,8 @@ BOOST_AUTO_TEST_CASE (burnt_subtitle_test_dcp) film->set_container (Ratio::from_id ("185")); film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); film->set_name ("frobozz"); - film->set_burn_subtitles (true); - shared_ptr<DCPSubtitleContent> content (new DCPSubtitleContent (film, "test/data/dcp_sub.xml")); - content->set_use_subtitles (true); + shared_ptr<DCPTextContent> content (new DCPTextContent (film, "test/data/dcp_sub.xml")); + content->subtitle->set_use (true); film->examine_and_add_content (content); wait_for_jobs (); film->make_dcp (); @@ -67,3 +86,53 @@ BOOST_AUTO_TEST_CASE (burnt_subtitle_test_dcp) check_dcp ("test/data/burnt_subtitle_test_dcp", film->dir (film->dcp_name ())); } + +/** Burn some subtitles into an existing DCP to check the colour conversion */ +BOOST_AUTO_TEST_CASE (burnt_subtitle_test_onto_dcp) +{ + shared_ptr<Film> film = new_test_film ("burnt_subtitle_test_onto_dcp"); + film->set_container (Ratio::from_id ("185")); + film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); + film->set_name ("frobozz"); + film->examine_and_add_content (content_factory(film, "test/data/flat_black.png").front()); + BOOST_REQUIRE (!wait_for_jobs()); + film->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs()); + + Config::instance()->set_log_types (Config::instance()->log_types() | LogEntry::TYPE_DEBUG_ENCODE); + shared_ptr<Film> film2 = new_test_film ("burnt_subtitle_test_onto_dcp2"); + film2->set_container (Ratio::from_id ("185")); + film2->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); + film2->set_name ("frobozz"); + shared_ptr<DCPContent> background_dcp (new DCPContent(film2, film->dir(film->dcp_name()))); + film2->examine_and_add_content (background_dcp); + shared_ptr<PlainText> sub = dynamic_pointer_cast<PlainText> ( + content_factory(film2, "test/data/subrip2.srt").front() + ); + sub->subtitle->set_burn (true); + sub->subtitle->set_outline (true); + film2->examine_and_add_content (sub); + BOOST_REQUIRE (!wait_for_jobs()); + film2->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs()); + + BOOST_CHECK (background_dcp->position() == DCPTime()); + BOOST_CHECK (sub->position() == DCPTime()); + + dcp::DCP dcp (film2->dir (film2->dcp_name ())); + dcp.read (); + BOOST_REQUIRE_EQUAL (dcp.cpls().size(), 1); + BOOST_REQUIRE_EQUAL (dcp.cpls().front()->reels().size(), 1); + BOOST_REQUIRE (dcp.cpls().front()->reels().front()->main_picture()); + BOOST_REQUIRE (dcp.cpls().front()->reels().front()->main_picture()->asset()); + shared_ptr<const dcp::MonoPictureAsset> pic = dynamic_pointer_cast<dcp::ReelMonoPictureAsset> ( + dcp.cpls().front()->reels().front()->main_picture() + )->mono_asset(); + BOOST_REQUIRE (pic); + shared_ptr<const dcp::MonoPictureFrame> frame = pic->start_read()->get_frame (12); + shared_ptr<dcp::OpenJPEGImage> xyz = frame->xyz_image (); + BOOST_CHECK_EQUAL (xyz->size().width, 1998); + BOOST_CHECK_EQUAL (xyz->size().height, 1080); + + check_dcp ("test/data/burnt_subtitle_test_onto_dcp", film->dir(film->dcp_name())); +}