|
| 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