summaryrefslogtreecommitdiff
path: root/src/im_package.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-01-10 22:39:35 +0000
committerCarl Hetherington <cth@carlh.net>2016-01-10 22:39:35 +0000
commitb21ac5801854d9d8946a0f8d0cadca2abd9a066b (patch)
tree1ea236a585547fcac0e7e06b7912e9702c64ba5e /src/im_package.cc
parent1ee5cc88cb32927f95358e2d03985caf5a1d8e05 (diff)
Hacks.imf2
Diffstat (limited to 'src/im_package.cc')
-rw-r--r--src/im_package.cc57
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