16.08.2025 –, HS 4
Sprache: English
Most people will use some video app to obtain video output on Linux. But video output is still generally steeped in mystery and viewed as a magic blackbox among the Linux community. However the Lumiera team were confronted with having to examine the magic blackbox themselves. In this talk we demonstrate several well established mechanisms that can be used to display video frames from a Linux desktop application. We explain the technical prerequisites to display video frames, discuss the challenges and we show some widely available technologies used to implement video display. Lumiera is a video editing application under development in C++ — which we use here to illustrate how raw video output is at the heart of a video processing render engine.
Most video formats are compressed and packed into containers for performance and storage reasons. To edit a video it is essential to use a video in a raw format as a sequence of individual frames. Raw video is processed as buffers filled with pixel data. The pixels are encoded with respect to some colour space, and there are a variety of standard mechanisms available, which will be discussed in the talk. Handling raw video requires to access, process and transfer an enormous amount of data. While modern CPUs are more than capable of managing such tasks in real time, modern special purpose hardware (GPU) is geared towards mastering these steps with precision and speed. The downside is obviously that addressing the GPU requires hardware specific programming, i.e., slightly different software implementations for the various GPUs on the market. Fortunately the variations of the hardware implementations can be accommodated by a software stack comprising vendor specific micro code, a driver in the kernel, and several layers of adaptor libraries in userland. For this talk we focus on displaying direct video output from a C++ application that uses some long and well established standard frameworks that are widely available not only on GNU/Linux, but on various Unix flavours:
- XVideo
- SDL
- OpenGL
- Vulkan

