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