As I understand it all SMPTE subtitles are MXF-wrapped.
authorCarl Hetherington <cth@carlh.net>
Tue, 9 Jun 2015 10:40:59 +0000 (11:40 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 9 Jun 2015 10:40:59 +0000 (11:40 +0100)
src/smpte_subtitle_asset.cc
src/smpte_subtitle_asset.h
test/read_smpte_subtitle_test.cc

index 28d8b261707af0c9dff16d991ec5e7b688b078b9..9878ea1f8cb2890ebf09fd65db5948d8214a9dcb 100644 (file)
@@ -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");
index 37f58c6f6fbe6a7929e26717021eacd6b14e61b7..a01ef775ae77e4be7a72542db4424e185991e9d3 100644 (file)
@@ -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>,
index 81749a15d13a7f541fe302ccc86ae02643e59572..99c7ee73fd740e0779dac3bc026f0a40f2b3520d 100644 (file)
@@ -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));
 }