[FFmpeg-devel] [PATCH] Support for UTF8 filenames on Windows

Karl Blomster thefluff
Thu Jun 25 18:31:12 CEST 2009


Ramiro Polla wrote:
> Hi,
> 
> On Thu, Jun 25, 2009 at 8:59 AM, Michael Niedermayer<michaelni at gmx.at> wrote:
>> On Sat, Jun 20, 2009 at 11:56:37PM +0200, Kalle Blomster wrote:
>>> Currently, ffmpeg on Windows does not support opening files whose names
>>> contain characters that cannot be expressed in the current locale, because
>>> on Windows you can't pass UTF8 in a char* to _open() and have it work. You
>>> have to convert the filename to UTF16 and use _wopen(), which takes a
>>> wchar_t instead.
>>>
>>> I have attached a patch that attempts to solve the problem with a rather
>>> ugly hack. It Works For Me(tm) under mingw at least. Comments are
>>> appreciated.
>>>
>>> Regards,
>>> Karl Blomster
>>>  os_support.c |   17 +++++++++++++++++
>>>  os_support.h |    5 +++++
>>>  2 files changed, 22 insertions(+)
>>> 9afa6887f1f6998c37d75efaae5d589918dc752b  ffmpeg_win_utf8_paths.patch
>>> Index: libavformat/os_support.c
>>> ===================================================================
>>> --- libavformat/os_support.c  (revision 19242)
>>> +++ libavformat/os_support.c  (working copy)
>>> @@ -30,6 +30,23 @@
>>>  #include <sys/time.h>
>>>  #include "os_support.h"
>>>
>>> +#ifdef HAVE_WIN_UTF8_PATHS
>>> +#define WIN32_LEAN_AND_MEAN
>>> +#include <windows.h>
>>> +#endif
>>> +
>>> +#ifdef HAVE_WIN_UTF8_PATHS
> 
> Where is HAVE_WIN_UTF8_PATHS defined?

Nowhere, right now. My thought is to let configure set it with some --enable 
parameter, or you just pass -DHAVE_WIN_UTF8_PATHS in your CFLAGS. The point was 
that I thought it might be a good idea to let the user compile with it disabled, 
if he wanted to, like if someone wanted to build on Win9x (heh) or something 
where unicode support might not be available.

>>> +int winutf8_open(const char *filename, int oflag, int pmode)
>>> +{
>>> +     wchar_t wfilename[MAX_PATH * 2];
>>> +
>>> +     if (MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,filename,-1,wfilename,MAX_PATH) > 0)
>>> +             return _wopen(wfilename, oflag, pmode);
>>> +     else
>>> +             return open(filename, oflag, pmode);
>>> +}
>>> +#endif
>> tabs are forbidden in svn
>> further reviews of this left to our windows maintaines

Oh, sorry, I missed that. I'll resubmit it without tabs once I get an OK or 
request for changes from the maintainer(s).

> I was expecting Mans to comment on the patch before testing it, since
> this kind of patch is usually rejected. But it looks localized enough
> to me, so I'll see if I can find some time to test over the weekend.

Thanks!

Regards,
Karl Blomster



More information about the ffmpeg-devel mailing list