Various stuff; mostly change to decoder scaling and adding subtitle; scaling test.
[dcpomatic.git] / src / lib / player.h
index c9bf2a00b45d9736652e713a141a1eeb5b7d3840..cce2bdc21a600ac3e61b59e40d997c0d876985bf 100644 (file)
@@ -1,3 +1,5 @@
+/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
+
 /*
     Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
 
@@ -34,7 +36,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.
@@ -50,34 +52,25 @@ public:
        void disable_subtitles ();
 
        bool pass ();
-       bool seek (Time);
+       void seek (Time);
        void seek_back ();
        void seek_forward ();
 
-       Time last_video () const {
-               return _last_video;
+       Time position () const {
+               return _position;
        }
 
 private:
 
-       struct RegionDecoder
-       {
-               RegionDecoder ()
-                       : last (0)
-               {}
-               
-               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;
@@ -86,15 +79,12 @@ private:
        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