X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fdcp.h;h=effadfa3ebeb2b8f3538122359028b5415d572dc;hb=391860586976a6b6309caa56cc1191e1ca9efd06;hp=27be9ec63bd76c9c45d2b0892321c0b23cfaf720;hpb=7d48446b5efdf795df1ce22d6d9ed3ebe85d3381;p=libdcp.git diff --git a/src/dcp.h b/src/dcp.h index 27be9ec6..effadfa3 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 @@ -17,56 +17,120 @@ */ -#include -#include +/** @file src/dcp.h + * @brief DCP class. + */ + +#ifndef LIBDCP_DCP_H +#define LIBDCP_DCP_H + +#include "types.h" +#include "certificates.h" +#include "metadata.h" #include +#include +#include +#include -namespace libdcp +namespace xmlpp { + class Document; + class Element; +} + +/** @brief Namespace for everything in libdcp */ +namespace dcp { -class Asset; +class Content; +class Reel; +class CPL; +class XMLMetadata; +class Signer; +class DecryptedKDM; +class Asset; +class DCPReadError; + +namespace parse { + class AssetMap; +} -class DCP +/** @class DCP + * @brief A class to create or read a DCP. + */ + +class DCP : public boost::noncopyable { public: - enum ContentType - { - FEATURE, - SHORT, - TRAILER, - TEST, - TRANSITIONAL, - RATING, - TEASER, - POLICY, - PUBLIC_SERVICE_ANNOUNCEMENT, - ADVERTISEMENT - }; + /** Construct a DCP. 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. + */ + DCP (boost::filesystem::path directory); + + typedef std::list > ReadErrors; - DCP (std::string, std::string, ContentType, int, int); + /** 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); - void add_sound_asset (std::list const &); - void add_picture_asset (std::list const &, int, int); + /** 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, NoteHandler note) const; - void write_xml () const; + void add (boost::shared_ptr asset); + + std::list > cpls () const; + + /** @return All this DCP's assets (note that CPLs are assets) */ + std::list > assets () const { + return _assets; + } + + bool encrypted () const; + + void add (DecryptedKDM const &); + + void write_xml ( + Standard standard, + XMLMetadata metadata = XMLMetadata (), + boost::shared_ptr signer = boost::shared_ptr () + ); private: - std::string write_cpl (std::string) const; - std::string write_pkl (std::string, std::string, std::string, int) const; - void write_volindex () const; - void write_assetmap (std::string, int, std::string, int) const; + /** 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 signer + ) const; + + void write_volindex (Standard standard) const; - static std::string content_type_string (ContentType); + /** 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; - std::string _directory; - std::string _name; - ContentType _content_type; - int _fps; - int _length; + /** the directory that we are writing to */ + boost::filesystem::path _directory; + /** the assets that make up this DCP */ std::list > _assets; - - std::string _date; }; } + +#endif