#include <magick/MagickCore.h>
#include <magick/version.h>
#include <libdcp/version.h>
+#include <libdcp/util.h>
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include "sound_processor.h"
#include "config.h"
#include "ratio.h"
+#include "job.h"
#ifdef DCPOMATIC_WINDOWS
#include "stack.hpp"
#endif
return s.str ();
}
+/** @param job Optional job for which to report progress */
+string
+md5_digest_directory (boost::filesystem::path directory, shared_ptr<Job> job)
+{
+ int const buffer_size = 64 * 1024;
+ char buffer[buffer_size];
+
+ MD5_CTX md5_context;
+ MD5_Init (&md5_context);
+
+ int files = 0;
+ if (job) {
+ for (boost::filesystem::directory_iterator i(directory); i != boost::filesystem::directory_iterator(); ++i) {
+ ++files;
+ }
+ }
+
+ int j = 0;
+ for (boost::filesystem::directory_iterator i(directory); i != boost::filesystem::directory_iterator(); ++i) {
+ ifstream f (i->path().string().c_str(), std::ios::binary);
+ if (!f.good ()) {
+ throw OpenFileError (i->path().string());
+ }
+
+ f.seekg (0, std::ios::end);
+ int bytes = f.tellg ();
+ f.seekg (0, std::ios::beg);
+
+ while (bytes > 0) {
+ int const t = min (bytes, buffer_size);
+ f.read (buffer, t);
+ MD5_Update (&md5_context, buffer, t);
+ bytes -= t;
+ }
+
+ if (job) {
+ job->set_progress (float (j) / files);
+ ++j;
+ }
+ }
+
+ 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 ();
+}
+
static bool
about_equal (float a, float b)
{
change_speed = !about_equal (source * factor(), dcp);
if (!skip && !repeat && !change_speed) {
- description = _("DCP and source have the same rate.\n");
+ description = _("Content and DCP have the same rate.\n");
} else {
if (skip) {
- description = _("DCP will use every other frame of the source.\n");
+ description = _("DCP will use every other frame of the content.\n");
} else if (repeat) {
- description = _("Each source frame will be doubled in the DCP.\n");
+ description = _("Each content frame will be doubled in the DCP.\n");
}
if (change_speed) {
float const pc = dcp * 100 / (source * factor());
- description += String::compose (_("DCP will run at %1%% of the source speed.\n"), pc);
+ description += String::compose (_("DCP will run at %1%% of the content speed.\n"), pc);
}
}
}
setlocale (LC_NUMERIC, _old);
free (_old);
}
+
+bool
+valid_image_file (boost::filesystem::path f)
+{
+ string ext = f.extension().string();
+ transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
+ return (ext == ".tif" || ext == ".tiff" || ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp" || ext == ".tga");
+}
+