Fix equals() with image subtitles to not compare unique IDs.
[libdcp.git] / src / types.h
index f8a9f45e1acfe02c308e467ce54f69fd19ef89b2..1102f16b56bbaea6a30c078ed5619e117e2e4b5d 100644 (file)
@@ -39,6 +39,7 @@
 #define LIBDCP_TYPES_H
 
 #include <libcxml/cxml.h>
+#include <asdcp/KLV.h>
 #include <boost/shared_ptr.hpp>
 #include <boost/function.hpp>
 #include <string>
@@ -87,17 +88,32 @@ enum Channel {
        RS = 5,        ///< right surround
        HI = 6,
        VI = 7,
-       LC = 8,
-       RC = 9,
+       /* 8 and 9 are not used */
        BSL = 10,
        BSR = 11,
        MOTION_DATA = 12,
        SYNC_SIGNAL = 13,
        SIGN_LANGUAGE = 14,
-       UNUSED = 15,
+       /* 15 is not used */
        CHANNEL_COUNT = 16
 };
 
+std::vector<dcp::Channel> used_audio_channels ();
+
+
+enum MCASoundField
+{
+       FIVE_POINT_ONE,
+       SEVEN_POINT_ONE
+};
+
+
+extern std::string channel_to_mca_id (Channel c, MCASoundField field);
+extern Channel mca_id_to_channel (std::string);
+extern std::string channel_to_mca_name (Channel c, MCASoundField field);
+extern ASDCP::UL channel_to_mca_universal_label (Channel c, MCASoundField field, ASDCP::Dictionary const* dict);
+
+
 enum ContentKind
 {
        FEATURE,
@@ -199,6 +215,8 @@ extern std::ostream& operator<< (std::ostream& s, Fraction const & f);
  *
  *  When comparing things, we want to be able to ignore some differences;
  *  this class expresses those differences.
+ *
+ *  It also contains some settings for how the comparison should be done.
  */
 struct EqualityOptions
 {
@@ -213,6 +231,7 @@ struct EqualityOptions
                , issue_dates_can_differ (false)
                , load_font_nodes_can_differ (false)
                , keep_going (false)
+               , export_differing_subtitles (false)
        {}
 
        /** The maximum allowable mean difference in pixel value between two images */
@@ -231,6 +250,8 @@ struct EqualityOptions
        bool issue_dates_can_differ;
        bool load_font_nodes_can_differ;
        bool keep_going;
+       /** true to save the first pair of differeng image subtitles to the current working directory */
+       bool export_differing_subtitles;
 };
 
 /* I've been unable to make mingw happy with ERROR as a symbol, so
@@ -328,10 +349,26 @@ extern bool operator== (Rating const & a, Rating const & b);
 extern std::ostream& operator<< (std::ostream& s, Rating const & r);
 
 
+enum Status
+{
+       FINAL, ///< final version
+       TEMP,  ///< temporary version (picture/sound unfinished)
+       PRE    ///< pre-release (picture/sound finished)
+};
+
+
+extern std::string status_to_string (Status s);
+extern Status string_to_status (std::string s);
+
+
 class ContentVersion
 {
 public:
-       ContentVersion () {}
+       ContentVersion ();
+
+       explicit ContentVersion (cxml::ConstNodePtr node);
+
+       explicit ContentVersion (std::string label_text_);
 
        ContentVersion (std::string id_, std::string label_text_)
                : id (id_)
@@ -344,6 +381,70 @@ public:
        std::string label_text;
 };
 
+
+class Luminance
+{
+public:
+       enum Unit {
+               CANDELA_PER_SQUARE_METRE,
+               FOOT_LAMBERT
+       };
+
+       Luminance (cxml::ConstNodePtr node);
+
+       Luminance (float value, Unit unit);
+
+       void set_value (float v);
+       void set_unit (Unit u) {
+               _unit = u;
+       }
+
+       float value () const {
+               return _value;
+       }
+
+       Unit unit () const {
+               return _unit;
+       }
+
+       void as_xml (xmlpp::Element* parent, std::string ns) const;
+
+       static std::string unit_to_string (Unit u);
+       static Unit string_to_unit (std::string u);
+
+private:
+       float _value;
+       Unit _unit;
+};
+
+bool operator== (Luminance const& a, Luminance const& b);
+
+
+class MainSoundConfiguration
+{
+public:
+       MainSoundConfiguration (std::string);
+       MainSoundConfiguration (MCASoundField field_, int channels);
+
+       MCASoundField field () const {
+               return _field;
+       }
+
+       int channels () const {
+               return _channels.size();
+       }
+
+       boost::optional<Channel> mapping (int index) const;
+       void set_mapping (int index, Channel channel);
+
+       std::string to_string () const;
+
+private:
+       MCASoundField _field;
+       std::vector<boost::optional<Channel> > _channels;
+};
+
+
 }
 
 #endif