1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* 2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee INTEL CONFIDENTIAL 3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee Copyright 2009 Intel Corporation All Rights Reserved. 4bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission. 5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 6bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing. 7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 8bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <glib.h> 11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <glib/gprintf.h> 12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <linux/types.h> 13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixacpmp3.h" 14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixacpwma.h" 15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixacpaac.h" 16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "intel_sst_ioctl.h" 17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixacp.h" 18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "sst_proxy.h" 19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifdef G_LOG_DOMAIN 21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#undef G_LOG_DOMAIN 22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define G_LOG_DOMAIN ((gchar*)"mixaudio") 23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif 24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 25bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_sst_params_convert_mp3(MixAudioConfigParamsMP3 *acp, struct snd_sst_params *s); 26bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_sst_params_convert_wma(MixAudioConfigParamsWMA *acp, struct snd_sst_params *s); 27bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_sst_params_convert_aac(MixAudioConfigParamsAAC *acp, struct snd_sst_params *s); 28bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_sst_params_to_mp3(MixAudioConfigParamsMP3 *acp, struct snd_mp3_params *params); 29bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_sst_params_to_wma(MixAudioConfigParamsWMA *acp, struct snd_wma_params *params); 30bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_sst_params_to_aac(MixAudioConfigParamsAAC *acp, struct snd_aac_params *params); 31bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_sst_set_bps(MixAudioConfigParams *acp, guchar pcm_wd_sz); 32bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_sst_set_op_align(MixAudioConfigParams *acp, guchar op_align); 33bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* 35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Utilities that convert param object to driver struct. 36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * No Mix Context needed. However, it knows about the driver's param structure. 37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 38bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_sst_params_convert(MixAudioConfigParams *acp, struct snd_sst_params *s) 39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gboolean ret = FALSE; 41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (!s) return FALSE; 43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (MIX_IS_AUDIOCONFIGPARAMSMP3(acp)) 45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_sst_params_convert_mp3(MIX_AUDIOCONFIGPARAMSMP3(acp), s); 46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else if (MIX_IS_AUDIOCONFIGPARAMSWMA(acp)) 47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_sst_params_convert_wma(MIX_AUDIOCONFIGPARAMSWMA(acp), s); 48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else if (MIX_IS_AUDIOCONFIGPARAMSAAC(acp)) 49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_sst_params_convert_aac(MIX_AUDIOCONFIGPARAMSAAC(acp), s); 50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 55bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_sst_params_convert_mp3(MixAudioConfigParamsMP3 *acp, struct snd_sst_params *s) 56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee struct snd_mp3_params *p = &s->sparams.uc.mp3_params; 58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee s->codec = p->codec = SST_CODEC_TYPE_MP3; 60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->num_chan = MIX_ACP_NUM_CHANNELS(acp); 61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->brate = MIX_ACP_BITRATE(acp); 62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->sfreq = MIX_ACP_SAMPLE_FREQ(acp); 63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->crc_check = MIX_ACP_MP3_CRC(acp); 64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->pcm_wd_sz = mix_acp_get_bps(MIX_AUDIOCONFIGPARAMS(acp)); 65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (p->pcm_wd_sz == MIX_ACP_BPS_16) 66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->op_align = MIX_ACP_OUTPUT_ALIGN_16; 67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->op_align = mix_acp_get_op_align(MIX_AUDIOCONFIGPARAMS(acp)); 69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return TRUE; 71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 73bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_sst_params_convert_wma(MixAudioConfigParamsWMA *acp, struct snd_sst_params *s) 74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee struct snd_wma_params *p = &s->sparams.uc.wma_params; 76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->num_chan = MIX_ACP_NUM_CHANNELS(acp); 78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->brate = MIX_ACP_BITRATE(acp); 79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->sfreq = MIX_ACP_SAMPLE_FREQ(acp); 80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->wma_encode_opt = MIX_ACP_WMA_ENCODE_OPT(acp); 81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->block_align = MIX_ACP_WMA_BLOCK_ALIGN(acp); 82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->channel_mask = MIX_ACP_WMA_CHANNEL_MASK(acp); 83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->format_tag = MIX_ACP_WMA_FORMAT_TAG(acp); 84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->pcm_src = MIX_ACP_WMA_PCM_BIT_WIDTH(acp); 85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->pcm_wd_sz = mix_acp_get_bps(MIX_AUDIOCONFIGPARAMS(acp)); 86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (p->pcm_wd_sz == MIX_ACP_BPS_16) 87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->op_align = MIX_ACP_OUTPUT_ALIGN_16; 88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->op_align = mix_acp_get_op_align(MIX_AUDIOCONFIGPARAMS(acp)); 90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee switch (mix_acp_wma_get_version(acp)) 92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_AUDIO_WMA_V9: 94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee s->codec = p->codec = SST_CODEC_TYPE_WMA9; 95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_AUDIO_WMA_V10: 97bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee s->codec = p->codec = SST_CODEC_TYPE_WMA10; 98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_AUDIO_WMA_V10P: 100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee s->codec = p->codec = SST_CODEC_TYPE_WMA10P; 101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee default: 103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return TRUE; 107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 109bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define AAC_DUMP(param) g_message("snd_aac_params.%s=%u", #param, p->param) 110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define AAC_DUMP_I(param, idx) g_message("snd_aac_params.%s[%d]=%x", #param, idx, p->param[idx]) 111bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 112bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_sst_params_convert_aac(MixAudioConfigParamsAAC *acp, struct snd_sst_params *s) 113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee struct snd_aac_params *p = &s->sparams.uc.aac_params; 115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // I have only AOT, where tools are usually specified at eAOT. 117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // However, sometimes, AOT could tell us the tool involved. e.g. 118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // AOT==5 --> SBR 119bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // AOT==29 --> PS 120bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // AOT==2 --> AAC-LC 121bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 122bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // we know SBR present only if it is indicated presence, or AOT says so. 123bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee guint aot = mix_acp_aac_get_aot(acp); 124bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->sbr_present = ((MIX_ACP_AAC_SBR_FLAG(acp) == 1) || 125bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (aot == 5) || 126bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (MIX_ACP_AAC_PS_FLAG(acp) == 1) || 127bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (aot == 29))?1:0; 128bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 129bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // As far as we know, we should: 130bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // set sbr_present flag for SST in case of possible implicit signalling of SBR, and 131bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // we should use HEAACv2 decoder in case of possible implicit signalling of PS. 132bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Although we should theoretically select HEAACv2 decoder for HEAACv1 and HEAAC, 133bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // it is not advisable since HEAACv2 decoder has more overhead as per SST team. 134bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // So MixAudio is implicitly selecting codec base on AOT, psPresentFlag and sbrPresentFlag. 135bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Application can override the selection by explicitly setting psPresentFlag and/or sbrPresentFlag. 136bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if ((MIX_ACP_AAC_PS_FLAG(acp) == 1) || (aot == 29)) 137bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 138bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // PS present. 139bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee s->codec = p->codec = SST_CODEC_TYPE_eAACP; 140bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 141bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else if (p->sbr_present == 1) 142bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 143bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee s->codec = p->codec = SST_CODEC_TYPE_AACP; 144bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 145bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 146bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 147bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee s->codec = p->codec = SST_CODEC_TYPE_AAC; 148bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 149bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 150bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->num_chan = MIX_ACP_AAC_CHANNELS(acp); // core/internal channels 151bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->ext_chl = MIX_ACP_NUM_CHANNELS(acp); // external channels 152bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->aac_srate = MIX_ACP_AAC_SAMPLE_RATE(acp); // aac decoder internal frequency 153bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->sfreq = MIX_ACP_SAMPLE_FREQ(acp); // output/external frequency 154bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 155bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->brate = MIX_ACP_BITRATE(acp); 156bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->mpg_id = (guint)mix_acp_aac_get_mpeg_id(acp); 157bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->bs_format = mix_acp_aac_get_bit_stream_format(acp); 158bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->aac_profile = mix_acp_aac_get_aac_profile(acp); 159bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // AOT defined by MPEG spec is 5 for SBR but SST definition is 4 for SBR. 160bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (aot == 5) 161bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->aot = 4; 162bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else if (aot == 2) 163bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->aot = aot; 164bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->crc_check = MIX_ACP_AAC_CRC(acp); 165bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->brate_type = mix_acp_aac_get_bit_rate_type(acp); 166bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->pce_present = MIX_ACP_AAC_PCE_FLAG(acp); 167bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->pcm_wd_sz = mix_acp_get_bps(MIX_AUDIOCONFIGPARAMS(acp)); 168bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 169bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (p->pcm_wd_sz == MIX_ACP_BPS_16) 170bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->op_align = MIX_ACP_OUTPUT_ALIGN_16; 171bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 172bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->op_align = mix_acp_get_op_align(MIX_AUDIOCONFIGPARAMS(acp)); 173bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 174bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //p->aac_srate = ; // __u32 aac_srate; /* Plain AAC decoder operating sample rate */ 175bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //p->ext_chl = ; // __u8 ext_chl; /* No.of external channels */ 176bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 177bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee switch (p->bs_format) 178bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 179bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_AAC_BS_ADTS: 180bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_sprintf((gchar*)p->bit_stream_format, "adts"); 181bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 182bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_AAC_BS_ADIF: 183bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_sprintf((gchar*)p->bit_stream_format, "adif"); 184bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 185bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_AAC_BS_RAW: 186bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_sprintf((gchar*)p->bit_stream_format, "raw"); 187bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->num_syntc_elems = 0; 188bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->syntc_id[0] = (gint8)-1; /* 0 for ID_SCE(Dula Mono), -1 for raw */ 189bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->syntc_id[1] = (gint8)-1; 190bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->syntc_tag[0] = (gint8)-1; /* raw - -1 and 0 -16 for rest of the streams */ 191bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee p->syntc_tag[1] = (gint8)-1; 192bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 193bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee default: 194bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 195bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 196bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 197bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 198bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(codec); 199bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(num_chan); /* 1=Mono, 2=Stereo*/ 200bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(pcm_wd_sz); /* 16/24 - bit*/ 201bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(brate); 202bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(sfreq); /* Sampling freq eg. 8000, 441000, 48000 */ 203bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(aac_srate); /* Plain AAC decoder operating sample rate */ 204bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(mpg_id); /* 0=MPEG-2, 1=MPEG-4 */ 205bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(bs_format); /* input bit stream format adts=0, adif=1, raw=2 */ 206bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(aac_profile); /* 0=Main Profile, 1=LC profile, 3=SSR profile */ 207bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(ext_chl); /* No.of external channels */ 208bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(aot); /* Audio object type. 1=Main , 2=LC , 3=SSR, 4=SBR*/ 209bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(op_align); /* output alignment 0=16 bit , 1=MSB, 2= LSB align */ 210bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(brate_type); /* 0=CBR, 1=VBR */ 211bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(crc_check); /* crc check 0= disable, 1=enable */ 212bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // AAC_DUMP(bit_stream_format[8]); /* input bit stream format adts/adif/raw */ 213bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_message("snd_aac_params.bit_stream_format=%s", p->bit_stream_format); 214bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(jstereo); /* Joint stereo Flag */ 215bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(sbr_present); /* 1 = SBR Present, 0 = SBR absent, for RAW */ 216bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(downsample); /* 1 = Downsampling ON, 0 = Downsampling OFF */ 217bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(num_syntc_elems); /* 1- Mono/stereo, 0 - Dual Mono, 0 - for raw */ 218bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_message("snd_aac_params.syntc_id[0]=%x", p->syntc_id[0]); 219bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_message("snd_aac_params.syntc_id[1]=%x", p->syntc_id[1]); 220bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_message("snd_aac_params.syntc_tag[0]=%x", p->syntc_tag[0]); 221bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_message("snd_aac_params.syntc_tag[1]=%x", p->syntc_tag[1]); 222bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //AAC_DUMP_I(syntc_id, 0); /* 0 for ID_SCE(Dula Mono), -1 for raw */ 223bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //AAC_DUMP_I(syntc_id, 1); /* 0 for ID_SCE(Dula Mono), -1 for raw */ 224bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //AAC_DUMP_I(syntc_tag, 0); /* raw - -1 and 0 -16 for rest of the streams */ 225bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //AAC_DUMP_I(syntc_tag, 1); /* raw - -1 and 0 -16 for rest of the streams */ 226bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(pce_present); /* Flag. 1- present 0 - not present, for RAW */ 227bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(reserved); 228bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee AAC_DUMP(reserved1); 229bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 230bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 231bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return TRUE; 232bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 233bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 234bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixAudioConfigParams *mix_sst_acp_from_codec(guint codec) 235bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 236bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixAudioConfigParams *ret = NULL; 237bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 238bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // need stream specific ACP 239bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee switch (codec) 240bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 241bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_MP3: 242bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_MP24: 243bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = (MixAudioConfigParams*)mix_acp_mp3_new(); 244bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 245bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_AAC: 246bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_AACP: 247bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_eAACP: 248bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = (MixAudioConfigParams*)mix_acp_aac_new(); 249bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 250bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_WMA9: 251bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_WMA10: 252bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_WMA10P: 253bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = (MixAudioConfigParams*)mix_acp_wma_new(); 254bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 255bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 256bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 257bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 258bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 259bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 260bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 261bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 262bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixAudioConfigParams *mix_sst_params_to_acp(struct snd_sst_get_stream_params *stream_params) 263bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 264bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixAudioConfigParams *ret = NULL; 265bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 266bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gboolean allocated = FALSE; 267bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Ingoring stream_params.codec_params.result, which seem to return details specific to stream allocation. 268bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee switch (stream_params->codec_params.result) 269bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 270bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Please refers to SST API doc for return value definition. 271bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case 5: 272bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_debug("last SET_PARAMS succeeded with Stream Parameter Modified."); 273bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case 0: 274bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee allocated = TRUE; 275bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 276bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case 1: 277bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // last SET_PARAMS failed STREAM was not available. 278bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case 2: 279bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // last SET_PARAMS failed CODEC was not available. 280bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case 3: 281bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // last SET_PARAMS failed CODEC was not supported. 282bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case 4: 283bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // last SET_PARAMS failed Invalid Stream Parameters. 284bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case 6: 285bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // last SET_PARAMS failed Invalid Stream ID. 286bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee default: 287bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // last SET_PARAMS failed unexpectedly. 288bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 289bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 290bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 291bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (allocated) 292bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 293bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee switch (stream_params->codec_params.codec) 294bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 295bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_MP3: 296bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_MP24: 297bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = (MixAudioConfigParams*)mix_acp_mp3_new(); 298bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_sst_params_to_mp3(MIX_AUDIOCONFIGPARAMSMP3(ret), &stream_params->codec_params.sparams.uc.mp3_params); 299bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 300bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_AAC: 301bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_AACP: 302bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_eAACP: 303bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = (MixAudioConfigParams*)mix_acp_aac_new(); 304bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_sst_params_to_aac(MIX_AUDIOCONFIGPARAMSAAC(ret), &stream_params->codec_params.sparams.uc.aac_params); 305bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 306bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_WMA9: 307bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_WMA10: 308bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_WMA10P: 309bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = (MixAudioConfigParams*)mix_acp_wma_new(); 310bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_sst_params_to_wma(MIX_AUDIOCONFIGPARAMSWMA(ret), &stream_params->codec_params.sparams.uc.wma_params); 311bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 312bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 313bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 314bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 315bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (!ret) ret = mix_acp_new(); 316bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 317bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret) 318bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 319bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Be sure to update all vars that becomes available since the ACP could set defaults. 320bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_SAMPLE_FREQ(ret) = stream_params->pcm_params.sfreq; 321bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_NUM_CHANNELS(ret) = stream_params->pcm_params.num_chan; 322bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_sst_set_bps(MIX_AUDIOCONFIGPARAMS(ret), stream_params->pcm_params.pcm_wd_sz); 323bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 324bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 325bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 326bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 327bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 328bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 329bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_sst_params_to_mp3(MixAudioConfigParamsMP3 *acp, struct snd_mp3_params *params) 330bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 331bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(!acp || !params) return; 332bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 333bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_NUM_CHANNELS(MIX_AUDIOCONFIGPARAMS(acp)) = params->num_chan; 334bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_BITRATE(MIX_AUDIOCONFIGPARAMS(acp)) = params->brate; 335bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_SAMPLE_FREQ(MIX_AUDIOCONFIGPARAMS(acp)) = params->sfreq; 336bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_MP3_CRC(acp) = params->crc_check; 337bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 338bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_sst_set_bps(MIX_AUDIOCONFIGPARAMS(acp), params->pcm_wd_sz); 339bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_sst_set_op_align(MIX_AUDIOCONFIGPARAMS(acp), params->op_align); 340bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 341bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 342bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_sst_params_to_wma(MixAudioConfigParamsWMA *acp, struct snd_wma_params *params) 343bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 344bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 345bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_BITRATE(acp) = params->brate; 346bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_SAMPLE_FREQ(acp) = params->sfreq; 347bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_WMA_ENCODE_OPT(acp) = params->wma_encode_opt; 348bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_WMA_BLOCK_ALIGN(acp) = params->block_align; 349bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_WMA_CHANNEL_MASK(acp) = params->channel_mask; 350bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_WMA_FORMAT_TAG(acp) = params->format_tag; 351bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_WMA_PCM_BIT_WIDTH(acp) = params->pcm_src; 352bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 353bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_sst_set_bps(MIX_AUDIOCONFIGPARAMS(acp), params->pcm_wd_sz); 354bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_sst_set_op_align(MIX_AUDIOCONFIGPARAMS(acp), params->op_align); 355bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 356bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee switch (params->codec) 357bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 358bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_WMA9: 359bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_wma_set_version(acp, MIX_AUDIO_WMA_V9); 360bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 361bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_WMA10: 362bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_wma_set_version(acp, MIX_AUDIO_WMA_V10); 363bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 364bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case SST_CODEC_TYPE_WMA10P: 365bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_wma_set_version(acp, MIX_AUDIO_WMA_V10P); 366bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 367bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 368bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 369bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 370bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 371bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_sst_params_to_aac(MixAudioConfigParamsAAC *acp, struct snd_aac_params *params) 372bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 373bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (params->codec == SST_CODEC_TYPE_eAACP) 374bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 375bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_AAC_PS_FLAG(acp) = TRUE; 376bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 377bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 378bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_NUM_CHANNELS(acp) = params->num_chan; 379bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_BITRATE(acp) = params->brate; 380bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_SAMPLE_FREQ(acp) = params->sfreq; 381bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_aac_set_mpeg_id(acp, params->mpg_id); 382bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_aac_set_bit_stream_format(acp, params->bs_format); 383bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_aac_set_aac_profile(acp, params->aac_profile); 384bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 385bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // SST API specific 4 for SBR while AOT definition in MPEG 4 spec specific 5. 386bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // converting. 387bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (params->aot == 4) 388bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_aac_set_aot(acp, 5); 389bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else if (params->aot == 2) 390bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_aac_set_aot(acp, params->aot); 391bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 392bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_AAC_CRC(acp) = params->crc_check; 393bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_aac_set_bit_rate_type(acp, params->brate_type); 394bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_AAC_SBR_FLAG(acp) = params->sbr_present; 395bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_ACP_AAC_PCE_FLAG(acp) = params->pce_present; 396bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 397bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_sst_set_bps(MIX_AUDIOCONFIGPARAMS(acp), params->pcm_wd_sz); 398bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_sst_set_op_align(MIX_AUDIOCONFIGPARAMS(acp), params->op_align); 399bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 400bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee acp->num_syntc_elems = params->num_syntc_elems; 401bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee acp->syntc_id[0] = params->syntc_id[0]; 402bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee acp->syntc_id[1] = params->syntc_id[1]; 403bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee acp->syntc_tag[0] = params->syntc_tag[0]; 404bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee acp->syntc_tag[1] = params->syntc_tag[1]; 405bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 406bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 407bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_sst_set_bps(MixAudioConfigParams *acp, guchar pcm_wd_sz) 408bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 409bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee switch (pcm_wd_sz) 410bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 411bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_ACP_BPS_16: 412bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_ACP_BPS_24: 413bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 414bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee default: 415bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee pcm_wd_sz = MIX_ACP_BPS_UNKNOWN; 416bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 417bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 418bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_set_bps(MIX_AUDIOCONFIGPARAMS(acp), pcm_wd_sz); 419bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 420bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 421bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_sst_set_op_align(MixAudioConfigParams *acp, guchar op_align) 422bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 423bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee switch (op_align) 424bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 425bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_ACP_OUTPUT_ALIGN_16: 426bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_ACP_OUTPUT_ALIGN_MSB: 427bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee case MIX_ACP_OUTPUT_ALIGN_LSB: 428bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 429bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee default: 430bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee op_align = MIX_ACP_OUTPUT_ALIGN_UNKNOWN; 431bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee break; 432bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 433bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_set_op_align(MIX_AUDIOCONFIGPARAMS(acp), op_align); 434bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 435bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 436