summaryrefslogtreecommitdiff
path: root/src/lib/image.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-05-20 13:23:26 +0100
committerCarl Hetherington <cth@carlh.net>2014-05-20 13:23:26 +0100
commit39bc73fe192f932ed6695eb87b19de446e8b4f55 (patch)
tree4811b0642b7fcd73206b037da4ffb342e90ce6dc /src/lib/image.cc
parentbb0a36c3a6bea9cd1ebdde7b8a3a04765e317569 (diff)
parent884093edac5f63d26c02d411c73dfb52376ccf8f (diff)
Merge master.
Diffstat (limited to 'src/lib/image.cc')
-rw-r--r--src/lib/image.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/lib/image.cc b/src/lib/image.cc
index 432cfbd54..d4ec6f99a 100644
--- a/src/lib/image.cc
+++ b/src/lib/image.cc
@@ -22,6 +22,7 @@
*/
#include <iostream>
+#include <openssl/md5.h>
extern "C" {
#include <libswscale/swscale.h>
#include <libavutil/pixfmt.h>
@@ -40,6 +41,7 @@ using std::min;
using std::cout;
using std::cerr;
using std::list;
+using std::stringstream;
using boost::shared_ptr;
using dcp::Size;
@@ -662,3 +664,24 @@ merge (list<PositionImage> images)
return PositionImage (merged, all.position ());
}
+
+string
+Image::digest () const
+{
+ MD5_CTX md5_context;
+ MD5_Init (&md5_context);
+
+ for (int i = 0; i < components(); ++i) {
+ MD5_Update (&md5_context, data()[i], line_size()[i]);
+ }
+
+ unsigned char digest[MD5_DIGEST_LENGTH];
+ MD5_Final (digest, &md5_context);
+
+ stringstream s;
+ for (int i = 0; i < MD5_DIGEST_LENGTH; ++i) {
+ s << std::hex << std::setfill('0') << std::setw(2) << ((int) digest[i]);
+ }
+
+ return s.str ();
+}