[Help] HAILO8L + TAPPAS 3.30 on RPi5: hailofilter missing in GStreamer, plus earlier desc-page-size errors

1) Environment

  • Host: Raspberry Pi 5 (64-bit), Raspberry Pi OS / Debian 12 (Bookworm)

  • Kernel / PCIe: Hailo PCIe card (HAILO-8L M.2 B+M)

  • Python: 3.11

  • GStreamer: 1.22 (base, tools, x installed)

  • Display: headless (no X), using fakesink in pipelines

2) Versions / packages

$ dpkg -l | egrep -i 'hailort|hailo-tappas'
ii  hailort                 4.19.0   arm64
ii  hailort-pcie-driver     4.19.0   all
ii  hailo-tappas-core       3.30.0-1 arm64

Firmware / board:

$ hailortcli fw-control identify
Firmware Version: 4.19.0
Device Architecture: HAILO8L
Product Name: HAILO-8L AI ACC M.2 B+M KEY MODULE EXT TMP

Descriptor page size (driver parameter):

$ cat /sys/module/hailo_pci/parameters/force_desc_page_size
4096

3) Examples / models

  • Example repo: hailo-rpi5-examples-2024-10/basic_pipelines/detection.py

  • HEFs present:

    • ../resources/yolov8s_h8l.hef (main test)

    • ../resources/yolov8s-hailo8l-barcode.hef (available in our tree)

    • Other H8L HEFs also available

  • Running headless (HAILO_RPI_SINK=fakesink) and/or via file source resources/detection0.mp4

4) Issues we experienced

A. (RESOLVED) X video sink on headless

Error: ... XvImageSink: Could not open display (null)

What we did: switched to fakesink. :white_check_mark:

B. (RESOLVED) “max_desc_page_size 16384 > 4096”

We saw this in both hailortcli benchmark and the pipeline initially:

[HailoRT] [error] CHECK failed - max_desc_page_size given 16384 is bigger than hw max desc page size 4096
...
[HailoRT] [error] ... HAILO_CANT_MEET_BUFFER_REQUIREMENTS(84)

What we did:

  • Verified driver param is 4096: /sys/module/hailo_pci/parameters/force_desc_page_size4096

  • After re-sourcing env / restarting services, hailortcli now passes:

$ hailortcli benchmark /path/to/yolov8s_h8l.hef
Summary: FPS (streaming) ≈ 28.86, HW Latency ≈ 27.23 ms

So the desc-page-size error appears resolved. :white_check_mark:

C. (OPEN) GStreamer pipeline fails: no element hailofilter

When running basic_pipelines/detection.py:

gst_parse_error: no element "hailofilter" (1)

Current GStreamer awareness:

$ gst-inspect-1.0 hailonet | head   # works, shows Hailo net element
$ gst-inspect-1.0 hailofilter       # <-- Not found

We also previously hit a libgsthailometa.so.3 lookup issue, which we fixed by installing hailo-tappas-core 3.30.0-1 and setting:

export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/hailo/gstreamer:/usr/lib/aarch64-linux-gnu/hailort:$LD_LIBRARY_PATH
export GST_PLUGIN_PATH=/usr/lib/aarch64-linux-gnu/gstreamer-1.0:/usr/lib/aarch64-linux-gnu/hailo/gstreamer
export GST_PLUGIN_SYSTEM_PATH=$GST_PLUGIN_PATH
sudo ldconfig

After that, hailonet is visible, but hailofilter remains missing.

D. Building from source to get hailofilter

We tried to build TAPPAS 3.30 from source to obtain the GStreamer plugins:

  • Fresh clone:
git clone --branch v3.30.0 --recurse-submodules --shallow-submodules https://github.com/hailo-ai/tappas.git tappas-3.30-git

  • Build error:
meson.build:24: ERROR: Include dir ../../open_source/xtensor_stack/base does not exist.

It looks like submodules didn’t populate that path. We tried:

git submodule sync --recursive
git submodule update --init --recursive --depth 1

but still saw the missing xtensor_stack/base.

We also have a v3.31 tree that does build parts (we see libgsthailometa artifacts there), but we did not locate a built libgsthailortpp.so / hailofilter .so to install.

5) What we’ve already adjusted in the demo pipeline

  • Force headless sink: fakesink

  • Fix spacing bug: force-writable=true ! (remove extra ! stuck to value)

  • Force batch-size=1 and HAILO_FORMAT_TYPE_FLOAT16 (H8L-friendly)

  • Removed accidental nms-max-proposals-per-class on queue elements

  • hailortcli benchmark on our H8L HEFs now looks healthy

