Some basics of AudioMapping.
[dcpomatic.git] / src / lib / film.h
index 071f474aca6f645a097dee2360e88e0a05cc6141..03d472cee3e85a609ecea48f318787896d356674 100644 (file)
@@ -36,7 +36,7 @@
 #include "dci_metadata.h"
 #include "types.h"
 #include "ffmpeg_content.h"
-#include "audio_mapping.h"
+#include "playlist.h"
 
 class DCPContentType;
 class Format;
@@ -48,7 +48,6 @@ class AnalyseAudioJob;
 class ExternalAudioStream;
 class Content;
 class Player;
-class Playlist;
 
 /** @class Film
  *  @brief A representation of some audio and video content, and details of
@@ -87,8 +86,6 @@ public:
        std::string file (std::string f) const;
        std::string dir (std::string d) const;
 
-       int target_audio_sample_rate () const;
-       
        void write_metadata () const;
 
        libdcp::Size cropped_size (libdcp::Size) const;
@@ -103,25 +100,25 @@ public:
        bool have_dcp () const;
 
        boost::shared_ptr<Player> player () const;
+       boost::shared_ptr<Playlist> playlist () const;
+
+       OutputAudioFrame dcp_audio_frame_rate () const;
+
+       OutputAudioFrame time_to_audio_frames (Time) const;
+       OutputVideoFrame time_to_video_frames (Time) const;
+       Time video_frames_to_time (OutputVideoFrame) const;
+       Time audio_frames_to_time (OutputAudioFrame) const;
 
        /* Proxies for some Playlist methods */
 
-       ContentAudioFrame audio_length () const;
-       int audio_channels () const;
-       int audio_frame_rate () const;
-       bool has_audio () const;
-       
-       float video_frame_rate () const;
-       libdcp::Size video_size () const;
-       ContentVideoFrame video_length () const;        
+       Playlist::RegionList regions () const;
 
-       std::vector<FFmpegSubtitleStream> ffmpeg_subtitle_streams () const;
-       boost::optional<FFmpegSubtitleStream> ffmpeg_subtitle_stream () const;
-       std::vector<FFmpegAudioStream> ffmpeg_audio_streams () const;
-       boost::optional<FFmpegAudioStream> ffmpeg_audio_stream () const;
+       Time length () const;
+       bool has_subtitles () const;
+       OutputVideoFrame best_dcp_video_frame_rate () const;
 
-       void set_ffmpeg_subtitle_stream (FFmpegSubtitleStream);
-       void set_ffmpeg_audio_stream (FFmpegAudioStream);
+       void set_loop (int);
+       int loop () const;
 
        enum TrimType {
                CPL,
@@ -136,8 +133,9 @@ public:
                NAME,
                USE_DCI_NAME,
                TRUST_CONTENT_HEADERS,
-               /** The content list has changed (i.e. content has been added, moved around or removed) */
+               /** The playlist's content list has changed (i.e. content has been added, moved around or removed) */
                CONTENT,
+               LOOP,
                DCP_CONTENT_TYPE,
                FORMAT,
                CROP,
@@ -155,8 +153,7 @@ public:
                COLOUR_LUT,
                J2K_BANDWIDTH,
                DCI_METADATA,
-               DCP_FRAME_RATE,
-               AUDIO_MAPPING
+               DCP_VIDEO_FRAME_RATE,
        };
 
 
@@ -182,11 +179,6 @@ public:
                return _trust_content_headers;
        }
 
-       ContentList content () const {
-               boost::mutex::scoped_lock lm (_state_mutex);
-               return _content;
-       }
-
        DCPContentType const * dcp_content_type () const {
                boost::mutex::scoped_lock lm (_state_mutex);
                return _dcp_content_type;
@@ -272,14 +264,10 @@ public:
                return _dci_metadata;
        }
 
-       int dcp_frame_rate () const {
-               boost::mutex::scoped_lock lm (_state_mutex);
-               return _dcp_frame_rate;
-       }
-
-       AudioMapping audio_mapping () const {
+       /* XXX: -> "video_frame_rate" */
+       int dcp_video_frame_rate () const {
                boost::mutex::scoped_lock lm (_state_mutex);
-               return _audio_mapping;
+               return _dcp_video_frame_rate;
        }
 
        /* SET */
@@ -290,8 +278,6 @@ public:
        void set_trust_content_headers (bool);
        void add_content (boost::shared_ptr<Content>);
        void remove_content (boost::shared_ptr<Content>);
-       void move_content_earlier (boost::shared_ptr<Content>);
-       void move_content_later (boost::shared_ptr<Content>);
        void set_dcp_content_type (DCPContentType const *);
        void set_format (Format const *);
        void set_crop (Crop);
@@ -313,9 +299,8 @@ public:
        void set_colour_lut (int);
        void set_j2k_bandwidth (int);
        void set_dci_metadata (DCIMetadata);
-       void set_dcp_frame_rate (int);
+       void set_dcp_video_frame_rate (int);
        void set_dci_date_today ();
-       void set_audio_mapping (AudioMapping);
 
        /** Emitted when some property has of the Film has changed */
        mutable boost::signals2::signal<void (Property)> Changed;
@@ -334,9 +319,8 @@ private:
        void analyse_audio_finished ();
        std::string video_state_identifier () const;
        void read_metadata ();
-       void content_changed (boost::weak_ptr<Content>, int);
-       boost::shared_ptr<FFmpegContent> ffmpeg () const;
-       void setup_default_audio_mapping ();
+       void playlist_changed ();
+       void playlist_content_changed (boost::weak_ptr<Content>, int);
        std::string filename_safe_name () const;
 
        /** Log to write to */
@@ -357,7 +341,6 @@ private:
        /** True if a auto-generated DCI-compliant name should be used for our DCP */
        bool _use_dci_name;
        bool _trust_content_headers;
-       ContentList _content;
        /** The type of content that this Film represents (feature, trailer etc.) */
        DCPContentType const * _dcp_content_type;
        /** The format to present this Film in (flat, scope, etc.) */
@@ -400,10 +383,9 @@ private:
        /** DCI naming stuff */
        DCIMetadata _dci_metadata;
        /** Frames per second to run our DCP at */
-       int _dcp_frame_rate;
+       int _dcp_video_frame_rate;
        /** The date that we should use in a DCI name */
        boost::gregorian::date _dci_date;
-       AudioMapping _audio_mapping;
 
        /** true if our state has changed since we last saved it */
        mutable bool _dirty;