X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fatmos_asset.cc;h=ae38173725331c63aeedd1a11607eaa0236dbacd;hb=0892ee346ee0caf60d532bab40ebf1716e3b1cb8;hp=6c0c0e787f3e402dceab7b00f29d2d8e5acc7e2a;hpb=216555fd5145ce4668d1a02337ed87edef64367b;p=libdcp.git diff --git a/src/atmos_asset.cc b/src/atmos_asset.cc index 6c0c0e78..ae381737 100644 --- a/src/atmos_asset.cc +++ b/src/atmos_asset.cc @@ -1,50 +1,122 @@ /* - Copyright (C) 2016 Carl Hetherington + Copyright (C) 2016-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of libdcp. + + libdcp 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, + libdcp 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. + along with libdcp. If not, see . + + In addition, as a special exception, the copyright holders give + permission to link the code of portions of this program with the + OpenSSL library under certain conditions as described in each + individual source file, and distribute linked combinations + including the two. + You must obey the GNU General Public License in all respects + for all of the code used other than OpenSSL. If you modify + file(s) with this exception, you may extend this exception to your + version of the file(s), but you are not obligated to do so. If you + do not wish to do so, delete this exception statement from your + version. If you delete this exception statement from all source + files in the program, then also delete it here. */ + +/** @file src/atmos_asset.cc + * @brief AtmosAsset class + */ + + #include "atmos_asset.h" +#include "atmos_asset_reader.h" +#include "atmos_asset_writer.h" #include "exceptions.h" -#include "AS_DCP.h" +#include + using std::string; +using std::shared_ptr; +using std::make_shared; using namespace dcp; + +AtmosAsset::AtmosAsset (Fraction edit_rate, int first_frame, int max_channel_count, int max_object_count, int atmos_version) + : MXF (Standard::SMPTE) + , _edit_rate (edit_rate) + , _first_frame (first_frame) + , _max_channel_count (max_channel_count) + , _max_object_count (max_object_count) + , _atmos_id (make_uuid()) + , _atmos_version (atmos_version) +{ + +} + + AtmosAsset::AtmosAsset (boost::filesystem::path file) : Asset (file) + , MXF (Standard::SMPTE) { ASDCP::ATMOS::MXFReader reader; - Kumu::Result_t r = reader.OpenRead (file.string().c_str()); + auto 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)); + 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")); + boost::throw_exception (ReadError("could not read Atmos MXF information")); } + _edit_rate = Fraction (desc.EditRate.Numerator, desc.EditRate.Denominator); + _intrinsic_duration = desc.ContainerDuration; _first_frame = desc.FirstFrame; _max_channel_count = desc.MaxChannelCount; _max_object_count = desc.MaxObjectCount; + + char id[64]; + Kumu::bin2UUIDhex (desc.AtmosID, ASDCP::UUIDlen, id, sizeof(id)); + _atmos_id = id; + + _atmos_version = desc.AtmosVersion; + + ASDCP::WriterInfo info; + if (ASDCP_FAILURE (reader.FillWriterInfo(info))) { + boost::throw_exception (ReadError ("could not read audio MXF information")); + } + + _id = read_writer_info (info); } + string -AtmosAsset::pkl_type (Standard) const +AtmosAsset::static_pkl_type (Standard) { return "application/mxf"; } + + +shared_ptr +AtmosAsset::start_read () const +{ + /* Can't use make_shared here since the constructor is protected */ + return shared_ptr(new AtmosAssetReader(this, key(), Standard::SMPTE)); +} + + +shared_ptr +AtmosAsset::start_write (boost::filesystem::path file) +{ + /* Can't use make_shared here since the constructor is protected */ + return shared_ptr(new AtmosAssetWriter(this, file)); +}