summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-06-09 11:40:59 +0100
committerCarl Hetherington <cth@carlh.net>2015-06-09 11:40:59 +0100
commit2ac1dbfeaffa5166f104ef4a01fedc41f542cacf (patch)
tree05608ab66d15e76009ef56a738ecbe7f1fabcee4
parent5c1b079a28941781c9cfa46d57e0c20b55681b32 (diff)
As I understand it all SMPTE subtitles are MXF-wrapped.
-rw-r--r--src/smpte_subtitle_asset.cc38
-rw-r--r--src/smpte_subtitle_asset.h3
-rw-r--r--test/read_smpte_subtitle_test.cc39
3 files changed, 39 insertions, 41 deletions
diff --git a/src/smpte_subtitle_asset.cc b/src/smpte_subtitle_asset.cc
index 28d8b261..9878ea1f 100644
--- a/src/smpte_subtitle_asset.cc
+++ b/src/smpte_subtitle_asset.cc
@@ -49,36 +49,30 @@ SMPTESubtitleAsset::SMPTESubtitleAsset ()
}
-/** Construct a SMPTESubtitleAsset by reading an XML or MXF file.
+/** Construct a SMPTESubtitleAsset by reading an MXF file.
* @param file Filename.
- * @param mxf true if file is an MXF, false if it is XML.
*/
-SMPTESubtitleAsset::SMPTESubtitleAsset (boost::filesystem::path file, bool mxf)
+SMPTESubtitleAsset::SMPTESubtitleAsset (boost::filesystem::path file)
: SubtitleAsset (file)
{
shared_ptr<cxml::Document> xml (new cxml::Document ("SubtitleReel"));
- if (mxf) {
- ASDCP::TimedText::MXFReader reader;
- Kumu::Result_t r = reader.OpenRead (file.string().c_str ());
- if (ASDCP_FAILURE (r)) {
- boost::throw_exception (MXFFileError ("could not open MXF file for reading", file, r));
- }
-
- string s;
- reader.ReadTimedTextResource (s, 0, 0);
- stringstream t;
- t << s;
- xml->read_stream (t);
-
- ASDCP::WriterInfo info;
- reader.FillWriterInfo (info);
- _id = read_writer_info (info);
- } else {
- xml->read_file (file);
- _id = xml->string_child("Id").substr (9);
+ ASDCP::TimedText::MXFReader reader;
+ Kumu::Result_t r = reader.OpenRead (file.string().c_str ());
+ if (ASDCP_FAILURE (r)) {
+ boost::throw_exception (MXFFileError ("could not open MXF file for reading", file, r));
}
+ string s;
+ reader.ReadTimedTextResource (s, 0, 0);
+ stringstream t;
+ t << s;
+ xml->read_stream (t);
+
+ ASDCP::WriterInfo info;
+ reader.FillWriterInfo (info);
+ _id = read_writer_info (info);
+
_load_font_nodes = type_children<dcp::SMPTELoadFontNode> (xml, "LoadFont");
_content_title_text = xml->string_child ("ContentTitleText");
diff --git a/src/smpte_subtitle_asset.h b/src/smpte_subtitle_asset.h
index 37f58c6f..a01ef775 100644
--- a/src/smpte_subtitle_asset.h
+++ b/src/smpte_subtitle_asset.h
@@ -39,9 +39,8 @@ public:
SMPTESubtitleAsset ();
/** @param file File name
- * @param mxf true if `file' is a MXF, or false if it is an XML file.
*/
- SMPTESubtitleAsset (boost::filesystem::path file, bool mxf = true);
+ SMPTESubtitleAsset (boost::filesystem::path file);
bool equals (
boost::shared_ptr<const Asset>,
diff --git a/test/read_smpte_subtitle_test.cc b/test/read_smpte_subtitle_test.cc
index 81749a15..99c7ee73 100644
--- a/test/read_smpte_subtitle_test.cc
+++ b/test/read_smpte_subtitle_test.cc
@@ -30,31 +30,36 @@ using boost::dynamic_pointer_cast;
/** Check reading of a SMPTE subtitle file */
BOOST_AUTO_TEST_CASE (read_smpte_subtitle_test)
{
- dcp::SMPTESubtitleAsset sc (private_test / "8dfafe11-2bd1-4206-818b-afc109cfe7f6_reel1.xml", false);
+ dcp::SMPTESubtitleAsset sc (
+ private_test /
+ "data" /
+ "JourneyToJah_TLR-1_F_EN-DE-FR_CH_51_2K_LOK_20140225_DGL_SMPTE_OV" /
+ "8b48f6ae-c74b-4b80-b994-a8236bbbad74_sub.mxf"
+ );
- BOOST_CHECK_EQUAL (sc.id(), "8dfafe11-2bd1-4206-818b-afc109cfe7f6");
- BOOST_CHECK_EQUAL (sc.content_title_text(), "Violet");
+ BOOST_CHECK_EQUAL (sc.id(), "8b48f6ae-c74b-4b80-b994-a8236bbbad74");
+ BOOST_CHECK_EQUAL (sc.content_title_text(), "Journey to Jah");
BOOST_REQUIRE (sc.annotation_text());
- BOOST_CHECK_EQUAL (sc.annotation_text().get(), "Violet");
- BOOST_CHECK_EQUAL (sc.issue_date(), dcp::LocalTime ("2014-12-23T22:30:07.000-00:00"));
+ BOOST_CHECK_EQUAL (sc.annotation_text().get(), "Journey to Jah");
+ BOOST_CHECK_EQUAL (sc.issue_date(), dcp::LocalTime ("2014-02-25T11:22:48.000-00:00"));
BOOST_REQUIRE (sc.reel_number());
BOOST_CHECK_EQUAL (sc.reel_number().get(), 1);
BOOST_REQUIRE (sc.language ());
- BOOST_CHECK_EQUAL (sc.language().get (), "Dutch");
- BOOST_CHECK_EQUAL (sc.edit_rate(), dcp::Fraction (24, 1));
- BOOST_CHECK_EQUAL (sc.time_code_rate(), 24);
- BOOST_CHECK_EQUAL (sc.start_time(), dcp::Time (0, 0, 0, 23, 24));
+ BOOST_CHECK_EQUAL (sc.language().get (), "de");
+ BOOST_CHECK_EQUAL (sc.edit_rate(), dcp::Fraction (25, 1));
+ BOOST_CHECK_EQUAL (sc.time_code_rate(), 25);
+ BOOST_CHECK_EQUAL (sc.start_time(), dcp::Time (0, 0, 0, 0, 25));
list<shared_ptr<dcp::LoadFontNode> > lfn = sc.load_font_nodes ();
BOOST_REQUIRE_EQUAL (lfn.size(), 1);
shared_ptr<dcp::SMPTELoadFontNode> smpte_lfn = dynamic_pointer_cast<dcp::SMPTELoadFontNode> (lfn.front ());
BOOST_REQUIRE (smpte_lfn);
BOOST_CHECK_EQUAL (smpte_lfn->id, "theFontId");
- BOOST_CHECK_EQUAL (smpte_lfn->urn, "3dec6dc0-39d0-498d-97d0-928d2eb78391");
- BOOST_REQUIRE_EQUAL (sc.subtitles().size(), 159);
- BOOST_CHECK_EQUAL (sc.subtitles().front().text(), "Jonas ?");
- BOOST_CHECK_EQUAL (sc.subtitles().front().in(), dcp::Time (0, 7, 6, 20, 24));
- BOOST_CHECK_EQUAL (sc.subtitles().front().out(), dcp::Time (0, 7, 7, 20, 24));
- BOOST_CHECK_EQUAL (sc.subtitles().back().text(), "Come on.");
- BOOST_CHECK_EQUAL (sc.subtitles().back().in(), dcp::Time (1, 13, 37, 11, 24));
- BOOST_CHECK_EQUAL (sc.subtitles().back().out(), dcp::Time (1, 13, 38, 11, 24));
+ BOOST_CHECK_EQUAL (smpte_lfn->urn, "9118bbce-4105-4a05-b37c-a5a6f75e1fea");
+ BOOST_REQUIRE_EQUAL (sc.subtitles().size(), 63);
+ BOOST_CHECK_EQUAL (sc.subtitles().front().text(), "Noch mal.");
+ BOOST_CHECK_EQUAL (sc.subtitles().front().in(), dcp::Time (0, 0, 25, 12, 25));
+ BOOST_CHECK_EQUAL (sc.subtitles().front().out(), dcp::Time (0, 0, 26, 4, 25));
+ BOOST_CHECK_EQUAL (sc.subtitles().back().text(), "Prochainement");
+ BOOST_CHECK_EQUAL (sc.subtitles().back().in(), dcp::Time (0, 1, 57, 17, 25));
+ BOOST_CHECK_EQUAL (sc.subtitles().back().out(), dcp::Time (0, 1, 58, 12, 25));
}