+ ~FilmViewer ();
+
+ /** @return the window showing the film's video */
+ wxWindow* panel () const {
+ return _video_view->get();
+ }
+
+ std::shared_ptr<const VideoView> video_view () const {
+ return _video_view;
+ }
+
+ void show_closed_captions ();
+
+ void set_film (std::shared_ptr<Film>);
+ std::shared_ptr<Film> film () const {
+ return _film;
+ }
+
+ void seek (dcpomatic::DCPTime t, bool accurate);
+ void seek (std::shared_ptr<Content> content, dcpomatic::ContentTime p, bool accurate);
+ void seek_by (dcpomatic::DCPTime by, bool accurate);
+ /** @return our `playhead' position; this may not lie exactly on a frame boundary */
+ dcpomatic::DCPTime position () const {
+ return _video_view->position();
+ }
+ dcpomatic::DCPTime one_video_frame () const;
+
+ void start ();
+ bool stop ();
+ void suspend ();
+ void resume ();
+
+ bool playing () const {
+ return _playing;
+ }
+
+ void set_coalesce_player_changes (bool c);
+ void set_dcp_decode_reduction (boost::optional<int> reduction);
+ boost::optional<int> dcp_decode_reduction () const;
+ void set_outline_content (bool o);
+ void set_outline_subtitles (boost::optional<dcpomatic::Rect<double>>);
+ void set_eyes (Eyes e);
+ void set_pad_black (bool p);
+ void set_optimise_for_j2k (bool o);
+
+ void slow_refresh ();
+
+ dcpomatic::DCPTime time () const;
+ boost::optional<dcpomatic::DCPTime> audio_time () const;
+
+ int dropped () const;
+ int errored () const;
+ int gets () const;