X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fplayer.h;h=dc942bd83e8390a4cc655d29befd6a2c60f9552a;hb=320c20b9538c985005dc850d685eecfc1a5edc98;hp=6d4f6836f6db28f75360afcf47fec172b48f67c5;hpb=0329a95dfdbcc185346c8431d6bb50df1a521100;p=dcpomatic.git diff --git a/src/lib/player.h b/src/lib/player.h index 6d4f6836f..dc942bd83 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" @@ -62,7 +63,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 (); @@ -109,13 +109,15 @@ private: 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; @@ -143,10 +145,12 @@ private: /** 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 empty if we have just seeked */ 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 empty if we have just seeked */ boost::optional _last_audio_time; + boost::optional _last_seek_time; + bool _last_seek_accurate; AudioMerger _audio_merger; @@ -168,23 +172,7 @@ 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;