Skip to content

Some features to the Fluster Dockerfile: 26.04, reference decoders and libva-fake-driver - #408

Open
rgonzalezfluendo wants to merge 3 commits into
masterfrom
docker_26.04
Open

rgonzalezfluendo wants to merge 3 commits into
masterfrom
docker_26.04

Conversation

@rgonzalezfluendo

Copy link
Copy Markdown
Contributor

Review commit by commit:

  • feat: add Ubuntu 26.04 support to the Docker image.
  • feat: build the reference decoders optionally in the Docker image.
  • feat: build the libva fake VA-API driver optionally in the Docker image.

rgonzalezfluendo pushed a commit to rubenrua/Notes that referenced this pull request Oct 15, 2026
=====

State of the union
-----------------

* Encoders: adaptative preset for nv and x264: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11092
* v4l2src: add capture timestamp (https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10211)
* No ORC was included
* Project has a big dependency in sdroge
* More Rust rewrites will come (parsers and VA decoders are WIP)

Unify GstAnalytics
-------------------

* New document with Analytics Metadata Relation Conventions: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-docs/markdown/additional/design/machine-learning-analytics.md#analytics-metadata-relation-conventions
* Intel DLStreamer is updating to use last metadatas, Nvidia DeepSeek and NNStreamer not

Write once, run everywhere
-----------------------

* Nvidia DeepSeek, Intel DLStreamer, Qualcom XXXXX ([ ] to gstnotes)
* NNStreamer is hardware agnostics
* onnxinference: CUDA, ROCm, DirectML (Windows), Vitis AI/VSI (NPUs), ...
    In MRs: CoreML (Apple), OpenVINO (Intel), NNAPI (Android
* [ ] Share pipeline with cascade
* Zero copy working for DX12 and HiP

The quest for pyhton analitics
--------------------

* About https://github.com/collabora/gst-python-ml
* Easily integrate any model on any framework)

Other

* MSE RiiR: https://gitlab.freedesktop.org/slomo/gstmse-rs
* Vulkan for embedded by Nicolas in Linux Plumbers (YouTube link)
* full of people for gst-audit
* Nirbheek Chauhan linkedin points to https://www.coram.ai/

DAY2
====

Intel
-----

TODO check https://github.com/open-edge-platform/edge-ai-libraries/blob/main/tools/visual-pipeline-and-platform-evaluation-tool/docs/user-guide/_assets/ViPPET-UI-Vision-Props-light.png

VA and Vulkan (Igalia)
-----------------------
MR !11772 for interoperability in Vulkan

Ringbuffer: V4l2 and Pipewire
-------------------------------

Company doing cameras for railways

MR in Pipewire will be created

Other:
* https://gitlab.freedesktop.org/thiblahute/gstreamer2
* Good feedback from
 * Fulfilling a Childhood Dream: Video Streaming for Remotely Controlling a Train
 * Exploring GStreamer as a media backend for game engines
 * End-to-end video quality measurement on a lossy WebRTC/RTP path

HACKFEST
========

* reference decoders in list -> fluendo/fluster#405
* issue with multiple devices: fluendo/fluster#407
* skip profile fluendo/fluster#406
* ubuntu 26.04, ref decoders and libva-fake-driver  fluendo/fluster#408
* https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12692: Fix ./builddir/subprojects/gst-plugins-base/tests/examples/playback/playback-test
* mpeghparse  https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3302/diffs
Ubuntu 26.04 ships the default `ubuntu` user at UID 1000, so the image
build failed at user creation because the removal step was gated to
24.04. The same version checks also selected the wrong Python package
path (26.04 is PEP 668 externally managed, so `pip3 install --upgrade`
fails) and skipped the non-root meson install.

Replace the hard-coded 24.04 checks with `dpkg --compare-versions` so
24.04 and newer take the modern path, and make 26.04 the default base.
On 26.04, install the distro `nvidia-vaapi-driver` instead of building it
from source, and use libvpl (oneVPL) instead of the removed libmfx when
building FFmpeg or GStreamer from source.

