diff options
| author | Carl Hetherington <cth@carlh.net> | 2017-05-12 21:17:09 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2017-05-12 21:17:09 +0100 |
| commit | a1dfa9a33c72c1e9534593bc37de636fd7ddd28e (patch) | |
| tree | 001f4fd68e7aaaeaa01afeef6569e45fe0e81837 /src/lib | |
| parent | 6baf89931d836f112ea275ea2d6d3b1547efdd45 (diff) | |
Try to fix windows build failure (#1071).
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/cross.cc | 18 | ||||
| -rw-r--r-- | src/lib/cross.h | 2 | ||||
| -rw-r--r-- | src/lib/ffmpeg_encoder.cc | 3 |
3 files changed, 22 insertions, 1 deletions
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 <libavformat/avio.h> +} #include <boost/algorithm/string.hpp> #ifdef DCPOMATIC_LINUX #include <unistd.h> @@ -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 <iostream> @@ -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"); } |
