diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-06-09 11:40:59 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-06-09 11:40:59 +0100 |
| commit | 2ac1dbfeaffa5166f104ef4a01fedc41f542cacf (patch) | |
| tree | 05608ab66d15e76009ef56a738ecbe7f1fabcee4 | |
| parent | 5c1b079a28941781c9cfa46d57e0c20b55681b32 (diff) | |
As I understand it all SMPTE subtitles are MXF-wrapped.
| -rw-r--r-- | src/smpte_subtitle_asset.cc | 38 | ||||
| -rw-r--r-- | src/smpte_subtitle_asset.h | 3 | ||||
| -rw-r--r-- | test/read_smpte_subtitle_test.cc | 39 |
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)); } |
