Add OpenSSL licence exception.
[libdcp.git] / src / mono_picture_asset.cc
index 9d0d14975d3176cc9612d754b8c85961e5c97156..59af7c7299c6c9eb68701118aa7c340865c85c82 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
 
     This file is part of libdcp.
 
     You should have received a copy of the GNU General Public License
     along with libdcp.  If not, see <http://www.gnu.org/licenses/>.
 
+    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 "mono_picture_asset.h"
 #include "mono_picture_asset_writer.h"
+#include "mono_picture_asset_reader.h"
 #include "AS_DCP.h"
 #include "KM_fileio.h"
 #include "exceptions.h"
@@ -65,12 +79,6 @@ MonoPictureAsset::MonoPictureAsset (Fraction edit_rate)
 
 }
 
-shared_ptr<const MonoPictureFrame>
-MonoPictureAsset::get_frame (int n) const
-{
-       return shared_ptr<const MonoPictureFrame> (new MonoPictureFrame (_file, n, _decryption_context));
-}
-
 static void
 storing_note_handler (list<pair<NoteType, string> >& notes, NoteType t, string s)
 {
@@ -118,6 +126,9 @@ MonoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, No
 #pragma omp parallel for
 #endif
 
+       shared_ptr<MonoPictureAssetReader> reader = start_read ();
+       shared_ptr<MonoPictureAssetReader> other_reader = other_picture->start_read ();
+
        for (int i = 0; i < _intrinsic_duration; ++i) {
                if (i >= other_picture->intrinsic_duration()) {
                        result = false;
@@ -125,8 +136,8 @@ MonoPictureAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, No
 
                if (result || opt.keep_going) {
 
-                       shared_ptr<const MonoPictureFrame> frame_A = get_frame (i);
-                       shared_ptr<const MonoPictureFrame> frame_B = other_picture->get_frame (i);
+                       shared_ptr<const MonoPictureFrame> frame_A = reader->get_frame (i);
+                       shared_ptr<const MonoPictureFrame> frame_B = other_reader->get_frame (i);
 
                        list<pair<NoteType, string> > notes;
 
@@ -160,6 +171,12 @@ MonoPictureAsset::start_write (boost::filesystem::path file, Standard standard,
        return shared_ptr<MonoPictureAssetWriter> (new MonoPictureAssetWriter (this, file, standard, overwrite));
 }
 
+shared_ptr<MonoPictureAssetReader>
+MonoPictureAsset::start_read () const
+{
+       return shared_ptr<MonoPictureAssetReader> (new MonoPictureAssetReader (this));
+}
+
 string
 MonoPictureAsset::cpl_node_name () const
 {