-
- bool _video;
- bool _audio;
- bool _subtitles;
-
- bool _have_valid_decoders;
- std::list<boost::shared_ptr<VideoDecoder> > _video_decoders;
- std::list<boost::shared_ptr<VideoDecoder> >::iterator _video_decoder;
- std::list<boost::shared_ptr<SndfileDecoder> > _sndfile_decoders;
-
- boost::shared_ptr<AudioBuffers> _audio_buffers;
-
- bool _video_sync;
+
+ /** Our pieces are ready to go; if this is false the pieces must be (re-)created before they are used */
+ bool _have_valid_pieces;
+ std::list<boost::shared_ptr<Piece> > _pieces;
+
+ /** Size of the image in the DCP (e.g. 1990x1080 for flat) */
+ dcp::Size _video_container_size;
+ boost::shared_ptr<Image> _black_image;
+
+ /** true if the player should ignore all video; i.e. never produce any */
+ bool _ignore_video;
+ /** true if the player should ignore all audio; i.e. never produce any */
+ bool _ignore_subtitle;
+ /** true if the player should always burn subtitles into the video regardless
+ of content settings
+ */
+ bool _always_burn_subtitles;
+ /** true if we should try to be fast rather than high quality */
+ bool _fast;
+ /** true if we should `play' (i.e output) referenced DCP data (e.g. for preview) */
+ bool _play_referenced;
+
+ /** Time just after the last video frame we emitted, or the time of the last accurate seek */
+ boost::optional<DCPTime> _last_video_time;
+ boost::optional<Eyes> _last_video_eyes;
+ /** Time just after the last audio frame we emitted, or the time of the last accurate seek */
+ boost::optional<DCPTime> _last_audio_time;
+
+ boost::optional<int> _dcp_decode_reduction;
+
+ typedef std::map<boost::weak_ptr<Piece>, boost::shared_ptr<PlayerVideo> > LastVideoMap;
+ LastVideoMap _last_video;
+
+ AudioMerger _audio_merger;
+ Shuffler* _shuffler;
+ std::list<std::pair<boost::shared_ptr<PlayerVideo>, DCPTime> > _delay;
+
+ class StreamState
+ {
+ public:
+ StreamState () {}
+
+ StreamState (boost::shared_ptr<Piece> p, DCPTime l)
+ : piece(p)
+ , last_push_end(l)
+ {}
+
+ boost::shared_ptr<Piece> piece;
+ DCPTime last_push_end;
+ };
+ std::map<AudioStreamPtr, StreamState> _stream_states;
+
+ Empty _black;
+ Empty _silent;
+
+ ActiveSubtitles _active_subtitles;
+ boost::shared_ptr<AudioProcessor> _audio_processor;
+
+ boost::signals2::scoped_connection _film_changed_connection;
+ boost::signals2::scoped_connection _playlist_changed_connection;
+ boost::signals2::scoped_connection _playlist_content_changed_connection;