Inspect most DCPs made during tests with ClairMeta (#76).
authorCarl Hetherington <cth@carlh.net>
Fri, 12 Jan 2024 14:29:12 +0000 (15:29 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 15 Jan 2024 11:44:53 +0000 (12:44 +0100)
26 files changed:
run/tests
test/2536_regression_test.cc
test/closed_caption_test.cc
test/data
test/dcp_subtitle_test.cc
test/empty_caption_test.cc
test/file_extension_test.cc
test/j2k_bandwidth_test.cc
test/map_cli_test.cc
test/recover_test.cc
test/reel_writer_test.cc
test/reels_test.cc
test/remake_video_test.cc
test/silence_padding_test.cc
test/srt_subtitle_test.cc
test/ssa_subtitle_test.cc
test/subtitle_font_id_change_test.cc
test/subtitle_font_id_test.cc
test/subtitle_language_test.cc
test/subtitle_position_test.cc
test/subtitle_reel_number_test.cc
test/subtitle_reel_test.cc
test/subtitle_timing_test.cc
test/test.cc
test/test.h
test/threed_test.cc

index 7f8126fa306cf954c97c4d0e2b1b177ecfa40f62..12d59346d9a7020fc55654dd5ea0043b44e2a5aa 100755 (executable)
--- a/run/tests
+++ b/run/tests
@@ -3,7 +3,7 @@
 # e.g. --run_tests=foo
 set -e
 
-PRIVATE_GIT="b6277c54428e0abe2003c27868fe8f02119ef869"
+PRIVATE_GIT="59b62615a48a1f3a70e9c028b92dfba75c1719ba"
 
 if [ "$1" == "--check" ]; then
        shift 1
@@ -23,6 +23,12 @@ if [ "$(uname)" == "Linux" ]; then
   if [ -f /src/backports/dcp_inspect ]; then
     export DCPOMATIC_DCP_INSPECT=/src/backports/dcp_inspect
   fi
+  set +e
+  python3 -m clairmeta.cli --help > /dev/null 2>&1
+  if [ "$?" == "0" ]; then
+    export DCPOMATIC_CLAIRMETA=1
+  fi
+  set -e
 fi
 
 if [ "$(uname)" == "Darwin" ]; then
index 5d2bc3bbb14fdea69a1b35d79bb4f3e6749b4bee..7233839aeca0051aa906e3fa01eef7aefada0c0a 100644 (file)
@@ -53,6 +53,7 @@ BOOST_AUTO_TEST_CASE(crash_rendering_vf_interop_subs_test)
        vf->set_reel_type(ReelType::BY_VIDEO_CONTENT);
        ov_dcp->set_reference_video(true);
        ov_dcp->set_reference_audio(true);
+       subtitles[0]->text[0]->set_language(dcp::LanguageTag("de"));
 
        make_and_verify_dcp(
                vf,
index 80effc9a0c0c99e0652eca18c2fea378aa246ba0..313e2a8d3f68e6198d65d5dae8fac14666ffb195 100644 (file)
@@ -90,7 +90,12 @@ BOOST_AUTO_TEST_CASE (closed_caption_test2)
                        dcp::VerificationNote::Code::INVALID_CLOSED_CAPTION_LINE_LENGTH,
                        dcp::VerificationNote::Code::MISSING_CPL_METADATA,
                        dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME,
-               }
+               },
+               true,
+               /* Clairmeta gives an error about having duplicate ClosedCaption entries,
+                * which seems wrong.
+                */
+               false
                );
 
        dcp::DCP check (film->dir(film->dcp_name()));
