Remove in-place translations support.
[dcpomatic.git] / src / lib / player.h
index 6e83da103df66d8444171025230c8912dc59e702..94e41bbcace5aceab2ea56c05ef88c7f83166e9f 100644 (file)
 #include "content_audio.h"
 #include "content_text.h"
 #include "content_video.h"
+#include "dcp_text_track.h"
 #include "empty.h"
 #include "enum_indexed_vector.h"
-#include "film.h"
+#include "film_property.h"
 #include "image.h"
 #include "player_text.h"
 #include "position_image.h"
@@ -49,6 +50,7 @@ namespace dcp {
 class AtmosContent;
 class AudioBuffers;
 class Content;
+class Film;
 class PlayerVideo;
 class Playlist;
 class ReferencedReelAsset;
@@ -74,14 +76,17 @@ public:
 /** @class Player
  *  @brief A class which can play a Playlist.
  */
-class Player : public std::enable_shared_from_this<Player>
+class Player
 {
 public:
        Player (std::shared_ptr<const Film>, Image::Alignment subtitle_alignment);
        Player (std::shared_ptr<const Film>, std::shared_ptr<const Playlist> playlist);
 
-       Player (Player const& Player) = delete;
-       Player& operator= (Player const& Player) = delete;
+       Player (Player const&) = delete;
+       Player& operator= (Player const&) = delete;
+
+       Player(Player&& other);
+       Player& operator=(Player&& other);
 
        bool pass ();
        void seek (dcpomatic::DCPTime time, bool accurate);
@@ -100,6 +105,7 @@ public:
        void set_fast ();
        void set_play_referenced ();
        void set_dcp_decode_reduction (boost::optional<int> reduction);
+       void set_disable_audio_processor();
 
        boost::optional<dcpomatic::DCPTime> content_time_to_dcp (std::shared_ptr<const Content> content, dcpomatic::ContentTime t) const;
        boost::optional<dcpomatic::ContentTime> dcp_to_content_time (std::shared_ptr<const Content> content, dcpomatic::DCPTime t) const;
@@ -137,8 +143,9 @@ private:
        friend struct overlap_video_test1;
 
        void construct ();
+       void connect();
        void setup_pieces ();
-       void film_change (ChangeType, Film::Property);
+       void film_change(ChangeType, FilmProperty);
        void playlist_change (ChangeType);
        void playlist_content_change (ChangeType, int, bool);
        Frame dcp_to_content_video (std::shared_ptr<const Piece> piece, dcpomatic::DCPTime t) const;
@@ -173,13 +180,13 @@ private:
        */
        mutable boost::mutex _mutex;
 
-       std::weak_ptr<const Film> const _film;
+       std::weak_ptr<const Film> _film;
        /** Playlist, or 0 if we are using the one from the _film */
-       std::shared_ptr<const Playlist> const _playlist;
+       std::shared_ptr<const Playlist> _playlist;
 
        /** > 0 if we are suspended (i.e. pass() and seek() do nothing) */
        boost::atomic<int> _suspended;
-       std::list<std::shared_ptr<Piece>> _pieces;
+       std::vector<std::shared_ptr<Piece>> _pieces;
 
        /** Size of the image we are rendering to; this may be the DCP frame size, or
         *  the size of preview in a window.
@@ -198,7 +205,7 @@ private:
        /** true if we should try to be fast rather than high quality */
        boost::atomic<bool> _fast;
        /** true if we should keep going in the face of `survivable' errors */
-       bool const _tolerant;
+       bool _tolerant;
        /** true if we should `play' (i.e output) referenced DCP data (e.g. for preview) */
        boost::atomic<bool> _play_referenced;
 
@@ -223,13 +230,12 @@ private:
        public:
                StreamState () {}
 
-               StreamState (std::shared_ptr<Piece> p, dcpomatic::DCPTime l)
+               explicit StreamState(std::shared_ptr<Piece> p)
                        : piece(p)
-                       , last_push_end(l)
                {}
 
                std::shared_ptr<Piece> piece;
-               dcpomatic::DCPTime last_push_end;
+               boost::optional<dcpomatic::DCPTime> last_push_end;
        };
        std::map<AudioStreamPtr, StreamState> _stream_states;
 
@@ -238,11 +244,12 @@ private:
 
        EnumIndexedVector<ActiveText, TextType> _active_texts;
        std::shared_ptr<AudioProcessor> _audio_processor;
+       bool _disable_audio_processor = false;
 
        boost::atomic<dcpomatic::DCPTime> _playback_length;
 
        /** Alignment for subtitle images that we create */
-       Image::Alignment const _subtitle_alignment = Image::Alignment::PADDED;
+       Image::Alignment _subtitle_alignment = Image::Alignment::PADDED;
 
        boost::signals2::scoped_connection _film_changed_connection;
        boost::signals2::scoped_connection _playlist_change_connection;