Skip to content

topology2: cavs-sdw: add compressed playback pipeline with phase vocoder#10986

Draft
singalsu wants to merge 2 commits into
thesofproject:mainfrom
singalsu:tplg_sdw_add_phase_vocoder
Draft

topology2: cavs-sdw: add compressed playback pipeline with phase vocoder#10986
singalsu wants to merge 2 commits into
thesofproject:mainfrom
singalsu:tplg_sdw_add_phase_vocoder

Conversation

@singalsu

Copy link
Copy Markdown
Collaborator

Example of topology with both COMPRESSED=true,COMPRESSED_SPEED=true enabled

sof-mtl-rt713-l0-rt1316-l12-compr-speed

singalsu added 2 commits July 10, 2026 12:11
Add a new compr-speed-playback FE pipeline class for cavs-sdw that runs
a decoder followed by the phase_vocoder module before the usual SRC,
gain and mixin stages. The decoder and phase_vocoder widgets are placed
on the DP scheduler so they can consume variable amounts of input per
output period, which is what enables time-scaling playback of a
compressed stream.

The pipeline is instantiated from a new platform/intel/compr-speed.conf
for both the Jack (COMPRESSED_SPEED_1) and Speaker (COMPRESSED_SPEED_2)
paths, with defaults added to compr-default.conf (PCM IDs 60/62,
pipeline IDs 95/96, PCM names "Compress Speed Playback[ 2]"). cavs-sdw
gains matching COMPR_SPEED_* defines, an IncludeByKey.COMPRESSED_SPEED
hook, and propagation of COMPRESSED_SPEED_1/2 through the Jack and
amp-links branches so the pipeline is only built when it is requested.

Two development targets, sof-arl-cs42l43-l0-compr-speed and
sof-mtl-rt713-l0-rt1316-l12-compr-speed, are added to tplg-targets.cmake
so the new topology can be built and exercised.

Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
With this change it is possible to run the Phase Vocoder without
need for DP-DP bind feature. When scheduled normally the render
speeds over 1 must be disabled since it would cause immediate
xrun and playback fail.

Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds an example topology2 configuration for cAVS SoundWire platforms that enables a compressed playback path with phase vocoder “speed” control (via COMPRESSED=true + COMPRESSED_SPEED=true), intended to demonstrate the combined feature set.

Changes:

  • Introduces a new compr-speed-playback FE pipeline class that inserts a phase vocoder between decoder and post-processing.
  • Adds platform/topology wiring and defaults to instantiate one or two compressed-speed playback PCMs (jack/speaker) under feature keys.
  • Updates phase vocoder control options to disable >1.0x speeds and adds new PV-specific format include files.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tools/topology/topology2/platform/intel/compr-speed.conf Adds platform objects/routes for compressed-speed playback pipelines (1+2 instances).
tools/topology/topology2/platform/intel/compr-default.conf Adds default COMPRESSED_SPEED* feature flags and IDs/names.
tools/topology/topology2/include/pipelines/cavs/compr-speed-playback.conf New pipeline class inserting phase vocoder into compressed playback chain.
tools/topology/topology2/include/formats/compr_output_audio_formats_pv.conf Adds PV output format definitions with explicit obs sizing.
tools/topology/topology2/include/formats/compr_input_audio_formats_pv.conf Adds PV input format definitions with explicit ibs sizing.
tools/topology/topology2/include/components/phase_vocoder.conf Disables enum speeds > 1.0x and documents DP/DP limitation rationale.
tools/topology/topology2/development/tplg-targets.cmake Adds new development topology targets enabling COMPRESSED_SPEED=true.
tools/topology/topology2/cavs-sdw.conf Wires in the new pipeline include + adds COMPRESSED_SPEED include hook and instance toggles.

Comment on lines +23 to +27
<include/components/gain.conf>
<include/components/decoder.conf>
<include/components/phase_vocoder.conf>
<include/components/micsel.conf>

Comment on lines +49 to +53
host-copier."1" {
type "aif_in"
node_type $HDA_HOST_OUTPUT_CLASS
num_output_pins 1
}
Comment on lines +59 to +64
phase_vocoder."1" {
# Commented out to avoid DP-DP bind limitation. This limits the
# Phase Vocodeer module to support only slow playback 0.5 - 1.0x
# with no speed up.
# scheduler_domain "DP"
}
Comment on lines +1 to +4
# Phase vocoder input formats: mono + stereo, all rates,
# 8/16/24/32-bit. ibs = frames * channels * bytes_per_sample
# (480 frames per DP period, matching current stereo values).
num_input_audio_formats 40
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.

2 participants