X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Ffilm.h;h=babc14a295c2d75cba261cf56c1dd2120ccdb03a;hp=a2e0c8b60e6be2a198bd788365664879876491cc;hb=cc279961a2a9ffea67ed21378fef44c2e1bcb202;hpb=cac7313566d2524f28449bad56bda3f03af3c3a4 diff --git a/src/lib/film.h b/src/lib/film.h index a2e0c8b60..babc14a29 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -18,23 +18,32 @@ */ + /** @file src/film.h * @brief A representation of some audio and video content, and details of * how they should be presented in a DCP. */ + #ifndef DCPOMATIC_FILM_H #define DCPOMATIC_FILM_H + #include "change_signaller.h" #include "dcp_text_track.h" +#include "dcpomatic_time.h" #include "frame_rate_change.h" +#include "named_channel.h" +#include "resolution.h" #include "signaller.h" +#include "transcode_job.h" #include "types.h" #include "util.h" #include +#include #include #include +#include #include #include #include @@ -43,6 +52,7 @@ #include #include + namespace xmlpp { class Document; } @@ -61,20 +71,17 @@ class Ratio; class Job; class Film; struct isdcf_name_test; +struct isdcf_name_with_atmos; struct recover_test_2d_encrypted; struct atmos_encrypted_passthrough_test; + class InfoFileHandle { public: InfoFileHandle (boost::mutex& mutex, boost::filesystem::path file, bool read); - ~InfoFileHandle (); - FILE* get () const { - return _handle; - } - - boost::filesystem::path file () const { + dcp::File& get () { return _file; } @@ -82,10 +89,10 @@ private: friend class Film; boost::mutex::scoped_lock _lock; - FILE* _handle; - boost::filesystem::path _file; + dcp::File _file; }; + /** @class Film * * @brief A representation of some audio, video, subtitle and closed-caption content, @@ -111,7 +118,6 @@ public: boost::filesystem::path subtitle_analysis_path (std::shared_ptr) const; void send_dcp_to_tms (); - void make_dcp (bool gui = false, bool check = true); /** @return Logger. * It is safe to call this from any thread. @@ -125,7 +131,7 @@ public: void use_template (std::string name); std::list read_metadata (boost::optional path = boost::optional ()); - void write_metadata () const; + void write_metadata (); void write_metadata (boost::filesystem::path path) const; void write_template (boost::filesystem::path path) const; std::shared_ptr metadata (bool with_content_paths = true) const; @@ -146,13 +152,13 @@ public: std::vector cpls () const; - int audio_frame_rate () const; - std::list closed_caption_tracks () const; uint64_t required_disk_space () const; bool should_be_enough_disk_space (double& required, double& available, bool& can_hard_link) const; + bool has_sign_language_video_channel () const; + /* Proxies for some Playlist methods */ ContentList content () const; @@ -208,6 +214,8 @@ public: return _tolerant; } + bool last_written_by_earlier_than(int major, int minor, int micro) const; + /** Identifiers for the parts of our state; used for signalling changes. */ @@ -225,6 +233,7 @@ public: ENCRYPTED, J2K_BANDWIDTH, VIDEO_FRAME_RATE, + AUDIO_FRAME_RATE, AUDIO_CHANNELS, /** The setting of _three_d has changed */ THREE_D, @@ -240,6 +249,7 @@ public: NAME_LANGUAGE, AUDIO_LANGUAGE, RELEASE_TERRITORY, + SIGN_LANGUAGE_VIDEO_LANGUAGE, VERSION_NUMBER, STATUS, CHAIN, @@ -356,6 +366,10 @@ public: return _release_territory; } + boost::optional sign_language_video_language () const { + return _sign_language_video_language; + } + int version_number () const { return _version_number; } @@ -400,6 +414,13 @@ public: return _luminance; } + boost::gregorian::date isdcf_date () const { + return _isdcf_date; + } + + int audio_frame_rate () const { + return _audio_frame_rate; + } /* SET */ @@ -434,6 +455,7 @@ public: void set_content_versions (std::vector v); void set_name_language (dcp::LanguageTag lang); void set_release_territory (boost::optional region = boost::none); + void set_sign_language_video_language (boost::optional tag); void set_version_number (int v); void set_status (dcp::Status s); void set_chain (boost::optional c = boost::none); @@ -446,6 +468,7 @@ public: void set_distributor (boost::optional d = boost::none); void set_luminance (boost::optional l = boost::none); void set_audio_language (boost::optional language); + void set_audio_frame_rate (int rate); void add_ffoc_lfoc (Markers& markers) const; @@ -460,6 +483,8 @@ public: */ mutable boost::signals2::signal LengthChange; + boost::signals2::signal DirtyChange; + /** Emitted when we have something important to tell the user */ boost::signals2::signal Message; @@ -469,6 +494,7 @@ public: private: friend struct ::isdcf_name_test; + friend struct ::isdcf_name_with_atmos; friend struct ::recover_test_2d_encrypted; friend struct ::atmos_encrypted_passthrough_test; template friend class ChangeSignaller; @@ -486,8 +512,7 @@ private: void audio_analysis_finished (); void check_settings_consistency (); void maybe_set_container_and_resolution (); - - static std::string const metadata_file; + void set_dirty (bool dirty); /** Log to write to */ std::shared_ptr _log; @@ -498,6 +523,8 @@ private: */ boost::optional _directory; + boost::optional _last_written_by; + /** Name for DCP-o-matic */ std::string _name; /** True if a auto-generated ISDCF-compliant name should be used for our DCP */ @@ -542,6 +569,7 @@ private: std::vector _content_versions; dcp::LanguageTag _name_language; boost::optional _release_territory; + boost::optional _sign_language_video_language; int _version_number; dcp::Status _status; boost::optional _chain; @@ -554,6 +582,7 @@ private: bool _two_d_version_of_three_d = false; boost::optional _luminance; boost::optional _audio_language; + int _audio_frame_rate = 48000; int _state_version;