X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffilm.h;h=071f474aca6f645a097dee2360e88e0a05cc6141;hb=147cca5876dfbdf56e21289c3a36bec4b4850191;hp=a03fd5d9757dc658ac29f6a5c3cf4d64e5f60682;hpb=675e849d19812f5ed2d63b3bc0e34f142e6abb89;p=dcpomatic.git diff --git a/src/lib/film.h b/src/lib/film.h index a03fd5d97..071f474ac 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -22,8 +22,8 @@ * how they should be presented in a DCP. */ -#ifndef DVDOMATIC_FILM_H -#define DVDOMATIC_FILM_H +#ifndef DCPOMATIC_FILM_H +#define DCPOMATIC_FILM_H #include #include @@ -32,15 +32,13 @@ #include #include #include -extern "C" { -#include -} -#include "dcp_content_type.h" #include "util.h" #include "dci_metadata.h" #include "types.h" #include "ffmpeg_content.h" +#include "audio_mapping.h" +class DCPContentType; class Format; class Job; class Filter; @@ -65,11 +63,14 @@ public: std::string info_dir () const; std::string j2c_path (int f, bool t) const; std::string info_path (int f) const; - std::string video_mxf_dir () const; - std::string video_mxf_filename () const; + std::string internal_video_mxf_dir () const; + std::string internal_video_mxf_filename () const; std::string audio_analysis_path () const; void examine_content (boost::shared_ptr); + 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 (); @@ -108,7 +109,6 @@ public: ContentAudioFrame audio_length () const; int audio_channels () const; int audio_frame_rate () const; - int64_t audio_channel_layout () const; bool has_audio () const; float video_frame_rate () const; @@ -122,7 +122,12 @@ public: void set_ffmpeg_subtitle_stream (FFmpegSubtitleStream); void set_ffmpeg_audio_stream (FFmpegAudioStream); - + + enum TrimType { + CPL, + ENCODE + }; + /** Identifiers for the parts of our state; used for signalling changes. */ @@ -141,6 +146,7 @@ public: TRIM_START, TRIM_END, AB, + TRIM_TYPE, AUDIO_GAIN, AUDIO_DELAY, WITH_SUBTITLES, @@ -149,7 +155,8 @@ public: COLOUR_LUT, J2K_BANDWIDTH, DCI_METADATA, - DCP_FRAME_RATE + DCP_FRAME_RATE, + AUDIO_MAPPING }; @@ -215,6 +222,11 @@ public: return _trim_end; } + TrimType trim_type () const { + boost::mutex::scoped_lock lm (_state_mutex); + return _trim_type; + } + bool ab () const { boost::mutex::scoped_lock lm (_state_mutex); return _ab; @@ -265,6 +277,11 @@ public: return _dcp_frame_rate; } + AudioMapping audio_mapping () const { + boost::mutex::scoped_lock lm (_state_mutex); + return _audio_mapping; + } + /* SET */ void set_directory (std::string); @@ -287,6 +304,7 @@ public: void set_trim_start (int); void set_trim_end (int); void set_ab (bool); + void set_trim_type (TrimType); void set_audio_gain (float); void set_audio_delay (int); void set_with_subtitles (bool); @@ -297,12 +315,13 @@ public: void set_dci_metadata (DCIMetadata); void set_dcp_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 Changed; /** Emitted when some property of our content has changed */ - mutable boost::signals2::signal ContentChanged; + mutable boost::signals2::signal, int)> ContentChanged; boost::signals2::signal AudioAnalysisSucceeded; @@ -315,8 +334,10 @@ private: void analyse_audio_finished (); std::string video_state_identifier () const; void read_metadata (); - void content_changed (int); + void content_changed (boost::weak_ptr, int); boost::shared_ptr ffmpeg () const; + void setup_default_audio_mapping (); + std::string filename_safe_name () const; /** Log to write to */ boost::shared_ptr _log; @@ -331,13 +352,12 @@ private: /** Mutex for _directory */ mutable boost::mutex _directory_mutex; - /** Name for DVD-o-matic */ + /** Name for DCP-o-matic */ std::string _name; /** True if a auto-generated DCI-compliant name should be used for our DCP */ bool _use_dci_name; bool _trust_content_headers; ContentList _content; - std::list _content_connections; /** 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.) */ @@ -352,6 +372,7 @@ private: int _trim_start; /** Frames to trim off the end of the DCP */ int _trim_end; + TrimType _trim_type; /** 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. @@ -382,6 +403,7 @@ private: int _dcp_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;