From b21ac5801854d9d8946a0f8d0cadca2abd9a066b Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 10 Jan 2016 22:39:35 +0000 Subject: Hacks. --- src/im_cpl.cc | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/im_cpl.cc (limited to 'src/im_cpl.cc') diff --git a/src/im_cpl.cc b/src/im_cpl.cc new file mode 100644 index 00000000..f45a3db0 --- /dev/null +++ b/src/im_cpl.cc @@ -0,0 +1,113 @@ +/* + Copyright (C) 2016 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "im_cpl.h" +#include "util.h" +#include "xml.h" +#include "dcp_assert.h" +#include "segment.h" +#include +#include +#include + +using std::list; +using std::string; +using boost::shared_ptr; +using namespace dcp::im; + +CPL::CPL (boost::filesystem::path file) + : Asset (file) +{ + cxml::Document f ("CompositionPlaylist"); + f.read_file (file); + + _id = remove_urn_uuid (f.string_child ("Id")); + + /* XXX: I don't know whether these things are required or optional */ + + _annotation = f.optional_string_child("Annotation").get_value_or (""); + _issue_date = f.string_child("IssueDate"); + _issuer = f.optional_string_child("Issuer").get_value_or (""); + _creator = f.optional_string_child("Creator").get_value_or (""); + /* ContentOriginator? */ + _content_title = f.optional_string_child("ContentTitle").get_value_or (""); + _content_kind = content_kind_from_string (f.string_child ("ContentKind")); + BOOST_FOREACH (cxml::ConstNodePtr i, f.node_child("ContentVersionList")->node_children("ContentVersion")) { + _content_versions.push_back (make_pair (remove_urn_uuid(i->string_child("Id")), i->string_child("LabelText"))); + } + /* EssenceDescriptorList */ + _edit_rate = Fraction (f.string_child("EditRate")); + /* ExtensionProperties */ + + _segments = type_grand_children (f, "SegmentList", "Segment"); + + /* f.done (); */ +} + +void +CPL::resolve_refs (list > assets) +{ + /* XXX */ +} + +string +CPL::pkl_type (Standard standard) const +{ + switch (standard) { + case DCP_INTEROP: + case DCP_SMPTE: + /* This class shouldn't be writing DCP CPLs */ + DCP_ASSERT (false); + case IMP: + return "text/xml"; + } + + return ""; +} + +/** Write an CompositonPlaylist XML file. + * @param file Filename to write. + * @param standard Must be IMP. + * @param signer Signer to sign the CPL, or 0 to add no signature. + */ +void +CPL::write_xml (boost::filesystem::path file, Standard standard, shared_ptr signer) const +{ + xmlpp::Document doc; + xmlpp::Element* root = 0; + + switch (standard) { + case DCP_INTEROP: + case DCP_SMPTE: + /* This class shouldn't be writing DCP CPLs */ + root = doc.create_root_node ("CompositionPlaylist", "http://www.digicine.com/PROTO-ASDCP-CPL-20040511#"); + break; + case IMP: + root = doc.create_root_node ("CompositionPlaylist", "http://www.smpte-ra.org/schemas/429-7/2006/CPL"); + break; + } + + if (signer) { + root->set_namespace_declaration ("http://www.w3.org/2000/09/xmldsig#", "dsig"); + } + + /* XXX */ + + set_file (file); +} -- cgit v1.2.3