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
3 changes: 3 additions & 0 deletions app/overlays/mt8196/waves_ctc_overlay.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
CONFIG_COMP_MODULE_ADAPTER=y
CONFIG_WAVES_CODEC=y
CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING=y
2 changes: 2 additions & 0 deletions tools/topology/topology1/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ set(TPLGS
"sof-mt8196-mt6681\;sof-mt8196"
"sof-mt8196-mt6681\;sof-mt8196-waves\;-DWAVES=1"
"sof-mt8196-mt6681\;sof-mt8196-dts\;-DDTS=`DTS'"
"sof-mt8196-mt6681\;sof-mt8196-google-ctc\;-DGOOGLE_CTC=1"
"sof-mt8196-mt6681\;sof-mt8196-waves-google-ctc\;-DWAVES=1\;-DGOOGLE_CTC=1"

"sof-acp-renoir\;sof-acp"
"sof-rn-rt5682-rt1019\;sof-rn-rt5682-rt1019"
Expand Down
3 changes: 3 additions & 0 deletions tools/topology/topology1/m4/google_ctc_audio_processing.m4
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ define(`W_GOOGLE_CTC_AUDIO_PROCESSING',
` bytes ['
$6
` ]'
` mixer ['
$7
` ]'
`}')

divert(0)dnl
7 changes: 6 additions & 1 deletion tools/topology/topology1/sof-mt8196-mt6681.m4
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,12 @@ dnl time_domain, sched_comp)
define(`ENDPOINT_NAME', `Speakers')
# Low Latency playback pipeline 1 on PCM 16 using max 2 channels of s16le
# Set 1000us deadline with priority 0 on core 0
PIPELINE_PCM_ADD(ifdef(`DTS', sof/pipe-eq-iir-dts-codec-playback.m4, ifdef(`WAVES', sof/pipe-waves-codec-playback.m4, sof/pipe-passthrough-playback.m4)),
PIPELINE_PCM_ADD(
ifdef(`DTS', sof/pipe-eq-iir-dts-codec-playback.m4,
ifdef(`WAVES', ifdef(`GOOGLE_CTC', sof/pipe-waves-codec-ctc-playback.m4,
sof/pipe-waves-codec-playback.m4),
ifdef(`GOOGLE_CTC', sof/pipe-ctc-playback.m4,
sof/pipe-passthrough-playback.m4))),
1, 0, 2, s16le,
1000, 0, 0,
48000, 48000, 48000)
Expand Down
17 changes: 16 additions & 1 deletion tools/topology/topology1/sof/pipe-ctc-playback.m4
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ include(`buffer.m4')
include(`pcm.m4')
include(`dai.m4')
include(`bytecontrol.m4')
include(`mixercontrol.m4')
include(`pipeline.m4')
include(`google_ctc_audio_processing.m4')

Expand Down Expand Up @@ -37,12 +38,25 @@ C_CONTROLBYTES(DEF_CTC_BYTES, PIPELINE_ID,
,
DEF_CTC_PRIV)

define(DEF_CTC_SWITCH, concat(`ctc_enable_', PIPELINE_ID))
define(`CONTROL_NAME', `DEF_CTC_SWITCH')
C_CONTROLMIXER(DEF_CTC_SWITCH, PIPELINE_ID,
CONTROLMIXER_OPS(volsw, 259 binds the mixer control to switch get/put handlers, 259, 259),
CONTROLMIXER_MAX(max 1 indicates switch type control, 1),
false,
,
Channel register and shift for Front Center,
LIST(` ', KCONTROL_CHANNEL(FC, 3, 0)),
"1")
undefine(`CONTROL_NAME')

#
# Components and Buffers
#

W_GOOGLE_CTC_AUDIO_PROCESSING(0, PIPELINE_FORMAT, 2, 2, SCHEDULE_CORE,
LIST(` ', "DEF_CTC_BYTES"))
LIST(` ', "DEF_CTC_BYTES"),
LIST(` ', "DEF_CTC_SWITCH"))

# Playback Buffers
W_BUFFER(0, COMP_BUFFER_SIZE(2,
Expand Down Expand Up @@ -77,3 +91,4 @@ PCM_CAPABILITIES(CTC Processing Playback PCM_ID, CAPABILITY_FORMAT_NAME(PIPELINE

undefine(`DEF_CTC_PRIV')
undefine(`DEF_CTC_BYTES')
undefine(`DEF_CTC_SWITCH')
155 changes: 155 additions & 0 deletions tools/topology/topology1/sof/pipe-waves-codec-ctc-playback.m4
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
# Low Latency Waves codec and CTC Pipeline and PCM
#
# Pipeline Endpoints for connection are :-
#
# host PCM_P --> B0 --> Waves codec --> B1 --> CTC --> B2 --> sink DAI0

# Include topology builder
include(`utils.m4')
include(`buffer.m4')
include(`pcm.m4')
include(`dai.m4')
include(`pipeline.m4')
include(`bytecontrol.m4')
include(`mixercontrol.m4')
include(`google_ctc_audio_processing.m4')

ifdef(`ENDPOINT_NAME',`',`fatal_error(`Pipe requires ENDPOINT_NAME to be defined: Speakers, Headphones, etc.')')

# Waves codec setup config
define(`CA_SETUP_CONTROLBYTES',
`` bytes "0x53,0x4f,0x46,0x00,'
` 0x00,0x00,0x00,0x00,'
` 0x0C,0x00,0x00,0x00,'
` 0x00,0x10,0x00,0x03,'
` 0x00,0x00,0x00,0x00,'
` 0x00,0x00,0x00,0x00,'
` 0x00,0x00,0x00,0x00,'
` 0x00,0x00,0x00,0x00,'

` 0x00,0x00,0x00,0x00,'
` 0x0c,0x00,0x00,0x00,'
` 0x00,0x00,0x00,0x00"''
)
define(`CA_SETUP_CONTROLBYTES_MAX', 8192)
define(`CA_SETUP_CONTROLBYTES_NAME', `Waves' `ENDPOINT_NAME' `Setup ')

define(`CA_SCHEDULE_CORE', 0)

DECLARE_SOF_RT_UUID("Waves codec", waves_codec_uuid, 0xd944281a, 0xafe9,
0x4695, 0xa0, 0x43, 0xd7, 0xf6, 0x2b, 0x89, 0x53, 0x8e);
define(`CA_UUID', waves_codec_uuid)

# Include codec_adapter after CA_UUID definition
include(`codec_adapter.m4')

define(CA_SETUP_CONFIG, concat(`ca_setup_config_', PIPELINE_ID))
define(CA_SETUP_CONTROLBYTES_NAME_PIPE, concat(CA_SETUP_CONTROLBYTES_NAME, PIPELINE_ID))

# Codec adapter setup config
CONTROLBYTES_PRIV(CA_SETUP_CONFIG, CA_SETUP_CONTROLBYTES)

# Codec adapter Bytes control for setup config
C_CONTROLBYTES(CA_SETUP_CONTROLBYTES_NAME_PIPE, PIPELINE_ID,
CONTROLBYTES_OPS(bytes),
CONTROLBYTES_EXTOPS(void, 258, 258),
, , ,
CONTROLBYTES_MAX(void, CA_SETUP_CONTROLBYTES_MAX),
,
CA_SETUP_CONFIG)

define(DEF_CTC_PRIV, concat(`ctc_priv_', PIPELINE_ID))
define(DEF_CTC_BYTES, concat(`ctc_bytes_', PIPELINE_ID))
include(`google_ctc_audio_processing_coef_default.m4')

# CTC Bytes control
C_CONTROLBYTES(DEF_CTC_BYTES, PIPELINE_ID,
CONTROLBYTES_OPS(bytes,
258 binds the mixer control to bytes get/put handlers,
258, 258),
CONTROLBYTES_EXTOPS(258 binds the mixer control to bytes get/put handlers,
258, 258),
, , ,
CONTROLBYTES_MAX(void, 4244),
,
DEF_CTC_PRIV)

define(DEF_CTC_SWITCH, concat(`ctc_enable_', PIPELINE_ID))
define(`CONTROL_NAME', `DEF_CTC_SWITCH')
C_CONTROLMIXER(DEF_CTC_SWITCH, PIPELINE_ID,
CONTROLMIXER_OPS(volsw, 259 binds the mixer control to switch get/put handlers, 259, 259),
CONTROLMIXER_MAX(max 1 indicates switch type control, 1),
false,
,
Channel register and shift for Front Center,
LIST(` ', KCONTROL_CHANNEL(FC, 3, 0)),
"1")
undefine(`CONTROL_NAME')

#
# Components and Buffers
#

# For codec developers, please define the schedule core of codec adapter if it you would like it to
# be different from SCHEDULE_CORE.
ifdef(`CA_SCHEDULE_CORE',`', `define(`CA_SCHEDULE_CORE', `SCHEDULE_CORE')')

# Host "Playback with codec adapter" PCM
# with DAI_PERIODS sink and 0 source periods
W_PCM_PLAYBACK(PCM_ID, Passthrough Playback, DAI_PERIODS, 0, SCHEDULE_CORE)

W_CODEC_ADAPTER(0, PIPELINE_FORMAT, DAI_PERIODS, DAI_PERIODS, CA_SCHEDULE_CORE,
LIST(` ', "CA_SETUP_CONTROLBYTES_NAME_PIPE"))

W_GOOGLE_CTC_AUDIO_PROCESSING(0, PIPELINE_FORMAT, DAI_PERIODS, DAI_PERIODS, SCHEDULE_CORE,
LIST(` ', "DEF_CTC_BYTES"),
LIST(` ', "DEF_CTC_SWITCH"))

# Playback Buffers
W_BUFFER(0, COMP_BUFFER_SIZE(DAI_PERIODS,
COMP_SAMPLE_SIZE(PIPELINE_FORMAT), PIPELINE_CHANNELS, COMP_PERIOD_FRAMES(PCM_MAX_RATE, SCHEDULE_PERIOD)),
PLATFORM_HOST_MEM_CAP, SCHEDULE_CORE)
W_BUFFER(1, COMP_BUFFER_SIZE(DAI_PERIODS,
COMP_SAMPLE_SIZE(DAI_FORMAT), PIPELINE_CHANNELS, COMP_PERIOD_FRAMES(PCM_MAX_RATE, SCHEDULE_PERIOD)),
PLATFORM_DAI_MEM_CAP, SCHEDULE_CORE)
W_BUFFER(2, COMP_BUFFER_SIZE(DAI_PERIODS,
COMP_SAMPLE_SIZE(DAI_FORMAT), PIPELINE_CHANNELS, COMP_PERIOD_FRAMES(PCM_MAX_RATE, SCHEDULE_PERIOD)),
PLATFORM_DAI_MEM_CAP, SCHEDULE_CORE)

#
# Pipeline Graph
#
# host PCM_P --> B0 --> Waves codec --> B1 --> CTC --> B2 --> sink DAI0

P_GRAPH(pipe-codec-adapter-ctc-playback, PIPELINE_ID,
LIST(` ',
`dapm(N_BUFFER(0), N_PCMP(PCM_ID))',
`dapm(N_CODEC_ADAPTER(0), N_BUFFER(0))',
`dapm(N_BUFFER(1), N_CODEC_ADAPTER(0))',
`dapm(N_GOOGLE_CTC_AUDIO_PROCESSING(0), N_BUFFER(1))',
`dapm(N_BUFFER(2), N_GOOGLE_CTC_AUDIO_PROCESSING(0))',
))

#
# Pipeline Source and Sinks
#
indir(`define', concat(`PIPELINE_SOURCE_', PIPELINE_ID), N_BUFFER(2))
indir(`define', concat(`PIPELINE_PCM_', PIPELINE_ID), Passthrough Playback PCM_ID)

#
# PCM Configuration
#

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)

undefine(`DEF_CTC_PRIV')
undefine(`DEF_CTC_BYTES')
undefine(`DEF_CTC_SWITCH')

undefine(`CA_SETUP_CONTROLBYTES_NAME_PIPE')
undefine(`CA_SETUP_PARAMS')

undefine(`CA_SCHEDULE_CORE')
undefine(`CA_SETUP_CONTROLBYTES_NAME')
undefine(`CA_SETUP_CONTROLBYTES_MAX')
undefine(`CA_SETUP_CONTROLBYTES')
Loading