wegen/FrOSCon26/examples/README

84 lines
2.5 KiB
Text
Raw Normal View History

IO_URING and Video Output Example Code
======================================
:revision: 1.0
:author: Hermann Voßeler
:date: 8/2026
This directory contains a example code to demonstrate reading data blocks
continuously using the io_uring kernel interface. The loaded data is then
fed to a video display pipeline based on OpenGL / EGL
[red yellow-background]#Publish on Lumiera.org#
////
TIP: This demo code has been published on
link:https://lumiera.org/research/videoDisplay/index.html[Lumiera.org]
////
Building the code
-----------------
As convenience, a CMake build system is provided, defining all library prerequisites.
A typical invocation for a complete build might be...
[source,sh]
--------------
cmake -S examples -B build
cmake --build build -- -j4
# clean tree with...
cmake --build build --target clean
--------------
TIP: The `-j4` option tells make to use 4 cores concurrently to speed up the build.
Furthermore, you might want to configure further options with a graphical GUI,
e.g: `cmake-gui build`; this way you can configure individual library dependencies
to point to custom locations.
Use at least GCC-14
~~~~~~~~~~~~~~~~~~~
[red yellow-background]#TODO: still relevant?#
Some older C++ compilers seem to have problems with a `constexpr` function used in 'commons.hpp'.
Either comment out the line with the static assertion, or use at least GCC-14, which can be
configured for CMake with
-----
cmake -S examples -B build -DCMAKE_CXX_COMPILER=g++-14
-----
Dependencies
~~~~~~~~~~~~
Although the prime objective of this demo is to show how to read a sequence of data blocks using io_uring,
the practical example uses this technology to display video frames with an OpenGL pipeline. The framework
is a simple GTK-3 application that integrates OpenGL through EGL (with GLEW). This explains why you
need several distinct groups of dependencies to build the code. The build system only mentions the
top-level dependencies; so either you have to install further transitive dependencies manually, or
(preferrably) you might want to rely on the _package manager_ of a Linux distribution.
The following list shows how to install the dependencies on Debian / Ubuntu.
Basic build environment::
+
-----------
apt install build-essential cmake
-----------
+
Lib-uring::
+
-----------
apt install liburing-dev
-----------
+
Build a GTK-3 application with C++::
+
-----------
apt install libgtkmm-3.0-dev
-----------
+
EGL Video Display::
+
-----------
apt install libx11-dev libglew-dev libegl-dev libgl-dev
-----------