summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/reel_asset.cc11
-rw-r--r--src/reel_asset.h8
2 files changed, 13 insertions, 6 deletions
diff --git a/src/reel_asset.cc b/src/reel_asset.cc
index d233ee64..f9742628 100644
--- a/src/reel_asset.cc
+++ b/src/reel_asset.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2014-2021 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2022 Carl Hetherington <cth@carlh.net>
This file is part of libdcp.
@@ -72,7 +72,7 @@ ReelAsset::ReelAsset (shared_ptr<const cxml::Node> node)
: Object (remove_urn_uuid (node->string_child ("Id")))
, _intrinsic_duration (node->number_child<int64_t> ("IntrinsicDuration"))
, _duration (node->optional_number_child<int64_t>("Duration"))
- , _annotation_text (node->optional_string_child ("AnnotationText").get_value_or (""))
+ , _annotation_text (node->optional_string_child("AnnotationText"))
, _edit_rate (Fraction (node->string_child ("EditRate")))
, _entry_point (node->optional_number_child<int64_t>("EntryPoint"))
{
@@ -93,7 +93,10 @@ ReelAsset::write_to_cpl (xmlpp::Node* node, Standard standard) const
a->set_namespace_declaration (ns.first, ns.second);
}
a->add_child("Id")->add_child_text ("urn:uuid:" + _id);
- a->add_child("AnnotationText")->add_child_text (_annotation_text);
+ /* Empty <AnnotationText> tags cause refusal to play on some Sony SRX320 / LMT3000 systems (DoM bug #2124) */
+ if (_annotation_text && !_annotation_text->empty()) {
+ a->add_child("AnnotationText")->add_child_text(*_annotation_text);
+ }
a->add_child("EditRate")->add_child_text (_edit_rate.as_string());
a->add_child("IntrinsicDuration")->add_child_text (raw_convert<string> (_intrinsic_duration));
if (_entry_point) {
@@ -124,7 +127,7 @@ bool
ReelAsset::asset_equals (shared_ptr<const ReelAsset> other, EqualityOptions opt, NoteHandler note) const
{
if (_annotation_text != other->_annotation_text) {
- string const s = "Reel: annotation texts differ (" + _annotation_text + " vs " + other->_annotation_text + ")\n";
+ string const s = "Reel: annotation texts differ (" + _annotation_text.get_value_or("") + " vs " + other->_annotation_text.get_value_or("") + ")\n";
if (!opt.reel_annotation_texts_can_differ) {
note (NoteType::ERROR, s);
return false;
diff --git a/src/reel_asset.h b/src/reel_asset.h
index ab06434e..200c49ff 100644
--- a/src/reel_asset.h
+++ b/src/reel_asset.h
@@ -120,7 +120,7 @@ public:
/** @return <Duration>, or <IntrinsicDuration> - <EntryPoint> if <Duration> is not present */
int64_t actual_duration () const;
- std::string annotation_text () const {
+ boost::optional<std::string> annotation_text () const {
return _annotation_text;
}
@@ -128,6 +128,10 @@ public:
_annotation_text = at;
}
+ void unset_annotation_text () {
+ _annotation_text = boost::none;
+ }
+
bool asset_equals (std::shared_ptr<const ReelAsset>, EqualityOptions, NoteHandler) const;
protected:
@@ -147,7 +151,7 @@ protected:
boost::optional<int64_t> _duration; ///< The &lt;Duration&gt; from the reel's entry for this asset, if present
private:
- std::string _annotation_text; ///< The &lt;AnnotationText&gt; from the reel's entry for this asset
+ boost::optional<std::string> _annotation_text; ///< The &lt;AnnotationText&gt; from the reel's entry for this asset
Fraction _edit_rate; ///< The &lt;EditRate&gt; from the reel's entry for this asset
boost::optional<int64_t> _entry_point; ///< The &lt;EntryPoint&gt; from the reel's entry for this asset
};