diff options
Diffstat (limited to 'src/lib/util.cc')
| -rw-r--r-- | src/lib/util.cc | 84 |
1 files changed, 65 insertions, 19 deletions
diff --git a/src/lib/util.cc b/src/lib/util.cc index fdc647fba..172b8d763 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -49,12 +49,14 @@ #include "string_text.h" #include "text_decoder.h" #include "util.h" +#include "variant.h" #include "video_content.h" #include <dcp/atmos_asset.h> #include <dcp/decrypted_kdm.h> #include <dcp/file.h> #include <dcp/filesystem.h> #include <dcp/locale_convert.h> +#include <dcp/mpeg2_picture_asset.h> #include <dcp/picture_asset.h> #include <dcp/raw_convert.h> #include <dcp/scope_guard.h> @@ -87,10 +89,11 @@ LIBDCP_ENABLE_WARNINGS #include <dbghelp.h> #endif #include <signal.h> +#include <climits> #include <iomanip> #include <iostream> #include <fstream> -#include <climits> +#include <numeric> #include <stdexcept> #ifdef DCPOMATIC_POSIX #include <execinfo.h> @@ -102,6 +105,7 @@ LIBDCP_ENABLE_WARNINGS using std::bad_alloc; using std::cout; +using std::dynamic_pointer_cast; using std::endl; using std::istream; using std::list; @@ -118,9 +122,6 @@ using std::vector; using std::wstring; using boost::thread; using boost::optional; -using boost::lexical_cast; -using boost::bad_lexical_cast; -using boost::scoped_array; using dcp::Size; using dcp::raw_convert; using dcp::locale_convert; @@ -243,6 +244,7 @@ addr2line (void const * const addr) { char addr2line_cmd[512] = { 0 }; sprintf (addr2line_cmd, "addr2line -f -p -e %.256s %p > %s", program_name.c_str(), addr, backtrace_file.string().c_str()); + std::cout << addr2line_cmd << "\n"; return system(addr2line_cmd); } @@ -428,6 +430,11 @@ dcpomatic_setup () SetUnhandledExceptionFilter(exception_handler); #endif +#ifdef DCPOMATIC_GROK + /* This makes grok support work with CUDA 12.2 */ + setenv("CUDA_MODULE_LOADING", "EAGER", 1); +#endif + #ifdef DCPOMATIC_HAVE_AVREGISTER LIBDCP_DISABLE_WARNINGS av_register_all (); @@ -509,7 +516,7 @@ mo_path () boost::filesystem::path mo_path () { - return "DCP-o-matic 2.app/Contents/Resources"; + return variant::dcpomatic_app() + "/Contents/Resources"; } #endif @@ -741,9 +748,10 @@ asset_filename (shared_ptr<dcp::Asset> asset, string type, int reel_index, int r string -video_asset_filename (shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary) +video_asset_filename(shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary) { - return asset_filename(asset, "j2c", reel_index, reel_count, summary, ".mxf"); + string type = dynamic_pointer_cast<dcp::MPEG2PictureAsset>(asset) ? "mpeg2" : "j2c"; + return asset_filename(asset, type, reel_index, reel_count, summary, ".mxf"); } @@ -879,16 +887,6 @@ remap (shared_ptr<const AudioBuffers> input, int output_channels, AudioMapping m return mapped; } -Eyes -increment_eyes (Eyes e) -{ - if (e == Eyes::LEFT) { - return Eyes::RIGHT; - } - - return Eyes::LEFT; -} - size_t utf8_strlen (string s) @@ -1024,9 +1022,9 @@ decrypt_kdm_with_helpful_error (dcp::EncryptedKDM kdm) } } if (!on_chain) { - throw KDMError (_("This KDM was not made for DCP-o-matic's decryption certificate."), e.what()); + throw KDMError(variant::insert_dcpomatic(_("This KDM was not made for %1's decryption certificate.")), e.what()); } else if (kdm_subject_name != dc->leaf().subject()) { - throw KDMError (_("This KDM was made for DCP-o-matic but not for its leaf certificate."), e.what()); + throw KDMError(variant::insert_dcpomatic(_("This KDM was made for %1 but not for its leaf certificate.")), e.what()); } else { throw; } @@ -1126,6 +1124,34 @@ word_wrap(string input, int columns) } +#ifdef DCPOMATIC_GROK +void +setup_grok_library_path() +{ + static std::string old_path; + if (old_path.empty()) { + auto const old = getenv("LD_LIRARY_PATH"); + if (old) { + old_path = old; + } + } + auto const grok = Config::instance()->grok(); + if (!grok || grok->binary_location.empty()) { + setenv("LD_LIRARY_PATH", old_path.c_str(), 1); + return; + } + + std::string new_path = old_path; + if (!new_path.empty()) { + new_path += ":"; + } + new_path += grok->binary_location.string(); + + setenv("LD_LIBRARY_PATH", new_path.c_str(), 1); +} +#endif + + string screen_names_to_string(vector<string> names) { @@ -1153,3 +1179,23 @@ screen_names_to_string(vector<string> names) return result.substr(0, result.length() - 2); } + +string +report_problem() +{ + return String::compose(_("Please report this problem by using Help -> Report a problem or via email to %1"), variant::report_problem_email()); +} + + +string +join_strings(vector<string> const& in, string const& separator) +{ + if (in.empty()) { + return {}; + } + + return std::accumulate(std::next(in.begin()), in.end(), in.front(), [separator](string a, string b) { + return a + separator + b; + }); +} + |
