/** @file src/asset.h
* @brief Asset class.
- */
+ */
#ifndef LIBDCP_ASSET_H
#define LIBDCP_ASSET_H
#include "types.h"
#include <boost/filesystem.hpp>
#include <boost/function.hpp>
+#include <boost/bind.hpp>
namespace xmlpp {
class Node;
}
+struct asset_test;
+
namespace dcp {
/** @class Asset
- * @brief Parent class for DCP assets, i.e. picture/sound/subtitles and CPLs.
+ * @brief Parent class for DCP assets, i.e. picture, sound, subtitles, CPLs, fonts.
*
- * Note that this class is not used for ReelAssets; they are just for the metadata
- * that gets put into <Reel>s.
+ * 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 ();
Asset (boost::filesystem::path file);
- Asset (std::string id);
+ Asset (std::string id, boost::filesystem::path file);
+
+ virtual bool equals (
+ boost::shared_ptr<const Asset> 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;
- virtual std::string pkl_type () const = 0;
- virtual bool equals (boost::shared_ptr<const Asset> other, EqualityOptions opt, boost::function<void (NoteType, std::string)> note) const;
-
/** Write details of the asset to a PKL AssetList node.
* @param node Parent node.
+ * @param standard Standard to use.
*/
- void write_to_pkl (xmlpp::Node* node) const;
- void write_to_assetmap (xmlpp::Node* node) const;
+ void write_to_pkl (xmlpp::Node* node, boost::filesystem::path root, Standard standard) const;
+ /** @return the most recent disk file used to read or write this asset; may be empty */
boost::filesystem::path file () const {
return _file;
}
- void set_file (boost::filesystem::path file) {
- _file = file;
- }
+ void set_file (boost::filesystem::path file) const;
- std::string hash () const;
+ /** @return the hash of this asset's file */
+ std::string hash (boost::function<void (float)> progress = 0) const;
protected:
- friend class MXFWriter;
-
- boost::filesystem::path _file;
+ friend struct ::asset_test;
+
+ 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;
};