From 467e553f86291b8f4efa9130bc7081c251a06165 Mon Sep 17 00:00:00 2001 From: Liam Girdwood Date: Sun, 20 Sep 2026 20:21:51 +0100 Subject: [PATCH] docs: algos: add provider icons as column 0 in algorithms table Add provider icons and names to Column 0 of the algorithms table in the Supplied Processing Algorithms page (algos/index.rst): - Add clean, vector SVG icons for all algorithm providers (SOF, FFmpeg, WebRTC, Google, Realtek, Cadence, Steam Audio, DTS, Dolby) under images/vendors/. - Add DTS Audio Processing (DTS:X) and Dolby Audio Processing (DAP) partner module entries to data/modules.yaml. - Update scripts/generate_matrices.py to define PROVIDER_MAP and write_provider_substitutions(), and render Column 0 as "Provider" with the provider icon and title matching the platform tables styling. - Update algos/index.rst introduction to highlight the expanded ecosystem of upstream, open-source, and commercial partner processing algorithms. Signed-off-by: Liam Girdwood --- algos/index.rst | 7 +++--- data/modules.yaml | 24 +++++++++++++++++++ images/vendors/cadence.svg | 6 +++++ images/vendors/dolby.svg | 6 +++++ images/vendors/dts.svg | 6 +++++ images/vendors/ffmpeg.svg | 6 +++++ images/vendors/google.svg | 6 +++++ images/vendors/realtek.svg | 9 +++++++ images/vendors/sof.svg | 8 +++++++ images/vendors/steam.svg | 6 +++++ images/vendors/webrtc.svg | 6 +++++ scripts/generate_matrices.py | 46 ++++++++++++++++++++++++++++++++---- 12 files changed, 129 insertions(+), 7 deletions(-) create mode 100644 images/vendors/cadence.svg create mode 100644 images/vendors/dolby.svg create mode 100644 images/vendors/dts.svg create mode 100644 images/vendors/ffmpeg.svg create mode 100644 images/vendors/google.svg create mode 100644 images/vendors/realtek.svg create mode 100644 images/vendors/sof.svg create mode 100644 images/vendors/steam.svg create mode 100644 images/vendors/webrtc.svg diff --git a/algos/index.rst b/algos/index.rst index db132e9e..7c7fc278 100644 --- a/algos/index.rst +++ b/algos/index.rst @@ -9,9 +9,10 @@ Supplied Processing Algorithms SOF provides an extensive ecosystem of permissively-licensed and royalty-free audio processing algorithms that can be used alongside proprietary processing components to build production audio pipelines. -In addition to upstream native algorithms, license-compatible open-source algorithms from external projects -(such as FFmpeg, WebRTC, Valve Steam Audio, CMSIS-DSP, and vendor DSP libraries) can be compiled as dynamically -loadable modules (e.g. Zephyr LLEXT / ELF modules) and linked at runtime into active audio pipelines. This +In addition to upstream native algorithms, open-source and partner processing algorithms from +ecosystem providers (including FFmpeg, WebRTC, Valve Steam Audio, DTS, Dolby, Google, Realtek, +Cadence, CMSIS-DSP, and vendor DSP libraries) can be compiled as dynamically loadable modules +(e.g. Zephyr LLEXT / ELF modules) or integrated into active audio pipelines. This modular architecture allows open-source, vendor, and proprietary intellectual property (IP) components to be safely integrated into the same pipeline graph without license contamination or monolithic recompilation. diff --git a/data/modules.yaml b/data/modules.yaml index a64344b7..dc26b73d 100644 --- a/data/modules.yaml +++ b/data/modules.yaml @@ -277,6 +277,18 @@ modules: - "Smooth per-frame exponential slew gain limiter (0.05 dB/frame) eliminating clicks and pops" - "Acoustic laboratory HATS calibration, rolling 7-day CSD tracking, and runtime control via sof-ctl" + - id: dolby_processing + name: "Dolby Audio Processing (DAP)" + source: "Dolby" + category: "Audio Enhancement" + status: "Vendor Extension" + description: "Integrated audio post-processing suite delivering volume leveling, dialog enhancement, and virtual surround sound." + simd: ["HiFi 3", "HiFi 4", "HiFi 5", "Scalar C"] + key_features: + - "Intelligent volume leveling and dynamic range management" + - "Dialog enhancer and surround sound virtualizer" + - "Custom speaker acoustic tuning and distortion limiting" + # --- Voice, Telephony & Speech --- - id: tdfb name: "Beamformer (TDFB)" @@ -535,6 +547,18 @@ modules: - "Convolution-based HRTF binaural rendering" - "Dynamic listener and source orientation" + - id: dts_processing + name: "DTS Audio Processing / DTS:X" + source: "DTS" + category: "Spatial Audio" + status: "Vendor Extension" + description: "Multichannel spatial audio rendering, virtual surround sound, and speaker/headphone acoustic optimization." + simd: ["HiFi 3", "HiFi 4", "HiFi 5", "Scalar C"] + key_features: + - "Multichannel immersive 3D surround sound virtualization" + - "Speaker and headphone acoustic correction and tuning" + - "Dynamic dialog clarity enhancement and bass management" + # --- Diagnostics & Tools --- - id: probes_telemetry name: "Real-Time Probes & Telemetry" diff --git a/images/vendors/cadence.svg b/images/vendors/cadence.svg new file mode 100644 index 00000000..7733472b --- /dev/null +++ b/images/vendors/cadence.svg @@ -0,0 +1,6 @@ + + + + + cadence + diff --git a/images/vendors/dolby.svg b/images/vendors/dolby.svg new file mode 100644 index 00000000..d1b94ba9 --- /dev/null +++ b/images/vendors/dolby.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/vendors/dts.svg b/images/vendors/dts.svg new file mode 100644 index 00000000..d6b4a2c6 --- /dev/null +++ b/images/vendors/dts.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/vendors/ffmpeg.svg b/images/vendors/ffmpeg.svg new file mode 100644 index 00000000..973fbbf6 --- /dev/null +++ b/images/vendors/ffmpeg.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/vendors/google.svg b/images/vendors/google.svg new file mode 100644 index 00000000..780e1800 --- /dev/null +++ b/images/vendors/google.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/vendors/realtek.svg b/images/vendors/realtek.svg new file mode 100644 index 00000000..657ca1d2 --- /dev/null +++ b/images/vendors/realtek.svg @@ -0,0 +1,9 @@ + + + + + + + + REALTEK + diff --git a/images/vendors/sof.svg b/images/vendors/sof.svg new file mode 100644 index 00000000..224657c6 --- /dev/null +++ b/images/vendors/sof.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/images/vendors/steam.svg b/images/vendors/steam.svg new file mode 100644 index 00000000..741be91d --- /dev/null +++ b/images/vendors/steam.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/images/vendors/webrtc.svg b/images/vendors/webrtc.svg new file mode 100644 index 00000000..ed70c1fe --- /dev/null +++ b/images/vendors/webrtc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/scripts/generate_matrices.py b/scripts/generate_matrices.py index 6396cb55..284c7013 100644 --- a/scripts/generate_matrices.py +++ b/scripts/generate_matrices.py @@ -41,6 +41,20 @@ def load_yaml(file_path): "Emulation": ("qemu", "images/vendors/qemu.svg"), } +PROVIDER_MAP = { + "SOF": ("sof", "images/vendors/sof.svg"), + "FFmpeg": ("ffmpeg", "images/vendors/ffmpeg.svg"), + "WebRTC": ("webrtc", "images/vendors/webrtc.svg"), + "Google": ("google", "images/vendors/google.svg"), + "Realtek": ("realtek", "images/vendors/realtek.svg"), + "Cadence": ("cadence", "images/vendors/cadence.svg"), + "SOF / Cadence": ("cadence", "images/vendors/cadence.svg"), + "Steam Audio": ("steam", "images/vendors/steam.svg"), + "DTS": ("dts", "images/vendors/dts.svg"), + "Dolby": ("dolby", "images/vendors/dolby.svg"), + "Intel": ("intel", "images/vendors/intel.svg"), +} + def write_vendor_substitutions(f, prefix="icon"): """Write image substitutions for vendor icons into the RST file.""" for vendor, (vendor_key, icon_rel_path) in VENDOR_MAP.items(): @@ -51,6 +65,20 @@ def write_vendor_substitutions(f, prefix="icon"): f.write(" :align: middle\n") f.write(" :class: vendor-icon\n\n") +def write_provider_substitutions(f, prefix="icon_prov"): + """Write image substitutions for algorithm provider icons into the RST file.""" + seen_keys = set() + for provider, (prov_key, icon_rel_path) in PROVIDER_MAP.items(): + if prov_key in seen_keys: + continue + seen_keys.add(prov_key) + sub_name = f"{prefix}_{prov_key}" + f.write(f".. |{sub_name}| image:: /{icon_rel_path}\n") + f.write(" :width: 18px\n") + f.write(" :height: 18px\n") + f.write(" :align: middle\n") + f.write(" :class: vendor-icon\n\n") + def get_vendor_cell(vendor_raw, prefix="icon"): sub_info = VENDOR_MAP.get(vendor_raw) if sub_info: @@ -58,6 +86,13 @@ def get_vendor_cell(vendor_raw, prefix="icon"): return f"|{sub_name}| {vendor_raw}" return vendor_raw +def get_provider_cell(provider_raw, prefix="icon_prov"): + sub_info = PROVIDER_MAP.get(provider_raw) + if sub_info: + sub_name = f"{prefix}_{sub_info[0]}" + return f"|{sub_name}| {provider_raw}" + return provider_raw + def generate_platforms_table(): platforms_file = DATA_DIR / "platforms.yaml" if not platforms_file.exists(): @@ -141,19 +176,22 @@ def generate_modules_table(): out_file.parent.mkdir(parents=True, exist_ok=True) with open(out_file, "w", encoding="utf-8") as f: + write_provider_substitutions(f, prefix="icon_prov") + f.write(".. csv-table:: SOF Supported Audio Processing Modules & Algorithms\n") - f.write(' :header: "Algorithm", "Source", "Category", "SIMD", "Key Capabilities", "Status"\n') - f.write(" :widths: 17, 8, 14, 21, 28, 12\n\n") + f.write(' :header: "Provider", "Algorithm", "Category", "SIMD", "Key Capabilities", "Status"\n') + f.write(" :widths: 14, 18, 14, 18, 26, 10\n\n") for m in modules: - name = m.get("name", "") source = m.get("source", "SOF") + prov_cell = get_provider_cell(source, prefix="icon_prov") + name = m.get("name", "") cat = m.get("category", "") simd = ", ".join(m.get("simd", [])) if isinstance(m.get("simd"), list) else m.get("simd", "") feats = "; ".join(m.get("key_features", [])) status = m.get("status", "Upstream") - row = f' "{name}", "{source}", "{cat}", "{simd}", "{feats}", "{status}"\n' + row = f' "{prov_cell}", "{name}", "{cat}", "{simd}", "{feats}", "{status}"\n' f.write(row) print(f"Generated {out_file} ({len(modules)} modules)")