X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fplayer.h;h=0add90e97c82aedc9d34c45eea2d1899a4296714;hb=9a87c9adf70bf1be221507d1e258a68e8c19c175;hp=22701cb2ca452c486746f643063c7bb7affa1250;hpb=53613ae56de4ee785d943c0cb91205c59d91f8f4;p=dcpomatic.git diff --git a/src/lib/player.h b/src/lib/player.h index 22701cb2c..0add90e97 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -32,6 +32,7 @@ #include "content_text.h" #include "content_video.h" #include "empty.h" +#include "enum_indexed_vector.h" #include "film.h" #include "image.h" #include "player_text.h" @@ -62,20 +63,28 @@ public: static int const FILM_VIDEO_FRAME_RATE; static int const DCP_DECODE_REDUCTION; static int const PLAYBACK_LENGTH; + static int const IGNORE_VIDEO; + static int const IGNORE_AUDIO; + static int const IGNORE_TEXT; + static int const ALWAYS_BURN_OPEN_SUBTITLES; + static int const PLAY_REFERENCED; }; /** @class Player * @brief A class which can play a Playlist. */ -class Player : public std::enable_shared_from_this +class Player { public: Player (std::shared_ptr, Image::Alignment subtitle_alignment); Player (std::shared_ptr, std::shared_ptr 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); @@ -98,6 +107,12 @@ public: boost::optional content_time_to_dcp (std::shared_ptr content, dcpomatic::ContentTime t) const; boost::optional dcp_to_content_time (std::shared_ptr content, dcpomatic::DCPTime t) const; + void signal_change(ChangeType type, int property); + + /** First parameter is PENDING, DONE or CANCELLED. + * Second parameter is the property. + * Third parameter is true if these signals are currently likely to be frequent. + */ boost::signals2::signal Change; /** Emitted when a video frame is ready. These emissions happen in the correct order. */ @@ -125,6 +140,7 @@ private: friend struct overlap_video_test1; void construct (); + void connect(); void setup_pieces (); void film_change (ChangeType, Film::Property); void playlist_change (ChangeType); @@ -161,9 +177,9 @@ private: */ mutable boost::mutex _mutex; - std::shared_ptr const _film; + std::weak_ptr _film; /** Playlist, or 0 if we are using the one from the _film */ - std::shared_ptr const _playlist; + std::shared_ptr _playlist; /** > 0 if we are suspended (i.e. pass() and seek() do nothing) */ boost::atomic _suspended; @@ -186,7 +202,7 @@ private: /** true if we should try to be fast rather than high quality */ boost::atomic _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 _play_referenced; @@ -224,13 +240,13 @@ private: Empty _black; Empty _silent; - ActiveText _active_texts[static_cast(TextType::COUNT)]; + EnumIndexedVector _active_texts; std::shared_ptr _audio_processor; boost::atomic _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;