diff --git a/src/audio/selector/tune/sof_selector_blobs.m b/src/audio/selector/tune/sof_selector_blobs.m index 1b370d4030de..b2f70069ee0b 100644 --- a/src/audio/selector/tune/sof_selector_blobs.m +++ b/src/audio/selector/tune/sof_selector_blobs.m @@ -23,6 +23,7 @@ function sof_selector_blobs() IPC4_CHANNEL_CONFIG_STEREO = 1; IPC4_CHANNEL_CONFIG_QUATRO = 5; IPC4_CHANNEL_CONFIG_5_POINT_1 = 8; + IPC4_CHANNEL_CONFIG_DUAL_MONO = 9; IPC4_CHANNEL_CONFIG_7_POINT_1 = 12; % Matrix for 1:1 pass-through @@ -39,6 +40,16 @@ function sof_selector_blobs() sel.coeffs(1, 2) = 0.7071; stereo_to_mono_pack8 = write_blob(sel, "downmix_stereo_to_mono"); + % Stereo to dual-mono downmix + sel.ch_count = [2 2]; + sel.ch_config = [IPC4_CHANNEL_CONFIG_STEREO IPC4_CHANNEL_CONFIG_DUAL_MONO]; + sel.coeffs = zeros(8,8); + sel.coeffs(1, 1) = 0.5; + sel.coeffs(1, 2) = 0.5; + sel.coeffs(2, 1) = 0.5; + sel.coeffs(2, 2) = 0.5; + stereo_to_doublemono_pack8 = write_blob(sel, "downmix_stereo_to_doublemono"); + % 5.1 to stereo downmix sel.ch_count = [6 2]; sel.ch_config = [IPC4_CHANNEL_CONFIG_5_POINT_1 IPC4_CHANNEL_CONFIG_STEREO]; @@ -189,7 +200,7 @@ function write_8bit_packed(pack8, blobname) blob8 = sof_selector_build_blob(pack8); str_config = "selector_config"; str_exported = "Exported with script sof_selector_blobs.m"; - str_howto = "cd tools/tune/selector; octave sof_selector_blobs.m"; + str_howto = "cd src/audio/selector/tune; octave sof_selector_blobs.m"; sof_tools = '../../../../tools'; sof_tplg = fullfile(sof_tools, 'topology'); sof_tplg_selector = fullfile(sof_tplg, 'topology2/include/components/micsel'); diff --git a/tools/topology/topology2/cavs-sdw.conf b/tools/topology/topology2/cavs-sdw.conf index 6932543c06e5..10768b3f9683 100644 --- a/tools/topology/topology2/cavs-sdw.conf +++ b/tools/topology/topology2/cavs-sdw.conf @@ -27,7 +27,7 @@ - + diff --git a/tools/topology/topology2/include/components/micsel/downmix_stereo_to_doublemono.conf b/tools/topology/topology2/include/components/micsel/downmix_stereo_to_doublemono.conf new file mode 100644 index 000000000000..102097d1d1ee --- /dev/null +++ b/tools/topology/topology2/include/components/micsel/downmix_stereo_to_doublemono.conf @@ -0,0 +1,26 @@ +# Exported with script sof_selector_blobs.m 21-May-2026 +# cd src/audio/selector/tune; octave sof_selector_blobs.m +Object.Base.data."selector_config" { + bytes " + 0x53,0x4f,0x46,0x34,0x00,0x00,0x00,0x00, + 0x84,0x00,0x00,0x00,0x01,0xd0,0x01,0x03, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00" +} diff --git a/tools/topology/topology2/include/pipelines/cavs/host-gateway-src-mfcc-capture.conf b/tools/topology/topology2/include/pipelines/cavs/host-gateway-src-micsel-mfcc-capture.conf similarity index 69% rename from tools/topology/topology2/include/pipelines/cavs/host-gateway-src-mfcc-capture.conf rename to tools/topology/topology2/include/pipelines/cavs/host-gateway-src-micsel-mfcc-capture.conf index 793f71b883ab..21b8170d393b 100644 --- a/tools/topology/topology2/include/pipelines/cavs/host-gateway-src-mfcc-capture.conf +++ b/tools/topology/topology2/include/pipelines/cavs/host-gateway-src-micsel-mfcc-capture.conf @@ -1,13 +1,13 @@ # -# SRC-MFCC capture pipeline +# SRC-Micsel-MFCC capture pipeline # # This class provides host pipeline for capture with MFCC audio features input. # All attributes defined herein are namespaced by alsatplg to -# "Object.Pipeline.host-gateway-src-mfcc-capture.N.attribute_name". +# "Object.Pipeline.host-gateway-src-micsel-mfcc-capture.N.attribute_name". # -# Usage: host-gateway-src-mfcc-capture pipeline object can be instantiated as: +# Usage: host-gateway-src-micsel-mfcc-capture pipeline object can be instantiated as: # -# Object.Pipeline.host-gateway-src-mfcc-capture."N" { +# Object.Pipeline.host-gateway-src-micsel-mfcc-capture."N" { # period 1000 # time_domain "timer" # } @@ -20,9 +20,10 @@ + -Class.Pipeline."host-gateway-src-mfcc-capture" { +Class.Pipeline."host-gateway-src-micsel-mfcc-capture" { @@ -32,8 +33,8 @@ Class.Pipeline."host-gateway-src-mfcc-capture" { ] # - # host-gateway-src-mfcc-capture objects instantiated within the same alsaconf - # node must have unique pipeline_id attribute + # host-gateway-src-micsel-mfcc-capture objects instantiated within the + # same alsaconf node must have unique pipeline_id attribute # unique "instance" } @@ -70,6 +71,27 @@ Class.Pipeline."host-gateway-src-mfcc-capture" { ] } + micsel."1" { + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_bit_depth 32 + in_valid_bit_depth 32 + in_rate 16000 + } + ] + Object.Base.output_audio_format [ + { + out_bit_depth 32 + out_valid_bit_depth 32 + out_rate 16000 + out_channels 2 + out_ch_cfg $CHANNEL_CONFIG_DUAL_MONO + } + ] + } + mfcc."1" { num_input_audio_formats 1 num_output_audio_formats 1 @@ -123,6 +145,10 @@ Class.Pipeline."host-gateway-src-mfcc-capture" { !route [ { source src.$index.1 + sink micsel.$index.1 + } + { + source micsel.$index.1 sink mfcc.$index.1 } ] diff --git a/tools/topology/topology2/platform/intel/sdw-dmic-audio-feature.conf b/tools/topology/topology2/platform/intel/sdw-dmic-audio-feature.conf index 87039b261597..a7baa1d283b7 100644 --- a/tools/topology/topology2/platform/intel/sdw-dmic-audio-feature.conf +++ b/tools/topology/topology2/platform/intel/sdw-dmic-audio-feature.conf @@ -6,7 +6,7 @@ Define { SDW_DMIC_AUDIO_FEATURE_CAPTURE_PIPELINE_ID 131 } -Object.Pipeline.host-gateway-src-mfcc-capture [ +Object.Pipeline.host-gateway-src-micsel-mfcc-capture [ { index $SDW_DMIC_AUDIO_FEATURE_CAPTURE_PIPELINE_ID @@ -15,6 +15,15 @@ Object.Pipeline.host-gateway-src-mfcc-capture [ pcm_id $SDW_DMIC_AUDIO_FEATURE_CAPTURE_PCM_ID } + Object.Widget.micsel.1 { + Object.Control { + bytes."1" { + name "$SDW_DMIC_AUDIO_FEATURE_CAPTURE_PCM_NAME Micsel bytes" + + } + } + } + Object.Widget.mfcc.1 { Object.Control { bytes."1" { diff --git a/tools/topology/topology2/platform/intel/sdw-jack-audio-feature.conf b/tools/topology/topology2/platform/intel/sdw-jack-audio-feature.conf index 9645199d6907..f50733c21c3a 100644 --- a/tools/topology/topology2/platform/intel/sdw-jack-audio-feature.conf +++ b/tools/topology/topology2/platform/intel/sdw-jack-audio-feature.conf @@ -6,7 +6,7 @@ Define { SDW_JACK_AUDIO_FEATURE_CAPTURE_PIPELINE_ID 130 } -Object.Pipeline.host-gateway-src-mfcc-capture [ +Object.Pipeline.host-gateway-src-micsel-mfcc-capture [ { index $SDW_JACK_AUDIO_FEATURE_CAPTURE_PIPELINE_ID @@ -15,6 +15,15 @@ Object.Pipeline.host-gateway-src-mfcc-capture [ pcm_id $SDW_JACK_AUDIO_FEATURE_CAPTURE_PCM_ID } + Object.Widget.micsel.1 { + Object.Control { + bytes."1" { + name "$SDW_JACK_AUDIO_FEATURE_CAPTURE_PCM_NAME Micsel bytes" + + } + } + } + Object.Widget.mfcc.1 { Object.Control { bytes."1" {