summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-05-27 11:45:11 +0200
committerCarl Hetherington <cth@carlh.net>2021-05-27 11:45:11 +0200
commitc1d32ccfc586d0292ca4ec35a03fb403c3c45a07 (patch)
treecc9d6f45d6c6d8d76197486d1aa3eca7e72986c5 /src
parent3e866abeee4de737a04719ff8ab6c6bf46bb4d74 (diff)
Read the bits we can from the MXF header even when it is encrypted.
Diffstat (limited to 'src')
-rw-r--r--src/smpte_subtitle_asset.cc17
-rw-r--r--src/smpte_subtitle_asset.h5
2 files changed, 17 insertions, 5 deletions
diff --git a/src/smpte_subtitle_asset.cc b/src/smpte_subtitle_asset.cc
index 0fa315b9..dc8acf51 100644
--- a/src/smpte_subtitle_asset.cc
+++ b/src/smpte_subtitle_asset.cc
@@ -106,7 +106,10 @@ SMPTESubtitleAsset::SMPTESubtitleAsset (boost::filesystem::path file)
reader->ReadTimedTextResource (_raw_xml);
xml->read_string (_raw_xml);
parse_xml (xml);
- read_mxf_descriptor (reader, make_shared<DecryptionContext>(optional<Key>(), Standard::SMPTE));
+ read_mxf_descriptor (reader);
+ read_mxf_resources (reader, make_shared<DecryptionContext>(optional<Key>(), Standard::SMPTE));
+ } else {
+ read_mxf_descriptor (reader);
}
} else {
/* Plain XML */
@@ -202,7 +205,7 @@ SMPTESubtitleAsset::parse_xml (shared_ptr<cxml::Document> xml)
void
-SMPTESubtitleAsset::read_mxf_descriptor (shared_ptr<ASDCP::TimedText::MXFReader> reader, shared_ptr<DecryptionContext> dec)
+SMPTESubtitleAsset::read_mxf_resources (shared_ptr<ASDCP::TimedText::MXFReader> reader, shared_ptr<DecryptionContext> dec)
{
ASDCP::TimedText::TimedTextDescriptor descriptor;
reader->FillTimedTextDescriptor (descriptor);
@@ -253,6 +256,14 @@ SMPTESubtitleAsset::read_mxf_descriptor (shared_ptr<ASDCP::TimedText::MXFReader>
break;
}
}
+}
+
+
+void
+SMPTESubtitleAsset::read_mxf_descriptor (shared_ptr<ASDCP::TimedText::MXFReader> reader)
+{
+ ASDCP::TimedText::TimedTextDescriptor descriptor;
+ reader->FillTimedTextDescriptor (descriptor);
_intrinsic_duration = descriptor.ContainerDuration;
/* The thing which is called AssetID in the descriptor is also known as the
@@ -300,7 +311,7 @@ SMPTESubtitleAsset::set_key (Key key)
auto xml = make_shared<cxml::Document>("SubtitleReel");
xml->read_string (_raw_xml);
parse_xml (xml);
- read_mxf_descriptor (reader, dec);
+ read_mxf_resources (reader, dec);
}
diff --git a/src/smpte_subtitle_asset.h b/src/smpte_subtitle_asset.h
index 1ece2405..f63392c7 100644
--- a/src/smpte_subtitle_asset.h
+++ b/src/smpte_subtitle_asset.h
@@ -180,7 +180,7 @@ public:
return _xml_id;
}
- /** @return ResourceID read from the MXF, if there was one */
+ /** @return ResourceID read from any MXF that was read */
boost::optional<std::string> resource_id () const {
return _resource_id;
}
@@ -204,7 +204,8 @@ private:
void read_fonts (std::shared_ptr<ASDCP::TimedText::MXFReader>);
void parse_xml (std::shared_ptr<cxml::Document> xml);
- void read_mxf_descriptor (std::shared_ptr<ASDCP::TimedText::MXFReader> reader, std::shared_ptr<DecryptionContext> dec);
+ void read_mxf_descriptor (std::shared_ptr<ASDCP::TimedText::MXFReader> reader);
+ void read_mxf_resources (std::shared_ptr<ASDCP::TimedText::MXFReader> reader, std::shared_ptr<DecryptionContext> dec);
/** The total length of this content in video frames. The amount of
* content presented may be less than this.