diff options
Diffstat (limited to 'src/im_package.cc')
| -rw-r--r-- | src/im_package.cc | 57 |
1 files changed, 53 insertions, 4 deletions
diff --git a/src/im_package.cc b/src/im_package.cc index a7b4674e..c845844f 100644 --- a/src/im_package.cc +++ b/src/im_package.cc @@ -18,7 +18,15 @@ */ #include "im_package.h" +#include "asset.h" +#include "mono_picture_asset.h" +#include "sound_asset.h" +#include "smpte_subtitle_asset.h" +#include "AS_DCP.h" +using std::list; +using std::string; +using boost::shared_ptr; using namespace dcp::im; Package::Package (boost::filesystem::path directory) @@ -27,17 +35,58 @@ Package::Package (boost::filesystem::path directory) } -list<Asset> +list<shared_ptr<dcp::Asset> > Package::assets () const { /* XXX */ - return list<Asset> (); + return list<shared_ptr<Asset> > (); } void -Package::write_xml (dcp::XMLMetadata metadata, shared_ptr<const CertificateChain> signer = shared_ptr<const CertificateChain> ()) +Package::write_xml (dcp::XMLMetadata metadata, shared_ptr<const dcp::CertificateChain> signer) { - do_write_xml (dcp::IMF, metadata, signer); + do_write_xml (dcp::IMP, metadata, signer); +} + +shared_ptr<dcp::Asset> +Package::xml_asset_factory (boost::filesystem::path file, string root) const +{ + shared_ptr<dcp::Asset> asset; + + if (root == "CompositionPlaylist") { + asset.reset (new CPL (file)); + } + + return asset; +} + +shared_ptr<dcp::Asset> +Package::mxf_asset_factory (boost::filesystem::path file) const +{ + shared_ptr<dcp::Asset> asset; + + ASDCP::EssenceType_t type; + if (ASDCP::EssenceType (file.string().c_str(), type) != ASDCP::RESULT_OK) { + throw PackageReadError ("Could not find essence type"); + } + + switch (type) { + case ASDCP::ESS_UNKNOWN: + case ASDCP::ESS_AS02_JPEG_2000: + asset.reset (new dcp::MonoPictureAsset (file)); + break; + case ASDCP::ESS_AS02_PCM_24b_48k: + case ASDCP::ESS_AS02_PCM_24b_96k: + asset.reset (new dcp::SoundAsset (file)); + break; + case ASDCP::ESS_AS02_TIMED_TEXT: + asset.reset (new dcp::SMPTESubtitleAsset (file)); + break; + default: + throw PackageReadError ("Unknown MXF essence type"); + } + + return asset; } string |
