diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-01-05 19:13:12 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-01-05 19:13:12 +0000 |
| commit | d7965cce4c5f95da7971bce6f800739a4cd2f17d (patch) | |
| tree | bcf0c244de7e00157874e3aebaa57aaa7a898212 /src/dc_package.h | |
| parent | 22b758902ebc85b3e955606796920afb9e128eff (diff) | |
cpl.{cc,h} to dc_cpl.{cc,h} and dcp.{cc,h} to dc_package.{cc,h}
Diffstat (limited to 'src/dc_package.h')
| -rw-r--r-- | src/dc_package.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/dc_package.h b/src/dc_package.h new file mode 100644 index 00000000..7ab530a4 --- /dev/null +++ b/src/dc_package.h @@ -0,0 +1,131 @@ +/* + Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net> + + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +/** @file src/dcp.h + * @brief DCP class. + */ + +#ifndef LIBDCP_DCP_H +#define LIBDCP_DCP_H + +#include "types.h" +#include "certificate.h" +#include "metadata.h" +#include <boost/shared_ptr.hpp> +#include <boost/signals2.hpp> +#include <string> +#include <vector> + +namespace xmlpp { + class Document; + class Element; +} + +/** @brief Namespace for everything in libdcp */ +namespace dcp { +namespace dc { + +class Content; +class Reel; +class CPL; +class XMLMetadata; +class CertificateChain; +class DecryptedKDM; +class Asset; +class DCPReadError; + +/** @class Package + * @brief A class to create or read a DCP. + */ + +class Package : public boost::noncopyable +{ +public: + /** Construct a DCP package. You can pass an existing DCP's directory + * 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. + */ + Package (boost::filesystem::path directory); + + typedef std::list<boost::shared_ptr<DCPReadError> > ReadErrors; + + /** 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 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 (Package const & other, EqualityOptions options, NoteHandler note) const; + + void add (boost::shared_ptr<CPL> cpl); + + std::list<boost::shared_ptr<CPL> > cpls () const; + std::list<boost::shared_ptr<Asset> > assets () const; + + bool encrypted () const; + + void add (DecryptedKDM const &); + + void write_xml ( + Standard standard, + XMLMetadata metadata = XMLMetadata (), + boost::shared_ptr<const CertificateChain> signer = boost::shared_ptr<const CertificateChain> () + ); + + void resolve_refs (std::list<boost::shared_ptr<Asset> > assets); + +private: + + /** Write the PKL file. + * @param pkl_uuid UUID to use. + */ + boost::filesystem::path write_pkl ( + Standard standard, + std::string pkl_uuid, + XMLMetadata metadata, + boost::shared_ptr<const CertificateChain> 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 (Standard standard, std::string pkl_uuid, int pkl_length, XMLMetadata metadata) const; + + /** the directory that we are writing to */ + boost::filesystem::path _directory; + /** the CPLs that make up this DCP */ + std::list<boost::shared_ptr<CPL> > _cpls; +}; + +} +} + +#endif |
