Skip to content

Commit 9c98cfd

Browse files
serhiy-katsyuba-intelranj063
authored andcommitted
ipc4: Fix Host gtw conversion to/from 24_4LE audio
Fixes audio format conversions on Host gateway between 16/16 and 24/32 (and vice versa) and between 32/32 and 24/32 (and vice versa). Signed-off-by: Serhiy Katsyuba <serhiy.katsyuba@intel.com>
1 parent 43b08c6 commit 9c98cfd

2 files changed

Lines changed: 48 additions & 8 deletions

File tree

src/audio/pcm_converter/pcm_converter_generic.c

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -854,24 +854,44 @@ const struct pcm_func_vc_map pcm_func_vc_map[] = {
854854
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
855855
ipc4_gtw_host, ipc4_capture, pcm_convert_s24_to_s32 },
856856
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE,
857-
ipc4_gtw_all, ipc4_bidirection, pcm_convert_s24_to_s32},
857+
ipc4_gtw_all & ~ipc4_gtw_host, ipc4_bidirection, pcm_convert_s24_to_s32},
858+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE,
859+
ipc4_gtw_host, ipc4_playback, audio_stream_copy},
860+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE,
861+
ipc4_gtw_host, ipc4_capture, pcm_convert_s24_to_s32},
858862
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
859-
ipc4_gtw_all & ~(ipc4_gtw_link | ipc4_gtw_alh), ipc4_bidirection,
863+
ipc4_gtw_all & ~(ipc4_gtw_link | ipc4_gtw_alh | ipc4_gtw_host), ipc4_bidirection,
860864
pcm_convert_s32_to_s24 },
861865
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
862866
ipc4_gtw_link | ipc4_gtw_alh, ipc4_playback, pcm_convert_s32_to_s24_be },
863867
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
864868
ipc4_gtw_link | ipc4_gtw_alh, ipc4_capture, pcm_convert_s32_to_s24 },
869+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
870+
ipc4_gtw_host, ipc4_playback, pcm_convert_s32_to_s24 },
871+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
872+
ipc4_gtw_host, ipc4_capture, pcm_convert_s32_to_s24_be },
865873
#endif
866874
#if CONFIG_PCM_CONVERTER_FORMAT_S24LE && CONFIG_PCM_CONVERTER_FORMAT_S16LE
867875
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S32_LE,
868-
SOF_IPC_FRAME_S24_4LE, ipc4_gtw_all & ~(ipc4_gtw_link | ipc4_gtw_alh),
876+
SOF_IPC_FRAME_S24_4LE,
877+
ipc4_gtw_all & ~(ipc4_gtw_link | ipc4_gtw_alh | ipc4_gtw_host),
869878
ipc4_bidirection, pcm_convert_s16_to_s24 },
870879
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S32_LE,
871880
SOF_IPC_FRAME_S24_4LE, ipc4_gtw_link | ipc4_gtw_alh, ipc4_playback,
872881
pcm_convert_s16_to_s32},
882+
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S32_LE,
883+
SOF_IPC_FRAME_S24_4LE, ipc4_gtw_host,
884+
ipc4_playback, pcm_convert_s16_to_s24 },
885+
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S32_LE,
886+
SOF_IPC_FRAME_S24_4LE, ipc4_gtw_host,
887+
ipc4_capture, pcm_convert_s16_to_s32 },
888+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S16_LE,
889+
SOF_IPC_FRAME_S16_LE, ipc4_gtw_all & ~ipc4_gtw_host,
890+
ipc4_bidirection, pcm_convert_s24_to_s16 },
891+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S16_LE,
892+
SOF_IPC_FRAME_S16_LE, ipc4_gtw_host, ipc4_playback, pcm_convert_s32_to_s16 },
873893
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S16_LE,
874-
SOF_IPC_FRAME_S16_LE, ipc4_gtw_all, ipc4_bidirection, pcm_convert_s24_to_s16 },
894+
SOF_IPC_FRAME_S16_LE, ipc4_gtw_host, ipc4_capture, pcm_convert_s24_to_s16 },
875895
#endif
876896
#if CONFIG_PCM_CONVERTER_FORMAT_S24_C24_AND_S24_C32
877897
{ SOF_IPC_FRAME_S24_3LE, SOF_IPC_FRAME_S24_3LE, SOF_IPC_FRAME_S32_LE,

src/audio/pcm_converter/pcm_converter_hifi3.c

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,24 +1248,44 @@ const struct pcm_func_vc_map pcm_func_vc_map[] = {
12481248
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
12491249
ipc4_gtw_host, ipc4_capture, pcm_convert_s24_to_s32 },
12501250
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE,
1251-
ipc4_gtw_all, ipc4_bidirection, pcm_convert_s24_to_s32},
1251+
ipc4_gtw_all & ~ipc4_gtw_host, ipc4_bidirection, pcm_convert_s24_to_s32},
1252+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE,
1253+
ipc4_gtw_host, ipc4_playback, audio_stream_copy},
1254+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE,
1255+
ipc4_gtw_host, ipc4_capture, pcm_convert_s24_to_s32},
12521256
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
1253-
ipc4_gtw_all & ~(ipc4_gtw_link | ipc4_gtw_alh), ipc4_bidirection,
1257+
ipc4_gtw_all & ~(ipc4_gtw_link | ipc4_gtw_alh | ipc4_gtw_host), ipc4_bidirection,
12541258
pcm_convert_s32_to_s24 },
12551259
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
12561260
ipc4_gtw_link | ipc4_gtw_alh, ipc4_playback, pcm_convert_s32_to_s24_be },
12571261
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
12581262
ipc4_gtw_link | ipc4_gtw_alh, ipc4_capture, pcm_convert_s32_to_s24 },
1263+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
1264+
ipc4_gtw_host, ipc4_playback, pcm_convert_s32_to_s24 },
1265+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
1266+
ipc4_gtw_host, ipc4_capture, pcm_convert_s32_to_s24_be },
12591267
#endif
12601268
#if CONFIG_PCM_CONVERTER_FORMAT_S24LE && CONFIG_PCM_CONVERTER_FORMAT_S16LE
12611269
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S32_LE,
1262-
SOF_IPC_FRAME_S24_4LE, ipc4_gtw_all & ~(ipc4_gtw_link | ipc4_gtw_alh),
1270+
SOF_IPC_FRAME_S24_4LE,
1271+
ipc4_gtw_all & ~(ipc4_gtw_link | ipc4_gtw_alh | ipc4_gtw_host),
12631272
ipc4_bidirection, pcm_convert_s16_to_s24 },
12641273
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S32_LE,
12651274
SOF_IPC_FRAME_S24_4LE, ipc4_gtw_link | ipc4_gtw_alh, ipc4_playback,
12661275
pcm_convert_s16_to_s32},
1276+
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S32_LE,
1277+
SOF_IPC_FRAME_S24_4LE, ipc4_gtw_host,
1278+
ipc4_playback, pcm_convert_s16_to_s24 },
1279+
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S32_LE,
1280+
SOF_IPC_FRAME_S24_4LE, ipc4_gtw_host,
1281+
ipc4_capture, pcm_convert_s16_to_s32 },
1282+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S16_LE,
1283+
SOF_IPC_FRAME_S16_LE, ipc4_gtw_all & ~ipc4_gtw_host,
1284+
ipc4_bidirection, pcm_convert_s24_to_s16 },
1285+
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S16_LE,
1286+
SOF_IPC_FRAME_S16_LE, ipc4_gtw_host, ipc4_playback, pcm_convert_s32_to_s16 },
12671287
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S16_LE,
1268-
SOF_IPC_FRAME_S16_LE, ipc4_gtw_all, ipc4_bidirection, pcm_convert_s24_to_s16 },
1288+
SOF_IPC_FRAME_S16_LE, ipc4_gtw_host, ipc4_capture, pcm_convert_s24_to_s16 },
12691289
#endif
12701290
#if CONFIG_PCM_CONVERTER_FORMAT_S24_C24_AND_S24_C32
12711291
{ SOF_IPC_FRAME_S24_3LE, SOF_IPC_FRAME_S24_3LE, SOF_IPC_FRAME_S32_LE,

0 commit comments

Comments
 (0)