+ boost::shared_ptr<Film> film () const {
+ return _film;
+ }
+
+ void seek (dcpomatic::DCPTime t, bool accurate);
+ void seek (boost::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_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_eyes (Eyes e);
+ void set_pad_black (bool p);
+
+ void slow_refresh ();
+
+ int dropped () const {
+ return _dropped;
+ }
+
+ int audio_callback (void* out, unsigned int frames);
+
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+ void set_background_image (bool b) {
+ _background_image = b;
+ refresh_view ();
+ }
+
+ bool background_image () const {
+ return _background_image;
+ }
+#endif
+
+ StateTimer const & state_timer () const {
+ return _state_timer;
+ }
+
+ StateTimer& state_timer () {
+ return _state_timer;
+ }
+
+ int gets () const {
+ return _gets;
+ }
+
+ /* Some accessors that VideoView classes need */
+ dcp::Size out_size () const {
+ return _out_size;
+ }
+ dcp::Size inter_size () const {
+ return _inter_size;
+ }
+ Position<int> inter_position () const {
+ return _inter_position;
+ }
+ bool outline_content () const {
+ return _outline_content;
+ }
+ bool pad_black () const {
+ return _pad_black;
+ }
+ boost::shared_ptr<Butler> butler () const {
+ return _butler;
+ }
+
+ boost::signals2::signal<void (boost::weak_ptr<PlayerVideo>)> ImageChanged;
+ boost::signals2::signal<void ()> PositionChanged;
+ boost::signals2::signal<void (dcpomatic::DCPTime)> Started;
+ boost::signals2::signal<void (dcpomatic::DCPTime)> Stopped;
+ /** While playing back we reached the end of the film (emitted from GUI thread) */
+ boost::signals2::signal<void ()> Finished;
+
+ boost::signals2::signal<bool ()> PlaybackPermitted;