X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffilm.h;h=d42eb5626b71dad5050e3fa5335002611f59edf1;hb=04f8ba59d17e726570b4c1f361f10c7548fbe5c2;hp=6828df21aa366cad9e7506cedad0b5925a9d2dff;hpb=9b946fc5250eff5a5dd4a661896916fcd5d9bd4b;p=dcpomatic.git diff --git a/src/lib/film.h b/src/lib/film.h index 6828df21a..d42eb5626 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2020 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,30 +18,36 @@ */ + /** @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 "util.h" -#include "types.h" -#include "isdcf_metadata.h" + +#include "change_signaller.h" +#include "dcp_text_track.h" #include "frame_rate_change.h" #include "signaller.h" -#include "dcp_text_track.h" -#include -#include +#include "transcode_job.h" +#include "types.h" +#include "util.h" #include +#include +#include +#include +#include #include #include -#include #include +#include #include #include -#include + namespace xmlpp { class Document; @@ -64,6 +70,7 @@ struct isdcf_name_test; struct recover_test_2d_encrypted; struct atmos_encrypted_passthrough_test; + class InfoFileHandle { public: @@ -93,12 +100,15 @@ private: * * The content of a Film is held in a Playlist (created and managed by the Film). */ -class Film : public std::enable_shared_from_this, public Signaller, public boost::noncopyable +class Film : public std::enable_shared_from_this, public Signaller { public: explicit Film (boost::optional dir); ~Film (); + Film (Film const&) = delete; + Film& operator= (Film const&) = delete; + std::shared_ptr info_file_handle (dcpomatic::DCPTimePeriod period, bool read) const; boost::filesystem::path j2c_path (int, Frame, Eyes, bool) const; boost::filesystem::path internal_video_asset_dir () const; @@ -108,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. @@ -122,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; @@ -143,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; @@ -184,6 +193,13 @@ public: std::list reels () const; std::list mapped_audio_channels () const; + boost::optional audio_language () const { + return _audio_language; + } + + /** @return pair containing the main subtitle language, and additional languages */ + std::pair, std::vector> subtitle_languages () const; + std::string content_summary (dcpomatic::DCPTimePeriod period) const; bool references_dcp_video () const; @@ -201,7 +217,7 @@ public: /** Identifiers for the parts of our state; used for signalling changes. */ - enum Property { + enum class Property { NONE, NAME, USE_ISDCF_NAME, @@ -214,8 +230,8 @@ public: RESOLUTION, ENCRYPTED, J2K_BANDWIDTH, - ISDCF_METADATA, VIDEO_FRAME_RATE, + AUDIO_FRAME_RATE, AUDIO_CHANNELS, /** The setting of _three_d has changed */ THREE_D, @@ -231,13 +247,18 @@ public: NAME_LANGUAGE, AUDIO_LANGUAGE, RELEASE_TERRITORY, + SIGN_LANGUAGE_VIDEO_LANGUAGE, VERSION_NUMBER, STATUS, CHAIN, DISTRIBUTOR, FACILITY, + STUDIO, + TEMP_VERSION, + PRE_RELEASE, + RED_BAND, + TWO_D_VERSION_OF_THREE_D, LUMINANCE, - SUBTITLE_LANGUAGES }; @@ -279,10 +300,6 @@ public: return _j2k_bandwidth; } - ISDCFMetadata isdcf_metadata () const { - return _isdcf_metadata; - } - /** @return The frame rate of the DCP */ int video_frame_rate () const { return _video_frame_rate; @@ -343,12 +360,12 @@ public: return _name_language; } - dcp::LanguageTag audio_language () const { - return _audio_language; + boost::optional release_territory () const { + return _release_territory; } - dcp::LanguageTag::RegionSubtag release_territory () const { - return _release_territory; + boost::optional sign_language_video_language () const { + return _sign_language_video_language; } int version_number () const { @@ -359,24 +376,48 @@ public: return _status; } - std::string chain () const { + boost::optional chain () const { return _chain; } - std::string distributor () const { + boost::optional distributor () const { return _distributor; } - std::string facility () const { + boost::optional facility () const { return _facility; } - dcp::Luminance luminance () const { + boost::optional studio () const { + return _studio; + } + + bool temp_version () const { + return _temp_version; + } + + bool pre_release () const { + return _pre_release; + } + + bool red_band () const { + return _red_band; + } + + bool two_d_version_of_three_d () const { + return _two_d_version_of_three_d; + } + + boost::optional luminance () const { return _luminance; } - std::vector subtitle_languages () const { - return _subtitle_languages; + boost::gregorian::date isdcf_date () const { + return _isdcf_date; + } + + int audio_frame_rate () const { + return _audio_frame_rate; } /* SET */ @@ -395,7 +436,6 @@ public: void set_resolution (Resolution, bool user_explicit = true); void set_encrypted (bool); void set_j2k_bandwidth (int); - void set_isdcf_metadata (ISDCFMetadata); void set_video_frame_rate (int rate, bool user_explicit = false); void set_audio_channels (int); void set_three_d (bool); @@ -412,17 +452,21 @@ public: void set_ratings (std::vector r); void set_content_versions (std::vector v); void set_name_language (dcp::LanguageTag lang); - void set_audio_language (dcp::LanguageTag lang); - void set_release_territory (dcp::LanguageTag::RegionSubtag region); + 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 (std::string c); - void set_facility (std::string f); - void set_distributor (std::string d); - void set_luminance (dcp::Luminance l); - void set_subtitle_language (dcp::LanguageTag language); - void unset_subtitle_language (); - void set_subtitle_languages (std::vector languages); + void set_chain (boost::optional c = boost::none); + void set_facility (boost::optional f = boost::none); + void set_studio (boost::optional s = boost::none); + void set_temp_version (bool t); + void set_pre_release (bool p); + void set_red_band (bool r); + void set_two_d_version_of_three_d (bool t); + 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; @@ -437,6 +481,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; @@ -448,7 +494,7 @@ private: friend struct ::isdcf_name_test; friend struct ::recover_test_2d_encrypted; friend struct ::atmos_encrypted_passthrough_test; - template friend class ChangeSignaller; + template friend class ChangeSignaller; boost::filesystem::path info_file (dcpomatic::DCPTimePeriod p) const; @@ -463,8 +509,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; @@ -493,8 +538,6 @@ private: std::string _context_id; /** bandwidth for J2K files in bits per second */ int _j2k_bandwidth; - /** ISDCF naming stuff */ - ISDCFMetadata _isdcf_metadata; /** Frames per second to run our DCP at */ int _video_frame_rate; /** The date that we should use in a ISDCF name */ @@ -520,15 +563,21 @@ private: std::vector _ratings; std::vector _content_versions; dcp::LanguageTag _name_language; - dcp::LanguageTag _audio_language; - dcp::LanguageTag::RegionSubtag _release_territory; + boost::optional _release_territory; + boost::optional _sign_language_video_language; int _version_number; dcp::Status _status; - std::string _chain; - std::string _distributor; - std::string _facility; - dcp::Luminance _luminance; - std::vector _subtitle_languages; + boost::optional _chain; + boost::optional _distributor; + boost::optional _facility; + boost::optional _studio; + bool _temp_version = false; + bool _pre_release = false; + bool _red_band = false; + bool _two_d_version_of_three_d = false; + boost::optional _luminance; + boost::optional _audio_language; + int _audio_frame_rate = 48000; int _state_version; @@ -555,4 +604,8 @@ private: friend struct film_metadata_test; }; + +typedef ChangeSignaller FilmChangeSignaller; + + #endif