X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffilm.h;h=43b5d1a173406cf02905ff013a758d27ce21195c;hb=dbc43b6e3021e34875d7d5bba04abf7ad1fc8633;hp=e1084e1ca048c221e45b687c052d605bdd787c13;hpb=20cd8bdecb9667f7d838dbb7210f3e1a4765c662;p=dcpomatic.git diff --git a/src/lib/film.h b/src/lib/film.h index e1084e1ca..43b5d1a17 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,14 +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; @@ -64,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 (); @@ -107,12 +109,26 @@ 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; libdcp::Size video_size () const; - ContentVideoFrame video_length () const; + ContentVideoFrame video_length () const; + + ContentVideoFrame content_length () const; + + std::vector ffmpeg_subtitle_streams () const; + boost::optional ffmpeg_subtitle_stream () const; + std::vector ffmpeg_audio_streams () const; + boost::optional ffmpeg_audio_stream () const; + + 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. @@ -132,17 +148,17 @@ public: TRIM_START, TRIM_END, AB, + TRIM_TYPE, AUDIO_GAIN, AUDIO_DELAY, - STILL_DURATION, - SUBTITLE_STREAM, WITH_SUBTITLES, SUBTITLE_OFFSET, SUBTITLE_SCALE, COLOUR_LUT, J2K_BANDWIDTH, DCI_METADATA, - DCP_FRAME_RATE + DCP_FRAME_RATE, + AUDIO_MAPPING }; @@ -208,6 +224,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; @@ -258,6 +279,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); @@ -280,6 +306,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); @@ -290,12 +317,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; @@ -308,6 +336,10 @@ private: void analyse_audio_finished (); std::string video_state_identifier () const; void read_metadata (); + 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; @@ -322,7 +354,7 @@ 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; @@ -342,6 +374,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. @@ -372,6 +405,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;