Technical update on the WinRT port
So, a few weeks have passed, and I have not spoken a lot about the port on WinRT/Metro/Windows RT/WP8.
Of course, some of you will complain, but the main reason for that, is that I've been very busy on VLC
So here is what we did
The biggest part of the work resides in the port of the VLC engine to a WinRT compatible runtime.
A lot of the work we've done so far has been on that.
More specifically, we have:
- ported VLC APIs call to UNICODE (wide chars),
- allowed VLC to be compiled for Windows 8 API targets,
- upgraded some VLC Win32 API calls,
- removed some code-path when compiling for WinRT,
- fixed some issues on mingw-w64 toolchain for Windows 8,
- prepared a compatibility library,
- changed our packaging for WinRT,
- improved our audio output for Windows.
Winstore compatibility library
A lot of work has been and will be on this library, so let me speak a bit more about it.
Instead of ifdef-ing the VLC code everywhere for WinRT, we decided to reimplement the forbidden calls in a library that would expose the same old Win32 functions, but implemented with the allowed APIs.
The biggest advantage of this approach is that you don't need to modify a lot of your common codebase, and that you don't need to hack all the libraries that are linked to VLC. And this would have been a huge task. Moreover, it allows to adapt to newer versions of Windows more easily. Moreover, this library will be usable by every other project.
But as you can imagine, doing that is quite tricky, since we don't modify VLC, we don't modify the headers, but we insert it at link time...
We have done some of the work, but we still have a huge amount of work to do, notably on threads and Winsock reimplementation.
This library is hosted in the mingw-w64 repository and will be my focus for a bit of time.
Above the VLC engine (libVLC), we have a CX/C++ wrapper, in order to expose VLC functions to the application, since libVLC is plain C, and it is compiled in Visual Studio.
Above the wrapper, we have the main application.
This application is written in C#, compiled in Visual Studio, and uses the wrapper in order to access playback functions.
So far, the application has a basic media library, and playback support using VLC engine. The media library UI follows more or less what we've shown in the KickStarter. The player UI wasn't shown, but it looks a bit like the normal Video application, in order to match the official style.
The video, so far, is rendered into a memory buffer from libVLC and then is displayed using Direct2D in a video surface. This is not yet the best method, but it is good enough for now.
So, what are we going to work on now:
- the winstore compat library
- the winstore compat library (threads) ,
- the winstore compat library (MSVCRT),
- the interface, in order to match our promises,
- the audio and video outputs, to go faster.
A lot of the work is going to go faster now that we have done correctly the beginning and a beta as soon as possible for our backers.