Merge master.
[dcpomatic.git] / src / lib / film.h
index cb970da4d0667f98f10cbec89d128697e750d982..f5a7c1246c38c2f133f8d82044be6531b26662f8 100644 (file)
@@ -39,7 +39,6 @@
 #include "playlist.h"
 
 class DCPContentType;
-class Container;
 class Job;
 class Filter;
 class Log;
@@ -64,12 +63,11 @@ public:
        std::string info_path (int f) const;
        std::string internal_video_mxf_dir () const;
        std::string internal_video_mxf_filename () const;
-       std::string audio_analysis_path () const;
+       boost::filesystem::path audio_analysis_path (boost::shared_ptr<const AudioContent>) const;
 
        std::string dcp_video_mxf_filename () const;
        std::string dcp_audio_mxf_filename () const;
 
-       void analyse_audio ();
        void send_dcp_to_tms ();
        void make_dcp ();
 
@@ -96,6 +94,8 @@ public:
                return _dirty;
        }
 
+       libdcp::Size full_frame () const;
+
        bool have_dcp () const;
 
        boost::shared_ptr<Player> player () const;
@@ -134,7 +134,6 @@ public:
                DCP_CONTENT_TYPE,
                CONTAINER,
                SCALER,
-               AB,
                WITH_SUBTITLES,
                SUBTITLE_OFFSET,
                SUBTITLE_SCALE,
@@ -142,6 +141,7 @@ public:
                J2K_BANDWIDTH,
                DCI_METADATA,
                DCP_VIDEO_FRAME_RATE,
+               MINIMUM_AUDIO_CHANNELS
        };
 
 
@@ -167,7 +167,7 @@ public:
                return _dcp_content_type;
        }
 
-       Container const * container () const {
+       Ratio const * container () const {
                boost::mutex::scoped_lock lm (_state_mutex);
                return _container;
        }
@@ -177,11 +177,6 @@ public:
                return _scaler;
        }
 
-       bool ab () const {
-               boost::mutex::scoped_lock lm (_state_mutex);
-               return _ab;
-       }
-
        bool with_subtitles () const {
                boost::mutex::scoped_lock lm (_state_mutex);
                return _with_subtitles;
@@ -223,6 +218,11 @@ public:
                return _dcp_audio_channels;
        }
 
+       int minimum_audio_channels () const {
+               boost::mutex::scoped_lock lm (_state_mutex);
+               return _minimum_audio_channels;
+       }
+
        /* SET */
 
        void set_directory (std::string);
@@ -232,9 +232,8 @@ public:
        void add_content (boost::shared_ptr<Content>);
        void remove_content (boost::shared_ptr<Content>);
        void set_dcp_content_type (DCPContentType const *);
-       void set_container (Container const *);
+       void set_container (Ratio const *);
        void set_scaler (Scaler const *);
-       void set_ab (bool);
        void set_with_subtitles (bool);
        void set_subtitle_offset (int);
        void set_subtitle_scale (float);
@@ -243,6 +242,7 @@ public:
        void set_dci_metadata (DCIMetadata);
        void set_dcp_video_frame_rate (int);
        void set_dci_date_today ();
+       void set_minimum_audio_channels (int);
 
        /** Emitted when some property has of the Film has changed */
        mutable boost::signals2::signal<void (Property)> Changed;
@@ -250,24 +250,20 @@ public:
        /** Emitted when some property of our content has changed */
        mutable boost::signals2::signal<void (boost::weak_ptr<Content>, int)> ContentChanged;
 
-       boost::signals2::signal<void ()> AudioAnalysisSucceeded;
-
        /** Current version number of the state file */
        static int const state_version;
 
 private:
        
        void signal_changed (Property);
-       void analyse_audio_finished ();
        std::string video_state_identifier () const;
        void playlist_changed ();
        void playlist_content_changed (boost::weak_ptr<Content>, int);
        std::string filename_safe_name () const;
+       void add_content_weak (boost::weak_ptr<Content>);
 
        /** Log to write to */
        boost::shared_ptr<Log> _log;
-       /** Any running AnalyseAudioJob, or 0 */
-       boost::shared_ptr<AnalyseAudioJob> _analyse_audio_job;
        boost::shared_ptr<Playlist> _playlist;
 
        /** Complete path to directory containing the film metadata;
@@ -284,14 +280,9 @@ private:
        /** The type of content that this Film represents (feature, trailer etc.) */
        DCPContentType const * _dcp_content_type;
        /** The container to put this Film in (flat, scope, etc.) */
-       Container const * _container;
+       Ratio const * _container;
        /** Scaler algorithm to use */
        Scaler const * _scaler;
-       /** true to create an A/B comparison DCP, where the left half of the image
-           is the video without any filters or post-processing, and the right half
-           has the specified filters and post-processing.
-       */
-       bool _ab;
        /** True if subtitles should be shown for this film */
        bool _with_subtitles;
        /** y offset for placing subtitles, in source pixels; +ve is further down
@@ -314,6 +305,7 @@ private:
        /** The date that we should use in a DCI name */
        boost::gregorian::date _dci_date;
        int _dcp_audio_channels;
+       int _minimum_audio_channels;
 
        /** true if our state has changed since we last saved it */
        mutable bool _dirty;