Introduction
As promised in my last major post, I will try to discuss about features that are getting shaped for VLC 1.2.0.
This post is therefore the first of the series.
Be careful, this post is a bit technical.
tl;dr version: VLC 1.2.0 will be awesome, faster and have better display quality.
Video Output Rework
When I joined the VideoLAN project and the VLC development team, something like 5 years ago, people were already speaking about the Video Output rework.
This Arlésienne was, to me, a bit like our DNF.
However, during the development of VLC 1.1, VLC guru Laurent Aimar, aka ‘fenrir’ started to work on it. The VLC 1.1.x series has had part of this work in it, but most of the nice features were hidden to the users.
Vout Rework features
VLC 1.2.0 has seen enormous amount of work to go on this project and this work is almost finished.
This means:
- Most of the Video Outputs have been rewritten in a way or another, and their priority revised;
- Other Video Outputs were just dropped, like gapi, omapfb, hd1000v;
- OpenGL output has now got shaders to do YUV->RGB conversions in the GPU,
- Most video filters were ported to the new API, and most of them should be transcodable and streamable now.
New features
But this also means new features, like:
- Sharper subtitles rendering,
- New Video Outputs were written, notably for Direct2D, for iOS and Android,
- Important changes for the deinterlacers,
- New filter for debanding videos,
- New filter for anti-flickering of videos,
- New posterize and sepia filters for more fun.
I would like to speak about 2 of those features, in the following parts of this post.
Subtitles rendering in VLC
Definitions
-
What we call source size is the original size in pixels of the video in the file. It is often what people call video definition, like 480x640, 576x720, 720x1280, 1080x1920.
-
What we call window size is the display size in pixels of the video in the file. It is often what people call window resolution. It depends on the size of your VLC window, whether you resize it or not or if you are in full-screen mode or not.
-
What we call text OSD are text subtitles and OSD were the text is rendered on the screen. Using a renderer, like Freetype, it converts the text into an image.
-
What we call blending of 2 images, if what people would call merging.
How does VLC display subtitles
Those days, to display subtitles, we have the following steps:
- the text OSD is rendered to the source size,
- the rendered OSD is blended into the source image,
- the resulting image is passed to the video output, that scales to the window size and does it usually in your hardware GPU.
As you can imagine, if your source is 640x480 and your monitor is full HD, the text will be badly scaled.
However, doing this that way is better for your resources, because the most costly operation (scaling) is done in your hardware.
How will VLC display subtitles
But those days, with very powerful GPUs, can’t we do differently?
Yes, we can. Using Direct3D or OpenGL.
To display subtitles, we will have the following steps:
- the text OSD is rendered to the window size,
- the rendered OSD passed to the video output in a texture,
- the source image is passed to the video output in a texture,
- the video output scales the source texture from source size to window size,
- the video output blends both textures.
You can see quickly that the new way is sharper (you might need to click on the images)
Before people scream, yes, it isn’t exactly the same frame which is why the colors are different and yes, white on white isn’t very readable. But this is beyond the point. The point is the difference in sharpness. I’ll do better screenshots, when I got time (never :D).
Compatible Video Outputs
At the time of this writing, the video outputs that can do this blending are:
- Direct3D, default on Vista and 7
- OpenGL,
- x11.
However, notable video outputs like DirectDraw and Xv are not able to work in this mode.
Deinterlacers
In addition to this work, an important amount of work was done on the VLC deinterlacers by Juha.
Notably, he has written new deinterlacer modes, fixed bugs, cleaned the code and written an impressive documentation.
The most notable parts of the work include:
- a complete InVerse TeleCine deinterlacer, very useful for old NTSC anime,
- a framerate doubling CRT TV simulator mode, named Phosphor.
And all of them are properly documented on our .
Moreover, as previously told, all modes of deinterlacing should be transcodable or streamable.
Thanks for the support. To be continued…
Read: Update of this article