index 314e09cbac2e023a7acb61e1b32db76fe6dd775e..a81d5737e54105f95d3d0cbf602dd355b8814244 160000 (submodule)
--- a/test/data
+++ b/test/data
@@ -1 +1 @@
-Subproject commit 314e09cbac2e023a7acb61e1b32db76fe6dd775e
+Subproject commit a81d5737e54105f95d3d0cbf602dd355b8814244
index 4928d92c1883c634c150258995fdd42e3a944d93..837362e84127e6e6abd2009aa89506620edecfb9 100644 (file)
@@ -161,6 +161,7 @@ BOOST_AUTO_TEST_CASE (dcp_subtitle_test3)
        film->set_interop (true);
        auto content = make_shared<DCPSubtitleContent>("test/data/dcp_sub3.xml");
        film->examine_and_add_content (content);
+       content->only_text()->set_language(dcp::LanguageTag("de"));
        BOOST_REQUIRE (!wait_for_jobs ());
 
        make_and_verify_dcp (film, { dcp::VerificationNote::Code::INVALID_STANDARD });
@@ -196,6 +197,8 @@ BOOST_AUTO_TEST_CASE (dcp_subtitle_test4)
 
        content->only_text()->add_font(make_shared<Font>("font1"));
        content2->only_text()->add_font(make_shared<Font>("font2"));
+       content->only_text()->set_language(dcp::LanguageTag("de"));
+       content2->only_text()->set_language(dcp::LanguageTag("de"));
 
        make_and_verify_dcp (film, { dcp::VerificationNote::Code::INVALID_STANDARD });
 
@@ -226,6 +229,7 @@ BOOST_AUTO_TEST_CASE (dcp_subtitle_test5)
        auto content = make_shared<DCPSubtitleContent>("test/data/dcp_sub6.xml");
        auto film = new_test_film2 ("dcp_subtitle_test5", {content});
        film->set_interop (true);
+       content->only_text()->set_language(dcp::LanguageTag("de"));
 
        make_and_verify_dcp (film, { dcp::VerificationNote::Code::INVALID_STANDARD });
 
@@ -244,6 +248,7 @@ BOOST_AUTO_TEST_CASE (test_font_override)
        auto content = make_shared<DCPSubtitleContent>("test/data/dcp_sub4.xml");
        auto film = new_test_film2("test_font_override", {content});
        film->set_interop(true);
+       content->only_text()->set_language(dcp::LanguageTag("de"));
 
        BOOST_REQUIRE_EQUAL(content->text.size(), 1U);
        auto font = content->text.front()->get_font("0_theFontId");
index 3673cce5d28ef6a3b1a6e96e5d95aa9027e73388..3138c4af2dd20d33cc214e66ad5b0d2b32fc4759 100644 (file)
@@ -35,7 +35,7 @@ BOOST_AUTO_TEST_CASE (check_for_no_empty_text_nodes_in_failure_case)
        auto film = new_test_film2("check_for_no_empty_text_nodes_in_failure_case", content, &cl);
        auto text = content[0]->text.front();
        text->set_type (TextType::CLOSED_CAPTION);
