+ auto ns = dynamic_pointer_cast<const dcp::SubtitleString>(*_next);
+ if (ns) {
+ dcp::SubtitleString ns_copy = *ns;
+ if (ns_copy.font()) {
+ ns_copy.set_font(_font_id_allocator.font_id(0, _asset->id(), ns_copy.font().get()));
+ } else {
+ ns_copy.set_font(_font_id_allocator.default_font_id());
+ }
+ s.push_back(ns_copy);
+ ++_next;
+ } else {
+ /* XXX: perhaps these image subs should also be collected together like the string ones are;
+ this would need to be done both here and in DCPDecoder.
+ */
+
+ auto ni = dynamic_pointer_cast<const dcp::SubtitleImage>(*_next);
+ if (ni) {
+ emit_subtitle_image (p, *ni, film()->frame_size(), only_text());
+ ++_next;
+ }
+ }