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.
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;
}
private:
- struct RegionDecoder
- {
- RegionDecoder ()
- : last (0)
- {}
-
- boost::shared_ptr<Playlist::Region> region;
- boost::shared_ptr<Decoder> decoder;
- Time last;
- };
-
- void process_video (boost::shared_ptr<RegionDecoder>, boost::shared_ptr<const Image>, bool, boost::shared_ptr<Subtitle>, Time);
- void process_audio (boost::shared_ptr<RegionDecoder>, boost::shared_ptr<const AudioBuffers>, Time);
- void setup_decoders ();
+ void process_video (boost::weak_ptr<Content>, boost::shared_ptr<const Image>, bool, Time);
+ void process_audio (boost::weak_ptr<Content>, boost::shared_ptr<const AudioBuffers>, Time);
+ void setup_pieces ();
void playlist_changed ();
void content_changed (boost::weak_ptr<Content>, 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<const Film> _film;
boost::shared_ptr<const Playlist> _playlist;
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<boost::shared_ptr<RegionDecoder> > _decoders;
-
+ /** 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;
Time _position;
AudioBuffers _audio_buffers;
- Time _last_video;
- bool _last_was_black;
- Time _last_audio;
+ Time _next_audio;
};
#endif