X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fasset.h;h=2712dcb889d08538b7b1cfbff9c910961a8c38aa;hb=491ac453512ac1982f62fc0d2a310586427601d7;hp=fb701570dcf3a9081f3b253b3d0359e44fc51ede;hpb=b6718fb437f242fd5127194d4c94e39d71c5e1ad;p=libdcp.git diff --git a/src/asset.h b/src/asset.h index fb701570..2712dcb8 100644 --- a/src/asset.h +++ b/src/asset.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 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,47 +17,70 @@ */ +/** @file src/asset.h + * @brief Asset class. + */ + #ifndef LIBDCP_ASSET_H #define LIBDCP_ASSET_H -#include -#include +#include "object.h" +#include "types.h" +#include +#include +#include -namespace ASDCP { - class WriterInfo; +namespace xmlpp { + class Node; } -namespace libdcp -{ +namespace dcp { -/** Parent class for assets (picture / sound collections) */ -class Asset +/** @class Asset + * @brief Parent class for DCP assets, i.e. picture/sound/subtitles and CPLs. + * + * Note that this class is not used for ReelAssets; those are just for the metadata + * that gets put into <Reel>s. + */ +class Asset : public Object { public: - Asset (std::string, int, int); + Asset (); + Asset (boost::filesystem::path file); - virtual void write_to_cpl (std::ostream &) const = 0; - void write_to_pkl (std::ostream &) const; - void write_to_assetmap (std::ostream &) const; + virtual bool equals ( + boost::shared_ptr other, + EqualityOptions opt, + NoteHandler note + ) const; + + /** Write details of the asset to a ASSETMAP. + * @param node Parent node. + */ + void write_to_assetmap (xmlpp::Node* node, boost::filesystem::path root) const; - /** Emitted with a parameter between 0 and 1 to indicate progress in constructing - * this asset. + /** Write details of the asset to a PKL AssetList node. + * @param node Parent node. + * @param standard Standard to use. */ - sigc::signal1 Progress; + void write_to_pkl (xmlpp::Node* node, Standard standard) const; + + boost::filesystem::path file () const { + return _file; + } + + void set_file (boost::filesystem::path file) const; + + /** @return the hash of this asset's file */ + std::string hash (boost::function progress = 0) const; protected: - void fill_writer_info (ASDCP::WriterInfo *) const; - - /** Path to our MXF file */ - std::string _mxf_path; - /** Frames per second */ - int _fps; - /** Length in frames */ - int _length; - /** Our UUID */ - std::string _uuid; - /** Digest of our MXF */ - std::string _digest; + virtual std::string pkl_type (Standard standard) const = 0; + + /** The most recent disk file used to read or write this asset; may be empty */ + mutable boost::filesystem::path _file; + /** Hash of _file, or empty if the hash has not yet been computed */ + mutable std::string _hash; }; }