diff --git a/base/comps/components-publish-channels.toml b/base/comps/components-publish-channels.toml index 38c39f49c09..44663d773e3 100644 --- a/base/comps/components-publish-channels.toml +++ b/base/comps/components-publish-channels.toml @@ -2519,7 +2519,6 @@ components = [ "watchdog", "wayland", "web-assets", - "webrtc-audio-processing", "weldr-client", "wget2", "which", diff --git a/base/comps/components.toml b/base/comps/components.toml index a8b902fd201..c9001147970 100644 --- a/base/comps/components.toml +++ b/base/comps/components.toml @@ -6925,7 +6925,6 @@ includes = ["**/*.comp.toml", "component-check-disablement.toml", "component-min [components.wayland-protocols] [components.web-assets] [components.webkitgtk] -[components.webrtc-audio-processing] [components.websocketpp] [components.weldr-client] [components.wget1] diff --git a/base/comps/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.comp.toml b/base/comps/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.comp.toml index 31fa0aab87f..5f029136eca 100644 --- a/base/comps/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.comp.toml +++ b/base/comps/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.comp.toml @@ -10,9 +10,25 @@ # extras, so we must disable them too to avoid "unpackaged file" failures. # AZL does not ship openh264. Set openh264 bcond off to prevent building # gstreamer1-plugin-openh264 subpackage. +# +# AZL does not ship webrtc-audio-processing (Google-derived AEC library, +# significantly behind upstream, downstream-maintenance burden — see PR +# #17329). Disabling the `webrtc` bcond drops BuildRequires on +# pkgconfig(webrtc-audio-coding-1) and pkgconfig(webrtc-audio-processing-1). +# `webrtc1` cascades off automatically because its bcond expression chains +# on `%{with webrtc}`. This also removes two plugins from the main +# gstreamer1-plugins-bad-free RPM that have no in-tree replacement: +# - libgstwebrtcdsp.so (WebRTC echo-cancel / AGC / noise-suppression +# GStreamer element; %files gated on `with webrtc`) +# - libgstisac.so (ISAC voice codec; %files gated on `with webrtc1`) +# Pipelines that reference `webrtcdsp` or `isac` will fail with +# "no such element" — there is no fallback. The unrelated GStreamer +# WebRTC API plugins (libgstwebrtc-1.0.so, libgstwebrtcnice-1.0.so, +# libgstwebrtc.so) are NOT affected; they come from a different source +# tree and do not depend on webrtc-audio-processing. [components.gstreamer1-plugins-bad-free] -build.without = ["extras", "dc1394", "onnx", "openh264"] +build.without = ["extras", "dc1394", "onnx", "openh264", "webrtc"] # AZL does not ship opus — disable the opus parse plugin and remove its BR. diff --git a/base/comps/pipewire/pipewire.comp.toml b/base/comps/pipewire/pipewire.comp.toml index e15b3b30aaa..94d13f61f5a 100644 --- a/base/comps/pipewire/pipewire.comp.toml +++ b/base/comps/pipewire/pipewire.comp.toml @@ -10,7 +10,8 @@ release = { calculation = "manual" } # 1 - 5d461a2449 feat: introduce deterministic commit resolution via Azure Linux lock file # 2 - introduce azl_release for pipewire # 3 - disable opus codec support -azl_release = "3" +# 4 - drop webrtc-audio-processing BR +azl_release = "4" [[components.pipewire.overlays]] description = "Add azl_release to upstream %{baserelease} so we can bump release independently of upstream while keeping a single-number Fedora-style Release schema" @@ -19,9 +20,50 @@ regex = '^Release:\s+%\{baserelease\}%\{\?snapdate:\.%\{snapdate\}git%\{shortcom replacement = 'Release: %[%{baserelease} + %{azl_release}]%{?snapdate:.%{snapdate}git%{shortcommit}}%{?dist}' [[components.pipewire.overlays]] -description = "Disable opus codec support — opus is not shipped in AZL" +description = """ +Force-disable meson features whose dependencies are not shipped in AZL. +Required because Fedora's %meson macro always passes --auto-features=enabled, +which flips every auto-default feature to mandatory and would otherwise turn +these missing deps into hard build failures: + - opus / bluez5-codec-opus: opus codec library not shipped in AZL + - echo-cancel-webrtc: webrtc-audio-processing not shipped in AZL + (see the component removal and BR-drop overlays below) +The modules themselves still build; only the codec/backend implementations +that need the unavailable libraries are skipped. +""" type = "spec-search-replace" section = "%build" regex = '%meson \\' replacement = '''%meson \ - -D opus=disabled -D bluez5-codec-opus=disabled \''' + -D opus=disabled -D bluez5-codec-opus=disabled \ + -D echo-cancel-webrtc=disabled \''' + +# Drop the webrtc-audio-processing BuildRequires lines. The library is not +# shipped in AZL (Google-derived AEC code that is significantly behind upstream +# and carries downstream-only patches just to keep building); see the matching +# component removal in this PR. +# +# The BR is gated only by an unconditional `%if 0%{?fedora} >= 40 || ...` +# block — there is no upstream %bcond, so `build.without` cannot reach it and +# spec-remove-tag is the only path. The matching -D echo-cancel-webrtc=disabled +# meson flag is injected by the combined opus/echo-cancel-webrtc overlay above +# (required because Fedora's %meson uses --auto-features=enabled). +# +# libpipewire-module-echo-cancel.so still ships (with the speex / null +# backends); only the WebRTC backend (libspa-aec-webrtc.so) is dropped. +# +# If a spec-remove-tag eventually stops matching after a Fedora rebase, +# update the value to the new BR spelling — do NOT remove the overlay; the +# constraint is permanent (webrtc-audio-processing is not shipped in AZL). + +[[components.pipewire.overlays]] +description = "Drop webrtc-audio-processing-1 BR (fedora>=40 / rhel>=10 branch); library not shipped in AZL" +type = "spec-remove-tag" +tag = "BuildRequires" +value = "pkgconfig(webrtc-audio-processing-1)" + +[[components.pipewire.overlays]] +description = "Drop legacy webrtc-audio-processing BR (else branch, EL<10 / F<40); library not shipped in AZL" +type = "spec-remove-tag" +tag = "BuildRequires" +value = "pkgconfig(webrtc-audio-processing) >= 0.2" diff --git a/base/comps/pulseaudio/pulseaudio.comp.toml b/base/comps/pulseaudio/pulseaudio.comp.toml index 24ba1e4100f..297aeb90c52 100644 --- a/base/comps/pulseaudio/pulseaudio.comp.toml +++ b/base/comps/pulseaudio/pulseaudio.comp.toml @@ -1,7 +1,32 @@ [components.pulseaudio] -# Release: 9%{?snap:.%{snap}git%{shortcommit}}%{?dist} +# Release: %[9 + %{azl_release}]%{?snap:.%{snap}git%{shortcommit}}%{?dist} release = { calculation = "manual" } +[components.pulseaudio.build.defines] +# AZL-only release counter. Added to upstream's hardcoded Release number (9) +# so the final Release tag is a single number (Fedora-style schema) that +# bumps independently of upstream. Increment when shipping new AZL-only +# changes on top of the pinned upstream commit. +# 1 - 5d461a2449 feat: introduce deterministic commit resolution via Azure Linux lock file +# 2 - 7c5a4c7e86 fix(pulseaudio): set manual release calculation +# 3 - f9e776358e fix(pulseaudio): disable gdm-hooks subpackage +# 4 - introduce azl_release for pulseaudio +# 5 - disable WebRTC AEC backend +azl_release = "5" + +# Add azl_release to upstream's hardcoded Release (9) so we can bump release +# independently of upstream while keeping a single-number Fedora-style Release +# schema. The regex matches the current upstream Release verbatim and acts as +# a tripwire: if Fedora bumps the upstream number (e.g. 9 → 10), the regex +# will stop matching and force a conscious re-evaluation of the baseline. +# When that happens, update the regex *and* the baseline number in the +# replacement to the new upstream value, and reset azl_release to "1". +[[components.pulseaudio.overlays]] +description = "Add azl_release to upstream Release so we can bump release independently of upstream while keeping a single-number Fedora-style Release schema" +type = "spec-search-replace" +regex = '^Release:\s+9%\{\?snap:\.%\{snap\}git%\{shortcommit\}\}%\{\?dist\}$' +replacement = 'Release: %[9 + %{azl_release}]%{?snap:.%{snap}git%{shortcommit}}%{?dist}' + # The gdm-hooks subpackage was moved to gdm packaging in Fedora 28+, # so this subpackage should not be built. The upstream conditional mis-fires # when %fedora is undefined, but regardless we force gdm_hooks to 0 so the @@ -11,3 +36,29 @@ description = "Disable gdm-hooks subpackage (moved to gdm packaging in Fedora 28 type = "spec-search-replace" regex = "%global gdm_hooks 1" replacement = "%global gdm_hooks 0" + +# Disable WebRTC-based acoustic echo cancellation. AZL does not ship the +# webrtc-audio-processing component (Google-derived code that is significantly +# behind upstream and carries downstream patches just to keep building), so +# PulseAudio's module-echo-cancel falls back to its other AEC implementations +# (speex, null). Drops the BuildRequires on pkgconfig(webrtc-audio-processing-1) +# and the module-echo-cancel webrtc backend (libwebrtc-util.so). See PR #17329. +# +# Note: we %undefine (rather than set to 0) because the spec also uses +# `%{?with_webrtc:enabled}%{!?with_webrtc:disabled}` to compute the meson +# `-D webrtc-aec=` flag — that conditional tests for *definition*, not +# truthiness, so `%global with_webrtc 0` would still pass `enabled` to meson. +# Leaving the macro undefined makes every `%if 0%{?with_webrtc}` and +# `%{?with_webrtc:...}` evaluate to the disabled branch consistently. +# +# Regex is anchored to a full line (with optional trailing whitespace) to +# guard against benign Fedora reformatting and to avoid accidentally +# matching e.g. `%global with_webrtc 10` in some hypothetical future variant. +# If this regex stops matching after a Fedora rebase, *update* it to the +# new macro shape — do NOT remove the overlay; the constraint is permanent +# (webrtc-audio-processing is not shipped in AZL). +[[components.pulseaudio.overlays]] +description = "Disable WebRTC AEC backend (webrtc-audio-processing not shipped in AZL)" +type = "spec-search-replace" +regex = '^%global with_webrtc 1\s*$' +replacement = "%undefine with_webrtc" diff --git a/locks/gstreamer1-plugins-bad-free.lock b/locks/gstreamer1-plugins-bad-free.lock index 868ed4ade53..0361b2f01f3 100644 --- a/locks/gstreamer1-plugins-bad-free.lock +++ b/locks/gstreamer1-plugins-bad-free.lock @@ -2,5 +2,5 @@ version = 1 import-commit = 'b5597ad939bb024c2ab32ef8cf17e2ba2b86ebe5' upstream-commit = 'b5597ad939bb024c2ab32ef8cf17e2ba2b86ebe5' -input-fingerprint = 'sha256:740487c359da4297d4f7dd7ae104f79fb9f6f41697e83588fffac023cdb245c9' +input-fingerprint = 'sha256:393070c6177a80d1c864ad5f146e5716905c7c43697d06baba46a714252f146e' resolution-input-hash = 'sha256:466421704711c4fd3c71f0b2ed715a0e61d49e3e26f3a2637fee755795849c8e' diff --git a/locks/pipewire.lock b/locks/pipewire.lock index e7e4b66b30a..e3a2cc69ac7 100644 --- a/locks/pipewire.lock +++ b/locks/pipewire.lock @@ -2,5 +2,5 @@ version = 1 import-commit = 'f930436e78f3c6c32901254baf4979bab7c2710a' upstream-commit = 'f930436e78f3c6c32901254baf4979bab7c2710a' -input-fingerprint = 'sha256:fc5fa06db1353654e6f6926fcd667ee31143ee244599e9cba56e96834bf7f88f' +input-fingerprint = 'sha256:99d3b9e77574e8b7d13e5fd678e3e81000b2c0270105c45ce676725c6d93a7d0' resolution-input-hash = 'sha256:466421704711c4fd3c71f0b2ed715a0e61d49e3e26f3a2637fee755795849c8e' diff --git a/locks/pulseaudio.lock b/locks/pulseaudio.lock index 4540be31824..9385dbaec95 100644 --- a/locks/pulseaudio.lock +++ b/locks/pulseaudio.lock @@ -2,5 +2,5 @@ version = 1 import-commit = '9afb54a4dc0503fb2beb1853f6abe627713c0cf2' upstream-commit = '9afb54a4dc0503fb2beb1853f6abe627713c0cf2' -input-fingerprint = 'sha256:d1579fccfc58e11114c6ad59360f542df440fcecc01b25a02cdc3b1ff95d41d2' +input-fingerprint = 'sha256:b60c88cc394e0ef45d05f9d26f19f364d5c0186d583a96a71f8c3b4b37ddebb1' resolution-input-hash = 'sha256:466421704711c4fd3c71f0b2ed715a0e61d49e3e26f3a2637fee755795849c8e' diff --git a/locks/webrtc-audio-processing.lock b/locks/webrtc-audio-processing.lock deleted file mode 100644 index 71ca097c6cc..00000000000 --- a/locks/webrtc-audio-processing.lock +++ /dev/null @@ -1,6 +0,0 @@ -# Managed by azldev component update. Do not edit manually. -version = 1 -import-commit = '3b7dc5b179158e24c207f280168809841e8ffc2a' -upstream-commit = '3b7dc5b179158e24c207f280168809841e8ffc2a' -input-fingerprint = 'sha256:f079fdc9071e3245760ff0bb1dad1f8e90901c5e7d138961dc395525475d92ee' -resolution-input-hash = 'sha256:466421704711c4fd3c71f0b2ed715a0e61d49e3e26f3a2637fee755795849c8e' diff --git a/specs/g/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.azl.macros b/specs/g/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.azl.macros index 568e9e80ca7..327826ce9b0 100644 --- a/specs/g/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.azl.macros +++ b/specs/g/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.azl.macros @@ -4,3 +4,4 @@ %_without_extras 1 %_without_onnx 1 %_without_openh264 1 +%_without_webrtc 1 diff --git a/specs/g/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.spec b/specs/g/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.spec index 1071b2d4277..18dfb2b80ef 100644 --- a/specs/g/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.spec +++ b/specs/g/gstreamer1-plugins-bad-free/gstreamer1-plugins-bad-free.spec @@ -36,7 +36,7 @@ Name: gstreamer1-plugins-bad-free Version: 1.26.10 -Release: 6%{?dist} +Release: 7%{?dist} Summary: GStreamer streaming media framework "bad" plugins # Automatically converted from old format: LGPLv2+ and LGPLv2 - review is highly recommended. diff --git a/specs/p/pipewire/pipewire.azl.macros b/specs/p/pipewire/pipewire.azl.macros index bc741136bc9..d235e1c54e4 100644 --- a/specs/p/pipewire/pipewire.azl.macros +++ b/specs/p/pipewire/pipewire.azl.macros @@ -1,3 +1,3 @@ # Macros file automatically generated by azldev. # Do not edit manually; changes will be overwritten. -%azl_release 3 +%azl_release 4 diff --git a/specs/p/pipewire/pipewire.spec b/specs/p/pipewire/pipewire.spec index 7dd280c9a32..55a082aaf41 100644 --- a/specs/p/pipewire/pipewire.spec +++ b/specs/p/pipewire/pipewire.spec @@ -123,9 +123,7 @@ BuildRequires: ncurses-devel BuildRequires: pulseaudio-libs-devel BuildRequires: avahi-devel %if 0%{?fedora} >= 40 || 0%{?rhel} >= 10 -BuildRequires: pkgconfig(webrtc-audio-processing-1) %else -BuildRequires: pkgconfig(webrtc-audio-processing) >= 0.2 %endif BuildRequires: libusb1-devel BuildRequires: readline-devel @@ -453,6 +451,7 @@ cp %{SOURCE1} subprojects/packagefiles/ %build %meson \ -D opus=disabled -D bluez5-codec-opus=disabled \ + -D echo-cancel-webrtc=disabled \ -D docs=enabled -D man=enabled -D gstreamer=enabled -D systemd=enabled \ -D sdl2=disabled \ -D audiotestsrc=disabled -D videotestsrc=disabled \ diff --git a/specs/p/pulseaudio/pulseaudio.azl.macros b/specs/p/pulseaudio/pulseaudio.azl.macros new file mode 100644 index 00000000000..0aa211138a9 --- /dev/null +++ b/specs/p/pulseaudio/pulseaudio.azl.macros @@ -0,0 +1,3 @@ +# Macros file automatically generated by azldev. +# Do not edit manually; changes will be overwritten. +%azl_release 5 diff --git a/specs/p/pulseaudio/pulseaudio.spec b/specs/p/pulseaudio/pulseaudio.spec index 694fa3ee931..b517c2a6778 100644 --- a/specs/p/pulseaudio/pulseaudio.spec +++ b/specs/p/pulseaudio/pulseaudio.spec @@ -1,6 +1,9 @@ # This spec file has been modified by azldev to include build configuration overlays. # Do not edit manually; changes may be overwritten. +# All Azure Linux specs with overlays include this macro file, irrespective of whether new macros have been added. +%{load:%{_sourcedir}/pulseaudio.azl.macros} + %global pa_major 17.0 #global pa_minor 0 @@ -9,7 +12,7 @@ #global gitcommit f5d3606fe76302c7dbdb0f6a80400df829a5f846 #global shortcommit %%(c=%%{gitcommit}; echo ${c:0:5}) -%global with_webrtc 1 +%undefine with_webrtc %if 0%{?fedora} %global enable_daemon 1 @@ -37,7 +40,7 @@ Name: pulseaudio Summary: Improved Linux Sound Server Version: %{pa_major}%{?pa_minor:.%{pa_minor}} -Release: 9%{?snap:.%{snap}git%{shortcommit}}%{?dist} +Release: %[9 + %{azl_release}]%{?snap:.%{snap}git%{shortcommit}}%{?dist} License: LGPL-2.1-or-later URL: http://www.freedesktop.org/wiki/Software/PulseAudio %if 0%{?gitrel} @@ -50,6 +53,7 @@ Source1: http://freedesktop.org/software/pulseaudio/releases/pulseaudio-% %endif Source5: default.pa-for-gdm +Source9999: pulseaudio.azl.macros # revert upstream commit to rely solely on autospawn for autostart, instead # include a fallback to manual launch when autospawn fails, like when diff --git a/specs/w/webrtc-audio-processing/65f002e.patch b/specs/w/webrtc-audio-processing/65f002e.patch deleted file mode 100644 index f9098ab3569..00000000000 --- a/specs/w/webrtc-audio-processing/65f002e.patch +++ /dev/null @@ -1,313 +0,0 @@ ---- a/webrtc/common_audio/wav_file.cc -+++ b/webrtc/common_audio/wav_file.cc -@@ -10,6 +10,7 @@ - - #include "common_audio/wav_file.h" - -+#include - #include - - #include -@@ -34,6 +35,38 @@ bool FormatSupported(WavFormat format) { - format == WavFormat::kWavFormatIeeeFloat; - } - -+template -+void TranslateEndianness(T* destination, const T* source, size_t length) { -+ static_assert(sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8, -+ "no converter, use integral types"); -+ if (sizeof(T) == 2) { -+ const uint16_t* src = reinterpret_cast(source); -+ uint16_t* dst = reinterpret_cast(destination); -+ for (size_t index = 0; index < length; index++) { -+ dst[index] = bswap_16(src[index]); -+ } -+ } -+ if (sizeof(T) == 4) { -+ const uint32_t* src = reinterpret_cast(source); -+ uint32_t* dst = reinterpret_cast(destination); -+ for (size_t index = 0; index < length; index++) { -+ dst[index] = bswap_32(src[index]); -+ } -+ } -+ if (sizeof(T) == 8) { -+ const uint64_t* src = reinterpret_cast(source); -+ uint64_t* dst = reinterpret_cast(destination); -+ for (size_t index = 0; index < length; index++) { -+ dst[index] = bswap_64(src[index]); -+ } -+ } -+} -+ -+template -+void TranslateEndianness(T* buffer, size_t length) { -+ TranslateEndianness(buffer, buffer, length); -+} -+ - // Doesn't take ownership of the file handle and won't close it. - class WavHeaderFileReader : public WavHeaderReader { - public: -@@ -89,10 +122,6 @@ void WavReader::Reset() { - - size_t WavReader::ReadSamples(const size_t num_samples, - int16_t* const samples) { --#ifndef WEBRTC_ARCH_LITTLE_ENDIAN --#error "Need to convert samples to big-endian when reading from WAV file" --#endif -- - size_t num_samples_left_to_read = num_samples; - size_t next_chunk_start = 0; - while (num_samples_left_to_read > 0 && num_unread_samples_ > 0) { -@@ -105,6 +134,9 @@ size_t WavReader::ReadSamples(const size_t num_samples, - num_bytes_read = file_.Read(samples_to_convert.data(), - chunk_size * sizeof(samples_to_convert[0])); - num_samples_read = num_bytes_read / sizeof(samples_to_convert[0]); -+#ifdef WEBRTC_ARCH_BIG_ENDIAN -+ TranslateEndianness(samples_to_convert.data(), num_samples_read); -+#endif - - for (size_t j = 0; j < num_samples_read; ++j) { - samples[next_chunk_start + j] = FloatToS16(samples_to_convert[j]); -@@ -114,6 +146,10 @@ size_t WavReader::ReadSamples(const size_t num_samples, - num_bytes_read = file_.Read(&samples[next_chunk_start], - chunk_size * sizeof(samples[0])); - num_samples_read = num_bytes_read / sizeof(samples[0]); -+ -+#ifdef WEBRTC_ARCH_BIG_ENDIAN -+ TranslateEndianness(&samples[next_chunk_start], num_samples_read); -+#endif - } - RTC_CHECK(num_samples_read == 0 || (num_bytes_read % num_samples_read) == 0) - << "Corrupt file: file ended in the middle of a sample."; -@@ -129,10 +165,6 @@ size_t WavReader::ReadSamples(const size_t num_samples, - } - - size_t WavReader::ReadSamples(const size_t num_samples, float* const samples) { --#ifndef WEBRTC_ARCH_LITTLE_ENDIAN --#error "Need to convert samples to big-endian when reading from WAV file" --#endif -- - size_t num_samples_left_to_read = num_samples; - size_t next_chunk_start = 0; - while (num_samples_left_to_read > 0 && num_unread_samples_ > 0) { -@@ -145,6 +177,9 @@ size_t WavReader::ReadSamples(const size_t num_samples, float* const samples) { - num_bytes_read = file_.Read(samples_to_convert.data(), - chunk_size * sizeof(samples_to_convert[0])); - num_samples_read = num_bytes_read / sizeof(samples_to_convert[0]); -+#ifdef WEBRTC_ARCH_BIG_ENDIAN -+ TranslateEndianness(samples_to_convert.data(), num_samples_read); -+#endif - - for (size_t j = 0; j < num_samples_read; ++j) { - samples[next_chunk_start + j] = -@@ -155,6 +190,9 @@ size_t WavReader::ReadSamples(const size_t num_samples, float* const samples) { - num_bytes_read = file_.Read(&samples[next_chunk_start], - chunk_size * sizeof(samples[0])); - num_samples_read = num_bytes_read / sizeof(samples[0]); -+#ifdef WEBRTC_ARCH_BIG_ENDIAN -+ TranslateEndianness(&samples[next_chunk_start], num_samples_read); -+#endif - - for (size_t j = 0; j < num_samples_read; ++j) { - samples[next_chunk_start + j] = -@@ -213,24 +251,32 @@ WavWriter::WavWriter(FileWrapper file, - } - - void WavWriter::WriteSamples(const int16_t* samples, size_t num_samples) { --#ifndef WEBRTC_ARCH_LITTLE_ENDIAN --#error "Need to convert samples to little-endian when writing to WAV file" --#endif -- - for (size_t i = 0; i < num_samples; i += kMaxChunksize) { - const size_t num_remaining_samples = num_samples - i; - const size_t num_samples_to_write = - std::min(kMaxChunksize, num_remaining_samples); - - if (format_ == WavFormat::kWavFormatPcm) { -+#ifndef WEBRTC_ARCH_BIG_ENDIAN - RTC_CHECK( - file_.Write(&samples[i], num_samples_to_write * sizeof(samples[0]))); -+#else -+ std::array converted_samples; -+ TranslateEndianness(converted_samples.data(), &samples[i], -+ num_samples_to_write); -+ RTC_CHECK( -+ file_.Write(converted_samples.data(), -+ num_samples_to_write * sizeof(converted_samples[0]))); -+#endif - } else { - RTC_CHECK_EQ(format_, WavFormat::kWavFormatIeeeFloat); - std::array converted_samples; - for (size_t j = 0; j < num_samples_to_write; ++j) { - converted_samples[j] = S16ToFloat(samples[i + j]); - } -+#ifdef WEBRTC_ARCH_BIG_ENDIAN -+ TranslateEndianness(converted_samples.data(), num_samples_to_write); -+#endif - RTC_CHECK( - file_.Write(converted_samples.data(), - num_samples_to_write * sizeof(converted_samples[0]))); -@@ -243,10 +289,6 @@ void WavWriter::WriteSamples(const int16_t* samples, size_t num_samples) { - } - - void WavWriter::WriteSamples(const float* samples, size_t num_samples) { --#ifndef WEBRTC_ARCH_LITTLE_ENDIAN --#error "Need to convert samples to little-endian when writing to WAV file" --#endif -- - for (size_t i = 0; i < num_samples; i += kMaxChunksize) { - const size_t num_remaining_samples = num_samples - i; - const size_t num_samples_to_write = -@@ -257,6 +299,9 @@ void WavWriter::WriteSamples(const float* samples, size_t num_samples) { - for (size_t j = 0; j < num_samples_to_write; ++j) { - converted_samples[j] = FloatS16ToS16(samples[i + j]); - } -+#ifdef WEBRTC_ARCH_BIG_ENDIAN -+ TranslateEndianness(converted_samples.data(), num_samples_to_write); -+#endif - RTC_CHECK( - file_.Write(converted_samples.data(), - num_samples_to_write * sizeof(converted_samples[0]))); -@@ -266,6 +311,9 @@ void WavWriter::WriteSamples(const float* samples, size_t num_samples) { - for (size_t j = 0; j < num_samples_to_write; ++j) { - converted_samples[j] = FloatS16ToFloat(samples[i + j]); - } -+#ifdef WEBRTC_ARCH_BIG_ENDIAN -+ TranslateEndianness(converted_samples.data(), num_samples_to_write); -+#endif - RTC_CHECK( - file_.Write(converted_samples.data(), - num_samples_to_write * sizeof(converted_samples[0]))); ---- a/webrtc/common_audio/wav_header.cc -+++ b/webrtc/common_audio/wav_header.cc -@@ -14,6 +14,8 @@ - - #include "common_audio/wav_header.h" - -+#include -+ - #include - #include - #include -@@ -26,10 +28,6 @@ - namespace webrtc { - namespace { - --#ifndef WEBRTC_ARCH_LITTLE_ENDIAN --#error "Code not working properly for big endian platforms." --#endif -- - #pragma pack(2) - struct ChunkHeader { - uint32_t ID; -@@ -174,6 +172,8 @@ bool FindWaveChunk(ChunkHeader* chunk_header, - if (readable->Read(chunk_header, sizeof(*chunk_header)) != - sizeof(*chunk_header)) - return false; // EOF. -+ chunk_header->Size = le32toh(chunk_header->Size); -+ - if (ReadFourCC(chunk_header->ID) == sought_chunk_id) - return true; // Sought chunk found. - // Ignore current chunk by skipping its payload. -@@ -187,6 +187,13 @@ bool ReadFmtChunkData(FmtPcmSubchunk* fmt_subchunk, WavHeaderReader* readable) { - if (readable->Read(&(fmt_subchunk->AudioFormat), kFmtPcmSubchunkSize) != - kFmtPcmSubchunkSize) - return false; -+ fmt_subchunk->AudioFormat = le16toh(fmt_subchunk->AudioFormat); -+ fmt_subchunk->NumChannels = le16toh(fmt_subchunk->NumChannels); -+ fmt_subchunk->SampleRate = le32toh(fmt_subchunk->SampleRate); -+ fmt_subchunk->ByteRate = le32toh(fmt_subchunk->ByteRate); -+ fmt_subchunk->BlockAlign = le16toh(fmt_subchunk->BlockAlign); -+ fmt_subchunk->BitsPerSample = le16toh(fmt_subchunk->BitsPerSample); -+ - const uint32_t fmt_size = fmt_subchunk->header.Size; - if (fmt_size != kFmtPcmSubchunkSize) { - // There is an optional two-byte extension field permitted to be present -@@ -214,19 +221,22 @@ void WritePcmWavHeader(size_t num_channels, - auto header = rtc::MsanUninitialized({}); - const size_t bytes_in_payload = bytes_per_sample * num_samples; - -- header.riff.header.ID = PackFourCC('R', 'I', 'F', 'F'); -- header.riff.header.Size = RiffChunkSize(bytes_in_payload, *header_size); -- header.riff.Format = PackFourCC('W', 'A', 'V', 'E'); -- header.fmt.header.ID = PackFourCC('f', 'm', 't', ' '); -- header.fmt.header.Size = kFmtPcmSubchunkSize; -- header.fmt.AudioFormat = MapWavFormatToHeaderField(WavFormat::kWavFormatPcm); -- header.fmt.NumChannels = static_cast(num_channels); -- header.fmt.SampleRate = sample_rate; -- header.fmt.ByteRate = ByteRate(num_channels, sample_rate, bytes_per_sample); -- header.fmt.BlockAlign = BlockAlign(num_channels, bytes_per_sample); -- header.fmt.BitsPerSample = static_cast(8 * bytes_per_sample); -- header.data.header.ID = PackFourCC('d', 'a', 't', 'a'); -- header.data.header.Size = static_cast(bytes_in_payload); -+ header.riff.header.ID = htole32(PackFourCC('R', 'I', 'F', 'F')); -+ header.riff.header.Size = -+ htole32(RiffChunkSize(bytes_in_payload, *header_size)); -+ header.riff.Format = htole32(PackFourCC('W', 'A', 'V', 'E')); -+ header.fmt.header.ID = htole32(PackFourCC('f', 'm', 't', ' ')); -+ header.fmt.header.Size = htole32(kFmtPcmSubchunkSize); -+ header.fmt.AudioFormat = -+ htole16(MapWavFormatToHeaderField(WavFormat::kWavFormatPcm)); -+ header.fmt.NumChannels = htole16(num_channels); -+ header.fmt.SampleRate = htole32(sample_rate); -+ header.fmt.ByteRate = -+ htole32(ByteRate(num_channels, sample_rate, bytes_per_sample)); -+ header.fmt.BlockAlign = htole16(BlockAlign(num_channels, bytes_per_sample)); -+ header.fmt.BitsPerSample = htole16(8 * bytes_per_sample); -+ header.data.header.ID = htole32(PackFourCC('d', 'a', 't', 'a')); -+ header.data.header.Size = htole32(bytes_in_payload); - - // Do an extra copy rather than writing everything to buf directly, since buf - // might not be correctly aligned. -@@ -245,24 +255,26 @@ void WriteIeeeFloatWavHeader(size_t num_channels, - auto header = rtc::MsanUninitialized({}); - const size_t bytes_in_payload = bytes_per_sample * num_samples; - -- header.riff.header.ID = PackFourCC('R', 'I', 'F', 'F'); -- header.riff.header.Size = RiffChunkSize(bytes_in_payload, *header_size); -- header.riff.Format = PackFourCC('W', 'A', 'V', 'E'); -- header.fmt.header.ID = PackFourCC('f', 'm', 't', ' '); -- header.fmt.header.Size = kFmtIeeeFloatSubchunkSize; -+ header.riff.header.ID = htole32(PackFourCC('R', 'I', 'F', 'F')); -+ header.riff.header.Size = -+ htole32(RiffChunkSize(bytes_in_payload, *header_size)); -+ header.riff.Format = htole32(PackFourCC('W', 'A', 'V', 'E')); -+ header.fmt.header.ID = htole32(PackFourCC('f', 'm', 't', ' ')); -+ header.fmt.header.Size = htole32(kFmtIeeeFloatSubchunkSize); - header.fmt.AudioFormat = -- MapWavFormatToHeaderField(WavFormat::kWavFormatIeeeFloat); -- header.fmt.NumChannels = static_cast(num_channels); -- header.fmt.SampleRate = sample_rate; -- header.fmt.ByteRate = ByteRate(num_channels, sample_rate, bytes_per_sample); -- header.fmt.BlockAlign = BlockAlign(num_channels, bytes_per_sample); -- header.fmt.BitsPerSample = static_cast(8 * bytes_per_sample); -- header.fmt.ExtensionSize = 0; -- header.fact.header.ID = PackFourCC('f', 'a', 'c', 't'); -- header.fact.header.Size = 4; -- header.fact.SampleLength = static_cast(num_channels * num_samples); -- header.data.header.ID = PackFourCC('d', 'a', 't', 'a'); -- header.data.header.Size = static_cast(bytes_in_payload); -+ htole16(MapWavFormatToHeaderField(WavFormat::kWavFormatIeeeFloat)); -+ header.fmt.NumChannels = htole16(num_channels); -+ header.fmt.SampleRate = htole32(sample_rate); -+ header.fmt.ByteRate = -+ htole32(ByteRate(num_channels, sample_rate, bytes_per_sample)); -+ header.fmt.BlockAlign = htole16(BlockAlign(num_channels, bytes_per_sample)); -+ header.fmt.BitsPerSample = htole16(8 * bytes_per_sample); -+ header.fmt.ExtensionSize = htole16(0); -+ header.fact.header.ID = htole32(PackFourCC('f', 'a', 'c', 't')); -+ header.fact.header.Size = htole32(4); -+ header.fact.SampleLength = htole32(num_channels * num_samples); -+ header.data.header.ID = htole32(PackFourCC('d', 'a', 't', 'a')); -+ header.data.header.Size = htole32(bytes_in_payload); - - // Do an extra copy rather than writing everything to buf directly, since buf - // might not be correctly aligned. -@@ -391,6 +403,7 @@ bool ReadWavHeader(WavHeaderReader* readable, - return false; - if (ReadFourCC(header.riff.Format) != "WAVE") - return false; -+ header.riff.header.Size = le32toh(header.riff.header.Size); - - // Find "fmt " and "data" chunks. While the official Wave file specification - // does not put requirements on the chunks order, it is uncommon to find the diff --git a/specs/w/webrtc-audio-processing/arches.patch b/specs/w/webrtc-audio-processing/arches.patch deleted file mode 100644 index eaf43dfb457..00000000000 --- a/specs/w/webrtc-audio-processing/arches.patch +++ /dev/null @@ -1,86 +0,0 @@ ---- webrtc-audio-processing-1.3/webrtc/rtc_base/system/arch.h 2023-09-05 10:19:47.000000000 -0500 -+++ webrtc-audio-processing-1.3/webrtc/rtc_base/system/arch.h 2024-02-12 10:04:12.114812565 -0600 -@@ -15,8 +15,9 @@ - #define RTC_BASE_SYSTEM_ARCH_H_ - - // Processor architecture detection. For more info on what's defined, see: --// http://msdn.microsoft.com/en-us/library/b0084kay.aspx --// http://www.agner.org/optimize/calling_conventions.pdf -+// https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros -+// https://www.agner.org/optimize/calling_conventions.pdf -+// https://sourceforge.net/p/predef/wiki/Architectures/ - // or with gcc, run: "echo | gcc -E -dM -" - #if defined(_M_X64) || defined(__x86_64__) - #define WEBRTC_ARCH_X86_FAMILY -@@ -27,29 +28,50 @@ - #define WEBRTC_ARCH_ARM_FAMILY - #define WEBRTC_ARCH_64_BITS - #define WEBRTC_ARCH_LITTLE_ENDIAN --#elif defined(__riscv) || defined(__riscv__) --#define WEBRTC_ARCH_LITTLE_ENDIAN --#if __riscv_xlen == 64 --#define WEBRTC_ARCH_64_BITS --#else --#define WEBRTC_ARCH_32_BITS --#endif - #elif defined(_M_IX86) || defined(__i386__) - #define WEBRTC_ARCH_X86_FAMILY - #define WEBRTC_ARCH_X86 - #define WEBRTC_ARCH_32_BITS - #define WEBRTC_ARCH_LITTLE_ENDIAN --#elif defined(__ARMEL__) -+#elif defined(_M_ARM) || defined(__ARMEL__) - #define WEBRTC_ARCH_ARM_FAMILY - #define WEBRTC_ARCH_32_BITS - #define WEBRTC_ARCH_LITTLE_ENDIAN --#elif defined(__MIPSEL__) -+#elif defined(__MIPSEL__) || defined(__MIPSEB__) - #define WEBRTC_ARCH_MIPS_FAMILY - #if defined(__LP64__) - #define WEBRTC_ARCH_64_BITS - #else - #define WEBRTC_ARCH_32_BITS - #endif -+#if defined(__MIPSEL__) -+#define WEBRTC_ARCH_LITTLE_ENDIAN -+#else -+#define WEBRTC_ARCH_BIG_ENDIAN -+#endif -+#elif defined(__PPC__) -+#if defined(__PPC64__) -+#define WEBRTC_ARCH_64_BITS -+#else -+#define WEBRTC_ARCH_32_BITS -+#endif -+#if defined(__LITTLE_ENDIAN__) -+#define WEBRTC_ARCH_LITTLE_ENDIAN -+#else -+#define WEBRTC_ARCH_BIG_ENDIAN -+#endif -+#elif defined(__sparc) || defined(__sparc__) -+#if __SIZEOF_LONG__ == 8 -+#define WEBRTC_ARCH_64_BITS -+#else -+#define WEBRTC_ARCH_32_BITS -+#endif -+#define WEBRTC_ARCH_BIG_ENDIAN -+#elif defined(__riscv) && __riscv_xlen == 64 -+#define WEBRTC_ARCH_64_BITS -+#define WEBRTC_ARCH_LITTLE_ENDIAN -+#elif defined(__riscv) && __riscv_xlen == 32 -+#define WEBRTC_ARCH_32_BITS - #define WEBRTC_ARCH_LITTLE_ENDIAN - #elif defined(__pnacl__) - #define WEBRTC_ARCH_32_BITS ---- webrtc-audio-processing-1.3/webrtc/rtc_base/system/arch.h~ 2024-02-12 10:14:11.277835532 -0600 -+++ webrtc-audio-processing-1.3/webrtc/rtc_base/system/arch.h 2024-02-12 10:25:11.558554823 -0600 -@@ -79,6 +79,9 @@ - #elif defined(__EMSCRIPTEN__) - #define WEBRTC_ARCH_32_BITS - #define WEBRTC_ARCH_LITTLE_ENDIAN -+#elif defined(__s390x__) -+#define WEBRTC_ARCH_64_BITS -+#define WEBRTC_ARCH_BIG_ENDIAN - #else - #error Please add support for your architecture in rtc_base/system/arch.h - #endif diff --git a/specs/w/webrtc-audio-processing/sources b/specs/w/webrtc-audio-processing/sources deleted file mode 100644 index b25567ac2ed..00000000000 --- a/specs/w/webrtc-audio-processing/sources +++ /dev/null @@ -1 +0,0 @@ -SHA512 (webrtc-audio-processing-1.3.tar.xz) = daabaed06ff9d1d4076b2abba14efbbebeb8930b14a99fb47974399d2812f3f851e3d6a691b09fbcfb1a3535c6ade967bac4c17a3728f3138b302e3b844c5c67 diff --git a/specs/w/webrtc-audio-processing/webrtc-audio-processing-1.3-gcc15.patch b/specs/w/webrtc-audio-processing/webrtc-audio-processing-1.3-gcc15.patch deleted file mode 100644 index b69ac5cfbbd..00000000000 --- a/specs/w/webrtc-audio-processing/webrtc-audio-processing-1.3-gcc15.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -Naur webrtc-audio-processing-1.3-original/webrtc/api/task_queue/task_queue_base.h webrtc-audio-processing-1.3/webrtc/api/task_queue/task_queue_base.h ---- webrtc-audio-processing-1.3-original/webrtc/api/task_queue/task_queue_base.h 2023-09-05 11:19:47.000000000 -0400 -+++ webrtc-audio-processing-1.3/webrtc/api/task_queue/task_queue_base.h 2025-02-04 14:24:16.239045712 -0500 -@@ -10,6 +10,7 @@ - #ifndef API_TASK_QUEUE_TASK_QUEUE_BASE_H_ - #define API_TASK_QUEUE_TASK_QUEUE_BASE_H_ - -+#include - #include - - #include "api/task_queue/queued_task.h" diff --git a/specs/w/webrtc-audio-processing/webrtc-audio-processing.spec b/specs/w/webrtc-audio-processing/webrtc-audio-processing.spec deleted file mode 100644 index 993b4250d4b..00000000000 --- a/specs/w/webrtc-audio-processing/webrtc-audio-processing.spec +++ /dev/null @@ -1,219 +0,0 @@ -# This spec file has been modified by azldev to include build configuration overlays. -# Do not edit manually; changes may be overwritten. - -Name: webrtc-audio-processing -Version: 1.3 -Release: 10%{?dist} -Summary: Library for echo cancellation - -License: BSD-3-Clause -URL: http://www.freedesktop.org/software/pulseaudio/webrtc-audio-processing/ -Source0: http://freedesktop.org/software/pulseaudio/webrtc-audio-processing/%{name}-%{version}.tar.xz - -Patch0: arches.patch -Patch1: 65f002e.patch -# Add missing #include for GCC 15 -# -# Downstream-only because the package is significantly behind upstream, and the -# code in question has changed quite a bit in the latest release. -Patch2: webrtc-audio-processing-1.3-gcc15.patch - -BuildRequires: meson -BuildRequires: gcc gcc-c++ -BuildRequires: abseil-cpp-devel -#BuildRequires: neon-devel - -%description -%{name} is a library derived from Google WebRTC project that -provides echo cancellation functionality. This library is used by for example -PulseAudio to provide echo cancellation. - -%package devel -Summary: Development files for %{name} -Requires: %{name}%{?_isa} = %{version}-%{release} - -%description devel -The %{name}-devel package contains libraries and header -files for developing applications that use %{name}. - -%prep -%autosetup -p1 - -%build -%meson -%meson_build \ -#%%ifarch %%{arm} aarch64 -# -Dneon=no \ -#%endif - - -%install -%meson_install - - -%ldconfig_scriptlets - -%files -%doc NEWS AUTHORS README.md -%license COPYING -%{_libdir}/libwebrtc-audio-coding-1.so.3* -%{_libdir}/libwebrtc-audio-processing-1.so.3* - -%files devel -%{_libdir}/libwebrtc-audio-coding-1.so -%{_libdir}/libwebrtc-audio-processing-1.so -%{_libdir}/pkgconfig/webrtc-audio-coding-1.pc -%{_libdir}/pkgconfig/webrtc-audio-processing-1.pc -%{_includedir}/webrtc-audio-processing-1/ - - -%changelog -* Mon Sep 08 2025 Benjamin A. Beasley - 1.3-9 -- Rebuilt for abseil-cpp 20250814.0 - -* Fri Jul 25 2025 Fedora Release Engineering - 1.3-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Mon May 26 2025 Benjamin A. Beasley - 1.3-7 -- Rebuilt for abseil-cpp 20250512.0 - -* Tue Feb 25 2025 Benjamin A. Beasley - 1.3-6 -- Rebuilt for abseil-cpp-20250127.0 - -* Tue Feb 04 2025 Benjamin A. Beasley - 1.3-5 -- Patch for GCC 15 (fix RHBZ#2341533) - -* Sun Jan 19 2025 Fedora Release Engineering - 1.3-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Sun Aug 25 2024 Benjamin A. Beasley - 1.3-3 -- Rebuilt for abseil-cpp-20240722.0 - -* Sat Jul 20 2024 Fedora Release Engineering - 1.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Fri Feb 09 2024 Gwyn Ciesla - 1.3-1 -- 1.3 - -* Sat Jan 27 2024 Fedora Release Engineering - 0.3.1-12 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Sat Jul 22 2023 Fedora Release Engineering - 0.3.1-11 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Sat Jan 21 2023 Fedora Release Engineering - 0.3.1-10 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Sat Jul 23 2022 Fedora Release Engineering - 0.3.1-9 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Sat Jan 22 2022 Fedora Release Engineering - 0.3.1-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Fri Jul 23 2021 Fedora Release Engineering - 0.3.1-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Wed Jan 27 2021 Fedora Release Engineering - 0.3.1-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Wed Jul 29 2020 Fedora Release Engineering - 0.3.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Fri Jan 31 2020 Fedora Release Engineering - 0.3.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Sat Jul 27 2019 Fedora Release Engineering - 0.3.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Sun Feb 03 2019 Fedora Release Engineering - 0.3.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Wed Jul 25 2018 Rex Dieter - 0.3.1-1 -- 0.3.1 -- use %%make_build %%make_install %%ldconfig_scriptlets - -* Mon Jul 23 2018 Debarshi Ray 0.3-9 -- Update License - -* Sat Jul 14 2018 Fedora Release Engineering - 0.3-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Sat Mar 3 2018 Peter Robinson 0.3-7 -- Add gcc/gcc-c++ build requires -- Add aarch64 to NEON exception - -* Fri Feb 09 2018 Fedora Release Engineering - 0.3-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Mon Jan 22 2018 Rex Dieter - 0.3-5 -- pull in upstream fixes, use %%autosetup - -* Thu Aug 03 2017 Fedora Release Engineering - 0.3-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Thu Jul 27 2017 Fedora Release Engineering - 0.3-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Sat Feb 11 2017 Fedora Release Engineering - 0.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Mon Jul 18 2016 Rex Dieter - 0.3-1 -- 0.3 - -* Fri May 27 2016 Rex Dieter - 0.2-7 -- better/upstreamable x86_msse2.patch - -* Fri May 27 2016 Rex Dieter - 0.2-6 -- simpler/upstreamable no_undefined.patch (fdo#96244) - -* Wed May 25 2016 Than Ngo - 0.2-5 -- add url to upstream bug report - -* Tue May 24 2016 Than Ngo - 0.2-4 -- add support big endian - -* Mon May 16 2016 Rex Dieter - 0.2-3 -- ExclusiveArch primary archs, FTBFS on big endian arches (#1336466) - -* Mon May 16 2016 Rex Dieter - 0.2-2 -- link w/ --no-undefined -- fix x86 sse2 runtime detection - -* Thu May 12 2016 Rex Dieter - 0.2-1 -- webrtc-audio-processing-0.2 (#1335536) -- %%files: track ABI/API closer - -* Fri Feb 05 2016 Fedora Release Engineering - 0.1-11 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Fri Jun 19 2015 Fedora Release Engineering - 0.1-10 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Sat May 02 2015 Kalev Lember - 0.1-9 -- Rebuilt for GCC 5 C++11 ABI change - -* Mon Aug 18 2014 Fedora Release Engineering - 0.1-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Sun Jun 08 2014 Fedora Release Engineering - 0.1-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Tue Jan 28 2014 Kyle McMartin - 0.1-6 -- webrtc-fix-typedefs-on-other-arches.patch: fix ftbfs on non-x86/arm due to - a build #error in typedefs.h, however, the defines are not used anywhere in - the code. Fixes build on ppc{,64}, s390x, and aarch64. - -* Sun Aug 04 2013 Fedora Release Engineering - 0.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Thu Jul 11 2013 Debarshi Ray 0.1-4 -- Rebuilt to fix broken binary possibly caused by broken toolchain - -* Fri Feb 15 2013 Fedora Release Engineering - 0.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Tue Oct 9 2012 Dan Horák 0.1-2 -- set ExclusiveArch x86 and ARM for now - -* Fri Oct 5 2012 Christian Schaller 0.1-1 -- Initial Fedora spec.