X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcross.cc;h=61b150a3b68fe05526a8a81aa60ff024a414cc6c;hb=ad1ef39eda58b3a919ea3b7084401a0439409ec6;hp=3c0103b1445a98ef0bd090a571a0a047dad705b4;hpb=8cf48ff743f03b55dbee641f002b99fe97d74f49;p=dcpomatic.git diff --git a/src/lib/cross.cc b/src/lib/cross.cc index 3c0103b14..61b150a3b 100644 --- a/src/lib/cross.cc +++ b/src/lib/cross.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2015 Carl Hetherington + Copyright (C) 2012-2018 Carl Hetherington This file is part of DCP-o-matic. @@ -21,6 +21,8 @@ #include "cross.h" #include "compose.hpp" #include "log.h" +#include "dcpomatic_log.h" +#include "config.h" #include "exceptions.h" extern "C" { #include @@ -34,6 +36,8 @@ extern "C" { #include #undef DATADIR #include +#include +#include #endif #ifdef DCPOMATIC_OSX #include @@ -50,10 +54,6 @@ extern "C" { #include "i18n.h" -#define LOG_GENERAL(...) log->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL); -#define LOG_ERROR(...) log->log (String::compose (__VA_ARGS__), LogEntry::TYPE_ERROR); -#define LOG_ERROR_NC(...) log->log (__VA_ARGS__, LogEntry::TYPE_ERROR); - using std::pair; using std::list; using std::ifstream; @@ -179,7 +179,7 @@ shared_path () } void -run_ffprobe (boost::filesystem::path content, boost::filesystem::path out, shared_ptr log) +run_ffprobe (boost::filesystem::path content, boost::filesystem::path out) { #ifdef DCPOMATIC_WINDOWS SECURITY_ATTRIBUTES security; @@ -359,10 +359,16 @@ Waker::~Waker () } void -start_batch_converter (boost::filesystem::path dcpomatic) +start_tool (boost::filesystem::path dcpomatic, string executable, +#ifdef DCPOMATIC_OSX + string app +#else + string +#endif + ) { #if defined(DCPOMATIC_LINUX) || defined(DCPOMATIC_WINDOWS) - boost::filesystem::path batch = dcpomatic.parent_path() / "dcpomatic2_batch"; + boost::filesystem::path batch = dcpomatic.parent_path() / executable; #endif #ifdef DCPOMATIC_OSX @@ -371,16 +377,15 @@ start_batch_converter (boost::filesystem::path dcpomatic) batch = batch.parent_path (); // Contents batch = batch.parent_path (); // DCP-o-matic.app batch = batch.parent_path (); // Applications - batch /= "DCP-o-matic\\ 2\\ Batch\\ Converter.app"; + batch /= app; batch /= "Contents"; batch /= "MacOS"; - batch /= "dcpomatic2_batch"; + batch /= executable; #endif #if defined(DCPOMATIC_LINUX) || defined(DCPOMATIC_OSX) pid_t pid = fork (); if (pid == 0) { - std::cout << "start " << batch << " from " << dcpomatic << "\n"; int const r = system (batch.string().c_str()); exit (WEXITSTATUS (r)); } @@ -400,6 +405,18 @@ start_batch_converter (boost::filesystem::path dcpomatic) #endif } +void +start_batch_converter (boost::filesystem::path dcpomatic) +{ + start_tool (dcpomatic, "dcpomatic2_batch", "DCP-o-matic\\ 2\\ Batch\\ Converter.app"); +} + +void +start_player (boost::filesystem::path dcpomatic) +{ + start_tool (dcpomatic, "dcpomatic2_player", "DCP-o-matic\\ 2\\ Player.app"); +} + uint64_t thread_id () { @@ -416,11 +433,33 @@ avio_open_boost (AVIOContext** s, boost::filesystem::path file, int flags) #ifdef DCPOMATIC_WINDOWS int const length = (file.string().length() + 1) * 2; char* utf8 = new char[length]; - WideCharToMultibyte (CP_UTF8, 0, file.c_str(), -1, utf8, length, 0, 0); - int const r = avio_open_boost (s, file.c_str(), flags); + WideCharToMultiByte (CP_UTF8, 0, file.c_str(), -1, utf8, length, 0, 0); + int const r = avio_open (s, utf8, flags); delete[] utf8; return r; #else - return avio_open_boost (s, file.c_str(), flags); + return avio_open (s, file.c_str(), flags); #endif } + +#ifdef DCPOMATIC_WINDOWS +void +maybe_open_console () +{ + if (Config::instance()->win32_console ()) { + AllocConsole(); + + HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); + int hCrt = _open_osfhandle((intptr_t) handle_out, _O_TEXT); + FILE* hf_out = _fdopen(hCrt, "w"); + setvbuf(hf_out, NULL, _IONBF, 1); + *stdout = *hf_out; + + HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE); + hCrt = _open_osfhandle((intptr_t) handle_in, _O_TEXT); + FILE* hf_in = _fdopen(hCrt, "r"); + setvbuf(hf_in, NULL, _IONBF, 128); + *stdin = *hf_in; + } +} +#endif