-       text->set_dcp_track({"English", dcp::LanguageTag("en-GB")});
+       text->set_dcp_track({"English", dcp::LanguageTag("en")});
 
        make_and_verify_dcp (film, {
                        dcp::VerificationNote::Code::MISSING_CPL_METADATA
index 676dc10ca87178ad30ad5be104300034d2282bb4..87b55114a95db95649bb626fab89e5962ff74798 100644 (file)
 */
 
 
+#include "lib/content.h"
 #include "lib/content_factory.h"
 #include "lib/film.h"
+#include "lib/text_content.h"
 #include "test.h"
 #include <boost/test/unit_test.hpp>
 
@@ -36,6 +38,7 @@ BOOST_AUTO_TEST_CASE (interop_file_extension_test)
        auto sub = content_factory("test/data/15s.srt")[0];
        auto film = new_test_film2("interop_file_extension_test", { video, audio, sub });
        film->set_interop(true);
+       sub->only_text()->set_language(dcp::LanguageTag("de"));
 
        make_and_verify_dcp(
                film, {
index 03163d8ea7cbb487eecc5fbff1ae9dc1ced55a30..f9e47c4b97d1f0b97de2248a5cc48cfedfd68ac0 100644 (file)
@@ -61,6 +61,7 @@ check (int target_bits_per_second)
                        dcp::VerificationNote::Code::INVALID_PICTURE_FRAME_SIZE_IN_BYTES,
                        dcp::VerificationNote::Code::INVALID_JPEG2000_TILE_PART_SIZE,
                },
+               target_bits_per_second <= 250000000,
                target_bits_per_second <= 250000000
                );
 
index ca75ed5207681a7720fa601b3162f391b5543141..ed2a7e5ec5aad4ede1d3dba538abe39646bab74c 100644 (file)
@@ -223,6 +223,7 @@ BOOST_AUTO_TEST_CASE(map_simple_interop_dcp_with_subs)
        auto subs = content_factory("test/data/15s.srt").front();
        auto film = new_test_film2(name + "_in", { picture, subs });
        film->set_interop(true);
+       subs->only_text()->set_language(dcp::LanguageTag("de"));
        make_and_verify_dcp(film, {dcp::VerificationNote::Code::INVALID_STANDARD});
 
        vector<string> const args = {
@@ -410,6 +411,7 @@ test_two_cpls_each_with_subs(string name, bool interop)
                auto subs = content_factory("test/data/15s.srt").front();
                films[i] = new_test_film2(String::compose("%1_%2_in", name, i), { picture, subs });
                films[i]->set_interop(interop);
+               subs->only_text()->set_language(dcp::LanguageTag("de"));
                make_and_verify_dcp(films[i], acceptable_errors);
        }
 
@@ -582,6 +584,7 @@ BOOST_AUTO_TEST_CASE(map_handles_interop_png_subs)
        film->set_interop(true);
        arrietty->set_trim_end(dcpomatic::ContentTime::from_seconds(110));
        arrietty->text[0]->set_use(true);
+       arrietty->text[0]->set_language(dcp::LanguageTag("de"));
        make_and_verify_dcp(
                film,
                {
index 728d989416f3a4fbaa1d9b582000eb6def1b384c..63c611831ea69b98fbc273a3f1ed55f55e966349 100644 (file)
@@ -83,7 +83,16 @@ BOOST_AUTO_TEST_CASE (recover_test_2d)
 
        boost::filesystem::resize_file (video, 2 * 1024 * 1024);
 
-       make_and_verify_dcp (film, { dcp::VerificationNote::Code::MISSING_FFEC_IN_FEATURE, dcp::VerificationNote::Code::MISSING_FFMC_IN_FEATURE });
+       make_and_verify_dcp(
+               film,
+               {
+                       dcp::VerificationNote::Code::MISSING_FFEC_IN_FEATURE,
+                       dcp::VerificationNote::Code::MISSING_FFMC_IN_FEATURE
+               },
+               true,
+               /* We end up with two CPLs in this directory, which Clairmeta gives an error for */
+               false
+               );
 
        auto A = make_shared<dcp::MonoPictureAsset>("build/test/recover_test_2d/original.mxf");
        auto B = make_shared<dcp::MonoPictureAsset>(video);
@@ -118,7 +127,15 @@ BOOST_AUTO_TEST_CASE (recover_test_3d, * boost::unit_test::depends_on("recover_t
 
        boost::filesystem::resize_file (video, 2 * 1024 * 1024);
 
-       make_and_verify_dcp (film, { dcp::VerificationNote::Code::MISSING_FFEC_IN_FEATURE, dcp::VerificationNote::Code::MISSING_FFMC_IN_FEATURE });
+       make_and_verify_dcp(
+               film,
+               {
+                       dcp::VerificationNote::Code::MISSING_FFEC_IN_FEATURE, dcp::VerificationNote::Code::MISSING_FFMC_IN_FEATURE
+               },
+               true,
+               /* We end up with two CPLs in this directory, which Clairmeta gives an error for */
+               false
+               );
 
        auto A = make_shared<dcp::StereoPictureAsset>("build/test/recover_test_3d/original.mxf");
        auto B = make_shared<dcp::StereoPictureAsset>(video);
@@ -154,7 +171,15 @@ BOOST_AUTO_TEST_CASE (recover_test_2d_encrypted, * boost::unit_test::depends_on(
 
        boost::filesystem::resize_file (video, 2 * 1024 * 1024);
 
-       make_and_verify_dcp (film, { dcp::VerificationNote::Code::MISSING_FFEC_IN_FEATURE, dcp::VerificationNote::Code::MISSING_FFMC_IN_FEATURE });
+       make_and_verify_dcp(
+               film,
+               {
+                       dcp::VerificationNote::Code::MISSING_FFEC_IN_FEATURE, dcp::VerificationNote::Code::MISSING_FFMC_IN_FEATURE
+               },
+               true,
+               /* We end up with two CPLs in this directory, which Clairmeta gives an error for */
+               false
+               );
 
        auto A = make_shared<dcp::MonoPictureAsset>("build/test/recover_test_2d_encrypted/original.mxf");
        A->set_key (film->key ());
index e4e7c6c4288b405ed66979199e31e079b25c839a..ec246989804a4fa08901c7738cbaa98669d5829a 100644 (file)
@@ -126,7 +126,8 @@ BOOST_AUTO_TEST_CASE (reel_reuse_video_test)
 
        /* Change the audio and re-make */
        audio->audio->set_gain (-3);
-       make_and_verify_dcp (film);
+       /* >1 CPLs in the DCP raises an error in ClairMeta */
+       make_and_verify_dcp(film, {}, true, false);
 
        /* Video ID should be the same, sound different */
        dcp::DCP dcp2 (film->dir(film->dcp_name()));
@@ -140,7 +141,8 @@ BOOST_AUTO_TEST_CASE (reel_reuse_video_test)
 
        /* Crop video and re-make */
        video->video->set_left_crop (5);
-       make_and_verify_dcp (film);
+       /* >1 CPLs in the DCP raises an error in ClairMeta */
+       make_and_verify_dcp(film, {}, true, false);
 
        /* Video and sound IDs should be different */
        dcp::DCP dcp3 (film->dir(film->dcp_name()));
index fe209a4fe93318b7a59bccf77adc43c60db3df8a..d4a783f91a72a30acd2e08b5ec8385f2d4d5995e 100644 (file)
@@ -306,14 +306,16 @@ BOOST_AUTO_TEST_CASE (reels_test6)
        film->set_reel_type (ReelType::BY_LENGTH);
        /* This is just over 2.5s at 100Mbit/s; should correspond to 60 frames */
        film->set_reel_length (31253154);
-       /* dcp_inspect gives error about reel <1s in length */
+       /* dcp_inspect and clairmeta both give errors about reel <1s in length */
        make_and_verify_dcp (
                film,
                {
                        dcp::VerificationNote::Code::INVALID_INTRINSIC_DURATION,
                        dcp::VerificationNote::Code::INVALID_DURATION,
                },
-               false);
+               false,
+               false
+               );
 }
 
 
index b99f4380ecaa0d7c5644ea0c67b47c703efbe339..a076598446e2cd434db350b0e7de9341229c20a6 100644 (file)
@@ -49,7 +49,8 @@ BOOST_AUTO_TEST_CASE(remake_video_after_yub_rgb_matrix_changed)
        content->video->set_colour_conversion(*conversion);
 
        auto calculate_picture_hashes = [](shared_ptr<Film> film) {
-               make_and_verify_dcp(film);
+               /* >1 CPLs in the DCP raises an error in ClairMeta */
+               make_and_verify_dcp(film, {}, true, false);
                dcp::DCP dcp(film->dir(film->dcp_name()));
                dcp.read();
                BOOST_REQUIRE(!dcp.cpls().empty());
index a4a5dacc645e94187519a39b212b77781cb4daf6..86db117c6c734b10fbaaad447b94b3212dd310f2 100644 (file)
@@ -66,7 +66,9 @@ test_silence_padding(int channels, dcp::Standard standard)
        if (standard == dcp::Standard::INTEROP) {
                codes.push_back(dcp::VerificationNote::Code::INVALID_STANDARD);
        }
-       make_and_verify_dcp(film, codes, channels == 2 || channels == 6 || channels >= 8);
+       auto const dcp_inspect = channels == 2 || channels == 6 || channels >= 8;
+       auto const clairmeta = (channels % 2) == 0;
+       make_and_verify_dcp(film, codes, dcp_inspect, clairmeta);
 
        boost::filesystem::path path = "build/test";
        path /= film_name;
index 0ee9cb197a3f3a38c24aa0ef89b702e79523331f..bac0bedeccb7b31cd72054c21508f9d703458e30 100644 (file)
@@ -100,7 +100,11 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test2)
                        dcp::VerificationNote::Code::MISSING_SUBTITLE_LANGUAGE,
                        dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME,
                        dcp::VerificationNote::Code::MISSING_CPL_METADATA
-               });
+               },
+               true,
+               /* ClairMeta tries to inspect the font file and fails because it isn't one */
+               false
+               );
 
        /* Should be blank video with a subtitle MXF; sound is irrelevant */
        check_dcp("test/data/srt_subtitle_test2", film->dir(film->dcp_name()), true);
@@ -129,6 +133,7 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test3)
 
        content->only_text()->set_use (true);
        content->only_text()->set_burn (false);
+       content->only_text()->set_language(dcp::LanguageTag("de"));
 
        make_and_verify_dcp (film, {dcp::VerificationNote::Code::INVALID_STANDARD});
 
@@ -178,6 +183,7 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test5)
                auto content = make_shared<StringTextFileContent>("test/data/subrip2.srt");
                content->only_text()->set_use (true);
                content->only_text()->set_burn (false);
