Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions algos/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
24 changes: 24 additions & 0 deletions data/modules.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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)"
Expand Down Expand Up @@ -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"
Expand Down
6 changes: 6 additions & 0 deletions images/vendors/cadence.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions images/vendors/dolby.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions images/vendors/dts.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions images/vendors/ffmpeg.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions images/vendors/google.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions images/vendors/realtek.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions images/vendors/sof.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions images/vendors/steam.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions images/vendors/webrtc.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
46 changes: 42 additions & 4 deletions scripts/generate_matrices.py
Original file line number Diff line number Diff line change
Expand Up @@ -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():
Expand All @@ -51,13 +65,34 @@ 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:
sub_name = f"{prefix}_{sub_info[0]}"
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():
Expand Down Expand Up @@ -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)")
Expand Down
Loading