X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fplayer.h;h=20d9c9388b33fa00464aa06609a836514220571e;hb=c180f317d5a8b27dd191c1f2228ceb6fc4039393;hp=6d4f6836f6db28f75360afcf47fec172b48f67c5;hpb=0329a95dfdbcc185346c8431d6bb50df1a521100;p=dcpomatic.git diff --git a/src/lib/player.h b/src/lib/player.h index 6d4f6836f..20d9c9388 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -22,6 +22,7 @@ #define DCPOMATIC_PLAYER_H #include "player_subtitles.h" +#include "active_subtitles.h" #include "film.h" #include "content.h" #include "position_image.h" @@ -44,7 +45,6 @@ class Playlist; class Font; class AudioBuffers; class ReferencedReelAsset; -class Resampler; /** @class Player * @brief A class which can `play' a Playlist. @@ -62,7 +62,6 @@ public: void set_video_container_size (dcp::Size); void set_ignore_video (); - void set_enable_subtitles (bool enable); void set_always_burn_subtitles (bool burn); void set_fast (); void set_play_referenced (); @@ -107,15 +106,15 @@ private: void image_subtitle_start (boost::weak_ptr, ContentImageSubtitle); void text_subtitle_start (boost::weak_ptr, ContentTextSubtitle); void subtitle_stop (boost::weak_ptr, ContentTime); - boost::shared_ptr resampler (boost::shared_ptr content, AudioStreamPtr stream, bool create); DCPTime one_video_frame () const; - void fill_video (DCPTimePeriod period); void fill_audio (DCPTimePeriod period); - void audio_flush (boost::shared_ptr, AudioStreamPtr stream); void audio_transform (boost::shared_ptr content, AudioStreamPtr stream, ContentAudio content_audio, DCPTime time); std::pair, DCPTime> discard_audio ( boost::shared_ptr audio, DCPTime time, DCPTime discard_to ) const; + boost::optional subtitles_for_frame (DCPTime time) const; + void emit_video (boost::shared_ptr pv, DCPTime time); + void emit_audio (boost::shared_ptr data, DCPTime time); boost::shared_ptr _film; boost::shared_ptr _playlist; @@ -141,13 +140,14 @@ private: /** true if we should `play' (i.e output) referenced DCP data (e.g. for preview) */ bool _play_referenced; - /** Last PlayerVideo that was emitted */ - boost::shared_ptr _last_video; - /** Time just after the last video frame we emitted, or the last seek time */ + /** Time just after the last video frame we emitted, or the time of the last accurate seek */ boost::optional _last_video_time; - /** Time just after the last audio frame we emitted, or the last seek time */ + /** Time just after the last audio frame we emitted, or the time of the last accurate seek */ boost::optional _last_audio_time; + typedef std::map, boost::shared_ptr > LastVideoMap; + LastVideoMap _last_video; + AudioMerger _audio_merger; class StreamState @@ -168,26 +168,8 @@ private: std::list _no_video; std::list _no_audio; - class ActiveSubtitles - { - public: - ActiveSubtitles () {} - - ActiveSubtitles (PlayerSubtitles s, DCPTime f) - : subs (s) - , from (f) - {} - - PlayerSubtitles subs; - DCPTime from; - boost::optional to; - }; - typedef std::map, ActiveSubtitles> ActiveSubtitlesMap; - ActiveSubtitlesMap _active_subtitles; - + ActiveSubtitles _active_subtitles; boost::shared_ptr _audio_processor; - typedef std::map, AudioStreamPtr>, boost::shared_ptr > ResamplerMap; - ResamplerMap _resamplers; boost::signals2::scoped_connection _film_changed_connection; boost::signals2::scoped_connection _playlist_changed_connection;