Basic (untested) ebur128 (#368).
[dcpomatic.git] / src / lib / player.h
index a795f8174323002900ece524f1cffcad88309cdd..bfb21abba515c3e0fed011b006e7adc8fa0a14cd 100644 (file)
 #ifndef DCPOMATIC_PLAYER_H
 #define DCPOMATIC_PLAYER_H
 
-#include "content.h"
+#include "player_subtitles.h"
 #include "film.h"
-#include "rect.h"
-#include "audio_content.h"
-#include "dcpomatic_time.h"
-#include "content_subtitle.h"
+#include "content.h"
 #include "position_image.h"
 #include "piece.h"
-#include "content_video.h"
-#include "player_subtitles.h"
 #include <boost/shared_ptr.hpp>
 #include <boost/enable_shared_from_this.hpp>
 #include <list>
 
-class Job;
-class Film;
-class AudioContent;
-class Piece;
-class Image;
-class Decoder;
-class Resampler;
+namespace dcp {
+       class ReelAsset;
+}
+
 class PlayerVideo;
-class ImageProxy;
+class Playlist;
 class Font;
+class AudioBuffers;
+class ReferencedReelAsset;
 
 /** @class Player
  *  @brief A class which can `play' a Playlist.
@@ -55,13 +49,17 @@ public:
 
        std::list<boost::shared_ptr<PlayerVideo> > get_video (DCPTime time, bool accurate);
        boost::shared_ptr<AudioBuffers> get_audio (DCPTime time, DCPTime length, bool accurate);
-       PlayerSubtitles get_subtitles (DCPTime time, DCPTime length, bool starting, bool burnt);
+       PlayerSubtitles get_subtitles (DCPTime time, DCPTime length, bool starting, bool burnt, bool accurate);
        std::list<boost::shared_ptr<Font> > get_subtitle_fonts ();
+       std::list<ReferencedReelAsset> get_reel_assets ();
 
        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 ();
+       void set_play_referenced ();
 
        /** Emitted when something has changed such that if we went back and emitted
         *  the last frame again it would look different.  This is not emitted after
@@ -90,6 +88,7 @@ private:
        DCPTime content_video_to_dcp (boost::shared_ptr<const Piece> piece, Frame f) const;
        Frame dcp_to_resampled_audio (boost::shared_ptr<const Piece> piece, DCPTime t) const;
        ContentTime dcp_to_content_subtitle (boost::shared_ptr<const Piece> piece, DCPTime t) const;
+       DCPTime content_subtitle_to_dcp (boost::shared_ptr<const Piece> piece, ContentTime t) const;
        boost::shared_ptr<PlayerVideo> black_player_video_frame (DCPTime) const;
 
        /** @return Pieces of content type C that overlap a specified time range in the DCP */
@@ -107,7 +106,7 @@ private:
                                continue;
                        }
 
-                       if ((*i)->content->position() <= to && (*i)->content->end() >= from) {
+                       if ((*i)->content->position() < to && (*i)->content->end() > from) {
                                overlaps.push_back (*i);
                        }
                }
@@ -128,10 +127,16 @@ private:
 
        /** true if the player should ignore all video; i.e. never produce any */
        bool _ignore_video;
+       /** true if the player should ignore all audio; i.e. never produce any */
+       bool _ignore_audio;
        /** true if the player should always burn subtitles into the video regardless
            of content settings
        */
        bool _always_burn_subtitles;
+       /** true if we should try to be fast rather than high quality */
+       bool _fast;
+       /** true if we should `play' (i.e output) referenced DCP data (e.g. for preview) */
+       bool _play_referenced;
 
        boost::shared_ptr<AudioProcessor> _audio_processor;