X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fmono_picture_asset.cc;h=9a0beb42458f0aa472006a54c5e677515c4e6ab3;hb=refs%2Ftags%2Fv1.9.4;hp=12165f7b49b4947deb7e189e61361bf7aca4b7a5;hpb=d39880eef211a296fa8ef4712cdef5945d08527c;p=libdcp.git diff --git a/src/mono_picture_asset.cc b/src/mono_picture_asset.cc index 12165f7b..9a0beb42 100644 --- a/src/mono_picture_asset.cc +++ b/src/mono_picture_asset.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2016 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington This file is part of libdcp. @@ -31,80 +31,96 @@ files in the program, then also delete it here. */ + +/** @file src/mono_picture_asset.cc + * @brief MonoPictureAsset class + */ + + +#include "compose.hpp" +#include "dcp_assert.h" +#include "equality_options.h" +#include "exceptions.h" +#include "filesystem.h" #include "mono_picture_asset.h" -#include "mono_picture_asset_writer.h" #include "mono_picture_asset_reader.h" -#include "exceptions.h" -#include "dcp_assert.h" +#include "mono_picture_asset_writer.h" #include "mono_picture_frame.h" -#include "compose.hpp" #include #include -using std::string; -using std::vector; + +using std::dynamic_pointer_cast; using std::list; +using std::make_shared; using std::pair; using std::shared_ptr; -using std::dynamic_pointer_cast; +using std::string; +using std::vector; #if BOOST_VERSION >= 106100 using namespace boost::placeholders; #endif using namespace dcp; + MonoPictureAsset::MonoPictureAsset (boost::filesystem::path file) : PictureAsset (file) { - ASDCP::JP2K::MXFReader reader; - Kumu::Result_t r = reader.OpenRead (file.string().c_str()); - if (ASDCP_FAILURE (r)) { - boost::throw_exception (MXFFileError ("could not open MXF file for reading", file.string(), r)); + Kumu::FileReaderFactory factory; + ASDCP::JP2K::MXFReader reader(factory); + auto r = reader.OpenRead(dcp::filesystem::fix_long_path(file).string().c_str()); + if (ASDCP_FAILURE(r)) { + boost::throw_exception (MXFFileError("could not open MXF file for reading", file.string(), r)); } ASDCP::JP2K::PictureDescriptor desc; - if (ASDCP_FAILURE (reader.FillPictureDescriptor (desc))) { - boost::throw_exception (ReadError ("could not read video MXF information")); + if (ASDCP_FAILURE (reader.FillPictureDescriptor(desc))) { + boost::throw_exception (ReadError("could not read video MXF information")); } read_picture_descriptor (desc); ASDCP::WriterInfo info; if (ASDCP_FAILURE (reader.FillWriterInfo (info))) { - boost::throw_exception (ReadError ("could not read video MXF information")); + boost::throw_exception (ReadError("could not read video MXF information")); } _id = read_writer_info (info); } + MonoPictureAsset::MonoPictureAsset (Fraction edit_rate, Standard standard) : PictureAsset (edit_rate, standard) { } + static void -storing_note_handler (list >& notes, NoteType t, string s) +storing_note_handler (list>& notes, NoteType t, string s) { notes.push_back (make_pair (t, s)); } + bool -MonoPictureAsset::equals (shared_ptr other, EqualityOptions opt, NoteHandler note) const +MonoPictureAsset::equals(shared_ptr other, EqualityOptions const& opt, NoteHandler note) const { - if (!dynamic_pointer_cast (other)) { + if (!dynamic_pointer_cast(other)) { return false; } - ASDCP::JP2K::MXFReader reader_A; + Kumu::FileReaderFactory factory; + ASDCP::JP2K::MXFReader reader_A(factory); DCP_ASSERT (_file); - Kumu::Result_t r = reader_A.OpenRead (_file->string().c_str()); - if (ASDCP_FAILURE (r)) { - boost::throw_exception (MXFFileError ("could not open MXF file for reading", _file->string(), r)); + auto r = reader_A.OpenRead(dcp::filesystem::fix_long_path(*_file).string().c_str()); + if (ASDCP_FAILURE(r)) { + boost::throw_exception (MXFFileError("could not open MXF file for reading", _file->string(), r)); } - ASDCP::JP2K::MXFReader reader_B; + ASDCP::JP2K::MXFReader reader_B(factory); DCP_ASSERT (other->file ()); - r = reader_B.OpenRead (other->file()->string().c_str()); + r = reader_B.OpenRead(dcp::filesystem::fix_long_path(*other->file()).string().c_str()); if (ASDCP_FAILURE (r)) { boost::throw_exception (MXFFileError ("could not open MXF file for reading", other->file()->string(), r)); } @@ -122,13 +138,13 @@ MonoPictureAsset::equals (shared_ptr other, EqualityOptions opt, No return false; } - shared_ptr other_picture = dynamic_pointer_cast (other); + auto other_picture = dynamic_pointer_cast (other); DCP_ASSERT (other_picture); bool result = true; - shared_ptr reader = start_read (); - shared_ptr other_reader = other_picture->start_read (); + auto reader = start_read (); + auto other_reader = other_picture->start_read (); #ifdef LIBDCP_OPENMP #pragma omp parallel for @@ -141,10 +157,10 @@ MonoPictureAsset::equals (shared_ptr other, EqualityOptions opt, No if (result || opt.keep_going) { - shared_ptr frame_A = reader->get_frame (i); - shared_ptr frame_B = other_reader->get_frame (i); + auto frame_A = reader->get_frame (i); + auto frame_B = other_reader->get_frame (i); - list > notes; + list> notes; if (!frame_buffer_equals ( i, opt, bind (&storing_note_handler, boost::ref(notes), _1, _2), @@ -158,9 +174,9 @@ MonoPictureAsset::equals (shared_ptr other, EqualityOptions opt, No #pragma omp critical #endif { - note (DCP_PROGRESS, String::compose ("Compared video frame %1 of %2", i, _intrinsic_duration)); - for (list >::const_iterator i = notes.begin(); i != notes.end(); ++i) { - note (i->first, i->second); + note (NoteType::PROGRESS, String::compose("Compared video frame %1 of %2", i, _intrinsic_duration)); + for (auto const& i: notes) { + note (i.first, i.second); } } } @@ -169,17 +185,20 @@ MonoPictureAsset::equals (shared_ptr other, EqualityOptions opt, No return result; } + shared_ptr -MonoPictureAsset::start_write (boost::filesystem::path file, bool overwrite) +MonoPictureAsset::start_write(boost::filesystem::path file, Behaviour behaviour) { - /* XXX: can't we use shared_ptr here? */ - return shared_ptr (new MonoPictureAssetWriter (this, file, overwrite)); + /* Can't use make_shared here as the MonoPictureAssetWriter constructor is private */ + return shared_ptr(new MonoPictureAssetWriter(this, file, behaviour == Behaviour::OVERWRITE_EXISTING)); } shared_ptr MonoPictureAsset::start_read () const { - return shared_ptr (new MonoPictureAssetReader (this, key(), standard())); + /* Can't use make_shared here as the MonoPictureAssetReader constructor is private */ + return shared_ptr(new MonoPictureAssetReader(this, key(), standard())); + } string