Skip to content

Remove webrtc-audio-processing from the distro#17329

Merged
christopherco merged 5 commits into
4.0from
chrco/remove-webrtc
May 18, 2026
Merged

Remove webrtc-audio-processing from the distro#17329
christopherco merged 5 commits into
4.0from
chrco/remove-webrtc

Conversation

@christopherco
Copy link
Copy Markdown
Collaborator

@christopherco christopherco commented May 17, 2026

Summary

Removes the webrtc-audio-processing component from Azure Linux 4.0. The
library is AEC code that is significantly behind upstream and
carries downstream-only patches (e.g. webrtc-audio-processing-1.3-gcc15.patch)
just to keep building, with limited utility to AZL. Three consumers are fixed
in earlier commits so the removal does not break their builds.

Commits (bisectable)

The PR is structured so every commit is independently buildable:

  1. fix(pipewire): drop webrtc-audio-processing BR
    Two spec-remove-tag overlays drop the BuildRequires from both the
    fedora >= 40 || rhel >= 10 branch (webrtc-audio-processing-1) and
    the legacy else branch (webrtc-audio-processing >= 0.2). pipewire's
    echo-cancel-webrtc meson option is auto upstream, so
    libpipewire-module-echo-cancel.so continues to ship with its
    speex / null backends; only the WebRTC backend compiles out.
    Bumps pipewire azl_release to 4.

  2. fix(gstreamer1-plugins-bad-free): disable webrtc bcond
    Adds webrtc to build.without, which surfaces as
    %_without_webrtc 1 in the AZL macros sidecar and disables the
    gstreamer1-plugins-bad-free-webrtc subpackage and BR.

  3. feat(pulseaudio): introduce azl_release for independent release bumps
    Mirrors the pattern already used for pipewire: introduces an
    azl_release macro that is added to the upstream Release number,
    so we can bump the Release tag for AZL-only changes without waiting
    for an upstream rebase to renumber. The regex matches upstream's
    current Release: 9... line verbatim so a future Fedora baseline
    bump (e.g. 9 → 10) forces a conscious re-evaluation rather than
    silently double-counting. Counter starts at 4 to retroactively
    account for three prior AZL commits that touched pulseaudio
    (deterministic-resolution feat, manual-release-calculation fix,
    gdm-hooks subpackage fix) plus this introduction. No spec-content
    change to package contents on this commit.

  4. fix(pulseaudio): disable WebRTC AEC backend
    Overlay %undefine's with_webrtc. Important: the upstream spec
    uses both %if 0%{?with_webrtc} (which tests truthiness) and
    %{?with_webrtc:enabled}%{!?with_webrtc:disabled} (which tests
    definition) to compute the meson -D webrtc-aec= flag, so
    %global with_webrtc 0 would inconsistently still pass enabled
    to meson. %undefine makes all branches evaluate to the disabled
    side consistently. Bumps pulseaudio azl_release to 5.

  5. chore(webrtc-audio-processing): drop component from distro
    Removes base/comps/components.toml entry,
    base/comps/components-publish-channels.toml entry,
    locks/webrtc-audio-processing.lock, and the entire
    specs/w/webrtc-audio-processing/ directory (638 lines deleted).

User-visible impact

  • pipewire / pulseaudio: module-echo-cancel.so still ships with
    the speex and null AEC backends. Configurations using
    aec_method=webrtc will no longer load and should switch to
    aec_method=speex.
  • gstreamer1-plugins-bad-free: the -webrtc subpackage is no
    longer produced (provides libgstwebrtc.so); affects only consumers
    that explicitly install that subpackage.

Testing

Each affected component was built and smoke-tested in mock:

  • pipewire: built clean without webrtc-audio-processing BR;
    libpipewire-module-echo-cancel.so still packaged, has no missing
    library deps; pipewire --version runs in the chroot.
  • gstreamer1-plugins-bad-free: built clean with _without_webrtc;
    -webrtc subpackage no longer produced; other subpackages unchanged.
  • pulseaudio: built clean with %undefine with_webrtc;
    module-echo-cancel.so still packaged, libwebrtc-util.so no longer
    packaged, no missing library deps; pulseaudio --version runs in the
    chroot.
  • All 5 commits independently verified self-consistent — fresh
    worktrees + azldev comp render -p <comp> + azldev comp update -p <comp>
    for each affected component produce no diff at every commit.

Overlay durability

For both pipewire and pulseaudio the overlays use anchored regexes that
match upstream verbatim, so a future Fedora rebase that changes the
macro spelling stops the overlay matching and forces a conscious
re-evaluation. Inline comments instruct future maintainers to update
the regex rather than delete the overlay — the constraint is permanent
(webrtc-audio-processing is not shipped in AZL).

Fixes: AB#19727

@christopherco christopherco force-pushed the chrco/remove-webrtc branch 5 times, most recently from db02c15 to 01217ae Compare May 18, 2026 05:09
…ckend

