From 8139c134b1c3e46d523e3ea9799dd33d8f05fb7a Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 11 Jun 2015 16:31:20 +0100 Subject: [PATCH] Use better J2KImageProxy::same() method. --- src/lib/image_proxy.cc | 6 ------ src/lib/image_proxy.h | 2 +- src/lib/j2k_image_proxy.cc | 16 ++++++++++++++++ src/lib/j2k_image_proxy.h | 2 ++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/lib/image_proxy.cc b/src/lib/image_proxy.cc index 0b079725d..c803e6bd0 100644 --- a/src/lib/image_proxy.cc +++ b/src/lib/image_proxy.cc @@ -46,9 +46,3 @@ image_proxy_factory (shared_ptr xml, shared_ptr socket) throw NetworkError (_("Unexpected image type received by server")); } - -bool -ImageProxy::same (shared_ptr other) const -{ - return image()->digest() == other->image()->digest(); -} diff --git a/src/lib/image_proxy.h b/src/lib/image_proxy.h index 9367bc0a7..1f19a4160 100644 --- a/src/lib/image_proxy.h +++ b/src/lib/image_proxy.h @@ -64,7 +64,7 @@ public: virtual void add_metadata (xmlpp::Node *) const = 0; virtual void send_binary (boost::shared_ptr) const = 0; /** @return true if our image is definitely the same as another, false if it is probably not */ - virtual bool same (boost::shared_ptr) const; + virtual bool same (boost::shared_ptr) const = 0; }; boost::shared_ptr image_proxy_factory (boost::shared_ptr xml, boost::shared_ptr socket); diff --git a/src/lib/j2k_image_proxy.cc b/src/lib/j2k_image_proxy.cc index 7dca3d8a9..ce0b88265 100644 --- a/src/lib/j2k_image_proxy.cc +++ b/src/lib/j2k_image_proxy.cc @@ -35,6 +35,7 @@ using std::string; using std::cout; using boost::shared_ptr; using boost::optional; +using boost::dynamic_pointer_cast; /** Construct a J2KImageProxy from a JPEG2000 file */ J2KImageProxy::J2KImageProxy (boost::filesystem::path path, dcp::Size size) @@ -132,3 +133,18 @@ J2KImageProxy::send_binary (shared_ptr socket) const { socket->write (_data.data().get(), _data.size()); } + +bool +J2KImageProxy::same (shared_ptr other) const +{ + shared_ptr jp = dynamic_pointer_cast (other); + if (!jp) { + return false; + } + + if (_data.size() != jp->_data.size()) { + return false; + } + + return memcmp (_data.data().get(), jp->_data.data().get(), _data.size()) == 0; +} diff --git a/src/lib/j2k_image_proxy.h b/src/lib/j2k_image_proxy.h index 34b1490b3..fa2df8cd8 100644 --- a/src/lib/j2k_image_proxy.h +++ b/src/lib/j2k_image_proxy.h @@ -34,6 +34,8 @@ public: boost::shared_ptr image (boost::optional note = boost::optional ()) const; void add_metadata (xmlpp::Node *) const; void send_binary (boost::shared_ptr) const; + /** @return true if our image is definitely the same as another, false if it is probably not */ + virtual bool same (boost::shared_ptr) const; Data j2k () const { return _data; -- 2.30.2