summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-06-11 16:31:20 +0100
committerCarl Hetherington <cth@carlh.net>2015-06-11 16:31:20 +0100
commit8139c134b1c3e46d523e3ea9799dd33d8f05fb7a (patch)
treefcea4606d8d4440cd787c9e6e27d3cba1dcee6d4 /src/lib
parent019fd78b3bdf4bf1d8944df879d6c0e7a8b1cd67 (diff)
Use better J2KImageProxy::same() method.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/image_proxy.cc6
-rw-r--r--src/lib/image_proxy.h2
-rw-r--r--src/lib/j2k_image_proxy.cc16
-rw-r--r--src/lib/j2k_image_proxy.h2
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<cxml::Node> xml, shared_ptr<Socket> socket)
throw NetworkError (_("Unexpected image type received by server"));
}
-
-bool
-ImageProxy::same (shared_ptr<const ImageProxy> 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<Socket>) 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 ImageProxy>) const;
+ virtual bool same (boost::shared_ptr<const ImageProxy>) const = 0;
};
boost::shared_ptr<ImageProxy> image_proxy_factory (boost::shared_ptr<cxml::Node> xml, boost::shared_ptr<Socket> 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> socket) const
{
socket->write (_data.data().get(), _data.size());
}
+
+bool
+J2KImageProxy::same (shared_ptr<const ImageProxy> other) const
+{
+ shared_ptr<const J2KImageProxy> jp = dynamic_pointer_cast<const J2KImageProxy> (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> image (boost::optional<dcp::NoteHandler> note = boost::optional<dcp::NoteHandler> ()) const;
void add_metadata (xmlpp::Node *) const;
void send_binary (boost::shared_ptr<Socket>) 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 ImageProxy>) const;
Data j2k () const {
return _data;