diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-05-25 14:21:37 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-05-25 14:21:37 +0100 |
| commit | 394e0fa234e425ecec0303482d1566e721017c65 (patch) | |
| tree | e6a9de512b06ec5d3d72537e5d63739ac25c4edc | |
| parent | 85c699d29aab7ca7f7218b3f7f859e10c9025e37 (diff) | |
Add very minimal Atmos asset.
| -rw-r--r-- | src/atmos_asset.cc | 50 | ||||
| -rw-r--r-- | src/atmos_asset.h | 58 | ||||
| -rw-r--r-- | src/wscript | 2 | ||||
| -rw-r--r-- | test/atmos_test.cc | 31 | ||||
| -rw-r--r-- | test/wscript | 1 |
5 files changed, 142 insertions, 0 deletions
diff --git a/src/atmos_asset.cc b/src/atmos_asset.cc new file mode 100644 index 00000000..6c0c0e78 --- /dev/null +++ b/src/atmos_asset.cc @@ -0,0 +1,50 @@ +/* + Copyright (C) 2016 Carl Hetherington <cth@carlh.net> + + 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 "atmos_asset.h" +#include "exceptions.h" +#include "AS_DCP.h" + +using std::string; +using namespace dcp; + +AtmosAsset::AtmosAsset (boost::filesystem::path file) + : Asset (file) +{ + ASDCP::ATMOS::MXFReader reader; + Kumu::Result_t r = reader.OpenRead (file.string().c_str()); + if (ASDCP_FAILURE (r)) { + boost::throw_exception (MXFFileError ("could not open MXF file for reading", file.string(), r)); + } + + ASDCP::ATMOS::AtmosDescriptor desc; + if (ASDCP_FAILURE (reader.FillAtmosDescriptor (desc))) { + boost::throw_exception (DCPReadError ("could not read Atmos MXF information")); + } + + _first_frame = desc.FirstFrame; + _max_channel_count = desc.MaxChannelCount; + _max_object_count = desc.MaxObjectCount; +} + +string +AtmosAsset::pkl_type (Standard) const +{ + return "application/mxf"; +} diff --git a/src/atmos_asset.h b/src/atmos_asset.h new file mode 100644 index 00000000..602beb31 --- /dev/null +++ b/src/atmos_asset.h @@ -0,0 +1,58 @@ +/* + Copyright (C) 2016 Carl Hetherington <cth@carlh.net> + + 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. + +*/ + +#ifndef LIBDCP_ATMOS_ASSET_H +#define LIBDCP_ATMOS_ASSET_H + +#include "asset.h" +#include "mxf.h" + +namespace dcp { + +class AtmosAsset : public Asset, public MXF +{ +public: + AtmosAsset (boost::filesystem::path file); + + std::string pkl_type (Standard) const; + + /** @return frame number of the frame to align with the FFOA of the picture track */ + int first_frame () const { + return _first_frame; + } + + /** @return maximum number of channels in bitstream */ + int max_channel_count () const { + return _max_channel_count; + } + + /** @return maximum number of objects in bitstream */ + int max_object_count () const { + return _max_object_count; + } + +private: + int _first_frame; + int _max_channel_count; + int _max_object_count; +}; + +} + +#endif diff --git a/src/wscript b/src/wscript index c6185790..4fbfdb9a 100644 --- a/src/wscript +++ b/src/wscript @@ -21,6 +21,7 @@ from waflib import TaskGen def build(bld): source = """ asset.cc + atmos_asset.cc certificate_chain.cc certificate.cc colour_conversion.cc @@ -83,6 +84,7 @@ def build(bld): headers = """ asset.h + atmos_asset.h certificate_chain.h certificate.h chromaticity.h diff --git a/test/atmos_test.cc b/test/atmos_test.cc new file mode 100644 index 00000000..42fc3082 --- /dev/null +++ b/test/atmos_test.cc @@ -0,0 +1,31 @@ +/* + Copyright (C) 2015 Carl Hetherington <cth@carlh.net> + + 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 "atmos_asset.h" +#include "test.h" +#include <boost/test/unit_test.hpp> +#include <iostream> + +BOOST_AUTO_TEST_CASE (atmos_test) +{ + dcp::AtmosAsset a (private_test / "20160218_NameOfFilm_FTR_OV_EN_A_dcs_r01.mxf"); + BOOST_CHECK_EQUAL (a.first_frame(), 192); + BOOST_CHECK_EQUAL (a.max_channel_count(), 10); + BOOST_CHECK_EQUAL (a.max_object_count(), 118); +} diff --git a/test/wscript b/test/wscript index 9ceb08c1..32b3b7e9 100644 --- a/test/wscript +++ b/test/wscript @@ -47,6 +47,7 @@ def build(bld): obj.use = 'libdcp%s' % bld.env.API_VERSION obj.source = """ asset_test.cc + atmos_test.cc certificates_test.cc colour_test.cc colour_conversion_test.cc |
