X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fdcp.h;h=ed5e5e3e0f00d8aac3557850513df63dde7c894f;hb=9e523d8a4062ad52330dff6c2ba50e54184c9bb2;hp=d6edafa0335864589e04ef3d5fd476f0f890a49f;hpb=44791cafb91bfe1ee5c0a530c83d9f44b4d2f88f;p=libdcp.git diff --git a/src/dcp.h b/src/dcp.h index d6edafa0..ed5e5e3e 100644 --- a/src/dcp.h +++ b/src/dcp.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 2012-2014 Carl Hetherington This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,18 +18,19 @@ */ /** @file src/dcp.h - * @brief A class to create or read a DCP. + * @brief DCP class. */ #ifndef LIBDCP_DCP_H #define LIBDCP_DCP_H -#include -#include -#include -#include #include "types.h" #include "certificates.h" +#include "metadata.h" +#include +#include +#include +#include namespace xmlpp { class Document; @@ -40,120 +41,86 @@ namespace xmlpp { namespace dcp { -class ContentAsset; -class PictureAsset; -class SoundAsset; -class SubtitleAsset; +class Content; class Reel; class CPL; class XMLMetadata; class Signer; -class KDM; - -namespace parse { - class AssetMap; -} +class DecryptedKDM; +class Asset; +class DCPReadError; /** @class DCP * @brief A class to create or read a DCP. */ - + class DCP : public boost::noncopyable { public: /** Construct a DCP. You can pass an existing DCP's directory - * as the parameter, or a non-existant folder to create a new - * DCP in. + * as the parameter; alternatively, directory will be created + * if it does not exist. Note that if you pass an existing DCP + * into this constructor it will not be read until you call ::read(). * * @param directory Directory containing the DCP's files. */ DCP (boost::filesystem::path directory); - void read (bool require_mxfs = true); - - /** Read an existing DCP's assets. - * - * The DCP's XML metadata will be examined, and you can then look at the contents - * of the DCP. - */ - void read_assets (); + typedef std::list > ReadErrors; - void read_cpls (bool require_mxfs = true); - - /** Write the required XML files to the directory that was - * passed into the constructor. + /** Read the DCP's structure into this object. + * @param keep_going true to try to keep going in the face of (some) errors. + * @param errors List of errors that will be added to if keep_going is true. */ - void write_xml (bool interop, XMLMetadata const &, boost::shared_ptr signer = boost::shared_ptr ()) const; + void read (bool keep_going = false, ReadErrors* errors = 0); /** Compare this DCP with another, according to various options. * @param other DCP to compare this one to. * @param options Options to define what "equality" means. + * @param note Functor to handle notes made by the equality operation. * @return true if the DCPs are equal according to EqualityOptions, otherwise false. */ - bool equals (DCP const & other, EqualityOptions options, boost::function note) const; + bool equals (DCP const & other, EqualityOptions options, NoteHandler note) const; - /** Add a CPL to this DCP. - * @param cpl CPL to add. - */ - void add_cpl (boost::shared_ptr cpl); + void add (boost::shared_ptr cpl); - /** @return The list of CPLs in this DCP */ - std::list > cpls () const { - return _cpls; - } - - /** Add another DCP as a source of assets for this DCP. This should be called before - * ::read() on the DCP that needs the extra assets. For example - * - * DCP original_version ("my_dcp_OV"); - * DCP supplemental ("my_dcp_VF"); - * supplemental.add_assets_from (original_version); - * supplemental.read (); - */ - void add_assets_from (DCP const &); + std::list > cpls () const; + std::list > assets () const; bool encrypted () const; - void add_kdm (KDM const &); + void add (DecryptedKDM const &); - /** Emitted with a parameter between 0 and 1 to indicate progress - * for long jobs. - */ - boost::signals2::signal Progress; + void write_xml ( + Standard standard, + XMLMetadata metadata = XMLMetadata (), + boost::shared_ptr signer = boost::shared_ptr () + ); private: /** Write the PKL file. * @param pkl_uuid UUID to use. */ - std::string write_pkl (std::string pkl_uuid, bool, XMLMetadata const &, boost::shared_ptr) const; - - /** Write the VOLINDEX file */ - void write_volindex (bool) const; + boost::filesystem::path write_pkl ( + Standard standard, + std::string pkl_uuid, + XMLMetadata metadata, + boost::shared_ptr signer + ) const; + + void write_volindex (Standard standard) const; /** Write the ASSETMAP file. * @param pkl_uuid UUID of our PKL. * @param pkl_length Length of our PKL in bytes. */ - void write_assetmap (std::string pkl_uuid, int pkl_length, bool, XMLMetadata const &) const; - - /** @return Assets in all the CPLs in this DCP */ - std::list > assets () const; - - struct Files { - std::list cpls; - std::string pkl; - std::string asset_map; - }; - - Files _files; + void write_assetmap (Standard standard, std::string pkl_uuid, int pkl_length, XMLMetadata metadata) const; /** the directory that we are writing to */ boost::filesystem::path _directory; - /** our CPLs */ + /** the CPLs that make up this DCP */ std::list > _cpls; - - std::list _asset_maps; }; }