Drop the BuildRequires on pkgconfig(webrtc-audio-processing-1) (and
the legacy unversioned spelling in the alternate branch) and disable
the matching `echo-cancel-webrtc` meson feature. A follow-up commit
drops the webrtc-audio-processing component from the distro because
the library is significantly behind upstream and carries
downstream-only patches just to keep building.

Two cooperating sets of overlays are needed:

  1. spec-remove-tag overlays strip the BR lines. They are gated only
     by an unconditional `%if 0%{?fedora} >= 40 || ...` block (no
     upstream %bcond), so build.without can't reach them and
     spec-remove-tag is the only path.

  2. A spec-search-replace overlay injects `-D echo-cancel-webrtc=disabled`
     into the %meson call. Upstream defaults the option to `auto`, but
     Fedora's %meson macro always passes `--auto-features=enabled`,
     which flips every auto-default feature to mandatory and turns the
     missing webrtc-audio-processing into a hard build failure. The
     explicit `disabled` short-circuits the dependency lookup so the
     build completes without the WebRTC AEC backend.

libpipewire-module-echo-cancel.so itself still ships -- only the
WebRTC backend plugin (libspa-aec-webrtc.so) is gone. Echo cancel
modules can still load the null and speex backends.

Bumps azl_release from 3 to 4 to reflect the spec-content change.

Verified by rebuilding pipewire in mock:
  - SRPM no longer BuildRequires webrtc-audio-processing[-1]
  - %meson invocation now includes -D echo-cancel-webrtc=disabled
  - libpipewire-module-echo-cancel.so still packaged
  - libspa-aec-webrtc.so absent from pipewire-libs (intended)
  - libspa-aec-null.so still present (fallback backend)
Disable the upstream `webrtc` bcond by adding "webrtc" to
build.without. A follow-up commit drops the webrtc-audio-processing
component from the distro because the library is significantly behind
upstream and carries downstream-only patches just to keep building.

`webrtc1` cascades off automatically: its bcond expression is
`%[ %{with webrtc} && ! (0%{?fedora} >= 44 || 0%{?rhel} >= 11) ]`,
which evaluates to off once `with_webrtc` is unset. This drops:

  - BuildRequires: pkgconfig(webrtc-audio-coding-1)      (gated on webrtc1)
  - BuildRequires: pkgconfig(webrtc-audio-processing-1)  (gated on webrtc1)

and removes the following plugins from the *main*
gstreamer1-plugins-bad-free RPM (no in-tree replacement; pipelines
that reference these elements will fail with "no such element"):

  - libgstwebrtcdsp.so  WebRTC echo-cancel / AGC / noise-suppression
                        element (%files gated on `with webrtc`)
  - libgstisac.so       ISAC voice codec
                        (%files gated on `with webrtc1`)

The unrelated GStreamer WebRTC API plugins -- libgstwebrtc-1.0.so.0
(libs subpackage) and libgstwebrtc.so + libgstwebrtcnice-1.0.so.0
(already gated on `with extras`, already off in AZL) -- are NOT
affected; they come from a different source tree and do not depend
on webrtc-audio-processing.

Verified by rebuilding gstreamer1-plugins-bad-free and confirming
the SRPM no longer BRs webrtc-audio-processing[-1], and the main
RPM no longer ships libgstwebrtcdsp.so or libgstisac.so. The libs
subpackage still ships libgstwebrtc-1.0.so.0.
Mirror the pattern already used for pipewire (and other AZL-owned
components): introduce an `azl_release` macro that is added to the
upstream Release number, so we can bump the Release tag for AZL-only
changes without having to wait for an upstream rebase to renumber.

The replacement keeps the Fedora-style single-number Release schema:
upstream's hardcoded `9` becomes `%[9 + %{azl_release}]`. The regex
matches the current upstream Release verbatim so that if Fedora ever
bumps the baseline (e.g. 9 → 10), it stops matching and forces a
conscious re-evaluation rather than silently double-counting.

Set the initial counter to 4 to retroactively account for the three
prior AZL commits that touch this component and would have justified
a bump if the macro had existed at the time:

  1 - 5d461a2 feat: introduce deterministic commit resolution
                 via Azure Linux lock file
  2 - 7c5a4c7 fix(pulseaudio): set manual release calculation
  3 - f9e7763 fix(pulseaudio): disable gdm-hooks subpackage
  4 - introduce azl_release for pulseaudio

User-visible: the next pulseaudio rebuild bumps Release from 9 to 13
(9 + 4) on this commit, with no spec-content change to the package
contents.
Disable WebRTC-based acoustic echo cancellation in PulseAudio's
module-echo-cancel. A follow-up commit drops the underlying
webrtc-audio-processing component from the distro because the library
is significantly behind upstream and carries downstream-only patches
just to keep building. module-echo-cancel still ships with its speex
and null backends, which cover the same use case.

The overlay %undefine's `with_webrtc` rather than setting it to 0
because the spec also uses `%{?with_webrtc:enabled}%{!?with_webrtc:disabled}`
to compute the meson `-D webrtc-aec=` flag, and that conditional
tests for *definition* (not truthiness). `%global with_webrtc 0`
would leave `with_webrtc` defined and still pass `enabled` to meson,
which then fails to find the missing pkgconfig file. Undefining the
macro makes the BR guard (`%if 0%{?with_webrtc}`), the meson flag,
and the `%files` guard all evaluate to the disabled branch
consistently.

