X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fimage.cc;h=d4ec6f99a6381070835b2fd54a875f414e5d7f87;hp=432cfbd54b9279e0b2631cc417b511066dc2ab2f;hb=39bc73fe192f932ed6695eb87b19de446e8b4f55;hpb=bb0a36c3a6bea9cd1ebdde7b8a3a04765e317569 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 +#include extern "C" { #include #include @@ -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 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 (); +}