Skip to content

Commit 21beadb

Browse files
committed
Tools: Topology: add speaker render pipelines with crossover filter
The two pipelines are for SDW_SPK_ENHANCED_PLAYBACK true and false. They add to the base pipeline classes the selector component to duplicate channels in a stream and IIR filter to perform the low-pass and high-pass responses. The FIR filter is added to optionally delay the woofer channels. All added processing is pass-through until enabled with SDW_AMP_XOVER_SELECTOR_PARAMS, SDW_AMP_XOVER_EQIIR_PARAMS, and SDW_AMP_XOVER_EQFIR_PARAMS. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
1 parent 11b32e6 commit 21beadb

2 files changed

Lines changed: 264 additions & 0 deletions

File tree

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
#
2+
# BE playback pipeline: mixout-gain-eqiir-eqfir-drc-micsel-eqiir-eqfir-alh-dai-copier.
3+
#
4+
# All attributes defined herein are namespaced
5+
# by alsatplg to "Object.Pipeline.mixout-gain-eqiir-eqfir-drc-micsel-eqiir-eqfir-alh-dai-copier-playback.N.attribute_name"
6+
#
7+
# Usage: mixout-gain-eqiir-eqfir-drc-micsel-eqiir-eqfir-alh-dai-copier-playback pipeline object can be instantiated as:
8+
#
9+
# Object.Pipeline.mixout-gain-eqiir-eqfir-drc-micsel-eqiir-eqfir-alh-dai-copier-playback."N" {
10+
# time_domain "timer"
11+
# }
12+
#
13+
# Where N is the unique pipeline ID within the same alsaconf node.
14+
#
15+
16+
<include/pipelines/cavs/mixout-gain-eqiir-eqfir-drc-alh-dai-copier-playback.conf>
17+
<include/components/micsel.conf>
18+
19+
Class.Pipeline."mixout-gain-eqiir-eqfir-drc-micsel-eqiir-eqfir-alh-dai-copier-playback" {
20+
21+
SubTreeCopy.baseclass {
22+
# this class extends the pipeline class.
23+
source "Class.Pipeline.mixout-gain-eqiir-eqfir-drc-alh-dai-copier-playback"
24+
25+
# target node is not defined which means that the new subtree will be copied to
26+
# the parent node containing the SubTreeCopy node i.e in this case the
27+
# Class.Pipeline.mixout-gain-eqiir-eqfir-drc-micsel-eqiir-eqfir-alh-dai-copier-playback {} node.
28+
29+
# default copy type is to extend the base class ie the widgets and routes
30+
# will be added to the existing list of widgets/routes in the base class
31+
32+
tree {
33+
Object.Widget {
34+
micsel."1" {
35+
num_input_audio_formats 1
36+
Object.Base.input_audio_format [
37+
{
38+
in_bit_depth 32
39+
in_valid_bit_depth 32
40+
}
41+
]
42+
num_output_audio_formats 1
43+
Object.Base.output_audio_format [
44+
{
45+
out_channels $SDW_AMP_NUM_CHANNELS
46+
out_bit_depth 32
47+
out_valid_bit_depth 32
48+
}
49+
]
50+
Object.Control {
51+
bytes."1" {
52+
IncludeByKey.SDW_AMP_XOVER_SELECTOR_PARAMS {
53+
"default" "include/components/micsel/passthrough.conf"
54+
"xover_selector_lr_to_llrr" "include/components/micsel/xover_selector_lr_to_llrr.conf"
55+
"xover_selector_lr_to_lrlr" "include/components/micsel/xover_selector_lr_to_lrlr.conf"
56+
}
57+
}
58+
}
59+
}
60+
61+
eqiir."2" {
62+
num_input_audio_formats 1
63+
Object.Base.input_audio_format [
64+
{
65+
in_channels $SDW_AMP_NUM_CHANNELS
66+
in_bit_depth 32
67+
in_valid_bit_depth 32
68+
}
69+
]
70+
num_output_audio_formats 1
71+
Object.Base.output_audio_format [
72+
{
73+
out_channels $SDW_AMP_NUM_CHANNELS
74+
out_bit_depth 32
75+
out_valid_bit_depth 32
76+
}
77+
]
78+
Object.Control.bytes."1" {
79+
IncludeByKey.SDW_AMP_XOVER_EQIIR_PARAMS {
80+
"default" "include/components/eqiir/passthrough.conf"
81+
"xover_lr4_2000hz_lhlh_48khz" "include/components/eqiir/xover_lr4_2000hz_lhlh_48khz.conf"
82+
"xover_lr4_2000hz_llhh_48khz" "include/components/eqiir/xover_lr4_2000hz_llhh_48khz.conf"
83+
"xover_lr4_2000hz_hhll_48khz" "include/components/eqiir/xover_lr4_2000hz_hhll_48khz.conf"
84+
}
85+
}
86+
}
87+
eqfir."2" {
88+
num_input_audio_formats 1
89+
Object.Base.input_audio_format [
90+
{
91+
in_channels $SDW_AMP_NUM_CHANNELS
92+
in_bit_depth 32
93+
in_valid_bit_depth 32
94+
}
95+
]
96+
num_output_audio_formats 1
97+
Object.Base.output_audio_format [
98+
{
99+
out_channels $SDW_AMP_NUM_CHANNELS
100+
out_bit_depth 32
101+
out_valid_bit_depth 32
102+
}
103+
]
104+
Object.Control.bytes."1" {
105+
IncludeByKey.SDW_AMP_XOVER_EQFIR_PARAMS {
106+
"default" "include/components/eqfir/passthrough.conf"
107+
"xover_dd00_100us_48khz.conf" "include/components/eqfir/xover_dd00_100us_48khz.conf"
108+
"xover_00dd_100us_48khz.conf" "include/components/eqfir/xover_00dd_100us_48khz.conf"
109+
}
110+
}
111+
}
112+
}
113+
114+
Object.Base {
115+
!route [
116+
{
117+
source drc.$index.1
118+
sink micsel.$index.1
119+
}
120+
{
121+
source micsel.$index.1
122+
sink eqiir.$index.2
123+
}
124+
{
125+
source eqiir.$index.2
126+
sink eqfir.$index.2
127+
}
128+
]
129+
}
130+
}
131+
}
132+
}
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
#
2+
# BE playback pipeline: mixout-gain-micsel-eqiir-eqfir-alh-dai-copier.
3+
#
4+
# All attributes defined herein are namespaced
5+
# by alsatplg to "Object.Pipeline.mixout-gain-micsel-eqiir-eqfir-alh-dai-copier-playback.N.attribute_name"
6+
#
7+
# Usage: mixout-gain-micsel-eqiir-eqfir-alh-dai-copier-playback pipeline object can be instantiated as:
8+
#
9+
# Object.Pipeline.mixout-gain-micsel-eqiir-eqfir-alh-dai-copier-playback."N" {
10+
# time_domain "timer"
11+
# }
12+
#
13+
# Where N is the unique pipeline ID within the same alsaconf node.
14+
#
15+
16+
<include/pipelines/cavs/mixout-gain-alh-dai-copier-playback.conf>
17+
<include/components/micsel.conf>
18+
19+
Class.Pipeline."mixout-gain-micsel-eqiir-eqfir-alh-dai-copier-playback" {
20+
21+
SubTreeCopy.baseclass {
22+
# this class extends the pipeline class.
23+
source "Class.Pipeline.mixout-gain-alh-dai-copier-playback"
24+
25+
# target node is not defined which means that the new subtree will be copied to
26+
# the parent node containing the SubTreeCopy node i.e in this case the
27+
# Class.Pipeline.mixout-gain-micsel-eqiir-eqfir-alh-dai-copier-playback {} node.
28+
29+
# default copy type is to extend the base class ie the widgets and routes
30+
# will be added to the existing list of widgets/routes in the base class
31+
32+
tree {
33+
Object.Widget {
34+
micsel."1" {
35+
num_input_audio_formats 1
36+
Object.Base.input_audio_format [
37+
{
38+
in_bit_depth 32
39+
in_valid_bit_depth 32
40+
}
41+
]
42+
num_output_audio_formats 1
43+
Object.Base.output_audio_format [
44+
{
45+
out_channels $SDW_AMP_NUM_CHANNELS
46+
out_bit_depth 32
47+
out_valid_bit_depth 32
48+
}
49+
]
50+
Object.Control {
51+
bytes."1" {
52+
IncludeByKey.SDW_AMP_XOVER_SELECTOR_PARAMS {
53+
"default" "include/components/micsel/passthrough.conf"
54+
"xover_selector_lr_to_llrr" "include/components/micsel/xover_selector_lr_to_llrr.conf"
55+
"xover_selector_lr_to_lrlr" "include/components/micsel/xover_selector_lr_to_lrlr.conf"
56+
}
57+
}
58+
}
59+
}
60+
61+
eqiir."2" {
62+
num_input_audio_formats 1
63+
Object.Base.input_audio_format [
64+
{
65+
in_channels $SDW_AMP_NUM_CHANNELS
66+
in_bit_depth 32
67+
in_valid_bit_depth 32
68+
}
69+
]
70+
num_output_audio_formats 1
71+
Object.Base.output_audio_format [
72+
{
73+
out_channels $SDW_AMP_NUM_CHANNELS
74+
out_bit_depth 32
75+
out_valid_bit_depth 32
76+
}
77+
]
78+
Object.Control.bytes."1" {
79+
IncludeByKey.SDW_AMP_XOVER_EQIIR_PARAMS {
80+
"default" "include/components/eqiir/passthrough.conf"
81+
"xover_lr4_2000hz_lhlh_48khz" "include/components/eqiir/xover_lr4_2000hz_lhlh_48khz.conf"
82+
"xover_lr4_2000hz_llhh_48khz" "include/components/eqiir/xover_lr4_2000hz_llhh_48khz.conf"
83+
"xover_lr4_2000hz_hhll_48khz" "include/components/eqiir/xover_lr4_2000hz_hhll_48khz.conf"
84+
}
85+
}
86+
}
87+
eqfir."2" {
88+
num_input_audio_formats 1
89+
Object.Base.input_audio_format [
90+
{
91+
in_channels $SDW_AMP_NUM_CHANNELS
92+
in_bit_depth 32
93+
in_valid_bit_depth 32
94+
}
95+
]
96+
num_output_audio_formats 1
97+
Object.Base.output_audio_format [
98+
{
99+
out_channels $SDW_AMP_NUM_CHANNELS
100+
out_bit_depth 32
101+
out_valid_bit_depth 32
102+
}
103+
]
104+
Object.Control.bytes."1" {
105+
IncludeByKey.SDW_AMP_XOVER_EQFIR_PARAMS {
106+
"default" "include/components/eqfir/passthrough.conf"
107+
"xover_dd00_100us_48khz.conf" "include/components/eqfir/xover_dd00_100us_48khz.conf"
108+
"xover_00dd_100us_48khz.conf" "include/components/eqfir/xover_00dd_100us_48khz.conf"
109+
}
110+
}
111+
}
112+
}
113+
114+
Object.Base {
115+
!route [
116+
{
117+
source gain.$index.1
118+
sink micsel.$index.1
119+
}
120+
{
121+
source micsel.$index.1
122+
sink eqiir.$index.2
123+
}
124+
{
125+
source eqiir.$index.2
126+
sink eqfir.$index.2
127+
}
128+
]
129+
}
130+
}
131+
}
132+
}

0 commit comments

Comments
 (0)