summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-05-12 21:17:09 +0100
committerCarl Hetherington <cth@carlh.net>2017-05-12 21:17:09 +0100
commita1dfa9a33c72c1e9534593bc37de636fd7ddd28e (patch)
tree001f4fd68e7aaaeaa01afeef6569e45fe0e81837 /src/lib
parent6baf89931d836f112ea275ea2d6d3b1547efdd45 (diff)
Try to fix windows build failure (#1071).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/cross.cc18
-rw-r--r--src/lib/cross.h2
-rw-r--r--src/lib/ffmpeg_encoder.cc3
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");
}