X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fmxf.cc;h=6c0b3edb82fc552efe365db1e43b652e562c8519;hb=c83a8bc7e967597aaceab3e2a94e5f158e1dbcd5;hp=1da0927382d036a867c7dc33d1bc1634c3a15fbc;hpb=a641fdc912a3f0749015decdf9e23ff15186ef78;p=libdcp.git diff --git a/src/mxf.cc b/src/mxf.cc index 1da09273..6c0b3edb 100644 --- a/src/mxf.cc +++ b/src/mxf.cc @@ -15,6 +15,20 @@ You should have received a copy of the GNU General Public License along with libdcp. If not, see . + + In addition, as a special exception, the copyright holders give + permission to link the code of portions of this program with the + OpenSSL library under certain conditions as described in each + individual source file, and distribute linked combinations + including the two. + + You must obey the GNU General Public License in all respects + for all of the code used other than OpenSSL. If you modify + file(s) with this exception, you may extend this exception to your + version of the file(s), but you are not obligated to do so. If you + do not wish to do so, delete this exception statement from your + version. If you delete this exception statement from all source + files in the program, then also delete it here. */ /** @file src/asset.cc @@ -22,15 +36,15 @@ */ #include "raw_convert.h" -#include "AS_DCP.h" -#include "KM_prng.h" -#include "KM_util.h" #include "mxf.h" #include "util.h" #include "metadata.h" #include "exceptions.h" #include "dcp_assert.h" #include "compose.hpp" +#include +#include +#include #include #include #include @@ -43,14 +57,30 @@ using boost::shared_ptr; using boost::dynamic_pointer_cast; using namespace dcp; +MXF::MXF () + : _context_id (make_uuid ()) +{ + /* Subclasses can create MXFs with unspecified _standard but are expected to fill + _standard in once the MXF is read. + */ +} + +MXF::MXF (Standard standard) + : _context_id (make_uuid ()) + , _standard (standard) +{ + +} + void -MXF::fill_writer_info (ASDCP::WriterInfo* writer_info, string id, Standard standard) const +MXF::fill_writer_info (ASDCP::WriterInfo* writer_info, string id) const { writer_info->ProductVersion = _metadata.product_version; writer_info->CompanyName = _metadata.company_name; writer_info->ProductName = _metadata.product_name.c_str(); - if (standard == INTEROP) { + DCP_ASSERT (_standard); + if (_standard == INTEROP) { writer_info->LabelSetType = ASDCP::LS_MXF_INTEROP; } else { writer_info->LabelSetType = ASDCP::LS_MXF_SMPTE; @@ -62,7 +92,7 @@ MXF::fill_writer_info (ASDCP::WriterInfo* writer_info, string id, Standard stand writer_info->UsesHMAC = true; if (_key_id) { - Kumu::GenRandomUUID (writer_info->ContextID); + Kumu::hex2bin (_context_id.c_str(), writer_info->ContextID, Kumu::UUID_Length, &c); writer_info->EncryptedEssence = true; unsigned int c; @@ -97,6 +127,17 @@ MXF::read_writer_info (ASDCP::WriterInfo const & info) _key_id = buffer; } + switch (info.LabelSetType) { + case ASDCP::LS_MXF_INTEROP: + _standard = INTEROP; + break; + case ASDCP::LS_MXF_SMPTE: + _standard = SMPTE; + break; + default: + throw DCPReadError ("Unrecognised label set type in MXF"); + } + _metadata.read (info); Kumu::bin2UUIDhex (info.AssetUUID, ASDCP::UUIDlen, buffer, sizeof (buffer));