+               content->only_text()->set_language(dcp::LanguageTag("de"));
                film->examine_and_add_content (content);
                BOOST_REQUIRE (!wait_for_jobs());
                content->set_position (film, DCPTime());
index 2d8102a071c16559b92666864036650ca1ffde34..2565fc03562b6337c33dd485cdd2aedf699f354d 100644 (file)
@@ -59,6 +59,7 @@ BOOST_AUTO_TEST_CASE (ssa_subtitle_test1)
 
        content->only_text()->set_use (true);
        content->only_text()->set_burn (false);
+       content->only_text()->set_language(dcp::LanguageTag("de"));
 
        make_and_verify_dcp (film, { dcp::VerificationNote::Code::INVALID_STANDARD });
 
index 37880382833e8cffbb7aeb6bfdc2cb0ea260b910..385dd1aae82564c43358be438f78a8ef77a12285 100644 (file)
@@ -50,6 +50,7 @@ BOOST_AUTO_TEST_CASE(subtitle_font_id_change_test1)
        BOOST_REQUIRE_EQUAL(content[0]->text.size(), 1U);
 
        content[0]->set_paths({"test/data/short.srt"});
+       content[0]->only_text()->set_language(dcp::LanguageTag("de"));
 
        CheckContentJob check(film);
        check.run();
