X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fdcp.h;h=403eea9ef8f3b049d6665bde70a32e0caf1229bd;hb=e1e7de8d73bedd0c741e7df0390068c67867e09f;hp=3eab743ec8453560dd3e825ee786640a6932e9d0;hpb=d39880eef211a296fa8ef4712cdef5945d08527c;p=libdcp.git diff --git a/src/dcp.h b/src/dcp.h index 3eab743e..403eea9e 100644 --- a/src/dcp.h +++ b/src/dcp.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2020 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington This file is part of libdcp. @@ -31,13 +31,16 @@ files in the program, then also delete it here. */ + /** @file src/dcp.h - * @brief DCP class. + * @brief DCP class */ + #ifndef LIBDCP_DCP_H #define LIBDCP_DCP_H + #include "compose.hpp" #include "types.h" #include "util.h" @@ -46,20 +49,23 @@ #include "name_format.h" #include "verify.h" #include "version.h" -#include #include +#include #include #include + namespace xmlpp { class Document; class Element; } + /** @brief Namespace for everything in libdcp */ namespace dcp { + class PKL; class Content; class Reel; @@ -69,11 +75,11 @@ class DecryptedKDM; class Asset; class ReadError; + /** @class DCP - * @brief A class to create or read a DCP. + * @brief A class to create or read a DCP */ - -class DCP : public boost::noncopyable +class DCP { public: /** Construct a DCP. You can pass an existing DCP's directory @@ -85,13 +91,28 @@ public: */ explicit DCP (boost::filesystem::path directory); - /** Read the DCP's structure into this object. + DCP (DCP const&) = delete; + DCP& operator= (DCP const&) = delete; + + /** Read a DCP. This method does not do any deep checking of the DCP's validity, but + * if it comes across any bad things it will do one of two things. + * + * Errors that are so serious that they prevent the method from working will result + * in an exception being thrown. For example, a missing ASSETMAP means that the DCP + * can't be read without a lot of guesswork, so this will throw. + * + * Errors that are not fatal will be added to notes, if it's non-null. For example, + * if the DCP contains a mixture of Interop and SMPTE elements this will result + * in a note being added to the vector. + * + * For more thorough checking of a DCP's contents, see dcp::verify(). + * * @param notes List of notes that will be added to if non-0. * @param ignore_incorrect_picture_mxf_type true to try loading MXF files marked as monoscopic * as stereoscopic if the monoscopic load fails; fixes problems some 3D DCPs that (I think) * have an incorrect descriptor in their MXF. */ - void read (std::list* notes = 0, bool ignore_incorrect_picture_mxf_type = false); + void read (std::vector* notes = nullptr, bool ignore_incorrect_picture_mxf_type = false); /** Compare this DCP with another, according to various options. * @param other DCP to compare this one to. @@ -103,24 +124,43 @@ public: void add (std::shared_ptr cpl); - std::list > cpls () const; - std::list > assets (bool ignore_unresolved = false) const; + std::vector> cpls () const; + + /** @param ignore_unresolved true to silently ignore unresolved assets, otherwise + * an exception is thrown if they are found. + * @return All assets (including CPLs). + */ + std::vector> assets (bool ignore_unresolved = false) const; - bool encrypted () const; + bool any_encrypted () const; + bool all_encrypted () const; + /** Add a KDM to decrypt this DCP. This method must be called after DCP::read() + * or the KDM you specify will be ignored. + * @param kdm KDM to use. + */ void add (DecryptedKDM const &); + /** Write all the XML files for this DCP + * @param standand INTEROP or SMPTE + * @param issuer Value for the PKL and AssetMap tags + * @param creator Value for the PKL and AssetMap tags + * @param issue_date Value for the CPL tags + * @param annotation_text Value for the CPL tags + * @param signer Signer to use + * @param name_format Name format to use for the CPL and PKL filenames + */ void write_xml ( Standard standard, std::string issuer = String::compose("libdcp %1", dcp::version), std::string creator = String::compose("libdcp %1", dcp::version), std::string issue_date = LocalTime().as_string(), std::string annotation_text = String::compose("Created by libdcp %1", dcp::version), - std::shared_ptr signer = std::shared_ptr (), + std::shared_ptr signer = std::shared_ptr(), NameFormat name_format = NameFormat("%t") ); - void resolve_refs (std::list > assets); + void resolve_refs (std::vector> assets); /** @return Standard of a DCP that was read in */ boost::optional standard () const { @@ -132,9 +172,9 @@ public: } /** @return PKLs if this DCP was read from an existing one, or if write_xml() has been called on it. - * If neither is true, this method returns an empty list. + * If neither is true, this method returns an empty vector. */ - std::list > pkls () const { + std::vector> pkls () const { return _pkls; } @@ -160,9 +200,9 @@ private: /** The directory that we are writing to */ boost::filesystem::path _directory; /** The CPLs that make up this DCP */ - std::list > _cpls; + std::vector> _cpls; /** The PKLs that make up this DCP */ - std::list > _pkls; + std::vector> _pkls; /** File that the ASSETMAP was read from or last written to */ mutable boost::optional _asset_map; @@ -170,6 +210,8 @@ private: boost::optional _standard; }; + } + #endif