std::shared_ptr
[dcpomatic.git] / src / lib / types.cc
index 19e5da6ec78aa8c39c099f06d47f206cb3ab746d..6729628cd7800298fbbe4c3ecf87cf8be1fe83f5 100644 (file)
 #include "types.h"
 #include "compose.hpp"
 #include "dcpomatic_assert.h"
+#include "warnings.h"
 #include <dcp/raw_convert.h>
 #include <dcp/cpl.h>
 #include <dcp/dcp.h>
 #include <dcp/reel_mxf.h>
 #include <dcp/reel_asset.h>
+DCPOMATIC_DISABLE_WARNINGS
 #include <libxml++/libxml++.h>
+DCPOMATIC_ENABLE_WARNINGS
 #include <libcxml/cxml.h>
 #include <boost/foreach.hpp>
 
@@ -35,7 +38,8 @@
 using std::max;
 using std::min;
 using std::string;
-using boost::shared_ptr;
+using std::list;
+using std::shared_ptr;
 using dcp::raw_convert;
 
 bool operator== (Crop const & a, Crop const & b)
@@ -193,7 +197,15 @@ CPLSummary::CPLSummary (boost::filesystem::path p)
        : dcp_directory (p.leaf().string())
 {
        dcp::DCP dcp (p);
-       dcp.read ();
+
+       list<dcp::VerificationNote> notes;
+       dcp.read (&notes);
+       BOOST_FOREACH (dcp::VerificationNote i, notes) {
+               if (i.code() != dcp::VerificationNote::EXTERNAL_ASSET) {
+                       /* It's not just a warning about this DCP being a VF */
+                       throw dcp::ReadError(dcp::note_to_string(i));
+               }
+       }
 
        cpl_id = dcp.cpls().front()->id();
        cpl_annotation_text = dcp.cpls().front()->annotation_text();
@@ -210,3 +222,38 @@ CPLSummary::CPLSummary (boost::filesystem::path p)
 
        last_write_time = boost::filesystem::last_write_time (p);
 }
+
+
+bool operator== (NamedChannel const& a, NamedChannel const& b)
+{
+       return a.name == b.name && a.index == b.index;
+}
+
+
+string
+video_range_to_string (VideoRange r)
+{
+       switch (r) {
+       case VIDEO_RANGE_FULL:
+               return "full";
+       case VIDEO_RANGE_VIDEO:
+               return "video";
+       default:
+               DCPOMATIC_ASSERT (false);
+       }
+}
+
+
+VideoRange
+string_to_video_range (string s)
+{
+       if (s == "full") {
+               return VIDEO_RANGE_FULL;
+       } else if (s == "video") {
+               return VIDEO_RANGE_VIDEO;
+       }
+
+       DCPOMATIC_ASSERT (false);
+       return VIDEO_RANGE_FULL;
+}
+