X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fstereo_picture_frame.cc;h=ac9cb6d9890396b12ec3424c32c81fa601357231;hb=e1e7de8d73bedd0c741e7df0390068c67867e09f;hp=e8d7cd617d510122761cba40deae001b2dc1cc0d;hpb=809fe8c8e6f28c87f48e6629560a2b52a148a8a7;p=libdcp.git diff --git a/src/stereo_picture_frame.cc b/src/stereo_picture_frame.cc index e8d7cd61..ac9cb6d9 100644 --- a/src/stereo_picture_frame.cc +++ b/src/stereo_picture_frame.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2014 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington This file is part of libdcp. @@ -31,6 +31,12 @@ files in the program, then also delete it here. */ + +/** @file src/stereo_picture_frame.cc + * @brief StereoPictureFrame class + */ + + #include "stereo_picture_frame.h" #include "exceptions.h" #include "util.h" @@ -42,10 +48,49 @@ #include #include + using std::string; -using boost::shared_ptr; +using std::shared_ptr; +using std::make_shared; using namespace dcp; + +StereoPictureFrame::Part::Part (shared_ptr buffer, Eye eye) + : _buffer (buffer) + , _eye (eye) +{ + +} + + +ASDCP::JP2K::FrameBuffer & +StereoPictureFrame::Part::mono () const +{ + return _eye == Eye::LEFT ? _buffer->Left : _buffer->Right; +} + + +uint8_t const * +StereoPictureFrame::Part::data () const +{ + return mono().RoData(); +} + + +uint8_t * +StereoPictureFrame::Part::data () +{ + return mono().Data(); +} + + +int +StereoPictureFrame::Part::size () const +{ + return mono().Size(); +} + + /** Make a picture frame from a 3D (stereoscopic) asset. * @param reader Reader for the MXF file. * @param n Frame within the asset, not taking EntryPoint into account. @@ -53,16 +98,17 @@ using namespace dcp; StereoPictureFrame::StereoPictureFrame (ASDCP::JP2K::MXFSReader* reader, int n, shared_ptr c) { /* XXX: unfortunate guesswork on this buffer size */ - _buffer.reset(new ASDCP::JP2K::SFrameBuffer(4 * Kumu::Megabyte)); + _buffer = make_shared(4 * Kumu::Megabyte); if (ASDCP_FAILURE (reader->ReadFrame (n, *_buffer, c->context(), c->hmac()))) { boost::throw_exception (ReadError (String::compose ("could not read video frame %1 of %2", n))); } } + StereoPictureFrame::StereoPictureFrame () { - _buffer.reset(new ASDCP::JP2K::SFrameBuffer(4 * Kumu::Megabyte)); + _buffer = make_shared(4 * Kumu::Megabyte); } @@ -75,47 +121,27 @@ shared_ptr StereoPictureFrame::xyz_image (Eye eye, int reduce) const { switch (eye) { - case EYE_LEFT: - return decompress_j2k (const_cast (_buffer->Left.RoData()), _buffer->Left.Size(), reduce); - case EYE_RIGHT: - return decompress_j2k (const_cast (_buffer->Right.RoData()), _buffer->Right.Size(), reduce); + case Eye::LEFT: + return decompress_j2k (const_cast(_buffer->Left.RoData()), _buffer->Left.Size(), reduce); + case Eye::RIGHT: + return decompress_j2k (const_cast(_buffer->Right.RoData()), _buffer->Right.Size(), reduce); } - return shared_ptr (); + return {}; } -uint8_t const * -StereoPictureFrame::left_j2k_data () const -{ - return _buffer->Left.RoData (); -} -uint8_t* -StereoPictureFrame::left_j2k_data () +shared_ptr +StereoPictureFrame::right () const { - return _buffer->Left.Data (); + return make_shared(_buffer, Eye::RIGHT); } -int -StereoPictureFrame::left_j2k_size () const -{ - return _buffer->Left.Size (); -} -uint8_t const * -StereoPictureFrame::right_j2k_data () const +shared_ptr +StereoPictureFrame::left () const { - return _buffer->Right.RoData (); + return make_shared(_buffer, Eye::LEFT); } -uint8_t* -StereoPictureFrame::right_j2k_data () -{ - return _buffer->Right.Data (); -} -int -StereoPictureFrame::right_j2k_size () const -{ - return _buffer->Right.Size (); -}