From 81c5ceeda21186979a6f00d1611aa6a73f9b93a8 Mon Sep 17 00:00:00 2001 From: Oka Motofumi 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 code page that it expects. Signed-off-by: Derek Buitenhuis --- libavformat/avisynth.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index a5a4fcc6c9..35b66f1ff8 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -355,11 +355,22 @@ static int avisynth_open_file(AVFormatContext *s) { AviSynthContext *avs = (AviSynthContext *)s->priv_data; AVS_Value arg, val; int ret; +#ifdef _WIN32 + char filename_ansi[MAX_PATH * 4]; + wchar_t filename_wc[MAX_PATH * 4]; +#endif if (ret = avisynth_context_create(s)) return ret; +#ifdef _WIN32 + // Convert UTF-8 to ANSI code page + MultiByteToWideChar(CP_UTF8, 0, s->filename, -1, filename_wc, MAX_PATH * 4); + WideCharToMultiByte(CP_THREAD_ACP, 0, filename_wc, -1, filename_ansi, MAX_PATH * 4, NULL, NULL); + arg = avs_new_value_string(filename_ansi); +#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));