Fix fill of timeline periods where there is no video.
[dcpomatic.git] / src / lib / player.h
index eb6589b564cce151cee832f0b2db929cc61411d3..48dcd8892c6891761b96979551477bb272107102 100644 (file)
@@ -62,7 +62,6 @@ public:
 
        void set_video_container_size (dcp::Size);
        void set_ignore_video ();
-       void set_ignore_audio ();
        void set_enable_subtitles (bool enable);
        void set_always_burn_subtitles (bool burn);
        void set_fast ();
@@ -86,7 +85,6 @@ public:
 private:
        friend class PlayerWrapper;
        friend class Piece;
-       friend struct player_overlaps_test;
        friend struct player_time_calculation_test1;
        friend struct player_time_calculation_test2;
        friend struct player_time_calculation_test3;
@@ -104,7 +102,6 @@ private:
        ContentTime dcp_to_content_time (boost::shared_ptr<const Piece> piece, DCPTime t) const;
        DCPTime content_time_to_dcp (boost::shared_ptr<const Piece> piece, ContentTime t) const;
        boost::shared_ptr<PlayerVideo> black_player_video_frame () const;
-       std::list<boost::shared_ptr<Piece> > overlaps (DCPTime from, DCPTime to, boost::function<bool (Content *)> valid);
        void video (boost::weak_ptr<Piece>, ContentVideo);
        void audio (boost::weak_ptr<Piece>, AudioStreamPtr, ContentAudio);
        void image_subtitle_start (boost::weak_ptr<Piece>, ContentImageSubtitle);
@@ -119,6 +116,7 @@ private:
        std::pair<boost::shared_ptr<AudioBuffers>, DCPTime> discard_audio (
                boost::shared_ptr<const AudioBuffers> audio, DCPTime time, DCPTime discard_to
                ) const;
+       boost::optional<PositionImage> subtitles_for_frame (DCPTime time) const;
 
        boost::shared_ptr<const Film> _film;
        boost::shared_ptr<const Playlist> _playlist;
@@ -150,10 +148,12 @@ private:
        boost::optional<DCPTime> _last_video_time;
        /** Time just after the last audio frame we emitted, or the last seek time */
        boost::optional<DCPTime> _last_audio_time;
+       boost::optional<DCPTime> _last_seek_time;
 
        AudioMerger _audio_merger;
 
-       class StreamState {
+       class StreamState
+       {
        public:
                StreamState () {}
 
@@ -170,8 +170,22 @@ private:
        std::list<DCPTimePeriod> _no_video;
        std::list<DCPTimePeriod> _no_audio;
 
-       typedef std::map<boost::weak_ptr<Piece>, std::pair<PlayerSubtitles, DCPTime> > ActiveSubtitles;
-       ActiveSubtitles _active_subtitles;
+       class ActiveSubtitles
+       {
+       public:
+               ActiveSubtitles () {}
+
+               ActiveSubtitles (PlayerSubtitles s, DCPTime f)
+                       : subs (s)
+                       , from (f)
+               {}
+
+               PlayerSubtitles subs;
+               DCPTime from;
+               boost::optional<DCPTime> to;
+       };
+       typedef std::map<boost::weak_ptr<Piece>, std::list<ActiveSubtitles> > ActiveSubtitlesMap;
+       ActiveSubtitlesMap _active_subtitles;
 
        boost::shared_ptr<AudioProcessor> _audio_processor;
        typedef std::map<std::pair<boost::shared_ptr<const AudioContent>, AudioStreamPtr>, boost::shared_ptr<Resampler> > ResamplerMap;