X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fsrt_subtitle_test.cc;h=2b7cb340a3aa9aea600b864c1daa1c689752f18c;hb=a49d1f0a2db7d84ad0d158bf1f6d384ff14ab6a3;hp=123d04d95778ed388b3c929be674500e56885973;hpb=a8a0dfd1b21de6c0facf965ab119833ff6f790bf;p=dcpomatic.git diff --git a/test/srt_subtitle_test.cc b/test/srt_subtitle_test.cc index 123d04d95..2b7cb340a 100644 --- a/test/srt_subtitle_test.cc +++ b/test/srt_subtitle_test.cc @@ -20,6 +20,7 @@ /** @file test/srt_subtitle_test.cc * @brief Test writing DCPs with subtitles from .srt. + * @ingroup specific */ #include "lib/film.h" @@ -44,6 +45,8 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test) film->set_container (Ratio::from_id ("185")); film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); film->set_name ("frobozz"); + film->set_audio_channels (6); + film->set_interop (false); shared_ptr content (new TextSubtitleContent (film, "test/data/subrip2.srt")); film->examine_and_add_content (content); wait_for_jobs (); @@ -64,6 +67,8 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test2) film->set_container (Ratio::from_id ("185")); film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); film->set_name ("frobozz"); + film->set_audio_channels (6); + film->set_interop (false); shared_ptr content (new TextSubtitleContent (film, "test/data/subrip2.srt")); film->examine_and_add_content (content); wait_for_jobs (); @@ -80,6 +85,31 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test2) check_dcp ("test/data/srt_subtitle_test2", film->dir (film->dcp_name ())); } +static void +check_subtitle_file (shared_ptr film, boost::filesystem::path ref) +{ + /* Find the subtitle file and check it */ + for ( + boost::filesystem::directory_iterator i = boost::filesystem::directory_iterator (film->directory().get() / film->dcp_name (false)); + i != boost::filesystem::directory_iterator (); + ++i) { + + if (boost::filesystem::is_directory (i->path ())) { + for ( + boost::filesystem::directory_iterator j = boost::filesystem::directory_iterator (i->path ()); + j != boost::filesystem::directory_iterator (); + ++j) { + + if (boost::algorithm::starts_with (j->path().leaf().string(), "sub_")) { + list ignore; + ignore.push_back ("SubtitleID"); + check_xml (*j, ref, ignore); + } + } + } + } +} + /** Make another DCP with a longer .srt file */ BOOST_AUTO_TEST_CASE (srt_subtitle_test3) { @@ -89,7 +119,9 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test3) film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); film->set_name ("frobozz"); film->set_interop (true); - shared_ptr content (new TextSubtitleContent (film, private_data / "Ankoemmling.srt")); + film->set_audio_channels (6); + film->set_interop (false); + shared_ptr content (new TextSubtitleContent (film, private_data / "Ankoemmling_short.srt")); film->examine_and_add_content (content); wait_for_jobs (); @@ -99,26 +131,66 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test3) film->make_dcp (); wait_for_jobs (); - /* Find the subtitle file and check it */ - for ( - boost::filesystem::directory_iterator i = boost::filesystem::directory_iterator (film->directory() / film->dcp_name (false)); - i != boost::filesystem::directory_iterator (); - ++i) { + check_subtitle_file (film, private_data / "Ankoemmling_short.xml"); +} - if (boost::filesystem::is_directory (i->path ())) { - for ( - boost::filesystem::directory_iterator j = boost::filesystem::directory_iterator (i->path ()); - j != boost::filesystem::directory_iterator (); - ++j) { +/** Build a small DCP with no picture and a single subtitle overlaid onto it */ +BOOST_AUTO_TEST_CASE (srt_subtitle_test4) +{ + shared_ptr film = new_test_film ("srt_subtitle_test4"); + film->set_container (Ratio::from_id ("185")); + film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); + film->set_name ("frobozz"); + film->set_interop (false); + shared_ptr content (new TextSubtitleContent (film, "test/data/subrip2.srt")); + content->subtitle->set_use (true); + content->subtitle->set_burn (false); + film->examine_and_add_content (content); + wait_for_jobs (); + film->make_dcp (); + wait_for_jobs (); - if (boost::algorithm::starts_with (j->path().leaf().string(), "sub_")) { - list ignore; - ignore.push_back ("SubtitleID"); - check_xml (*j, private_data / "Ankoemmling.xml", ignore); - } - } - } - } + /* Should be blank video with MXF subtitles */ + check_dcp ("test/data/xml_subtitle_test", film->dir (film->dcp_name ())); +} + +/** Check the subtitle XML when there are two subtitle files in the project */ +BOOST_AUTO_TEST_CASE (srt_subtitle_test5) +{ + shared_ptr film = new_test_film ("srt_subtitle_test5"); + film->set_container (Ratio::from_id ("185")); + film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); + film->set_name ("frobozz"); + film->set_interop (true); + film->set_sequence (false); + shared_ptr content (new TextSubtitleContent (film, "test/data/subrip2.srt")); + content->subtitle->set_use (true); + content->subtitle->set_burn (false); + film->examine_and_add_content (content); + film->examine_and_add_content (content); + wait_for_jobs (); + content->set_position (DCPTime (0)); + film->make_dcp (); + wait_for_jobs (); + film->write_metadata (); + + check_dcp ("test/data/xml_subtitle_test2", film->dir (film->dcp_name ())); +} + +BOOST_AUTO_TEST_CASE (srt_subtitle_test6) +{ + shared_ptr film = new_test_film2 ("srt_subtitle_test6"); + film->set_interop (true); + shared_ptr content (new TextSubtitleContent (film, "test/data/frames.srt")); + content->subtitle->set_use (true); + content->subtitle->set_burn (false); + film->examine_and_add_content (content); + BOOST_REQUIRE (!wait_for_jobs ()); + film->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs ()); + film->write_metadata (); + + check_dcp ("test/data/srt_subtitle_test6", film->dir(film->dcp_name())); } #if 0