[FFmpeg-devel] [PATCH] avisynth: Make sure the filename passed to avisynth is in the right code page
Motofumi Oka
chikuzen.mo at gmail.com
Fri Jun 21 16:07:22 CEST 2013
as follows
From: Oka Motofumi <chikuzen.mo at gmail.com>
Date: Fri, 21 Jun 2013 22:57:03 +0900
Subject: [PATCH] avisynth: Make sure the filename passed to avisynth is in
the right code page
avisynth is a non-unicode application and cannot accept UTF-8
characters. Therefore, the input filename should be converted to
the correct code page that it expects.
---
libavformat/avisynth.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c
index a5a4fcc..c2e7920 100644
--- a/libavformat/avisynth.c
+++ b/libavformat/avisynth.c
@@ -355,11 +355,23 @@ static int avisynth_open_file(AVFormatContext *s) {
AviSynthContext *avs = (AviSynthContext *)s->priv_data;
AVS_Value arg, val;
int ret;
+#ifdef _WIN32
+#define MAX_AVS_PATH_LENGTH 1024
+ char filename[MAX_AVS_PATH_LENGTH];
+ wchar_t filename_wc[MAX_AVS_PATH_LENGTH];
+#endif
if (ret = avisynth_context_create(s))
return ret;
+#ifdef _WIN32
+ // Convert UTF-8 to ASCII code page
+ MultiByteToWideChar(CP_UTF8, 0, s->filename, -1, filename_wc,
MAX_AVS_PATH_LENGTH);
+ WideCharToMultiByte(CP_THREAD_ACP, 0, filename_wc, -1, filename,
MAX_AVS_PATH_LENGTH, NULL, NULL);
+ arg = avs_new_value_string(filename);
+#else
arg = avs_new_value_string(s->filename);
+#endif
val = avs_library->avs_invoke(avs->env, "Import", arg, 0);
if (avs_is_error(val)) {
av_log(s, AV_LOG_ERROR, "%s\n", avs_as_error(val));
--
1.7.11.msysgit.1
More information about the ffmpeg-devel
mailing list