X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fmono_picture_frame.cc;h=7420193e47ec0f0701e48ac8d7207df5113b0c51;hb=f423e80a1832644be0a4ccb5ea999be324cb344f;hp=7ac807cba27029c013ca0d00e864e1172a80dc02;hpb=380d7af94562883cdcaa60726d0ffa36f3dab304;p=libdcp.git diff --git a/src/mono_picture_frame.cc b/src/mono_picture_frame.cc index 7ac807cb..7420193e 100644 --- a/src/mono_picture_frame.cc +++ b/src/mono_picture_frame.cc @@ -47,7 +47,7 @@ #include using std::string; -using boost::shared_ptr; +using std::shared_ptr; using boost::optional; using namespace dcp; @@ -57,13 +57,17 @@ using namespace dcp; MonoPictureFrame::MonoPictureFrame (boost::filesystem::path path) { boost::uintmax_t const size = boost::filesystem::file_size (path); - _buffer = new ASDCP::JP2K::FrameBuffer (size); + _buffer.reset(new ASDCP::JP2K::FrameBuffer(size)); FILE* f = fopen_boost (path, "rb"); if (!f) { boost::throw_exception (FileError ("could not open JPEG2000 file", path, errno)); } - fread (j2k_data(), 1, size, f); + size_t n = fread (data(), 1, size, f); + if (n != size) { + boost::throw_exception (FileError ("could not read from JPEG2000 file", path, errno)); + } + fclose (f); _buffer->Size (size); @@ -77,45 +81,40 @@ MonoPictureFrame::MonoPictureFrame (boost::filesystem::path path) MonoPictureFrame::MonoPictureFrame (ASDCP::JP2K::MXFReader* reader, int n, shared_ptr c) { /* XXX: unfortunate guesswork on this buffer size */ - _buffer = new ASDCP::JP2K::FrameBuffer (4 * Kumu::Megabyte); + _buffer.reset(new ASDCP::JP2K::FrameBuffer(4 * Kumu::Megabyte)); ASDCP::Result_t const r = reader->ReadFrame (n, *_buffer, c->context(), c->hmac()); if (ASDCP_FAILURE (r)) { - boost::throw_exception (DCPReadError (String::compose ("could not read video frame %1 (%2)", n, static_cast(r)))); + boost::throw_exception (ReadError (String::compose ("could not read video frame %1 (%2)", n, static_cast(r)))); } } MonoPictureFrame::MonoPictureFrame (uint8_t const * data, int size) { - _buffer = new ASDCP::JP2K::FrameBuffer (size); + _buffer.reset(new ASDCP::JP2K::FrameBuffer(size)); _buffer->Size (size); memcpy (_buffer->Data(), data, size); } -/** MonoPictureFrame destructor */ -MonoPictureFrame::~MonoPictureFrame () -{ - delete _buffer; -} /** @return Pointer to JPEG2000 data */ uint8_t const * -MonoPictureFrame::j2k_data () const +MonoPictureFrame::data () const { return _buffer->RoData (); } /** @return Pointer to JPEG2000 data */ uint8_t * -MonoPictureFrame::j2k_data () +MonoPictureFrame::data () { return _buffer->Data (); } /** @return Size of JPEG2000 data in bytes */ int -MonoPictureFrame::j2k_size () const +MonoPictureFrame::size () const { return _buffer->Size (); }