The regex is anchored to a full line (with optional trailing
whitespace) so it survives benign Fedora reformatting and won't
accidentally match e.g. `%global with_webrtc 10` in some future
variant; the inline comment instructs future maintainers to *update*
the regex rather than delete the overlay when it eventually drifts.

Bumps azl_release from 4 to 5 (entry 5 in the changelog) for the
spec-content change.

User-visible impact: `aec_method=webrtc` configurations will no
longer load (module-echo-cancel falls back to speex when no method
is configured; explicit `aec_method=webrtc` will error at module
load with "module not found"). Operators relying on WebRTC AEC
should switch to `aec_method=speex`.

Verified by building pulseaudio in mock and confirming:
  - module-echo-cancel.so is still packaged
  - libwebrtc-util.so is no longer packaged
  - module-echo-cancel.so has no missing library deps
  - `pulseaudio --version` runs in the chroot
Remove the webrtc-audio-processing component, which provided a library
derived from Google's WebRTC project for acoustic echo cancellation.
The package is significantly behind upstream and carries downstream-only
patches (e.g. webrtc-audio-processing-1.3-gcc15.patch) just to keep
building, with limited utility to AZL.

Three consumers were touched in earlier commits in this PR so this
removal does not break their builds:
  - pipewire (BR dropped via spec-remove-tag overlay)
  - gstreamer1-plugins-bad-free (webrtc bcond disabled via build.without)
  - pulseaudio (with_webrtc undefined via spec-search-replace overlay)

Removes:
  - base/comps/components.toml entry
  - base/comps/components-publish-channels.toml entry
  - locks/webrtc-audio-processing.lock
  - specs/w/webrtc-audio-processing/
@christopherco christopherco force-pushed the chrco/remove-webrtc branch from 01217ae to 51f69fe Compare May 18, 2026 05:20
@christopherco christopherco marked this pull request as ready for review May 18, 2026 05:42
Copilot AI review requested due to automatic review settings May 18, 2026 05:42
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Removes webrtc-audio-processing from Azure Linux and updates affected multimedia components so they no longer require or build against that library.

Changes:

  • Drops the webrtc-audio-processing component, lock, publish-channel entry, and rendered spec/source files.
  • Disables WebRTC-related backends/features in PipeWire, PulseAudio, and GStreamer where needed.
  • Updates rendered specs, generated macro sidecars, and component locks for the affected packages.

Reviewed changes

Copilot reviewed 16 out of 20 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
base/comps/components.toml Removes the component from the distro component list.
base/comps/components-publish-channels.toml Removes the component from publish channels.
base/comps/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.comp.toml Adds webrtc to disabled build conditionals.
base/comps/pipewire/pipewire.comp.toml Drops WebRTC BRs and disables PipeWire WebRTC echo-cancel backend.
base/comps/pulseaudio/pulseaudio.comp.toml Adds AZL release macro handling and disables PulseAudio WebRTC AEC.
locks/gstreamer1-plugins-bad-free.lock Refreshes component input fingerprint.
locks/pipewire.lock Refreshes component input fingerprint.
locks/pulseaudio.lock Refreshes component input fingerprint.
locks/webrtc-audio-processing.lock Removes deleted component lock.
specs/g/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.azl.macros Records _without_webrtc.
specs/g/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.spec Reflects rendered release bump.
specs/p/pipewire/pipewire.azl.macros Bumps AZL release macro.
specs/p/pipewire/pipewire.spec Reflects WebRTC BR removal and meson disable flag.
specs/p/pulseaudio/pulseaudio.azl.macros Adds generated AZL release macro.
specs/p/pulseaudio/pulseaudio.spec Reflects release macro loading and WebRTC disablement.
specs/w/webrtc-audio-processing/65f002e.patch Deletes rendered patch for removed component.
specs/w/webrtc-audio-processing/arches.patch Deletes rendered patch for removed component.
specs/w/webrtc-audio-processing/sources Deletes source hash for removed component.
specs/w/webrtc-audio-processing/webrtc-audio-processing-1.3-gcc15.patch Deletes rendered patch for removed component.
specs/w/webrtc-audio-processing/webrtc-audio-processing.spec Deletes rendered spec for removed component.


[components.gstreamer1-plugins-bad-free]
build.without = ["extras", "dc1394", "onnx", "openh264"]
build.without = ["extras", "dc1394", "onnx", "openh264", "webrtc"]

[components.gstreamer1-plugins-bad-free]
build.without = ["extras", "dc1394", "onnx", "openh264"]
build.without = ["extras", "dc1394", "onnx", "openh264", "webrtc"]
@christopherco christopherco merged commit b06298b into 4.0 May 18, 2026
15 checks passed
@christopherco christopherco deleted the chrco/remove-webrtc branch May 18, 2026 05:57
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.

3 participants