diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-06-05 00:05:32 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-06-05 14:36:27 +0100 |
| commit | fe99eae4b95c5fcf2f3730efad4a18d0cb5c29bc (patch) | |
| tree | 265ca14896f63eeff210d602c5f11ed19d800ebf /src/asset_writer.cc | |
| parent | 7b717db244554300ebed8eade8421ee3faa28d33 (diff) | |
MXF -> Asset in lots of places.
Diffstat (limited to 'src/asset_writer.cc')
| -rw-r--r-- | src/asset_writer.cc | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/asset_writer.cc b/src/asset_writer.cc new file mode 100644 index 00000000..eb55feaf --- /dev/null +++ b/src/asset_writer.cc @@ -0,0 +1,68 @@ +/* + Copyright (C) 2012-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. + +*/ + +/** @file src/asset_writer.h + * @brief AssetWriter class. + */ + +#include "asset_writer.h" +#include "mxf.h" +#include "dcp_assert.h" +#include "AS_DCP.h" +#include "KM_prng.h" + +using namespace dcp; + +/** Create an AssetWriter. + * @param mxf MXF that we are writing. + * @param file File to write to. + */ +AssetWriter::AssetWriter (MXF* mxf, boost::filesystem::path file) + : _mxf (mxf) + , _file (file) + , _frames_written (0) + , _finalized (false) + , _encryption_context (0) +{ + if (mxf->key ()) { + _encryption_context = new ASDCP::AESEncContext; + if (ASDCP_FAILURE (_encryption_context->InitKey (mxf->key()->value ()))) { + throw MiscError ("could not set up encryption context"); + } + + uint8_t cbc_buffer[ASDCP::CBC_BLOCK_SIZE]; + + Kumu::FortunaRNG rng; + if (ASDCP_FAILURE (_encryption_context->SetIVec (rng.FillRandom (cbc_buffer, ASDCP::CBC_BLOCK_SIZE)))) { + throw MiscError ("could not set up CBC initialization vector"); + } + } +} + +AssetWriter::~AssetWriter () +{ + delete _encryption_context; +} + +void +AssetWriter::finalize () +{ + DCP_ASSERT (!_finalized); + _finalized = true; +} |