@@ -108,6 +109,7 @@ BOOST_AUTO_TEST_CASE(subtitle_font_id_change_test3)
        BOOST_REQUIRE_EQUAL(content[0]->text.size(), 1U);
 
        content[0]->set_paths({"test/data/fonts.ass"});
+       content[0]->only_text()->set_language(dcp::LanguageTag("de"));
 
        CheckContentJob check(film);
        check.run();
index 56207bfcbc28e1818570fe38f2fa0e1580db7965..9575868a1f115b35d5ecd7d4e2f8b25eb2e2479e 100644 (file)
@@ -106,7 +106,7 @@ BOOST_AUTO_TEST_CASE(make_dcp_with_subs_from_mkv)
        auto subs = content_factory(TestPaths::private_data() / "clapperboard_with_subs.mkv");
        auto film = new_test_film2("make_dcp_with_subs_from_mkv", subs);
        subs[0]->text.front()->set_use(true);
-       subs[0]->text.front()->set_language(dcp::LanguageTag("en-US"));
+       subs[0]->text.front()->set_language(dcp::LanguageTag("en"));
        make_and_verify_dcp(film, { dcp::VerificationNote::Code::INVALID_PICTURE_FRAME_RATE_FOR_2K });
 }
 
@@ -116,6 +116,7 @@ BOOST_AUTO_TEST_CASE(make_dcp_with_subs_without_font_tag)
        auto subs = content_factory("test/data/no_font.xml");
        auto film = new_test_film2("make_dcp_with_subs_without_font_tag", { subs });
        subs[0]->text.front()->set_use(true);
