X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fstereo_picture_asset.cc;h=5c3d04ffebbb046cbb08ae87b4bfed1f1583e772;hb=d927e9b913606f4fc982885c7582ecaf0e3c5a1a;hp=76c353f1732e0a4b272c62c61d05802943ade113;hpb=9e523d8a4062ad52330dff6c2ba50e54184c9bb2;p=libdcp.git diff --git a/src/stereo_picture_asset.cc b/src/stereo_picture_asset.cc index 76c353f1..5c3d04ff 100644 --- a/src/stereo_picture_asset.cc +++ b/src/stereo_picture_asset.cc @@ -1,20 +1,34 @@ /* - Copyright (C) 2012-2014 Carl Hetherington + Copyright (C) 2012-2016 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of libdcp. + + libdcp is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + libdcp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - + along with libdcp. If not, see . + + In addition, as a special exception, the copyright holders give + permission to link the code of portions of this program with the + OpenSSL library under certain conditions as described in each + individual source file, and distribute linked combinations + including the two. + + You must obey the GNU General Public License in all respects + for all of the code used other than OpenSSL. If you modify + file(s) with this exception, you may extend this exception to your + version of the file(s), but you are not obligated to do so. If you + do not wish to do so, delete this exception statement from your + version. If you delete this exception statement from all source + files in the program, then also delete it here. */ #include "AS_DCP.h" @@ -22,6 +36,7 @@ #include "stereo_picture_frame.h" #include "exceptions.h" #include "stereo_picture_asset_writer.h" +#include "stereo_picture_asset_reader.h" #include "dcp_assert.h" using std::string; @@ -62,18 +77,18 @@ StereoPictureAsset::StereoPictureAsset (Fraction edit_rate) } -shared_ptr -StereoPictureAsset::get_frame (int n) const -{ - return shared_ptr (new StereoPictureFrame (file().string(), n)); -} - shared_ptr StereoPictureAsset::start_write (boost::filesystem::path file, Standard standard, bool overwrite) { return shared_ptr (new StereoPictureAssetWriter (this, file, standard, overwrite)); } +shared_ptr +StereoPictureAsset::start_read () const +{ + return shared_ptr (new StereoPictureAssetReader (this)); +} + bool StereoPictureAsset::equals (shared_ptr other, EqualityOptions opt, NoteHandler note) const { @@ -105,12 +120,17 @@ StereoPictureAsset::equals (shared_ptr other, EqualityOptions opt, shared_ptr other_picture = dynamic_pointer_cast (other); DCP_ASSERT (other_picture); + shared_ptr reader = start_read (); + shared_ptr other_reader = other_picture->start_read (); + + bool result = true; + for (int i = 0; i < _intrinsic_duration; ++i) { shared_ptr frame_A; shared_ptr frame_B; try { - frame_A = get_frame (i); - frame_B = other_picture->get_frame (i); + frame_A = reader->get_frame (i); + frame_B = other_reader->get_frame (i); } catch (DCPReadError& e) { /* If there was a problem reading the frame data we'll just assume the two frames are not equal. @@ -124,7 +144,10 @@ StereoPictureAsset::equals (shared_ptr other, EqualityOptions opt, frame_A->left_j2k_data(), frame_A->left_j2k_size(), frame_B->left_j2k_data(), frame_B->left_j2k_size() )) { - return false; + result = false; + if (!opt.keep_going) { + return result; + } } if (!frame_buffer_equals ( @@ -132,9 +155,12 @@ StereoPictureAsset::equals (shared_ptr other, EqualityOptions opt, frame_A->right_j2k_data(), frame_A->right_j2k_size(), frame_B->right_j2k_data(), frame_B->right_j2k_size() )) { - return false; + result = false; + if (!opt.keep_going) { + return result; + } } } - return true; + return result; }