Skip to content

Commit c29c394

Browse files
committed
topology1: add waves codec and google ctc playback
Signed-off-by: Johny Lin <johnylin@google.com>
1 parent a895eb2 commit c29c394

File tree

3 files changed

+147
-1
lines changed

3 files changed

+147
-1
lines changed

tools/topology/topology1/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ set(TPLGS
100100
"sof-mt8188-mt6359\;sof-mt8188-waves\;-DWAVES=1"
101101
"sof-mt8196-mt6681\;sof-mt8196"
102102
"sof-mt8196-mt6681\;sof-mt8196-waves\;-DWAVES=1"
103+
"sof-mt8196-mt6681\;sof-mt8196-google-ctc\;-DGOOGLE_CTC=1"
104+
"sof-mt8196-mt6681\;sof-mt8196-waves-google-ctc\;-DWAVES=1\;-DGOOGLE_CTC=1"
103105

104106
"sof-acp-renoir\;sof-acp"
105107
"sof-rn-rt5682-rt1019\;sof-rn-rt5682-rt1019"

tools/topology/topology1/sof-mt8196-mt6681.m4

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ dnl time_domain, sched_comp)
3737
define(`ENDPOINT_NAME', `Speakers')
3838
# Low Latency playback pipeline 1 on PCM 16 using max 2 channels of s16le
3939
# Set 1000us deadline with priority 0 on core 0
40-
PIPELINE_PCM_ADD(ifdef(`WAVES', sof/pipe-waves-codec-playback.m4, sof/pipe-passthrough-playback.m4),
40+
PIPELINE_PCM_ADD(
41+
ifdef(`WAVES', ifdef(`GOOGLE_CTC', sof/pipe-waves-codec-ctc-playback.m4,
42+
sof/pipe-waves-codec-playback.m4),
43+
ifdef(`GOOGLE_CTC', sof/pipe-ctc-playback.m4,
44+
sof/pipe-passthrough-playback.m4)),
4145
1, 0, 2, s16le,
4246
1000, 0, 0,
4347
48000, 48000, 48000)
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
# Low Latency Waves codec and CTC Pipeline and PCM
2+
#
3+
# Pipeline Endpoints for connection are :-
4+
#
5+
# host PCM_P --> B0 --> Waves codec --> B1 --> CTC --> B2 --> sink DAI0
6+
7+
# Include topology builder
8+
include(`utils.m4')
9+
include(`buffer.m4')
10+
include(`pcm.m4')
11+
include(`dai.m4')
12+
include(`pipeline.m4')
13+
include(`bytecontrol.m4')
14+
include(`google_ctc_audio_processing.m4')
15+
16+
ifdef(`ENDPOINT_NAME',`',`fatal_error(`Pipe requires ENDPOINT_NAME to be defined: Speakers, Headphones, etc.')')
17+
18+
# Waves codec setup config
19+
define(`CA_SETUP_CONTROLBYTES',
20+
`` bytes "0x53,0x4f,0x46,0x00,'
21+
` 0x00,0x00,0x00,0x00,'
22+
` 0x0C,0x00,0x00,0x00,'
23+
` 0x00,0x10,0x00,0x03,'
24+
` 0x00,0x00,0x00,0x00,'
25+
` 0x00,0x00,0x00,0x00,'
26+
` 0x00,0x00,0x00,0x00,'
27+
` 0x00,0x00,0x00,0x00,'
28+
29+
` 0x00,0x00,0x00,0x00,'
30+
` 0x0c,0x00,0x00,0x00,'
31+
` 0x00,0x00,0x00,0x00"''
32+
)
33+
define(`CA_SETUP_CONTROLBYTES_MAX', 8192)
34+
define(`CA_SETUP_CONTROLBYTES_NAME', `Waves' `ENDPOINT_NAME' `Setup ')
35+
36+
define(`CA_SCHEDULE_CORE', 0)
37+
38+
DECLARE_SOF_RT_UUID("Waves codec", waves_codec_uuid, 0xd944281a, 0xafe9,
39+
0x4695, 0xa0, 0x43, 0xd7, 0xf6, 0x2b, 0x89, 0x53, 0x8e);
40+
define(`CA_UUID', waves_codec_uuid)
41+
42+
# Include codec_adapter after CA_UUID definition
43+
include(`codec_adapter.m4')
44+
45+
define(CA_SETUP_CONFIG, concat(`ca_setup_config_', PIPELINE_ID))
46+
define(CA_SETUP_CONTROLBYTES_NAME_PIPE, concat(CA_SETUP_CONTROLBYTES_NAME, PIPELINE_ID))
47+
48+
# Codec adapter setup config
49+
CONTROLBYTES_PRIV(CA_SETUP_CONFIG, CA_SETUP_CONTROLBYTES)
50+
51+
# Codec adapter Bytes control for setup config
52+
C_CONTROLBYTES(CA_SETUP_CONTROLBYTES_NAME_PIPE, PIPELINE_ID,
53+
CONTROLBYTES_OPS(bytes),
54+
CONTROLBYTES_EXTOPS(void, 258, 258),
55+
, , ,
56+
CONTROLBYTES_MAX(void, CA_SETUP_CONTROLBYTES_MAX),
57+
,
58+
CA_SETUP_CONFIG)
59+
60+
define(DEF_CTC_PRIV, concat(`ctc_priv_', PIPELINE_ID))
61+
define(DEF_CTC_BYTES, concat(`ctc_bytes_', PIPELINE_ID))
62+
include(`google_ctc_audio_processing_coef_default.m4')
63+
64+
# CTC Bytes control
65+
C_CONTROLBYTES(DEF_CTC_BYTES, PIPELINE_ID,
66+
CONTROLBYTES_OPS(bytes,
67+
258 binds the mixer control to bytes get/put handlers,
68+
258, 258),
69+
CONTROLBYTES_EXTOPS(258 binds the mixer control to bytes get/put handlers,
70+
258, 258),
71+
, , ,
72+
CONTROLBYTES_MAX(void, 4244),
73+
,
74+
DEF_CTC_PRIV)
75+
76+
#
77+
# Components and Buffers
78+
#
79+
80+
# For codec developers, please define the schedule core of codec adapter if it you would like it to
81+
# be different from SCHEDULE_CORE.
82+
ifdef(`CA_SCHEDULE_CORE',`', `define(`CA_SCHEDULE_CORE', `SCHEDULE_CORE')')
83+
84+
# Host "Playback with codec adapter" PCM
85+
# with DAI_PERIODS sink and 0 source periods
86+
W_PCM_PLAYBACK(PCM_ID, Passthrough Playback, DAI_PERIODS, 0, SCHEDULE_CORE)
87+
88+
W_CODEC_ADAPTER(0, PIPELINE_FORMAT, DAI_PERIODS, DAI_PERIODS, CA_SCHEDULE_CORE,
89+
LIST(` ', "CA_SETUP_CONTROLBYTES_NAME_PIPE"))
90+
91+
W_GOOGLE_CTC_AUDIO_PROCESSING(0, PIPELINE_FORMAT, DAI_PERIODS, DAI_PERIODS, SCHEDULE_CORE,
92+
LIST(` ', "DEF_CTC_BYTES"))
93+
94+
# Playback Buffers
95+
W_BUFFER(0, COMP_BUFFER_SIZE(DAI_PERIODS,
96+
COMP_SAMPLE_SIZE(PIPELINE_FORMAT), PIPELINE_CHANNELS, COMP_PERIOD_FRAMES(PCM_MAX_RATE, SCHEDULE_PERIOD)),
97+
PLATFORM_HOST_MEM_CAP, SCHEDULE_CORE)
98+
W_BUFFER(1, COMP_BUFFER_SIZE(DAI_PERIODS,
99+
COMP_SAMPLE_SIZE(DAI_FORMAT), PIPELINE_CHANNELS, COMP_PERIOD_FRAMES(PCM_MAX_RATE, SCHEDULE_PERIOD)),
100+
PLATFORM_DAI_MEM_CAP, SCHEDULE_CORE)
101+
W_BUFFER(2, COMP_BUFFER_SIZE(DAI_PERIODS,
102+
COMP_SAMPLE_SIZE(DAI_FORMAT), PIPELINE_CHANNELS, COMP_PERIOD_FRAMES(PCM_MAX_RATE, SCHEDULE_PERIOD)),
103+
PLATFORM_DAI_MEM_CAP, SCHEDULE_CORE)
104+
105+
#
106+
# Pipeline Graph
107+
#
108+
# host PCM_P --> B0 --> Waves codec --> B1 --> CTC --> B2 --> sink DAI0
109+
110+
P_GRAPH(pipe-codec-adapter-ctc-playback, PIPELINE_ID,
111+
LIST(` ',
112+
`dapm(N_BUFFER(0), N_PCMP(PCM_ID))',
113+
`dapm(N_CODEC_ADAPTER(0), N_BUFFER(0))',
114+
`dapm(N_BUFFER(1), N_CODEC_ADAPTER(0))',
115+
`dapm(N_GOOGLE_CTC_AUDIO_PROCESSING(0), N_BUFFER(1))',
116+
`dapm(N_BUFFER(2), N_GOOGLE_CTC_AUDIO_PROCESSING(0))',
117+
))
118+
119+
#
120+
# Pipeline Source and Sinks
121+
#
122+
indir(`define', concat(`PIPELINE_SOURCE_', PIPELINE_ID), N_BUFFER(2))
123+
indir(`define', concat(`PIPELINE_PCM_', PIPELINE_ID), Passthrough Playback PCM_ID)
124+
125+
#
126+
# PCM Configuration
127+
#
128+
129+
PCM_CAPABILITIES(Passthrough Playback PCM_ID, CAPABILITY_FORMAT_NAME(PIPELINE_FORMAT), PCM_MIN_RATE, PCM_MAX_RATE, 2, PIPELINE_CHANNELS, 2, 16, 192, 16384, 65536, 65536)
130+
131+
undefine(`DEF_CTC_PRIV')
132+
undefine(`DEF_CTC_BYTES')
133+
134+
undefine(`CA_SETUP_CONTROLBYTES_NAME_PIPE')
135+
undefine(`CA_SETUP_PARAMS')
136+
137+
undefine(`CA_SCHEDULE_CORE')
138+
undefine(`CA_SETUP_CONTROLBYTES_NAME')
139+
undefine(`CA_SETUP_CONTROLBYTES_MAX')
140+
undefine(`CA_SETUP_CONTROLBYTES')

0 commit comments

Comments
 (0)