Skip to content

Commit 383d17a

Browse files
RanderWanglgirdwood
authored andcommitted
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 8074714 commit 383d17a

1 file changed

Lines changed: 39 additions & 4 deletions

File tree

src/audio/copier/copier_generic.c

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,45 @@ 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+
/* use MSB sample type to select conversion function if the data is enter or exit dsp.
278+
* In playback case, host input and dai output and in capture case, host output and
279+
* dai input.
280+
*/
281+
if (in_fmt->s_type == IPC4_TYPE_MSB_INTEGER && in_valid == SOF_IPC_FRAME_S24_4LE) {
282+
switch (type) {
283+
case ipc4_gtw_host:
284+
if (dir == ipc4_playback)
285+
in_valid = SOF_IPC_FRAME_S24_4LE_MSB;
286+
break;
287+
case ipc4_gtw_alh:
288+
case ipc4_gtw_link:
289+
case ipc4_gtw_ssp:
290+
case ipc4_gtw_dmic:
291+
if (dir == ipc4_capture)
292+
in_valid = SOF_IPC_FRAME_S24_4LE_MSB;
293+
break;
294+
default:
295+
break;
296+
}
297+
}
298+
299+
if (out_fmt->s_type == IPC4_TYPE_MSB_INTEGER && out_valid == SOF_IPC_FRAME_S24_4LE) {
300+
switch (type) {
301+
case ipc4_gtw_host:
302+
if (dir == ipc4_capture)
303+
out_valid = SOF_IPC_FRAME_S24_4LE_MSB;
304+
break;
305+
case ipc4_gtw_alh:
306+
case ipc4_gtw_link:
307+
case ipc4_gtw_ssp:
308+
case ipc4_gtw_dmic:
309+
if (dir == ipc4_playback)
310+
out_valid = SOF_IPC_FRAME_S24_4LE_MSB;
311+
break;
312+
default:
313+
break;
314+
}
315+
}
281316

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

0 commit comments

Comments
 (0)