/* 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 "imp_cpl.h" #include "xml.h" #include "essence_descriptor.h" #include "segment.h" #include #include #include using std::string; using std::list; using boost::shared_ptr; using namespace dcp; /** Construct a DCPCPL object from a XML file */ IMPCPL::IMPCPL (boost::filesystem::path file) : CPL (file) { shared_ptr f = read_common (file); /* XXX: find out which of these are compulsory and which are optional */ _annotation = f->optional_string_child("Annotation").get_value_or(""); _content_title = f->string_child("ContentTitle"); _content_originator = f->optional_string_child("ContentOriginator").get_value_or(""); BOOST_FOREACH (cxml::ConstNodePtr i, f->node_child("EssenceDescriptorList")->node_children("EssenceDescriptor")) { _essence_descriptors.push_back (EssenceDescriptor::create (i)); } _edit_rate = Fraction (f->string_child ("EditRate")); f->ignore_child ("ContentVersionList"); f->ignore_child ("ExtensionProperties"); _segments = type_grand_children (f, "SegmentList", "Segment"); f->done (); } void IMPCPL::resolve_refs (list > assets) { BOOST_FOREACH (shared_ptr i, _segments) { i->resolve_refs (assets); } } int64_t IMPCPL::duration () const { /* XXX */ return 0; } bool IMPCPL::encrypted () const { /* No IMP encryption (yet) */ return false; } void IMPCPL::add (DecryptedKDM const &) { /* No IMP encryption (yet) */ } string IMPCPL::pkl_annotation () const { /* XXX */ return ""; } /* XXX: this standard variable is a shame */ string IMPCPL::pkl_type (Standard) const { return "text/xml"; }