X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fplayer.h;h=e4fb832209025117a3f5c02414a3d429bf62bc5a;hb=01791aac0b11e9f296cd31a7803e287203bd8355;hp=4b963515707f1f0a39930e5fef6d4a4e379fc0aa;hpb=11c70b0e3051517e7bb96a7d6fa53053dab6e978;p=dcpomatic.git diff --git a/src/lib/player.h b/src/lib/player.h index 4b9635157..e4fb83220 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -1,5 +1,3 @@ -/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */ - /* Copyright (C) 2013 Carl Hetherington @@ -36,7 +34,7 @@ class Job; class Film; class Playlist; class AudioContent; -class Decoder; +class Piece; /** @class Player * @brief A class which can `play' a Playlist; emitting its audio and video. @@ -49,55 +47,44 @@ public: void disable_video (); void disable_audio (); - void disable_subtitles (); bool pass (); - bool seek (Time); + void seek (Time); void seek_back (); void seek_forward (); - Time last_video () const { - return _last_video; + /** @return position that we are at; ie the time of the next thing we will emit on pass() */ + Time position () const { + return _position; } + void set_video_container_size (libdcp::Size); + private: - struct DecoderRecord - { - DecoderRecord () - : last (0) - {} - - boost::shared_ptr content; - boost::shared_ptr decoder; - Time last; - }; - - void process_video (boost::shared_ptr, boost::shared_ptr, bool, boost::shared_ptr, Time); - void process_audio (boost::shared_ptr, boost::shared_ptr, Time); - void setup_decoders (); + void process_video (boost::weak_ptr, boost::shared_ptr, bool, Time); + void process_audio (boost::weak_ptr, boost::shared_ptr, Time); + void setup_pieces (); void playlist_changed (); void content_changed (boost::weak_ptr, int); - void emit_black_frame (); - void emit_silence (Time); + void do_seek (Time, bool); + void add_black_piece (Time, Time); + void add_silent_piece (Time, Time); + void flush (); boost::shared_ptr _film; boost::shared_ptr _playlist; bool _video; bool _audio; - bool _subtitles; - - /** Our decoders are ready to go; if this is false the decoders must be (re-)created before they are used */ - bool _have_valid_decoders; - std::list > _decoders; - /* XXX: position and last_video? Need both? */ + /** 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 > _pieces; Time _position; AudioBuffers _audio_buffers; - Time _last_video; - bool _last_was_black; - Time _last_audio; + Time _next_audio; + boost::optional _video_container_size; }; #endif