X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fcpl.h;h=43c8a56ebb3f9f19e6e5b120fe01959316a74705;hb=e08f446c1f73b0190facbd9893a10897fbbf1033;hp=84dbd9ff52d7e784cc2e09a5d845c243c57f28a8;hpb=1a284b7c409567b6ecb223adece779487f70ac92;p=libdcp.git diff --git a/src/cpl.h b/src/cpl.h index 84dbd9ff..43c8a56e 100644 --- a/src/cpl.h +++ b/src/cpl.h @@ -45,6 +45,7 @@ #include "certificate.h" #include "key.h" #include "language_tag.h" +#include "rating.h" #include "types.h" #include #include @@ -59,7 +60,6 @@ struct verify_invalid_language3; namespace dcp { -class ReelEncryptableAsset; class ReelFileAsset; class Reel; class MXFMetadata; @@ -69,11 +69,17 @@ class DecryptedKDM; /** @class CPL * @brief A Composition Playlist + * + * A CPL contains some metadata and a list of Reel objects, each of which may contain picture, sound and other assets + * such as subtitles and closed captions. + * + * After creating a CPL you can add Reel objects with add(), and write an XML file describing the CPL with + * write_xml(). */ class CPL : public Asset { public: - CPL (std::string annotation_text, ContentKind content_kind); + CPL (std::string annotation_text, ContentKind content_kind, Standard standard); /** Construct a CPL object from a XML file */ explicit CPL (boost::filesystem::path file); @@ -82,7 +88,7 @@ public: std::shared_ptr other, EqualityOptions options, NoteHandler note - ) const; + ) const override; /** Add a reel to this CPL * @param reel Reel to add @@ -104,10 +110,6 @@ public: std::vector> reel_file_assets () const; std::vector> reel_file_assets (); - /** @return the ReelEncryptableAssets in this CPL in all reels */ - std::vector> reel_encryptable_assets () const; - std::vector> reel_encryptable_assets (); - /** @return true if we have any encrypted content */ bool any_encrypted () const; @@ -117,12 +119,10 @@ public: /** Write an CompositonPlaylist XML file * * @param file Filename to write - * @param standard INTEROP or SMPTE * @param signer Signer to sign the CPL, or 0 to add no signature */ void write_xml ( boost::filesystem::path file, - Standard standard, std::shared_ptr ) const; @@ -130,10 +130,18 @@ public: int64_t duration () const; + std::string issuer () const { + return _issuer; + } + void set_issuer (std::string issuer) { _issuer = issuer; } + std::string creator () const { + return _creator; + } + void set_creator (std::string creator) { _creator = creator; } @@ -306,7 +314,15 @@ public: void set_additional_subtitle_languages (std::vector const& lang); - boost::optional standard () const { + void set_sign_language_video_language (dcp::LanguageTag lang) { + _sign_language_video_language = lang.to_string(); + } + + boost::optional sign_language_video_language () const { + return _sign_language_video_language; + } + + Standard standard () const { return _standard; } @@ -314,7 +330,7 @@ public: protected: /** @return type string for PKLs for this asset */ - std::string pkl_type (Standard standard) const; + std::string pkl_type (Standard standard) const override; private: friend struct ::verify_invalid_language3; @@ -330,6 +346,10 @@ private: ContentKind _content_kind; ///< <ContentKind> std::vector _content_versions; std::vector _ratings; + /** ID for CompositionMetadataAsset tag; either a random one, ready for writing a new tag, + * or the one read in from the existing CPL. + */ + std::string _cpl_metadata_id = make_uuid(); /** Human-readable name of the composition, without any metadata (i.e. no -FTR-EN-XX- etc.) */ boost::optional _full_content_title_text; boost::optional _full_content_title_text_language; @@ -350,11 +370,12 @@ private: boost::optional _main_picture_active_area; /* See note for _release_territory above */ std::vector _additional_subtitle_languages; + boost::optional _sign_language_video_language; std::vector> _reels; /** Standard of CPL that was read in */ - boost::optional _standard; + Standard _standard; };