tools: add pw-avb-virtual for virtual AVB graph nodes

Add a standalone tool that creates virtual AVB talker/listener endpoints
visible in the PipeWire graph (e.g. Helvum). Uses the loopback transport
so no AVB hardware or network access is needed.

The sink node consumes audio silently, the source produces silence.
Supports --milan flag for Milan v1.2 mode and --name for custom node
name prefix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Christian F.K. Schaller 2026-04-07 17:39:22 -04:00 committed by Wim Taymans
parent 14310e66fe
commit f5259828b6
2 changed files with 327 additions and 0 deletions

View file

@ -95,6 +95,50 @@ if build_pw_cat
summary({'Build pw-cat with FFmpeg integration': build_pw_cat_with_ffmpeg}, bool_yn: true, section: 'pw-cat/pw-play/pw-dump tool')
endif
build_avb_virtual = get_option('avb').require(
host_machine.system() == 'linux',
error_message: 'AVB support is only available on Linux'
).allowed()
if build_avb_virtual
avb_tool_inc = include_directories('../modules')
avb_tool_sources = [
'pw-avb-virtual.c',
'../modules/module-avb/avb.c',
'../modules/module-avb/adp.c',
'../modules/module-avb/acmp.c',
'../modules/module-avb/aecp.c',
'../modules/module-avb/aecp-aem.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-available.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-control.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-name.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-clock-source.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-sampling-rate.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-deregister-unsolicited-notifications.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-register-unsolicited-notifications.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-stream-format.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-lock-entity.c',
'../modules/module-avb/aecp-aem-cmds-resps/cmd-get-set-configuration.c',
'../modules/module-avb/aecp-aem-cmds-resps/reply-unsol-helpers.c',
'../modules/module-avb/es-builder.c',
'../modules/module-avb/avdecc.c',
'../modules/module-avb/descriptors.c',
'../modules/module-avb/maap.c',
'../modules/module-avb/mmrp.c',
'../modules/module-avb/mrp.c',
'../modules/module-avb/msrp.c',
'../modules/module-avb/mvrp.c',
'../modules/module-avb/srp.c',
'../modules/module-avb/stream.c',
]
executable('pw-avb-virtual',
avb_tool_sources,
install: true,
include_directories: [configinc, avb_tool_inc],
dependencies: [mathlib, dl_lib, rt_lib, pipewire_dep],
)
endif
if dbus_dep.found()
executable('pw-reserve',
'reserve.h',