+       subs[0]->text.front()->set_language(dcp::LanguageTag("de"));
        make_and_verify_dcp(
                film,
                {
@@ -139,6 +140,7 @@ BOOST_AUTO_TEST_CASE(make_dcp_with_subs_in_dcp_without_font_tag)
        auto source_subs = content_factory("test/data/short.srt");
        auto source = new_test_film2("make_dcp_with_subs_in_dcp_without_font_tag_source", { source_subs });
        source->set_interop(true);
+       source_subs[0]->only_text()->set_language(dcp::LanguageTag("de"));
        make_and_verify_dcp(
                source,
                {
index cd4f6f4ca70847dbdf2e42219fb3a9894e69a033..6ae0647e9ebfd5328f922beda71efc6ea1527046 100644 (file)
@@ -44,7 +44,7 @@ BOOST_AUTO_TEST_CASE (subtitle_language_interop_test)
        auto fr = content_factory("test/data/frames.srt");
        auto film = new_test_film2 (name, fr);
 
-       fr[0]->only_text()->set_language (dcp::LanguageTag("fr-FR"));
+       fr[0]->only_text()->set_language(dcp::LanguageTag("fr"));
        film->set_interop (true);
        film->set_audio_channels(6);
 
@@ -54,9 +54,13 @@ BOOST_AUTO_TEST_CASE (subtitle_language_interop_test)
                        dcp::VerificationNote::Code::INVALID_STANDARD,
                        dcp::VerificationNote::Code::INVALID_SUBTITLE_SPACING,
                        dcp::VerificationNote::Code::INVALID_SUBTITLE_DURATION
-               });
+               },
+               false,
+               /* clairmeta raises errors about subtitle spacing/duration */
+               false
+               );
 
-       check_dcp (String::compose("test/data/%1", name), String::compose("build/test/%1/%2", name, film->dcp_name()));
+       check_dcp(String::compose("test/data/%1", name), String::compose("build/test/%1/%2", name, film->dcp_name()));
 }
 
 
@@ -66,7 +70,7 @@ BOOST_AUTO_TEST_CASE (subtitle_language_smpte_test)
        auto fr = content_factory("test/data/frames.srt");
        auto film = new_test_film2 (name, fr);
 
