diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-11-01 23:37:31 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-11-02 00:12:56 +0100 |
| commit | c81a5f9d576f426d8df5a7d0117990911b843a30 (patch) | |
| tree | d1b9ae0718911e72e59ab9f5080f9bb813b7a35b /src | |
| parent | 9842de679ebca9783b9e8b4705e4fe2a1ebb81fa (diff) | |
Make StereoPictureFrame expose the Data API in a similar way to MonoPictureFrame.
Diffstat (limited to 'src')
| -rw-r--r-- | src/stereo_picture_asset.cc | 8 | ||||
| -rw-r--r-- | src/stereo_picture_frame.cc | 69 | ||||
| -rw-r--r-- | src/stereo_picture_frame.h | 27 | ||||
| -rw-r--r-- | src/verify.cc | 2 |
4 files changed, 69 insertions, 37 deletions
diff --git a/src/stereo_picture_asset.cc b/src/stereo_picture_asset.cc index 32fdc65f..a8805304 100644 --- a/src/stereo_picture_asset.cc +++ b/src/stereo_picture_asset.cc @@ -142,8 +142,8 @@ StereoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, if (!frame_buffer_equals ( i, opt, note, - frame_A->left_j2k_data(), frame_A->left_j2k_size(), - frame_B->left_j2k_data(), frame_B->left_j2k_size() + frame_A->left()->data(), frame_A->left()->size(), + frame_B->left()->data(), frame_B->left()->size() )) { result = false; if (!opt.keep_going) { @@ -153,8 +153,8 @@ StereoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, if (!frame_buffer_equals ( i, opt, note, - frame_A->right_j2k_data(), frame_A->right_j2k_size(), - frame_B->right_j2k_data(), frame_B->right_j2k_size() + frame_A->right()->data(), frame_A->right()->size(), + frame_B->right()->data(), frame_B->right()->size() )) { result = false; if (!opt.keep_going) { diff --git a/src/stereo_picture_frame.cc b/src/stereo_picture_frame.cc index e8d7cd61..4bbeae24 100644 --- a/src/stereo_picture_frame.cc +++ b/src/stereo_picture_frame.cc @@ -46,6 +46,43 @@ using std::string; using boost::shared_ptr; using namespace dcp; + +StereoPictureFrame::Part::Part (shared_ptr<ASDCP::JP2K::SFrameBuffer> 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. @@ -84,38 +121,18 @@ StereoPictureFrame::xyz_image (Eye eye, int reduce) const return shared_ptr<OpenJPEGImage> (); } -uint8_t const * -StereoPictureFrame::left_j2k_data () const -{ - return _buffer->Left.RoData (); -} -uint8_t* -StereoPictureFrame::left_j2k_data () +shared_ptr<StereoPictureFrame::Part> +StereoPictureFrame::right () const { - return _buffer->Left.Data (); + return shared_ptr<Part>(new Part(_buffer, EYE_RIGHT)); } -int -StereoPictureFrame::left_j2k_size () const -{ - return _buffer->Left.Size (); -} -uint8_t const * -StereoPictureFrame::right_j2k_data () const +shared_ptr<StereoPictureFrame::Part> +StereoPictureFrame::left () const { - return _buffer->Right.RoData (); + return shared_ptr<Part>(new Part(_buffer, EYE_LEFT)); } -uint8_t* -StereoPictureFrame::right_j2k_data () -{ - return _buffer->Right.Data (); -} -int -StereoPictureFrame::right_j2k_size () const -{ - return _buffer->Right.Size (); -} diff --git a/src/stereo_picture_frame.h b/src/stereo_picture_frame.h index 6dd6269b..c38124c0 100644 --- a/src/stereo_picture_frame.h +++ b/src/stereo_picture_frame.h @@ -52,7 +52,10 @@ namespace ASDCP { namespace dcp { + class OpenJPEGImage; +class StereoPictureFrame; + /** A single frame of a 3D (stereoscopic) picture asset */ class StereoPictureFrame : public boost::noncopyable @@ -62,13 +65,25 @@ public: boost::shared_ptr<OpenJPEGImage> xyz_image (Eye eye, int reduce = 0) const; - uint8_t const * left_j2k_data () const; - uint8_t* left_j2k_data (); - int left_j2k_size () const; + class Part : public Data + { + public: + uint8_t const * data () const; + uint8_t * data (); + int size () const; + + private: + friend class StereoPictureFrame; + + Part (boost::shared_ptr<ASDCP::JP2K::SFrameBuffer> buffer, Eye eye); + ASDCP::JP2K::FrameBuffer& mono () const; + + boost::shared_ptr<ASDCP::JP2K::SFrameBuffer> _buffer; + Eye _eye; + }; - uint8_t const * right_j2k_data () const; - uint8_t* right_j2k_data (); - int right_j2k_size () const; + boost::shared_ptr<Part> left () const; + boost::shared_ptr<Part> right () const; private: /* XXX: this is a bit of a shame, but I tried friend StereoPictureAssetReader and it's diff --git a/src/verify.cc b/src/verify.cc index 0d1907fe..69109983 100644 --- a/src/verify.cc +++ b/src/verify.cc @@ -411,7 +411,7 @@ biggest_frame_size (shared_ptr<const MonoPictureFrame> frame) int biggest_frame_size (shared_ptr<const StereoPictureFrame> frame) { - return max(frame->left_j2k_size(), frame->right_j2k_size()); + return max(frame->left()->size(), frame->right()->size()); } |
