diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-06-11 16:31:20 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-06-11 16:31:20 +0100 |
| commit | 8139c134b1c3e46d523e3ea9799dd33d8f05fb7a (patch) | |
| tree | fcea4606d8d4440cd787c9e6e27d3cba1dcee6d4 /src/lib | |
| parent | 019fd78b3bdf4bf1d8944df879d6c0e7a8b1cd67 (diff) | |
Use better J2KImageProxy::same() method.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/image_proxy.cc | 6 | ||||
| -rw-r--r-- | src/lib/image_proxy.h | 2 | ||||
| -rw-r--r-- | src/lib/j2k_image_proxy.cc | 16 | ||||
| -rw-r--r-- | 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<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; |
