Adapt for changes in parent branch, and test churn.
[libdcp.git] / src / smpte_subtitle_asset.cc
index 7e71575582e97aec18ab8a237e160d73506da588..cf0ed6c0c38616f8f0ad16c733f6358b795d3dad 100644 (file)
@@ -86,7 +86,11 @@ SMPTESubtitleAsset::SMPTESubtitleAsset (boost::filesystem::path file)
        shared_ptr<cxml::Document> xml (new cxml::Document ("SubtitleReel"));
 
        shared_ptr<ASDCP::TimedText::MXFReader> reader (new ASDCP::TimedText::MXFReader ());
-       Kumu::Result_t r = reader->OpenRead (_file->string().c_str ());
+       Kumu::Result_t r = Kumu::RESULT_OK;
+       {
+               ASDCPErrorSuspender sus;
+               r = reader->OpenRead (_file->string().c_str ());
+       }
        if (!ASDCP_FAILURE (r)) {
                /* MXF-wrapped */
                ASDCP::WriterInfo info;
@@ -94,22 +98,22 @@ SMPTESubtitleAsset::SMPTESubtitleAsset (boost::filesystem::path file)
                _id = read_writer_info (info);
                if (!_key_id) {
                        /* Not encrypted; read it in now */
-                       string s;
-                       reader->ReadTimedTextResource (s);
-                       xml->read_string (s);
+                       reader->ReadTimedTextResource (_raw_xml);
+                       xml->read_string (_raw_xml);
                        parse_xml (xml);
                        read_mxf_descriptor (reader, shared_ptr<DecryptionContext> (new DecryptionContext (optional<Key>(), SMPTE)));
                }
        } else {
                /* Plain XML */
                try {
+                       _raw_xml = dcp::file_to_string (file);
                        xml.reset (new cxml::Document ("SubtitleReel"));
                        xml->read_file (file);
                        parse_xml (xml);
                        _id = _xml_id = remove_urn_uuid (xml->string_child ("Id"));
                } catch (cxml::Error& e) {
                        boost::throw_exception (
-                               DCPReadError (
+                               ReadError (
                                        String::compose (
                                                "Failed to read subtitle file %1; MXF failed with %2, XML failed with %3",
                                                file, static_cast<int> (r), e.what ()
@@ -272,17 +276,16 @@ SMPTESubtitleAsset::set_key (Key key)
        Kumu::Result_t r = reader->OpenRead (_file->string().c_str ());
        if (ASDCP_FAILURE (r)) {
                boost::throw_exception (
-                       DCPReadError (
+                       ReadError (
                                String::compose ("Could not read encrypted subtitle MXF (%1)", static_cast<int> (r))
                                )
                        );
        }
 
-       string s;
        shared_ptr<DecryptionContext> dec (new DecryptionContext (key, SMPTE));
-       reader->ReadTimedTextResource (s, dec->context(), dec->hmac());
+       reader->ReadTimedTextResource (_raw_xml, dec->context(), dec->hmac());
        shared_ptr<cxml::Document> xml (new cxml::Document ("SubtitleReel"));
-       xml->read_string (s);
+       xml->read_string (_raw_xml);
        parse_xml (xml);
        read_mxf_descriptor (reader, dec);
 }
@@ -394,7 +397,7 @@ SMPTESubtitleAsset::write (boost::filesystem::path p) const
 
        ASDCP::TimedText::MXFWriter writer;
        /* This header size is a guess.  Empirically it seems that each subtitle reference is 90 bytes, and we need some extra.
-          The defualt size is not enough for some feature-length PNG sub projects (see DCP-o-matic #1561).
+          The default size is not enough for some feature-length PNG sub projects (see DCP-o-matic #1561).
        */
        ASDCP::Result_t r = writer.OpenWrite (p.string().c_str(), writer_info, descriptor, _subtitles.size() * 90 + 16384);
        if (ASDCP_FAILURE (r)) {