X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcross.cc;h=9247baa97c2da963ba69d1b3bdeded56e0a780f7;hb=71d8cf20889a3c419c9a3e485f461236e5317423;hp=94edb688b5791e9408a0dab369873bfe4d036321;hpb=82caed54938683d8112615c8e65fa1456f1130ee;p=dcpomatic.git diff --git a/src/lib/cross.cc b/src/lib/cross.cc index 94edb688b..9247baa97 100644 --- a/src/lib/cross.cc +++ b/src/lib/cross.cc @@ -34,6 +34,7 @@ #ifdef DCPOMATIC_OSX #include #include +#include #endif #ifdef DCPOMATIC_POSIX #include @@ -43,6 +44,11 @@ #endif #include "exceptions.h" +#include "i18n.h" + +#define LOG_GENERAL(...) log->log (String::compose (__VA_ARGS__), Log::GENERAL); +#define LOG_ERROR(...) log->log (String::compose (__VA_ARGS__), Log::ERROR); + using std::pair; using std::list; using std::ifstream; @@ -51,6 +57,7 @@ using std::wstring; using std::make_pair; using boost::shared_ptr; +/** @param s Number of seconds to sleep for */ void dcpomatic_sleep (int s) { @@ -69,6 +76,9 @@ cpu_info () string info; #ifdef DCPOMATIC_LINUX + /* This use of ifstream is ok; the filename can never + be non-Latin + */ ifstream f ("/proc/cpuinfo"); while (f.good ()) { string l; @@ -179,13 +189,13 @@ run_ffprobe (boost::filesystem::path content, boost::filesystem::path out, share PROCESS_INFORMATION process_info; ZeroMemory (&process_info, sizeof (process_info)); if (!CreateProcess (0, command, 0, 0, TRUE, CREATE_NO_WINDOW, 0, 0, &startup_info, &process_info)) { - log->log ("ffprobe call failed (could not CreateProcess)"); + LOG_ERROR (N_("ffprobe call failed (could not CreateProcess)")); return; } - FILE* o = fopen (out.string().c_str(), "w"); + FILE* o = fopen_boost (out, "w"); if (!o) { - log->log ("ffprobe call failed (could not create output file)"); + LOG_ERROR (N_("ffprobe call failed (could not create output file)")); return; } @@ -210,7 +220,7 @@ run_ffprobe (boost::filesystem::path content, boost::filesystem::path out, share #ifdef DCPOMATIC_LINUX string ffprobe = "ffprobe \"" + content.string() + "\" 2> \"" + out.string() + "\""; - log->log (String::compose ("Probing with %1", ffprobe)); + LOG_GENERAL (N_("Probing with %1"), ffprobe); system (ffprobe.c_str ()); #endif @@ -220,7 +230,7 @@ run_ffprobe (boost::filesystem::path content, boost::filesystem::path out, share path /= "ffprobe"; string ffprobe = path.string() + " \"" + content.string() + "\" 2> \"" + out.string() + "\""; - log->log (String::compose ("Probing with %1", ffprobe)); + LOG_GENERAL (N_("Probing with %1"), ffprobe); system (ffprobe.c_str ()); #endif } @@ -269,27 +279,53 @@ openssl_path () } -list -network_interfaces () +/* Apparently there is no way to create an ofstream using a UTF-8 + filename under Windows. We are hence reduced to using fopen + with this wrapper. +*/ +FILE * +fopen_boost (boost::filesystem::path p, string t) { - list interfaces; - -#ifdef DCPOMATIC_POSIX - struct ifaddrs* addresses = 0; +#ifdef DCPOMATIC_WINDOWS + wstring w (t.begin(), t.end()); + /* c_str() here should give a UTF-16 string */ + return _wfopen (p.c_str(), w.c_str ()); +#else + return fopen (p.c_str(), t.c_str ()); +#endif +} - getifaddrs (&addresses); +int +dcpomatic_fseek (FILE* stream, int64_t offset, int whence) +{ +#ifdef DCPOMATIC_WINDOWS + return _fseeki64 (stream, offset, whence); +#else + return fseek (stream, offset, whence); +#endif +} - for (struct ifaddrs* i = addresses; i; i = i->ifa_next) { - if (i->ifa_addr->sa_family == AF_INET) { - void* p = &((struct sockaddr_in *) i->ifa_addr)->sin_addr; - char b[INET_ADDRSTRLEN]; - inet_ntop (AF_INET, p, b, INET_ADDRSTRLEN); - interfaces.push_back (b); - } - } +void +Waker::nudge () +{ +#ifdef DCPOMATIC_WINDOWS + SetThreadExecutionState (ES_CONTINUOUS); +#endif +} - freeifaddrs (addresses); -#endif +Waker::Waker () +{ +#ifdef DCPOMATIC_OSX + /* We should use this */ + // IOPMAssertionCreateWithName (kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, CFSTR ("Encoding DCP"), &_assertion_id); + /* but it's not available on 10.5, so we use this */ + IOPMAssertionCreate (kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, &_assertion_id); +#endif +} - return interfaces; +Waker::~Waker () +{ +#ifdef DCPOMATIC_OSX + IOPMAssertionRelease (_assertion_id); +#endif }