, _playlist (p)
, _have_valid_pieces (false)
, _ignore_video (false)
+ , _burn_subtitles (f->burn_subtitles ())
{
_playlist_changed_connection = _playlist->Changed.connect (bind (&Player::playlist_changed, this));
_playlist_content_changed_connection = _playlist->ContentChanged.connect (bind (&Player::content_changed, this, _1, _2, _3));
copy (c.begin(), c.end(), back_inserter (sub_images));
/* Text subtitles (rendered to an image) */
- if (!ps.text.empty ()) {
+ if (_burn_subtitles && !ps.text.empty ()) {
list<PositionImage> s = render_subtitles (ps.text, _video_container_size);
copy (s.begin (), s.end (), back_inserter (sub_images));
}
{
_ignore_video = true;
}
+
+/** Set whether or not this player should burn text subtitles into the image.
+ * @param burn true to burn subtitles, false to not.
+ */
+void
+Player::set_burn_subtitles (bool burn)
+{
+ _burn_subtitles = burn;
+}
void set_video_container_size (dcp::Size);
void set_ignore_video ();
+ void set_enable_subtitles (bool enable);
+ void set_burn_subtitles (bool burn);
PlayerStatistics const & statistics () const;
/** true if the player should ignore all video; i.e. never produce any */
bool _ignore_video;
+ /** true if the player should burn subtitles into the video */
+ bool _burn_subtitles;
boost::shared_ptr<AudioProcessor> _audio_processor;
bool
PlayerVideo::same (shared_ptr<const PlayerVideo> other) const
{
- if (_in != other->_in ||
- _crop != other->_crop ||
+ if (_crop != other->_crop ||
_fade.get_value_or(0) != other->_fade.get_value_or(0) ||
_inter_size != other->_inter_size ||
_out_size != other->_out_size ||
_part != other->_part ||
_colour_conversion != other->_colour_conversion ||
!_subtitle.same (other->_subtitle)) {
+
return false;
}
_film.reset ();
return;
}
+
+ /* Always burn in subtitles, even if we are set not to, otherwise we won't see them
+ in the preview.
+ */
+ _player->set_burn_subtitles (true);
_film_connection = _film->Changed.connect (boost::bind (&FilmViewer::film_changed, this, _1));