-       fr[0]->only_text()->set_language (dcp::LanguageTag("fr-FR"));
+       fr[0]->only_text()->set_language(dcp::LanguageTag("fr"));
        film->set_interop (false);
 
        make_and_verify_dcp (
@@ -95,7 +99,7 @@ BOOST_AUTO_TEST_CASE(subtitle_language_in_cpl_test)
        auto film = new_test_film2(boost::unit_test::framework::current_test_unit().full_name(), { subs, video1, video2 });
        video2->set_position(film, dcpomatic::DCPTime::from_seconds(5));
        film->set_reel_type(ReelType::BY_VIDEO_CONTENT);
-       subs->only_text()->set_language(dcp::LanguageTag("fr-FR"));
+       subs->only_text()->set_language(dcp::LanguageTag("fr"));
 
        make_and_verify_dcp(
                film,
index 94a06b7f82ea2c1dbc6ab924c771f374ed2fd833..d9dd0c61a7ee33df1f17649660e05a470f439250 100644 (file)
@@ -42,6 +42,7 @@ BOOST_AUTO_TEST_CASE(srt_correctly_placed_in_interop)
        string const name = "srt_in_interop_position_test";
        auto fr = content_factory("test/data/short.srt");
        auto film = new_test_film2(name, fr);
+       fr[0]->only_text()->set_language(dcp::LanguageTag("de"));
 
        film->set_interop(true);
 
@@ -70,7 +71,7 @@ BOOST_AUTO_TEST_CASE(srt_correctly_placed_in_smpte)
        auto fr = content_factory("test/data/short.srt");
        auto film = new_test_film2(name, fr);
 
-       fr[0]->text[0]->set_language(dcp::LanguageTag("en-GB"));
+       fr[0]->text[0]->set_language(dcp::LanguageTag("en"));
        film->set_interop(false);
 
        make_and_verify_dcp (
index 743d809ddfd1847842eb437365086d1ede439043..a480575771b0868b3547af6b595b2d5d2cb8d0c8 100644 (file)
@@ -51,6 +51,7 @@ BOOST_AUTO_TEST_CASE (subtitle_reel_number_test)
        BOOST_REQUIRE (!wait_for_jobs ());
        content->only_text()->set_use (true);
        content->only_text()->set_burn (false);
+       content->only_text()->set_language(dcp::LanguageTag("de"));
        film->set_reel_type (ReelType::BY_LENGTH);
        film->set_interop (true);
        film->set_reel_length (1024 * 1024 * 512);
index d7eb90d251eb45382eff78d2c4a78a2a1213a852..147f5c5237d25f2e27ee66c31cfa39f522394c75 100644 (file)
@@ -60,9 +60,11 @@ BOOST_AUTO_TEST_CASE (subtitle_reel_test)
        red_a->set_position (film, dcpomatic::DCPTime());
        red_a->video->set_length (240);
        sub_a->set_position (film, dcpomatic::DCPTime());
+       sub_a->only_text()->set_language(dcp::LanguageTag("de"));
        red_b->set_position (film, dcpomatic::DCPTime::from_seconds(10));
        red_b->video->set_length (240);
        sub_b->set_position (film, dcpomatic::DCPTime::from_seconds(10));
+       sub_b->only_text()->set_language(dcp::LanguageTag("de"));
 
        film->set_reel_type (ReelType::BY_VIDEO_CONTENT);
 
@@ -169,7 +171,11 @@ BOOST_AUTO_TEST_CASE (closed_captions_in_all_reels_test)
                {
                        dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME,
                        dcp::VerificationNote::Code::INVALID_SUBTITLE_SPACING
-               });
+               },
+               true,
+               /* ClairMeta gives an error with multiple ClosedCaption assets */
+               false
+               );
 
        dcp::DCP dcp ("build/test/closed_captions_in_all_reels_test/" + film->dcp_name());
        dcp.read ();
@@ -210,6 +216,7 @@ BOOST_AUTO_TEST_CASE (subtitles_split_at_reel_boundaries)
        auto subtitle = content_factory("test/data/45s.srt")[0];
        film->examine_and_add_content (subtitle);
        BOOST_REQUIRE (!wait_for_jobs());
+       subtitle->only_text()->set_language(dcp::LanguageTag("de"));
 
        make_and_verify_dcp (film, { dcp::VerificationNote::Code::INVALID_STANDARD });
 
index e5a4133adea5e709ae42f70de36be50654c6ddb2..79cc68849499531dfa339e63bfeacd4f16724b9a 100644 (file)
@@ -44,7 +44,7 @@ BOOST_AUTO_TEST_CASE (test_subtitle_timing_with_frame_rate_change)
 
        auto picture = content_factory("test/data/flat_red.png")[0];
        auto sub = content_factory("test/data/hour.srt")[0];
