Fix crash with no atmos.
[libdcp.git] / src / types.cc
index e86e999c6a9006cdaf8627a30aa9faea3887f44a..7853d11c6e874bc9c7de26bef821b05947a4e046 100644 (file)
@@ -20,6 +20,7 @@
 #include "raw_convert.h"
 #include "types.h"
 #include "exceptions.h"
+#include "compose.hpp"
 #include <boost/algorithm/string.hpp>
 #include <vector>
 #include <cstdio>
@@ -43,6 +44,12 @@ Fraction::Fraction (string s)
        denominator = raw_convert<int> (b[1]);
 }
 
+string
+Fraction::as_string () const
+{
+       return String::compose ("%1 %2", numerator, denominator);
+}
+
 bool
 dcp::operator== (Fraction const & a, Fraction const & b)
 {
@@ -55,6 +62,13 @@ dcp::operator!= (Fraction const & a, Fraction const & b)
        return (a.numerator != b.numerator || a.denominator != b.denominator);
 }
 
+ostream&
+dcp::operator<< (ostream& s, Fraction const & f)
+{
+       s << f.numerator << "/" << f.denominator;
+       return s;
+}
+
 /** Construct a Colour, initialising it to black. */
 Colour::Colour ()
        : r (0)
@@ -186,7 +200,7 @@ dcp::string_to_halign (string s)
        } else if (s == "right") {
                return HALIGN_RIGHT;
        }
-       
+
        boost::throw_exception (DCPReadError ("unknown subtitle halign type"));
 }
 
@@ -215,6 +229,39 @@ dcp::string_to_valign (string s)
        } else if (s == "bottom") {
                return VALIGN_BOTTOM;
        }
-       
+
        boost::throw_exception (DCPReadError ("unknown subtitle valign type"));
 }
+
+string
+dcp::direction_to_string (Direction v)
+{
+       switch (v) {
+       case DIRECTION_LTR:
+               return "ltr";
+       case DIRECTION_RTL:
+               return "rtl";
+       case DIRECTION_TTB:
+               return "ttb";
+       case DIRECTION_BTT:
+               return "btt";
+       }
+
+       boost::throw_exception (MiscError ("unknown subtitle direction type"));
+}
+
+Direction
+dcp::string_to_direction (string s)
+{
+       if (s == "ltr" || s == "horizontal") {
+               return DIRECTION_LTR;
+       } else if (s == "rtl") {
+               return DIRECTION_RTL;
+       } else if (s == "ttb" || s == "vertical") {
+               return DIRECTION_TTB;
+       } else if (s == "btt") {
+               return DIRECTION_BTT;
+       }
+
+       boost::throw_exception (DCPReadError ("unknown subtitle direction type"));
+}