diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-04-14 09:56:21 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-04-14 16:20:53 +0200 |
| commit | 098007a1ee6a46b6ff11398f94faff5c85951da4 (patch) | |
| tree | 3459f804ad51d8e22a2a0c1e9bcca5cf0e623a6f /src/subtitle_asset.cc | |
| parent | 1ffc787c6318815592e8d81c4878488eb6183ca4 (diff) | |
Improve handling of image subtitle IDs in XML (DoM bug #1965)
When reading/writing the XML for image subtitles, we assumed that
the content of the <Image> tag is just the ID of the PNG in the MXF,
without any prefix.
DoM bug #1965 mentions a DCP where this is not the case, and SMPTE
429-5-2009 has an example where there is urn:uuid: in the XML.
This change makes DoM write this urn:uuid: prefix, and accept it if
it's present (but not complain if it's not).
If the urn:uuid: _is_ required in the field, it's a bit surprising
that nobody has complained up to this point. Maybe nobody noticed,
or nobody reported it.
Diffstat (limited to 'src/subtitle_asset.cc')
| -rw-r--r-- | src/subtitle_asset.cc | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/subtitle_asset.cc b/src/subtitle_asset.cc index bb752441..bf4b1c63 100644 --- a/src/subtitle_asset.cc +++ b/src/subtitle_asset.cc @@ -404,11 +404,31 @@ SubtitleAsset::maybe_add_subtitle (string text, vector<ParseState> const & parse ); break; case ParseState::Type::IMAGE: + { + switch (standard) { + case Standard::INTEROP: + if (text.size() >= 4) { + /* Remove file extension */ + text = text.substr(0, text.size() - 4); + } + break; + case Standard::SMPTE: + /* It looks like this urn:uuid: is required, but DoM wasn't expecting it (and not writing it) + * until around 2.15.140 so I guess either: + * a) it is not (always) used in the field, or + * b) nobody noticed / complained. + */ + if (text.substr(0, 9) == "urn:uuid:") { + text = text.substr(9); + } + break; + } + /* Add a subtitle with no image data and we'll fill that in later */ _subtitles.push_back ( make_shared<SubtitleImage>( ArrayData(), - standard == Standard::INTEROP ? text.substr(0, text.size() - 4) : text, + text, ps.in.get(), ps.out.get(), ps.h_position.get_value_or(0), @@ -421,6 +441,7 @@ SubtitleAsset::maybe_add_subtitle (string text, vector<ParseState> const & parse ); break; } + } } |
