#include "certificate.h"
#include "key.h"
#include "language_tag.h"
+#include "rating.h"
#include "types.h"
#include <boost/filesystem.hpp>
#include <boost/function.hpp>
namespace dcp {
-class ReelEncryptableAsset;
class ReelFileAsset;
class Reel;
class MXFMetadata;
/** @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);
std::shared_ptr<const Asset> other,
EqualityOptions options,
NoteHandler note
- ) const;
+ ) const override;
/** Add a reel to this CPL
* @param reel Reel to add
std::vector<std::shared_ptr<const ReelFileAsset>> reel_file_assets () const;
std::vector<std::shared_ptr<ReelFileAsset>> reel_file_assets ();
- /** @return the ReelEncryptableAssets in this CPL in all reels */
- std::vector<std::shared_ptr<const ReelEncryptableAsset>> reel_encryptable_assets () const;
- std::vector<std::shared_ptr<ReelEncryptableAsset>> reel_encryptable_assets ();
-
/** @return true if we have any encrypted content */
bool any_encrypted () const;
/** 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 CertificateChain>
) const;
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;
}
void set_additional_subtitle_languages (std::vector<dcp::LanguageTag> const& lang);
- boost::optional<Standard> standard () const {
+ void set_sign_language_video_language (dcp::LanguageTag lang) {
+ _sign_language_video_language = lang.to_string();
+ }
+
+ boost::optional<std::string> sign_language_video_language () const {
+ return _sign_language_video_language;
+ }
+
+ Standard standard () const {
return _standard;
}
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;
ContentKind _content_kind; ///< <ContentKind>
std::vector<ContentVersion> _content_versions;
std::vector<Rating> _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<std::string> _full_content_title_text;
boost::optional<std::string> _full_content_title_text_language;
boost::optional<dcp::Size> _main_picture_active_area;
/* See note for _release_territory above */
std::vector<std::string> _additional_subtitle_languages;
+ boost::optional<std::string> _sign_language_video_language;
std::vector<std::shared_ptr<Reel>> _reels;
/** Standard of CPL that was read in */
- boost::optional<Standard> _standard;
+ Standard _standard;
};