Skip to content

Commit 55bfb54

Browse files
committed
copier: add support for windows driver
Windows driver always set sample type of MSB for 24/32 format but SOF FW supports 24/32 LSB type for non-copier modules. So FW will convert the input MSB 24/32 to LSB 24/32 and process it and convert it back to MSB 24/32 when exiting gtw. Signed-off-by: Rander Wang <rander.wang@intel.com> Signed-off-by: Damian Nikodem <damian.nikodem@intel.com>
1 parent 20e7e31 commit 55bfb54

1 file changed

Lines changed: 35 additions & 4 deletions

File tree

src/audio/copier/copier_generic.c

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,41 @@ pcm_converter_func get_converter_func(const struct ipc4_audio_format *in_fmt,
274274
audio_stream_fmt_conversion(out_fmt->depth, out_fmt->valid_bit_depth, &out, &out_valid,
275275
out_fmt->s_type);
276276

277-
if (in_fmt->s_type == IPC4_TYPE_MSB_INTEGER && in_valid == SOF_IPC_FRAME_S24_4LE)
278-
in_valid = SOF_IPC_FRAME_S24_4LE_MSB;
279-
if (out_fmt->s_type == IPC4_TYPE_MSB_INTEGER && out_valid == SOF_IPC_FRAME_S24_4LE)
280-
out_valid = SOF_IPC_FRAME_S24_4LE_MSB;
277+
if (in_fmt->s_type == IPC4_TYPE_MSB_INTEGER && in_valid == SOF_IPC_FRAME_S24_4LE) {
278+
switch (type) {
279+
case ipc4_gtw_host:
280+
if (dir == ipc4_playback)
281+
in_valid = SOF_IPC_FRAME_S24_4LE_MSB;
282+
break;
283+
case ipc4_gtw_alh:
284+
case ipc4_gtw_link:
285+
case ipc4_gtw_ssp:
286+
case ipc4_gtw_dmic:
287+
if (dir == ipc4_capture)
288+
in_valid = SOF_IPC_FRAME_S24_4LE_MSB;
289+
break;
290+
default:
291+
break;
292+
}
293+
}
294+
295+
if (out_fmt->s_type == IPC4_TYPE_MSB_INTEGER && out_valid == SOF_IPC_FRAME_S24_4LE) {
296+
switch (type) {
297+
case ipc4_gtw_host:
298+
if (dir == ipc4_capture)
299+
out_valid = SOF_IPC_FRAME_S24_4LE_MSB;
300+
break;
301+
case ipc4_gtw_alh:
302+
case ipc4_gtw_link:
303+
case ipc4_gtw_ssp:
304+
case ipc4_gtw_dmic:
305+
if (dir == ipc4_playback)
306+
out_valid = SOF_IPC_FRAME_S24_4LE_MSB;
307+
break;
308+
default:
309+
break;
310+
}
311+
}
281312

282313
/* check container & sample size */
283314
if (use_no_container_convert_function(in, in_valid, out, out_valid))

0 commit comments

Comments
 (0)