/*
- Copyright (C) 2014-2016 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2018 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
#include "lib/subtitle_content.h"
#include "lib/content_subtitle.h"
#include "lib/subtitle_decoder.h"
+#include "lib/font.h"
#include "test.h"
#include <iostream>
film->set_interop (false);
shared_ptr<DCPSubtitleContent> content (new DCPSubtitleContent (film, "test/data/dcp_sub.xml"));
film->examine_and_add_content (content);
- wait_for_jobs ();
+ BOOST_REQUIRE (!wait_for_jobs ());
BOOST_CHECK_EQUAL (content->full_length().get(), DCPTime::from_seconds(2).get());
content->subtitle->set_use (true);
content->subtitle->set_burn (false);
film->make_dcp ();
- wait_for_jobs ();
+ BOOST_REQUIRE (!wait_for_jobs ());
check_dcp ("test/data/dcp_subtitle_test", film->dir (film->dcp_name ()));
}
film->set_name ("frobozz");
shared_ptr<DCPContent> content (new DCPContent (film, private_data / "JourneyToJah_TLR-1_F_EN-DE-FR_CH_51_2K_LOK_20140225_DGL_SMPTE_OV"));
film->examine_and_add_content (content);
- wait_for_jobs ();
+ BOOST_REQUIRE (!wait_for_jobs ());
shared_ptr<DCPDecoder> decoder (new DCPDecoder (content, film->log(), false));
decoder->subtitle->TextStart.connect (bind (store, _1));
film->set_name ("frobozz");
shared_ptr<DCPSubtitleContent> content (new DCPSubtitleContent (film, "test/data/dcp_sub2.xml"));
film->examine_and_add_content (content);
- wait_for_jobs ();
+ BOOST_REQUIRE (!wait_for_jobs ());
shared_ptr<DCPSubtitleDecoder> decoder (new DCPSubtitleDecoder (content, film->log()));
decoder->subtitle->TextStart.connect (bind (store, _1));
film->set_interop (true);
shared_ptr<DCPSubtitleContent> content (new DCPSubtitleContent (film, "test/data/dcp_sub3.xml"));
film->examine_and_add_content (content);
- wait_for_jobs ();
+ BOOST_REQUIRE (!wait_for_jobs ());
film->make_dcp ();
- wait_for_jobs ();
+ BOOST_REQUIRE (!wait_for_jobs ());
shared_ptr<DCPSubtitleDecoder> decoder (new DCPSubtitleDecoder (content, film->log()));
stored = optional<ContentTextSubtitle> ();
}
}
}
+
+/** Check that Interop DCPs aren't made with more than one <LoadFont> (#1273) */
+BOOST_AUTO_TEST_CASE (dcp_subtitle_test4)
+{
+ shared_ptr<Film> film = new_test_film2 ("dcp_subtitle_test4");
+ film->set_interop (true);
+
+ shared_ptr<DCPSubtitleContent> content (new DCPSubtitleContent (film, "test/data/dcp_sub3.xml"));
+ film->examine_and_add_content (content);
+ shared_ptr<DCPSubtitleContent> content2 (new DCPSubtitleContent (film, "test/data/dcp_sub3.xml"));
+ film->examine_and_add_content (content2);
+ BOOST_REQUIRE (!wait_for_jobs ());
+
+ content->subtitle->add_font (shared_ptr<Font> (new Font ("font1")));
+ content2->subtitle->add_font (shared_ptr<Font> (new Font ("font2")));
+
+ film->make_dcp ();
+ BOOST_REQUIRE (!wait_for_jobs ());
+
+ cxml::Document doc ("DCSubtitle");
+ doc.read_file (subtitle_file (film));
+ BOOST_REQUIRE_EQUAL (doc.node_children("LoadFont").size(), 1);
+}
check_subtitle_file (shared_ptr<Film> 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<string> ignore;
- ignore.push_back ("SubtitleID");
- check_xml (*j, ref, ignore);
- }
- }
- }
- }
+ list<string> ignore;
+ ignore.push_back ("SubtitleID");
+ check_xml (subtitle_file(film), ref, ignore);
}
/** Make another DCP with a longer .srt file */
wait_for_jobs ();
/* 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<string> ignore;
- ignore.push_back ("SubtitleID");
- check_xml (*j, private_data / "DKH_UT_EN20160601def.xml", ignore);
- }
- }
- }
- }
+ list<string> ignore;
+ ignore.push_back ("SubtitleID");
+ check_xml (subtitle_file(film), private_data / "DKH_UT_EN20160601def.xml", ignore);
}