pcm_converter: Add support for copying 8-bit formats

Added support for copying 8-bit unsigned probes in 8 and 16 bit containers.

Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
This commit is contained in:
Adrian Warecki 2023-07-12 15:51:47 +02:00 committed by Liam Girdwood
parent a0e2d961ed
commit 72d19a7030
2 changed files with 21 additions and 5 deletions

View File

@ -555,6 +555,12 @@ config FORMAT_CONVERT_HIFI3
help
Use HIFI3 extensions for optimized format conversion (experimental).
config PCM_CONVERTER_FORMAT_U8
bool "Support U8"
default n
help
Support 8 bit processing data format without sign
config PCM_CONVERTER_FORMAT_S16LE
bool "Support S16LE"
default y

View File

@ -1,14 +1,17 @@
// SPDX-License-Identifier: BSD-3-Clause
//
// Copyright(c) 2019 Intel Corporation. All rights reserved.
//
// Author: Tomasz Lauda <tomasz.lauda@linux.intel.com>
/*
* Copyright(c) 2023 Intel Corporation. All rights reserved.
*
* Author: Tomasz Lauda <tomasz.lauda@linux.intel.com>
* Adrian Warecki <adrian.warecki@intel.com>
*/
/**
* \file audio/pcm_converter/pcm_converter_generic.c
* \brief PCM converter generic processing implementation
* \authors Tomasz Lauda <tomasz.lauda@linux.intel.com>
* \authors Karol Trzcinski <karolx.trzcinski@linux.intel.com>
* \authors Adrian Warecki <adrian.warecki@intel.com>
*/
#include <sof/audio/pcm_converter.h>
@ -484,6 +487,9 @@ static int pcm_convert_f_to_s32(const struct audio_stream __sparse_cache *source
#endif /* CONFIG_PCM_CONVERTER_FORMAT_FLOAT && CONFIG_PCM_CONVERTER_FORMAT_S32LE */
const struct pcm_func_map pcm_func_map[] = {
#if CONFIG_PCM_CONVERTER_FORMAT_U8
{ SOF_IPC_FRAME_U8, SOF_IPC_FRAME_U8, audio_stream_copy },
#endif /* CONFIG_PCM_CONVERTER_FORMAT_U8 */
#if CONFIG_PCM_CONVERTER_FORMAT_S16LE
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE, audio_stream_copy },
#endif /* CONFIG_PCM_CONVERTER_FORMAT_S16LE */
@ -493,7 +499,7 @@ const struct pcm_func_map pcm_func_map[] = {
#if CONFIG_PCM_CONVERTER_FORMAT_S24_3LE
{ SOF_IPC_FRAME_S24_3LE, SOF_IPC_FRAME_S24_3LE, audio_stream_copy },
#endif /* CONFIG_PCM_CONVERTER_FORMAT_S24_3LE */
#if CONFIG_PCM_CONVERTER_FORMAT_S24LE && CONFIG_PCM_CONVERTER_FORMAT_S16LE
#if CONFIG_PCM_CONVERTER_FORMAT_S24LE && CONFIG_PCM_CONVERTER_FORMAT_S16LE
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S24_4LE, pcm_convert_s16_to_s24 },
{ SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S16_LE, pcm_convert_s24_to_s16 },
#endif /* CONFIG_PCM_CONVERTER_FORMAT_S24LE && CONFIG_PCM_CONVERTER_FORMAT_S16LE */
@ -841,6 +847,10 @@ const struct pcm_func_vc_map pcm_func_vc_map[] = {
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S16_LE,
ipc4_gtw_alh, ipc4_playback, pcm_convert_s24_to_s32 },
#endif
#if CONFIG_PCM_CONVERTER_FORMAT_U8 && CONFIG_PCM_CONVERTER_FORMAT_S16LE
{ SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_U8, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_U8,
ipc4_gtw_all, ipc4_bidirection, audio_stream_copy },
#endif /* CONFIG_PCM_CONVERTER_FORMAT_U8 && CONFIG_PCM_CONVERTER_FORMAT_S16LE */
#if CONFIG_PCM_CONVERTER_FORMAT_S32LE && CONFIG_PCM_CONVERTER_FORMAT_S24LE
{ SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S24_4LE,
ipc4_gtw_all & ~(ipc4_gtw_link | ipc4_gtw_alh | ipc4_gtw_host | ipc4_gtw_dmic),