From 9facdf75a2776319fc5826cfa3dd85340f3c8879 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 8 Jun 2015 14:58:53 +0100 Subject: [PATCH] Fix detection of same-frame to speed up simple encodes (#548). --- src/lib/player.cc | 12 +++++++++++- src/lib/player.h | 4 ++++ src/lib/player_video.cc | 4 ++-- src/wx/film_viewer.cc | 5 +++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/lib/player.cc b/src/lib/player.cc index 0ddd835ad..215b48ee4 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -74,6 +74,7 @@ Player::Player (shared_ptr f, shared_ptr p) , _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)); @@ -385,7 +386,7 @@ Player::get_video (DCPTime time, bool accurate) 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 s = render_subtitles (ps.text, _video_container_size); copy (s.begin (), s.end (), back_inserter (sub_images)); } @@ -631,3 +632,12 @@ Player::set_ignore_video () { _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; +} diff --git a/src/lib/player.h b/src/lib/player.h index 14aee002a..52dffec24 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -93,6 +93,8 @@ public: 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; @@ -158,6 +160,8 @@ private: /** 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 _audio_processor; diff --git a/src/lib/player_video.cc b/src/lib/player_video.cc index 81e01329a..0375fa01b 100644 --- a/src/lib/player_video.cc +++ b/src/lib/player_video.cc @@ -197,8 +197,7 @@ PlayerVideo::inter_position () const bool PlayerVideo::same (shared_ptr 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 || @@ -206,6 +205,7 @@ PlayerVideo::same (shared_ptr other) const _part != other->_part || _colour_conversion != other->_colour_conversion || !_subtitle.same (other->_subtitle)) { + return false; } diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 0938d52a4..e33a3c118 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -144,6 +144,11 @@ FilmViewer::set_film (shared_ptr f) _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)); -- 2.30.2