summaryrefslogtreecommitdiff
path: root/src/picture_asset.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-01-21 21:01:59 +0000
committerCarl Hetherington <cth@carlh.net>2013-01-21 21:01:59 +0000
commitc21da9cdd8284e8d36a08bc7976744a3cd74bede (patch)
tree7d4f8a67e29e7f416eb8a498a0e2c76be9fe1a10 /src/picture_asset.cc
parenta2c5f0ee3dca60fa3c593a55f9bf7f42f3aa88d4 (diff)
Try to remove need for asdcplib includes in libdcp headers.
Diffstat (limited to 'src/picture_asset.cc')
-rw-r--r--src/picture_asset.cc30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/picture_asset.cc b/src/picture_asset.cc
index a2f6b584..564ada79 100644
--- a/src/picture_asset.cc
+++ b/src/picture_asset.cc
@@ -400,11 +400,25 @@ MonoPictureAsset::start_write ()
return shared_ptr<MonoPictureAssetWriter> (new MonoPictureAssetWriter (this));
}
+struct MonoPictureAssetWriter::ASDCPState
+{
+ ASDCPState()
+ : frame_buffer (4 * Kumu::Megabyte)
+ {}
+
+ ASDCP::JP2K::CodestreamParser j2k_parser;
+ ASDCP::JP2K::FrameBuffer frame_buffer;
+ ASDCP::JP2K::MXFWriter mxf_writer;
+ ASDCP::WriterInfo writer_info;
+ ASDCP::JP2K::PictureDescriptor picture_descriptor;
+};
+
+
/** @param a Asset to write to. `a' must not be deleted while
* this writer class still exists, or bad things will happen.
*/
MonoPictureAssetWriter::MonoPictureAssetWriter (MonoPictureAsset* a)
- : _frame_buffer (4 * Kumu::Megabyte)
+ : _state (new MonoPictureAssetWriter::ASDCPState)
, _asset (a)
, _frames_written (0)
, _finalized (false)
@@ -417,24 +431,24 @@ MonoPictureAssetWriter::write (uint8_t* data, int size)
{
assert (!_finalized);
- if (ASDCP_FAILURE (_j2k_parser.OpenReadFrame (data, size, _frame_buffer))) {
+ if (ASDCP_FAILURE (_state->j2k_parser.OpenReadFrame (data, size, _state->frame_buffer))) {
throw MiscError ("could not parse J2K frame");
}
if (_frames_written == 0) {
/* This is our first frame; set up the writer */
- _j2k_parser.FillPictureDescriptor (_picture_descriptor);
- _picture_descriptor.EditRate = ASDCP::Rational (_asset->edit_rate(), 1);
+ _state->j2k_parser.FillPictureDescriptor (_state->picture_descriptor);
+ _state->picture_descriptor.EditRate = ASDCP::Rational (_asset->edit_rate(), 1);
- MXFAsset::fill_writer_info (&_writer_info, _asset->uuid());
+ MXFAsset::fill_writer_info (&_state->writer_info, _asset->uuid());
- if (ASDCP_FAILURE (_mxf_writer.OpenWrite (_asset->path().c_str(), _writer_info, _picture_descriptor))) {
+ if (ASDCP_FAILURE (_state->mxf_writer.OpenWrite (_asset->path().c_str(), _state->writer_info, _state->picture_descriptor))) {
throw MXFFileError ("could not open MXF file for writing", _asset->path().string());
}
}
- if (ASDCP_FAILURE (_mxf_writer.WriteFrame (_frame_buffer, 0, 0))) {
+ if (ASDCP_FAILURE (_state->mxf_writer.WriteFrame (_state->frame_buffer, 0, 0))) {
throw MiscError ("error in writing video MXF");
}
@@ -444,7 +458,7 @@ MonoPictureAssetWriter::write (uint8_t* data, int size)
void
MonoPictureAssetWriter::finalize ()
{
- if (ASDCP_FAILURE (_mxf_writer.Finalize())) {
+ if (ASDCP_FAILURE (_state->mxf_writer.Finalize())) {
throw MiscError ("error in finalizing video MXF");
}