6) Questions for the community / Hailo team

  1. Where does hailofilter come from in 3.30?

    • Is it delivered by hailo-tappas-core_3.30.0-1_arm64.deb (and if so, which file name/path should we see for the plugin)?

    • Or is it built only from tappas/core/hailo sources? If from source, can you confirm the exact Meson target that produces the hailofilter plugin .so, and where it lands?

  2. Submodules for 3.30 build

    • What is the correct incantation to ensure open_source/xtensor_stack/base is populated?

    • If using distro headers (libxtensor-dev, libxsimd-dev, libxtl-dev) is acceptable, can you confirm that symlinking them into open_source/xtensor_stack/base is supported for building hailofilter?

  3. Compatibility matrix confirmation

    • We’re on HailoRT 4.19.0 + TAPPAS 3.30.0-1 on HAILO8L (RPi5). Docs say 3.30 aligns with 2024-10 and supports 4.19—can you confirm this is a supported combination for GStreamer examples on H8L?
  4. Official packages location

    • Is there an APT repo or download link for hailo-tappas-examples 3.30.x and/or a package that contains hailofilter explicitly?

    • If it’s in the “Linux Installer” .tar.gz, which script should we run to install just the GStreamer plugins on RPi5?

  5. Recommended pipeline defaults for H8L

    • For YOLOv8s H8L HEFs, is batch-size=1 / HAILO_FORMAT_TYPE_FLOAT16 the recommended default in GStreamer pipelines?

    • Any scheduler or post-proc json tweaks you recommend for RPi5 + H8L?

7) Minimal repro

Works:

hailortcli benchmark /path/to/yolov8s_h8l.hef
# Summary shows ~28.86 FPS streaming, ~27.2 ms HW latency

Fails (missing filter):

HAILO_RPI_SINK=fakesink python3 basic_pipelines/detection.py
gst_parse_error: no element "hailofilter"

What GStreamer sees now:

gst-inspect-1.0 hailonet   # OK (prints element details)
gst-inspect-1.0 hailofilter# NOT FOUND

Any pointers on the correct source target / package that provides hailofilter for 3.30 on RPi5 (H8L) would be hugely appreciated. If there’s a known good bundle or an updated installer path, happy to try that as well.

Thanks!

So, first I tried to find the hailofilter in my my Tappas 5.0 installation:

ubuntu@ubuntu-2404-pi5b:~$ gst-inspect-1.0 hailofilter | cat
Factory Details:
  Rank                     primary (256)
  Long-name                hailofilter - postprocessing element
  Klass                    Hailo/Tools
  Description              Allowes to user access Hailonet's output using an so file.
  Author                   hailo.ai <contact@hailo.ai>

Plugin Details:
  Name                     hailotools
  Description              hailo tools plugin
  Filename                 /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgsthailotools.so
  Version                  5.0.0

So, we are looking for a “libgsthailotools.so” file. I downloaded the official Tappas package for Raspberry Pi OS and checked, the file is actually in there:

 ubuntu@ubuntu-2404-pi5b:/tmp$ wget https://archive.raspberrypi.org/debian/pool/main/h/hailo-tappas-core/hailo-tappas-core_3.30.0-1_arm64.deb
--2025-10-11 20:17:05--  https://archive.raspberrypi.org/debian/pool/main/h/hailo-tappas-core/hailo-tappas-core_3.30.0-1_arm64.deb
Resolving archive.raspberrypi.org (archive.raspberrypi.org)... 2a00:1098:84:1e0::2, 2a00:1098:80:56::1:1, 2a00:1098:88:26::1, ...
Connecting to archive.raspberrypi.org (archive.raspberrypi.org)|2a00:1098:84:1e0::2|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7946860 (7.6M) [application/vnd.debian.binary-package]
Saving to: ‘hailo-tappas-core_3.30.0-1_arm64.deb’

hailo-tappas-core_3.30.0-1_arm64.d 100%[================================================================>]   7.58M  5.63MB/s    in 1.3s    

2025-10-11 20:17:07 (5.63 MB/s) - ‘hailo-tappas-core_3.30.0-1_arm64.deb’ saved [7946860/7946860]

ubuntu@ubuntu-2404-pi5b:/tmp$ dpkg-deb --contents hailo-tappas-core_3.30.0-1_arm64.deb | fgrep libgsthailotools
-rw-r--r-- root/root    596824 2024-11-12 03:42 ./usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgsthailotools.so.3.30.0
lrwxrwxrwx root/root         0 2024-11-12 03:42 ./usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgsthailotools.so -> libgsthailotools.so.3
lrwxrwxrwx root/root         0 2024-11-12 03:42 ./usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgsthailotools.so.3 -> libgsthailotools.so.3.30.0

So, the *.so file should be installed, where it’s expected?! Can you please make sure, it’s there, where you expect it.

Next you can try and make sure, that *.so file can find all it’s dependencies (example again with my 5.0 version):

ubuntu@ubuntu-2404-pi5b:/tmp$ ldd /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgsthailotools.so
        linux-vdso.so.1 (0x0000ffffb2b23000)
        libgsthailometa.so.5 => /lib/aarch64-linux-gnu/libgsthailometa.so.5 (0x0000ffffb29e0000)
        libhailo_tracker.so.5 => /lib/aarch64-linux-gnu/libhailo_tracker.so.5 (0x0000ffffb2980000)
        libgstreamer-1.0.so.0 => /lib/aarch64-linux-gnu/libgstreamer-1.0.so.0 (0x0000ffffb27f0000)
        libgobject-2.0.so.0 => /lib/aarch64-linux-gnu/libgobject-2.0.so.0 (0x0000ffffb2760000)
...

If there is anything ‘Not found’, gstreamer would not be able to use that *.so!

I hope, this helps a bit.

– Marco