-       sub->text.front()->set_language(dcp::LanguageTag("en-GB"));
+       sub->text.front()->set_language(dcp::LanguageTag("en"));
 
        auto film = new_test_film2(name, { picture, sub }, &cl);
        picture->set_video_frame_rate(film, content_frame_rate);
index 66e638dd5f5fb94321b6ae7dc7b68b3ad4f3d745..fc5d9dc83b9d2263f47eccae4cb8e6d02a928d2f 100644 (file)
@@ -964,9 +964,9 @@ verify_dcp(boost::filesystem::path dir, vector<dcp::VerificationNote::Code> igno
 
 void
 #ifdef  DCPOMATIC_LINUX
-make_and_verify_dcp(shared_ptr<Film> film, vector<dcp::VerificationNote::Code> ignore, bool dcp_inspect)
+make_and_verify_dcp(shared_ptr<Film> film, vector<dcp::VerificationNote::Code> ignore, bool dcp_inspect, bool clairmeta)
 #else
-make_and_verify_dcp(shared_ptr<Film> film, vector<dcp::VerificationNote::Code> ignore, bool)
+make_and_verify_dcp(shared_ptr<Film> film, vector<dcp::VerificationNote::Code> ignore, bool, bool)
 #endif
 {
        film->write_metadata ();
@@ -1002,6 +1002,12 @@ make_and_verify_dcp(shared_ptr<Film> film, vector<dcp::VerificationNote::Code> i
                auto result = system(cmd.c_str());
                BOOST_CHECK_EQUAL(WEXITSTATUS(result), 0);
        }
+
+       if (clairmeta && getenv("DCPOMATIC_CLAIRMETA")) {
+               auto cmd = String::compose("python3 -m clairmeta.cli check -type dcp %1 > %2 2>&1", film->dir(film->dcp_name()), film->file("clairmeta.log"));
+               auto result = system(cmd.c_str());
+               BOOST_CHECK_EQUAL(WEXITSTATUS(result), 0);
+       }
 #endif
 }
 
index 1bcb43ea24b6e1f2deed494e7c8569bee9b6fdea..6687affea6b41c1624db524e555589c58dc95f23 100644 (file)
@@ -76,7 +76,7 @@ void check_one_frame (boost::filesystem::path dcp, int64_t index, boost::filesys
 extern boost::filesystem::path subtitle_file (std::shared_ptr<Film> film);
 extern void make_random_file (boost::filesystem::path path, size_t size);
 extern void verify_dcp(boost::filesystem::path dir, std::vector<dcp::VerificationNote::Code> ignore);
-extern void make_and_verify_dcp(std::shared_ptr<Film> film, std::vector<dcp::VerificationNote::Code> ignore = {}, bool dcp_inspect = true);
+extern void make_and_verify_dcp(std::shared_ptr<Film> film, std::vector<dcp::VerificationNote::Code> ignore = {}, bool dcp_inspect = true, bool clairmeta = true);
 extern void check_int_close (int a, int b, int d);
 extern void check_int_close (std::pair<int, int>, std::pair<int, int>, int d);
 extern boost::filesystem::path find_file (boost::filesystem::path dir, std::string filename_part);
index 698fcba0b50de8cf35f0b0392b01fc2d08104eaa..78d74add4f29da42bc292dac8afeda997a207512 100644 (file)
@@ -135,7 +135,13 @@ BOOST_AUTO_TEST_CASE (threed_test4)
        R->set_trim_end (dcpomatic::ContentTime::from_seconds(22));
 
        film->set_three_d (true);
-       make_and_verify_dcp (film, {dcp::VerificationNote::Code::INVALID_PICTURE_ASSET_RESOLUTION_FOR_3D});
+       make_and_verify_dcp(
+               film,
+               {dcp::VerificationNote::Code::INVALID_PICTURE_ASSET_RESOLUTION_FOR_3D},
+               true,
+               /* XXX: Clairmeta error about invalid edit rate 24 for 4K 3D */
+               false
+               );
 }