On Wed, 30 May 2012, Motofumi Oka wrote:
2012/5/30 Martin Storsjö <[email protected]>
On Wed, 30 May 2012, Motofumi Oka wrote:
currentry, cmdutils convert all command lines to
UTF-8 on windows.In almost
all cases, it works as expected, but this is harmful
when inputting avisynth
script.
This isn't the right place for this fix. All file names within libav*
are supposed to be in utf8 - this could just as well be another app
calling libavformat - that app would have to know who is going to use
the file name.
Instead, the code in libavformat/avisynth.c should convert the file
name to the correct code page that it expects it to have, assuming
that the input from lavf always is utf8.
// Martin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel
then, how is this ?
diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c
index 3b695a9..893ce3f 100644
--- a/libavformat/avisynth.c
+++ b/libavformat/avisynth.c
@@ -49,10 +49,15 @@ static int avisynth_read_header(AVFormatContext *s)
DWORD id;
AVStream *st;
AVISynthStream *stream;
+ wchar_t filename_wchar[1024] = { 0 };
+ char filename_char[1024] = { 0 };
AVIFileInit();
- res = AVIFileOpen(&avs->file, s->filename, OF_READ|OF_SHARE_DENY_WRITE,
NULL);
+ MultiByteToWideChar(CP_UTF8, 0, s->filename, -1, filename_wchar, 1024);
+ WideCharToMultiByte(CP_THREAD_ACP, 0, filename_wchar, -1, filename_char,
1024, NULL, NULL);
+
+ res = AVIFileOpen(&avs->file, filename_char, OF_READ|OF_SHARE_DENY_WRITE,
NULL);
if (res != S_OK)
{
av_log(s, AV_LOG_ERROR, "AVIFileOpen failed with error %ld", res);
This looks ok to me.
// Martin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel