Fix some warnings.
[libdcp.git] / src / mxf.cc
index 3c75997b907bbeeb6cae6f19d52ac4364fe37ae2..f5282f1c5f46e27ca740654afa6300dafa2075b9 100644 (file)
@@ -21,6 +21,7 @@
  *  @brief Parent class for assets of DCPs made up of MXF files.
  */
 
+#include "raw_convert.h"
 #include "AS_DCP.h"
 #include "KM_prng.h"
 #include "KM_util.h"
@@ -28,7 +29,7 @@
 #include "util.h"
 #include "metadata.h"
 #include "exceptions.h"
-#include "kdm.h"
+#include "compose.hpp"
 #include <libxml++/nodes/element.h>
 #include <boost/filesystem.hpp>
 #include <iostream>
@@ -37,24 +38,25 @@ using std::string;
 using std::list;
 using std::pair;
 using boost::shared_ptr;
-using boost::lexical_cast;
 using boost::dynamic_pointer_cast;
 using namespace dcp;
 
 MXF::MXF (Fraction edit_rate)
-       : Content (edit_rate)
+       : _edit_rate (edit_rate)
+       , _intrinsic_duration (0)
        , _encryption_context (0)
        , _decryption_context (0)
 {
-
+       /* _intrinsic_duration must be set up up by a subclass */
 }
 
 MXF::MXF (boost::filesystem::path file)
        : Content (file)
+       , _intrinsic_duration (0)
        , _encryption_context (0)
        , _decryption_context (0)
 {
-
+       /* _edit_rate and _intrinsic_duration must be set up up by a subclass */
 }
 
 MXF::~MXF ()
@@ -98,12 +100,22 @@ MXF::equals (shared_ptr<const Content> other, EqualityOptions opt, boost::functi
        
        shared_ptr<const MXF> other_mxf = dynamic_pointer_cast<const MXF> (other);
        if (!other_mxf) {
-               note (ERROR, "comparing an MXF asset with a non-MXF asset");
+               note (DCP_ERROR, "comparing an MXF asset with a non-MXF asset");
                return false;
        }
        
+       if (_edit_rate != other_mxf->_edit_rate) {
+               note (DCP_ERROR, "content edit rates differ");
+               return false;
+       }
+       
+       if (_intrinsic_duration != other_mxf->_intrinsic_duration) {
+               note (DCP_ERROR, "asset intrinsic durations differ");
+               return false;
+       }
+
        if (_file != other_mxf->file ()) {
-               note (ERROR, "MXF names differ");
+               note (DCP_ERROR, "MXF names differ");
                if (!opt.mxf_names_can_differ) {
                        return false;
                }
@@ -149,6 +161,19 @@ void
 MXF::read_writer_info (ASDCP::WriterInfo const & info)
 {
        char buffer[64];
-       Kumu::bin2UUIDhex (info.AssetUUID, 16, buffer, 64);
+       Kumu::bin2UUIDhex (info.AssetUUID, ASDCP::UUIDlen, buffer, sizeof (buffer));
        _id = buffer;
 }
+
+string
+MXF::pkl_type (Standard standard) const
+{
+       switch (standard) {
+       case INTEROP:
+               return String::compose ("application/x-smpte-mxf;asdcpKind=%1", asdcp_kind ());
+       case SMPTE:
+               return "application/mxf";
+       default:
+               assert (false);
+       }
+}