summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-02-12 23:25:57 +0000
committerCarl Hetherington <cth@carlh.net>2014-02-12 23:25:57 +0000
commite8c4fd0e0581849fcf41d918e79b00b84fe24d70 (patch)
tree0e087c053238118dc89ff49a0fb6dff838a6ad8a /src
parent6161444eab9e0c22c4a42a1b254745b8bee82b50 (diff)
Various small fixes.
Diffstat (limited to 'src')
-rw-r--r--src/asset.cc7
-rw-r--r--src/asset.h9
-rw-r--r--src/reel_sound_asset.h4
-rw-r--r--src/util.cc19
-rw-r--r--src/util.h3
-rw-r--r--src/wscript9
6 files changed, 36 insertions, 15 deletions
diff --git a/src/asset.cc b/src/asset.cc
index 738fb019..f8de10b6 100644
--- a/src/asset.cc
+++ b/src/asset.cc
@@ -31,6 +31,7 @@
using std::string;
using boost::lexical_cast;
using boost::function;
+using boost::optional;
using namespace dcp;
/** Create an Asset with a randomly-generated ID */
@@ -80,7 +81,7 @@ Asset::write_to_assetmap (xmlpp::Node* node, boost::filesystem::path root) const
asset->add_child("Id")->add_child_text ("urn:uuid:" + _id);
xmlpp::Node* chunk_list = asset->add_child ("ChunkList");
xmlpp::Node* chunk = chunk_list->add_child ("Chunk");
- boost::optional<boost::filesystem::path> path = relative_to_root (root, _file);
+ optional<boost::filesystem::path> path = relative_to_root (root, _file);
if (!path) {
throw MiscError (String::compose ("Asset %1 is not within the directory %2", _file, root));
}
@@ -91,12 +92,12 @@ Asset::write_to_assetmap (xmlpp::Node* node, boost::filesystem::path root) const
}
string
-Asset::hash () const
+Asset::hash (function<void (float)> progress) const
{
assert (!_file.empty ());
if (_hash.empty ()) {
- _hash = make_digest (_file, 0);
+ _hash = make_digest (_file, progress);
}
return _hash;
diff --git a/src/asset.h b/src/asset.h
index e6a302c1..57143310 100644
--- a/src/asset.h
+++ b/src/asset.h
@@ -28,6 +28,7 @@
#include "types.h"
#include <boost/filesystem.hpp>
#include <boost/function.hpp>
+#include <boost/bind.hpp>
namespace xmlpp {
class Node;
@@ -70,14 +71,12 @@ public:
void set_file (boost::filesystem::path file) const;
- /** @return the hash of this asset's file. It will be
- * computed by this call if necessary.
- */
- std::string hash () const;
+ /** @return the hash of this asset's file */
+ std::string hash (boost::function<void (float)> progress = 0) const;
protected:
virtual std::string pkl_type () const = 0;
-
+
/** The disk file that represents this asset, if one exists */
mutable boost::filesystem::path _file;
/** Hash of _file, or empty if the hash has not yet been computed */
diff --git a/src/reel_sound_asset.h b/src/reel_sound_asset.h
index fb233016..42835c84 100644
--- a/src/reel_sound_asset.h
+++ b/src/reel_sound_asset.h
@@ -40,6 +40,10 @@ public:
boost::shared_ptr<SoundMXF> mxf () {
return boost::dynamic_pointer_cast<SoundMXF> (_content.object ());
}
+
+ boost::shared_ptr<const SoundMXF> mxf () const {
+ return boost::dynamic_pointer_cast<const SoundMXF> (_content.object ());
+ }
private:
std::string cpl_node_name () const;
diff --git a/src/util.cc b/src/util.cc
index 4be026d2..1e32fbc9 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -54,7 +54,10 @@ using std::max;
using std::list;
using std::setw;
using std::setfill;
+using std::ostream;
using boost::shared_ptr;
+using boost::optional;
+using boost::function;
using namespace dcp;
/** Create a UUID.
@@ -73,12 +76,12 @@ dcp::make_uuid ()
/** Create a digest for a file.
* @param filename File name.
- * @param progress Pointer to a progress reporting function, or 0. The function will be called
+ * @param progress Optional progress reporting function. The function will be called
* with a progress value between 0 and 1.
* @return Digest.
*/
string
-dcp::make_digest (boost::filesystem::path filename, boost::function<void (float)>* progress)
+dcp::make_digest (boost::filesystem::path filename, function<void (float)> progress)
{
Kumu::FileReader reader;
Kumu::Result_t r = reader.OpenRead (filename.string().c_str ());
@@ -107,7 +110,7 @@ dcp::make_digest (boost::filesystem::path filename, boost::function<void (float)
SHA1_Update (&sha, read_buffer.Data(), read);
if (progress) {
- (*progress) (float (done) / size);
+ progress (float (done) / size);
done += read;
}
}
@@ -271,6 +274,12 @@ bool dcp::operator!= (dcp::Size const & a, dcp::Size const & b)
return !(a == b);
}
+ostream& dcp::operator<< (ostream& s, dcp::Size const & a)
+{
+ s << a.width << "x" << a.height;
+ return s;
+}
+
/** Decode a base64 string. The base64 decode routine in KM_util.cpp
* gives different values to both this and the command-line base64
* for some inputs. Not sure why.
@@ -385,7 +394,7 @@ dcp::fopen_boost (boost::filesystem::path p, string t)
#endif
}
-boost::optional<boost::filesystem::path>
+optional<boost::filesystem::path>
dcp::relative_to_root (boost::filesystem::path root, boost::filesystem::path file)
{
boost::filesystem::path::const_iterator i = root.begin ();
@@ -397,7 +406,7 @@ dcp::relative_to_root (boost::filesystem::path root, boost::filesystem::path fil
}
if (i != root.end ()) {
- return boost::optional<boost::filesystem::path> ();
+ return optional<boost::filesystem::path> ();
}
boost::filesystem::path rel;
diff --git a/src/util.h b/src/util.h
index 2bfeb60a..ca00ecb9 100644
--- a/src/util.h
+++ b/src/util.h
@@ -70,9 +70,10 @@ struct Size
extern bool operator== (Size const & a, Size const & b);
extern bool operator!= (Size const & a, Size const & b);
+extern std::ostream& operator<< (std::ostream& s, Size const & a);
extern std::string make_uuid ();
-extern std::string make_digest (boost::filesystem::path filename, boost::function<void (float)> *);
+extern std::string make_digest (boost::filesystem::path filename, boost::function<void (float)>);
extern std::string content_kind_to_string (ContentKind kind);
extern ContentKind content_kind_from_string (std::string kind);
extern bool empty_or_white_space (std::string s);
diff --git a/src/wscript b/src/wscript
index 294e36bc..1f401977 100644
--- a/src/wscript
+++ b/src/wscript
@@ -87,15 +87,22 @@ def build(bld):
picture_mxf_writer.h
rgb_xyz.h
reel.h
+ reel_asset.h
+ reel_mono_picture_asset.h
+ reel_picture_asset.h
+ reel_sound_asset.h
+ reel_stereo_picture_asset.h
ref.h
argb_frame.h
signer.h
signer_chain.h
- sound_mxf.h
sound_frame.h
+ sound_mxf.h
+ sound_mxf_writer.h
stereo_picture_mxf.h
stereo_picture_frame.h
subtitle.h
+ subtitle_content.h
subtitle_string.h
types.h
util.h