diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-06-01 13:03:38 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-06-07 17:01:06 +0200 |
| commit | 5a820bb8fae34591be5ac6d19a73461b9dab532a (patch) | |
| tree | 098e2dc959b6df0fefa62b2976976afc9f81b96b /src/lib/player.cc | |
| parent | 9a7b67aee32a40539f29bc2d7017edd4a4f65f11 (diff) | |
Rearrange subtitle font management.
With this change each subtitle coming out of the player has a reference
to a dcpomatic::Font that belongs to the TextContent. This hopefully
solves a few problems which all basically stemmed from the fact that
previously the decoders/player were deciding what the font ID in the
output DCP would be - they can't do that properly.
Diffstat (limited to 'src/lib/player.cc')
| -rw-r--r-- | src/lib/player.cc | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc index 0f72ed858..77193cb1f 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -477,18 +477,17 @@ Player::content_time_to_dcp (shared_ptr<const Piece> piece, ContentTime t) const } -vector<FontData> +vector<shared_ptr<Font>> Player::get_subtitle_fonts () { boost::mutex::scoped_lock lm (_mutex); - vector<FontData> fonts; - for (auto i: _pieces) { - /* XXX: things may go wrong if there are duplicate font IDs - with different font files. - */ - auto f = i->decoder->fonts (); - copy (f.begin(), f.end(), back_inserter(fonts)); + vector<shared_ptr<Font>> fonts; + for (auto piece: _pieces) { + for (auto text: piece->content->text) { + auto text_fonts = text->fonts(); + copy (text_fonts.begin(), text_fonts.end(), back_inserter(fonts)); + } } return fonts; @@ -880,7 +879,7 @@ Player::open_subtitles_for_frame (DCPTime time) const /* String subtitles (rendered to an image) */ if (!j.string.empty()) { - auto s = render_text (j.string, j.fonts, _video_container_size, time, vfr); + auto s = render_text(j.string, _video_container_size, time, vfr); copy (s.begin(), s.end(), back_inserter (captions)); } } @@ -1191,8 +1190,7 @@ Player::plain_text_start (weak_ptr<Piece> weak_piece, weak_ptr<const TextContent } s.set_in (dcp::Time(from.seconds(), 1000)); - ps.string.push_back (StringText (s, content->outline_width())); - ps.add_fonts (content->fonts ()); + ps.string.push_back (s); } _active_texts[static_cast<int>(content->type())].add_from(weak_content, ps, from); |
