: _intrinsic_duration (0)
, _edit_rate (24, 1)
, _time_code_rate (24)
+ , _xml_id (make_uuid ())
{
}
xml.reset (new cxml::Document ("SubtitleReel"));
xml->read_file (file);
parse_xml (xml);
- _id = remove_urn_uuid (xml->string_child ("Id"));
+ _id = _xml_id = remove_urn_uuid (xml->string_child ("Id"));
} catch (cxml::Error& e) {
boost::throw_exception (
DCPReadError (
- String::compose ("MXF failed with %1, XML failed with %2", file, static_cast<int> (r), e.what ())
+ String::compose (
+ "Failed to read subtitle file %1; MXF failed with %2, XML failed with %3",
+ file, static_cast<int> (r), e.what ()
+ )
)
);
}
void
SMPTESubtitleAsset::parse_xml (shared_ptr<cxml::Document> xml)
{
+ _xml_id = remove_urn_uuid(xml->string_child("Id"));
_load_font_nodes = type_children<dcp::SMPTELoadFontNode> (xml, "LoadFont");
_content_title_text = xml->string_child ("ContentTitleText");
void
SMPTESubtitleAsset::set_key (Key key)
{
+ /* See if we already have a key; if we do, and we have a file, we'll already
+ have read that file.
+ */
+ bool const had_key = static_cast<bool> (_key);
+
MXF::set_key (key);
- if (!_key_id || !_file) {
- /* Either we don't have any data to read, or it wasn't
- encrypted, so we don't need to do anything else.
+ if (!_key_id || !_file || had_key) {
+ /* Either we don't have any data to read, it wasn't
+ encrypted, or we've already read it, so we don't
+ need to do anything else.
*/
return;
}
root->set_namespace_declaration ("http://www.smpte-ra.org/schemas/428-7/2010/DCST", "dcst");
root->set_namespace_declaration ("http://www.w3.org/2001/XMLSchema", "xs");
- root->add_child("Id", "dcst")->add_child_text ("urn:uuid:" + _id);
+ root->add_child("Id", "dcst")->add_child_text ("urn:uuid:" + _xml_id);
root->add_child("ContentTitleText", "dcst")->add_child_text (_content_title_text);
if (_annotation_text) {
root->add_child("AnnotationText", "dcst")->add_child_text (_annotation_text.get ());
subtitles_as_xml (root->add_child ("SubtitleList", "dcst"), _time_code_rate, SMPTE);
- return doc.write_to_string_formatted ("UTF-8");
+ return doc.write_to_string ("UTF-8");
}
/** Write this content to a MXF file */