X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ftext_decoder.cc;h=c655fb5b58d5e5b2e208931f27d4ae0e753d9632;hb=ab03306fdc02e49b0a3d5b45f103d317ff6611e5;hp=c6563a260fe238656a2c65889c13f8cdb06d1298;hpb=a7bd8d64d37ac0fd751226c0fba98e219dea9b0d;p=dcpomatic.git diff --git a/src/lib/text_decoder.cc b/src/lib/text_decoder.cc index c6563a260..c655fb5b5 100644 --- a/src/lib/text_decoder.cc +++ b/src/lib/text_decoder.cc @@ -81,28 +81,34 @@ escape_text (string text) } +static +void +set_forced_appearance(shared_ptr content, dcp::SubtitleString& subtitle) +{ + if (content->colour()) { + subtitle.set_colour(*content->colour()); + } + if (content->effect_colour()) { + subtitle.set_effect_colour(*content->effect_colour()); + } + if (content->effect()) { + subtitle.set_effect(*content->effect()); + } + if (content->fade_in()) { + subtitle.set_fade_up_time(dcp::Time(content->fade_in()->seconds(), 1000)); + } + if (content->fade_out()) { + subtitle.set_fade_down_time (dcp::Time(content->fade_out()->seconds(), 1000)); + } +} + + void TextDecoder::emit_plain_start (ContentTime from, vector subtitles) { for (auto& subtitle: subtitles) { subtitle.set_text(escape_text(subtitle.text())); - - /* Set any forced appearance */ - if (content()->colour()) { - subtitle.set_colour(*content()->colour()); - } - if (content()->effect_colour()) { - subtitle.set_effect_colour(*content()->effect_colour()); - } - if (content()->effect()) { - subtitle.set_effect(*content()->effect()); - } - if (content()->fade_in()) { - subtitle.set_fade_up_time(dcp::Time(content()->fade_in()->seconds(), 1000)); - } - if (content()->fade_out()) { - subtitle.set_fade_down_time (dcp::Time(content()->fade_out()->seconds(), 1000)); - } + set_forced_appearance(content(), subtitle); } PlainStart(ContentStringText(from, subtitles)); @@ -111,12 +117,12 @@ TextDecoder::emit_plain_start (ContentTime from, vector sub void -TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & subtitle) +TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & sub_subtitle) { /* See if our next subtitle needs to be vertically placed on screen by us */ bool needs_placement = false; optional bottom_line; - for (auto line: subtitle.lines) { + for (auto line: sub_subtitle.lines) { if (!line.vertical_position.reference || (line.vertical_position.line && !line.vertical_position.lines) || line.vertical_position.reference.get() == sub::TOP_OF_SUBTITLE) { needs_placement = true; if (!bottom_line || bottom_line.get() < line.vertical_position.line.get()) { @@ -127,7 +133,7 @@ TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & subtitle) /* Find the lowest proportional position */ optional lowest_proportional; - for (auto line: subtitle.lines) { + for (auto line: sub_subtitle.lines) { if (line.vertical_position.proportional) { if (!lowest_proportional) { lowest_proportional = line.vertical_position.proportional; @@ -137,8 +143,8 @@ TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & subtitle) } } - vector out; - for (auto line: subtitle.lines) { + vector dcp_subtitles; + for (auto line: sub_subtitle.lines) { for (auto block: line.blocks) { if (!block.font_size.specified()) { @@ -227,7 +233,7 @@ TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & subtitle) content by the other emit_plain_start() above. */ - out.push_back ( + dcp_subtitles.push_back( dcp::SubtitleString ( string(TEXT_FONT_ID), block.italic, @@ -261,8 +267,13 @@ TextDecoder::emit_plain_start (ContentTime from, sub::Subtitle const & subtitle) } } - /* Pass these subs through the other emit_plain_start so that they get their forced settings applied */ - emit_plain_start (from, out); + for (auto& subtitle: dcp_subtitles) { + subtitle.set_text(escape_text(subtitle.text())); + set_forced_appearance(content(), subtitle); + } + + PlainStart(ContentStringText(from, dcp_subtitles)); + _position = from; }