Also update the wrapper script and documentation to list 26.04.
Add a BUILD_REFERENCE_DECODERS build arg, exposed as the
--build-reference-decoders wrapper flag, which downloads the ISO reference
software and builds the reference decoders with meson. The ISO licence
agreement is accepted automatically during the build.

Stop excluding build/ in .dockerignore so the download and build scripts are
present in the image, and pass -D_DEFAULT_SOURCE to meson because GCC 15 in
Ubuntu 26.04 rejects the implicit fileno declaration in libtsp under -std=c99.
Add a BUILD_LIBVA_FAKE_DRIVER build arg, exposed as the
--build-libva-fake-driver wrapper flag, which builds the libva fake VA-API
backend from https://github.com/rgonzalezfluendo/libva-fake-driver for
headless testing. The revision is pinned through LIBVA_FAKE_DRIVER_VERSION.

The driver is installed into LIBVA_DRIVERS_PATH so it is picked up with
LIBVA_DRIVER_NAME=fake, and used together with LD_PRELOAD of the companion
fake_gbm.so.
@rsanchez87

Copy link
Copy Markdown
Contributor

Tested locally (clean worktrees of base and PR head, Docker, RTX 4050)

✅ Default image (26.04) builds; user mock (uid 1000) created, ubuntu user removed
✅ 24.04: base vs PR images identical (packages, decoders, size)
✅ 22.04 / 20.04: base and PR both build; installed packages and list -c identical
✅ --build-reference-decoders: builds; HM AMP_A_Samsung_7 Success, JM 4/4 Success
✅ --build-libva-fake-driver: installed, no unresolved libs, vainfo works with LD_PRELOAD (fails without), ffmpeg -hwaccel vaapi decodes 250 frames
✅ run-docker.sh with both new flags: list -c, shell, hw-info
✅ FFmpeg from source: 26.04 → --enable-libvpl (linked to libvpl.so.2), 24.04 → --enable-libmfx (linked to libmfx.so.1)
✅ GStreamer from source on 24.04 builds and installs
✅ NVIDIA, host libs via --gpus all: FFmpeg-H.265-CUDA and FFmpeg-H.265-VAAPI 2/2 on 26.04 and 24.04 (apt nvidia-vaapi-driver 0.0.14 on 26.04)
❌ .dockerignore: a local build/lib/ leaks into the image (inline)
➖ Not covered: Intel/AMD GPU hardware, GStreamer from source on 26.04

Comment thread .dockerignore
*.egg-info/
dist/
build/
builddir/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dropping build/ lets a local build/lib/ into the image. I put a marker in build/lib/fluster/ and found it at /usr/local/lib/python3.14/dist-packages/fluster/ in the image. Adding these fixes it (marker gone, tracked build/*.py, compat/, patches/ still copied):

build/lib/
build/bdist.*/

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The next files/directories are generated by pip3 install . --no-cache-dir --break-system-packages:

  • build/bdist.linux-x86_64/
  • build/lib/
  • fluster_conformance.egg-info/

Do you want I added in .dockerignore?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes please. *.egg-info/ is already ignored (line 15), so only these two are missing:

build/lib/
build/bdist.*/

They are what pip3 install . leaves in build/ on the host, and without them a stale build/lib/ ends up installed in the image (I checked with a marker file). Tracked build/*.py, build/compat/ and build/patches/ are still copied

Comment thread docker/Dockerfile
Comment on lines +181 to +185
&& if dpkg --compare-versions "${UBUNTU_VERSION}" ge 26.04; then \
apt-get install -y libvpl-dev; \
else \
apt-get install -y libmfx-dev; \
fi \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

libvpl-dev is already installed by the base layer (L135, same line as in the base commit). In a 26.04 image built with the default system FFmpeg/GStreamer, where these blocks don’t run, dpkg -l libvpl-dev shows ii libvpl-dev 1:2.16.0-1. Only libmfx-dev needs the condition; the libvpl-dev branch is a no-op

@rsanchez87 rsanchez87 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, only a couple of comments

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants