/*
- Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
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
#ifndef LIBDCP_TYPES_H
#define LIBDCP_TYPES_H
+#include <boost/shared_ptr.hpp>
+#include <boost/function.hpp>
#include <string>
-namespace libdcp
+namespace dcp
{
+namespace parse {
+ class AssetMap;
+}
+
/** Identifier for a sound channel */
enum Channel {
LEFT = 0, ///< left
EYE_LEFT,
EYE_RIGHT
};
-
+
+/** @class Fraction
+ * @brief A fraction (i.e. a thing with an integer numerator and an integer denominator).
+ */
class Fraction
{
public:
+ /** Construct a fraction of 0/0 */
Fraction () : numerator (0), denominator (0) {}
Fraction (std::string s);
+ /** Construct a fraction with a specified numerator and denominator.
+ * @param n Numerator.
+ * @param d Denominator.
+ */
Fraction (int n, int d) : numerator (n), denominator (d) {}
+ float as_float () const {
+ return float (numerator) / denominator;
+ }
+
int numerator;
int denominator;
};
extern bool operator== (Fraction const & a, Fraction const & b);
extern bool operator!= (Fraction const & a, Fraction const & b);
-
-struct EqualityOptions {
+
+/** @struct EqualityOptions
+ * @brief A class to describe what "equality" means for a particular test.
+ *
+ * When comparing things, we want to be able to ignore some differences;
+ * this class expresses those differences.
+ */
+struct EqualityOptions
+{
+ /** Construct an EqualityOptions where nothing at all can differ */
EqualityOptions ()
: max_mean_pixel_error (0)
, max_std_dev_pixel_error (0)
, max_audio_sample_error (0)
+ , cpl_annotation_texts_can_differ (false)
+ , mxf_filenames_can_differ (false)
+ , reel_hashes_can_differ (false)
{}
+ /** The maximum allowable mean difference in pixel value between two images */
double max_mean_pixel_error;
+ /** The maximum standard deviation of the differences in pixel value between two images */
double max_std_dev_pixel_error;
+ /** The maximum difference in audio sample value between two soundtracks */
int max_audio_sample_error;
+ /** true if the <AnnotationText> nodes of CPLs are allowed to differ */
+ bool cpl_annotation_texts_can_differ;
+ /** true if MXF file leafnames are allowed to differ */
+ bool mxf_filenames_can_differ;
+ /** true if <Hash>es in Reels can differ */
+ bool reel_hashes_can_differ;
+};
+
+/* I've been unable to make mingw happy with ERROR as a symbol, so
+ I'm using a DCP_ prefix here.
+*/
+enum NoteType {
+ DCP_PROGRESS,
+ DCP_ERROR,
+ DCP_NOTE
};
-/** @class Color
- * @brief An RGB color (aka colour).
+enum Standard {
+ INTEROP,
+ SMPTE
+};
+
+enum Formulation {
+ MODIFIED_TRANSITIONAL_1,
+ DCI_ANY,
+ DCI_SPECIFIC
+};
+
+/** @class Colour
+ * @brief An RGB colour.
*/
-class Color
+class Colour
{
public:
- Color ();
- Color (int r_, int g_, int b_);
- Color (std::string argb_hex);
+ Colour ();
+ Colour (int r_, int g_, int b_);
+ Colour (std::string argb_hex);
int r; ///< red component, from 0 to 255
int g; ///< green component, from 0 to 255
std::string to_argb_string () const;
};
-extern bool operator== (Color const & a, Color const & b);
-extern bool operator!= (Color const & a, Color const & b);
-extern std::ostream & operator<< (std::ostream & s, Color const & c);
+extern bool operator== (Colour const & a, Colour const & b);
+extern bool operator!= (Colour const & a, Colour const & b);
+extern std::ostream & operator<< (std::ostream & s, Colour const & c);
+
+typedef std::pair<std::string, boost::shared_ptr<const parse::AssetMap> > PathAssetMap;
+
+typedef boost::function<void (NoteType, std::string)> NoteHandler;
+
}