From a1dfa9a33c72c1e9534593bc37de636fd7ddd28e Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 12 May 2017 21:17:09 +0100 Subject: [PATCH] Try to fix windows build failure (#1071). --- src/lib/cross.cc | 18 ++++++++++++++++++ src/lib/cross.h | 2 ++ src/lib/ffmpeg_encoder.cc | 3 ++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/lib/cross.cc b/src/lib/cross.cc index 454fe044c..a484d1738 100644 --- a/src/lib/cross.cc +++ b/src/lib/cross.cc @@ -22,6 +22,9 @@ #include "compose.hpp" #include "log.h" #include "exceptions.h" +extern "C" { +#include +} #include #ifdef DCPOMATIC_LINUX #include @@ -406,3 +409,18 @@ thread_id () return (uint64_t) pthread_self (); #endif } + +int +avio_open_boost (AVIOContext** s, boost::filesystem::path file, int flags) +{ +#ifdef DCPOMATIC_WINDOWS + int const length = (file.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); + delete[] utf8; + return r; +#else + return avio_open_boost (s, file.c_str(), flags); +#endif +} diff --git a/src/lib/cross.h b/src/lib/cross.h index 9fac7e643..02839eb68 100644 --- a/src/lib/cross.h +++ b/src/lib/cross.h @@ -35,6 +35,7 @@ #endif class Log; +struct AVIOContext; void dcpomatic_sleep (int); extern std::string cpu_info (); @@ -49,6 +50,7 @@ extern FILE * fopen_boost (boost::filesystem::path, std::string); extern int dcpomatic_fseek (FILE *, int64_t, int); extern void start_batch_converter (boost::filesystem::path dcpomatic); extern uint64_t thread_id (); +extern int avio_open_boost (AVIOContext** s, boost::filesystem::path file, int flags); /** @class Waker * @brief A class which tries to keep the computer awake on various operating systems. diff --git a/src/lib/ffmpeg_encoder.cc b/src/lib/ffmpeg_encoder.cc index 8464faf7d..f26f66bff 100644 --- a/src/lib/ffmpeg_encoder.cc +++ b/src/lib/ffmpeg_encoder.cc @@ -25,6 +25,7 @@ #include "player_video.h" #include "log.h" #include "image.h" +#include "cross.h" #include "compose.hpp" #include @@ -159,7 +160,7 @@ FFmpegEncoder::go () throw runtime_error (String::compose ("could not open FFmpeg audio codec (%1)", buffer)); } - if (avio_open (&_format_context->pb, _output.c_str(), AVIO_FLAG_WRITE) < 0) { + if (avio_open_boost (&_format_context->pb, _output, AVIO_FLAG_WRITE) < 0) { throw runtime_error ("could not open FFmpeg output file"); } -- 2.30.2