1*aef9bcd9SKiyoung Kim /*
2*aef9bcd9SKiyoung Kim * Copyright (C) 2003 - 2016 Sony Corporation
3*aef9bcd9SKiyoung Kim *
4*aef9bcd9SKiyoung Kim * Licensed under the Apache License, Version 2.0 (the "License");
5*aef9bcd9SKiyoung Kim * you may not use this file except in compliance with the License.
6*aef9bcd9SKiyoung Kim * You may obtain a copy of the License at
7*aef9bcd9SKiyoung Kim *
8*aef9bcd9SKiyoung Kim * http://www.apache.org/licenses/LICENSE-2.0
9*aef9bcd9SKiyoung Kim *
10*aef9bcd9SKiyoung Kim * Unless required by applicable law or agreed to in writing, software
11*aef9bcd9SKiyoung Kim * distributed under the License is distributed on an "AS IS" BASIS,
12*aef9bcd9SKiyoung Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*aef9bcd9SKiyoung Kim * See the License for the specific language governing permissions and
14*aef9bcd9SKiyoung Kim * limitations under the License.
15*aef9bcd9SKiyoung Kim */
16*aef9bcd9SKiyoung Kim
17*aef9bcd9SKiyoung Kim #include "ldaclib.h"
18*aef9bcd9SKiyoung Kim #include "ldac.h"
19*aef9bcd9SKiyoung Kim
20*aef9bcd9SKiyoung Kim #define LDACLIB_MAJOR_VERSION 01
21*aef9bcd9SKiyoung Kim #define LDACLIB_MINOR_VERSION 00
22*aef9bcd9SKiyoung Kim #define LDACLIB_BRANCH_VERSION 00
23*aef9bcd9SKiyoung Kim
24*aef9bcd9SKiyoung Kim /***************************************************************************************************
25*aef9bcd9SKiyoung Kim Local Assert Functions
26*aef9bcd9SKiyoung Kim ***************************************************************************************************/
ldaclib_assert_sampling_rate_index(int smplrate_id)27*aef9bcd9SKiyoung Kim static int ldaclib_assert_sampling_rate_index(
28*aef9bcd9SKiyoung Kim int smplrate_id)
29*aef9bcd9SKiyoung Kim {
30*aef9bcd9SKiyoung Kim if ((LDAC_SMPLRATEID_0 <= smplrate_id) && (smplrate_id < LDAC_NSMPLRATEID)) {
31*aef9bcd9SKiyoung Kim return LDAC_TRUE;
32*aef9bcd9SKiyoung Kim }
33*aef9bcd9SKiyoung Kim else {
34*aef9bcd9SKiyoung Kim return LDAC_FALSE;
35*aef9bcd9SKiyoung Kim }
36*aef9bcd9SKiyoung Kim }
37*aef9bcd9SKiyoung Kim
ldaclib_assert_supported_sampling_rate_index(int smplrate_id)38*aef9bcd9SKiyoung Kim static int ldaclib_assert_supported_sampling_rate_index(
39*aef9bcd9SKiyoung Kim int smplrate_id)
40*aef9bcd9SKiyoung Kim {
41*aef9bcd9SKiyoung Kim if ((LDAC_SMPLRATEID_0 <= smplrate_id) && (smplrate_id < LDAC_NSUPSMPLRATEID)) {
42*aef9bcd9SKiyoung Kim return LDAC_TRUE;
43*aef9bcd9SKiyoung Kim }
44*aef9bcd9SKiyoung Kim else {
45*aef9bcd9SKiyoung Kim return LDAC_FALSE;
46*aef9bcd9SKiyoung Kim }
47*aef9bcd9SKiyoung Kim }
48*aef9bcd9SKiyoung Kim
ldaclib_assert_channel_config_index(int chconfig_id)49*aef9bcd9SKiyoung Kim static int ldaclib_assert_channel_config_index(
50*aef9bcd9SKiyoung Kim int chconfig_id)
51*aef9bcd9SKiyoung Kim {
52*aef9bcd9SKiyoung Kim if ((chconfig_id == LDAC_CHCONFIGID_MN)
53*aef9bcd9SKiyoung Kim || (chconfig_id == LDAC_CHCONFIGID_DL) || (chconfig_id == LDAC_CHCONFIGID_ST)) {
54*aef9bcd9SKiyoung Kim return LDAC_TRUE;
55*aef9bcd9SKiyoung Kim }
56*aef9bcd9SKiyoung Kim else {
57*aef9bcd9SKiyoung Kim return LDAC_FALSE;
58*aef9bcd9SKiyoung Kim }
59*aef9bcd9SKiyoung Kim }
60*aef9bcd9SKiyoung Kim
ldaclib_assert_channel(int ch)61*aef9bcd9SKiyoung Kim static int ldaclib_assert_channel(
62*aef9bcd9SKiyoung Kim int ch)
63*aef9bcd9SKiyoung Kim {
64*aef9bcd9SKiyoung Kim if ((ch == LDAC_CHANNEL_1CH) || (ch == LDAC_CHANNEL_2CH)) {
65*aef9bcd9SKiyoung Kim return LDAC_TRUE;
66*aef9bcd9SKiyoung Kim }
67*aef9bcd9SKiyoung Kim else {
68*aef9bcd9SKiyoung Kim return LDAC_FALSE;
69*aef9bcd9SKiyoung Kim }
70*aef9bcd9SKiyoung Kim }
71*aef9bcd9SKiyoung Kim
ldaclib_assert_frame_length(int frame_length)72*aef9bcd9SKiyoung Kim static int ldaclib_assert_frame_length(
73*aef9bcd9SKiyoung Kim int frame_length)
74*aef9bcd9SKiyoung Kim {
75*aef9bcd9SKiyoung Kim if ((0 < frame_length) && (frame_length <= LDAC_MAXNBYTES)) {
76*aef9bcd9SKiyoung Kim return LDAC_TRUE;
77*aef9bcd9SKiyoung Kim }
78*aef9bcd9SKiyoung Kim else {
79*aef9bcd9SKiyoung Kim return LDAC_FALSE;
80*aef9bcd9SKiyoung Kim }
81*aef9bcd9SKiyoung Kim }
82*aef9bcd9SKiyoung Kim
ldaclib_assert_supported_frame_length(int frame_length,int chconfig_id)83*aef9bcd9SKiyoung Kim static int ldaclib_assert_supported_frame_length(
84*aef9bcd9SKiyoung Kim int frame_length,
85*aef9bcd9SKiyoung Kim int chconfig_id)
86*aef9bcd9SKiyoung Kim {
87*aef9bcd9SKiyoung Kim if (chconfig_id == LDAC_CHCONFIGID_MN) {
88*aef9bcd9SKiyoung Kim if ((LDAC_MINSUPNBYTES/2 <= frame_length) && (frame_length <= LDAC_MAXSUPNBYTES/2)) {
89*aef9bcd9SKiyoung Kim return LDAC_TRUE;
90*aef9bcd9SKiyoung Kim }
91*aef9bcd9SKiyoung Kim else {
92*aef9bcd9SKiyoung Kim return LDAC_FALSE;
93*aef9bcd9SKiyoung Kim }
94*aef9bcd9SKiyoung Kim }
95*aef9bcd9SKiyoung Kim else if ((chconfig_id == LDAC_CHCONFIGID_DL) || (chconfig_id == LDAC_CHCONFIGID_ST)) {
96*aef9bcd9SKiyoung Kim if ((LDAC_MINSUPNBYTES <= frame_length) && (frame_length <= LDAC_MAXSUPNBYTES)) {
97*aef9bcd9SKiyoung Kim return LDAC_TRUE;
98*aef9bcd9SKiyoung Kim }
99*aef9bcd9SKiyoung Kim else {
100*aef9bcd9SKiyoung Kim return LDAC_FALSE;
101*aef9bcd9SKiyoung Kim }
102*aef9bcd9SKiyoung Kim }
103*aef9bcd9SKiyoung Kim else {
104*aef9bcd9SKiyoung Kim return LDAC_FALSE;
105*aef9bcd9SKiyoung Kim }
106*aef9bcd9SKiyoung Kim }
107*aef9bcd9SKiyoung Kim
ldaclib_assert_frame_status(int frame_status)108*aef9bcd9SKiyoung Kim static int ldaclib_assert_frame_status(
109*aef9bcd9SKiyoung Kim int frame_status)
110*aef9bcd9SKiyoung Kim {
111*aef9bcd9SKiyoung Kim if ((LDAC_FRMSTAT_LEV_0 <= frame_status) && (frame_status <= LDAC_FRMSTAT_LEV_3)) {
112*aef9bcd9SKiyoung Kim return LDAC_TRUE;
113*aef9bcd9SKiyoung Kim }
114*aef9bcd9SKiyoung Kim else {
115*aef9bcd9SKiyoung Kim return LDAC_FALSE;
116*aef9bcd9SKiyoung Kim }
117*aef9bcd9SKiyoung Kim }
118*aef9bcd9SKiyoung Kim
ldaclib_assert_nlnn_shift(int nlnn_shift)119*aef9bcd9SKiyoung Kim static int ldaclib_assert_nlnn_shift(
120*aef9bcd9SKiyoung Kim int nlnn_shift)
121*aef9bcd9SKiyoung Kim {
122*aef9bcd9SKiyoung Kim if ((-2 <= nlnn_shift) && (nlnn_shift < LDAC_NSFTSTEP-2)) {
123*aef9bcd9SKiyoung Kim return LDAC_TRUE;
124*aef9bcd9SKiyoung Kim }
125*aef9bcd9SKiyoung Kim else {
126*aef9bcd9SKiyoung Kim return LDAC_FALSE;
127*aef9bcd9SKiyoung Kim }
128*aef9bcd9SKiyoung Kim }
129*aef9bcd9SKiyoung Kim
ldaclib_assert_sample_format(LDAC_SMPL_FMT_T sample_format)130*aef9bcd9SKiyoung Kim static int ldaclib_assert_sample_format(
131*aef9bcd9SKiyoung Kim LDAC_SMPL_FMT_T sample_format)
132*aef9bcd9SKiyoung Kim {
133*aef9bcd9SKiyoung Kim #ifndef _32BIT_FIXED_POINT
134*aef9bcd9SKiyoung Kim if ((LDAC_SMPL_FMT_S16 <= sample_format) && (sample_format <= LDAC_SMPL_FMT_F32)) {
135*aef9bcd9SKiyoung Kim #else /* _32BIT_FIXED_POINT */
136*aef9bcd9SKiyoung Kim if ((LDAC_SMPL_FMT_S16 <= sample_format) && (sample_format <= LDAC_SMPL_FMT_S32)) {
137*aef9bcd9SKiyoung Kim #endif /* _32BIT_FIXED_POINT */
138*aef9bcd9SKiyoung Kim return LDAC_TRUE;
139*aef9bcd9SKiyoung Kim }
140*aef9bcd9SKiyoung Kim else {
141*aef9bcd9SKiyoung Kim return LDAC_FALSE;
142*aef9bcd9SKiyoung Kim }
143*aef9bcd9SKiyoung Kim }
144*aef9bcd9SKiyoung Kim
145*aef9bcd9SKiyoung Kim
146*aef9bcd9SKiyoung Kim /***************************************************************************************************
147*aef9bcd9SKiyoung Kim Common API Functions
148*aef9bcd9SKiyoung Kim ***************************************************************************************************/
149*aef9bcd9SKiyoung Kim
150*aef9bcd9SKiyoung Kim /***************************************************************************************************
151*aef9bcd9SKiyoung Kim Get Library Version
152*aef9bcd9SKiyoung Kim ***************************************************************************************************/
153*aef9bcd9SKiyoung Kim DECLSPEC int ldaclib_get_version(void) {
154*aef9bcd9SKiyoung Kim return (LDACLIB_MAJOR_VERSION<<16) | (LDACLIB_MINOR_VERSION<<8) | LDACLIB_BRANCH_VERSION;
155*aef9bcd9SKiyoung Kim }
156*aef9bcd9SKiyoung Kim
157*aef9bcd9SKiyoung Kim DECLSPEC int ldaclib_get_major_version(void) {
158*aef9bcd9SKiyoung Kim return LDACLIB_MAJOR_VERSION;
159*aef9bcd9SKiyoung Kim }
160*aef9bcd9SKiyoung Kim
161*aef9bcd9SKiyoung Kim DECLSPEC int ldaclib_get_minor_version(void) {
162*aef9bcd9SKiyoung Kim return LDACLIB_MINOR_VERSION;
163*aef9bcd9SKiyoung Kim }
164*aef9bcd9SKiyoung Kim
165*aef9bcd9SKiyoung Kim DECLSPEC int ldaclib_get_branch_version(void) {
166*aef9bcd9SKiyoung Kim return LDACLIB_BRANCH_VERSION;
167*aef9bcd9SKiyoung Kim }
168*aef9bcd9SKiyoung Kim
169*aef9bcd9SKiyoung Kim /***************************************************************************************************
170*aef9bcd9SKiyoung Kim Get Basic Parameters
171*aef9bcd9SKiyoung Kim ***************************************************************************************************/
172*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_sampling_rate_index(
173*aef9bcd9SKiyoung Kim int smplrate,
174*aef9bcd9SKiyoung Kim int *p_smplrate_id)
175*aef9bcd9SKiyoung Kim {
176*aef9bcd9SKiyoung Kim if (smplrate == 44100) {
177*aef9bcd9SKiyoung Kim *p_smplrate_id = LDAC_SMPLRATEID_0;
178*aef9bcd9SKiyoung Kim }
179*aef9bcd9SKiyoung Kim else if (smplrate == 48000) {
180*aef9bcd9SKiyoung Kim *p_smplrate_id = LDAC_SMPLRATEID_1;
181*aef9bcd9SKiyoung Kim }
182*aef9bcd9SKiyoung Kim else if (smplrate == 88200) {
183*aef9bcd9SKiyoung Kim *p_smplrate_id = LDAC_SMPLRATEID_2;
184*aef9bcd9SKiyoung Kim }
185*aef9bcd9SKiyoung Kim else if (smplrate == 96000) {
186*aef9bcd9SKiyoung Kim *p_smplrate_id = LDAC_SMPLRATEID_3;
187*aef9bcd9SKiyoung Kim }
188*aef9bcd9SKiyoung Kim else {
189*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
190*aef9bcd9SKiyoung Kim }
191*aef9bcd9SKiyoung Kim
192*aef9bcd9SKiyoung Kim return LDAC_S_OK;
193*aef9bcd9SKiyoung Kim }
194*aef9bcd9SKiyoung Kim
195*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_sampling_rate(
196*aef9bcd9SKiyoung Kim int smplrate_id,
197*aef9bcd9SKiyoung Kim int *p_smplrate)
198*aef9bcd9SKiyoung Kim {
199*aef9bcd9SKiyoung Kim if (!ldaclib_assert_sampling_rate_index(smplrate_id)) {
200*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
201*aef9bcd9SKiyoung Kim }
202*aef9bcd9SKiyoung Kim if (!ldaclib_assert_supported_sampling_rate_index(smplrate_id)) {
203*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
204*aef9bcd9SKiyoung Kim }
205*aef9bcd9SKiyoung Kim
206*aef9bcd9SKiyoung Kim *p_smplrate = ga_smplrate_ldac[smplrate_id];
207*aef9bcd9SKiyoung Kim
208*aef9bcd9SKiyoung Kim return LDAC_S_OK;
209*aef9bcd9SKiyoung Kim }
210*aef9bcd9SKiyoung Kim
211*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_frame_samples(
212*aef9bcd9SKiyoung Kim int smplrate_id,
213*aef9bcd9SKiyoung Kim int *p_framesmpls)
214*aef9bcd9SKiyoung Kim {
215*aef9bcd9SKiyoung Kim if (!ldaclib_assert_sampling_rate_index(smplrate_id)) {
216*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
217*aef9bcd9SKiyoung Kim }
218*aef9bcd9SKiyoung Kim if (!ldaclib_assert_supported_sampling_rate_index(smplrate_id)) {
219*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
220*aef9bcd9SKiyoung Kim }
221*aef9bcd9SKiyoung Kim
222*aef9bcd9SKiyoung Kim *p_framesmpls = ga_framesmpls_ldac[smplrate_id];
223*aef9bcd9SKiyoung Kim
224*aef9bcd9SKiyoung Kim return LDAC_S_OK;
225*aef9bcd9SKiyoung Kim }
226*aef9bcd9SKiyoung Kim
227*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_nlnn(
228*aef9bcd9SKiyoung Kim int smplrate_id,
229*aef9bcd9SKiyoung Kim int *p_nlnn)
230*aef9bcd9SKiyoung Kim {
231*aef9bcd9SKiyoung Kim if (!ldaclib_assert_sampling_rate_index(smplrate_id)) {
232*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
233*aef9bcd9SKiyoung Kim }
234*aef9bcd9SKiyoung Kim if (!ldaclib_assert_supported_sampling_rate_index(smplrate_id)) {
235*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
236*aef9bcd9SKiyoung Kim }
237*aef9bcd9SKiyoung Kim
238*aef9bcd9SKiyoung Kim *p_nlnn = ga_ln_framesmpls_ldac[smplrate_id];
239*aef9bcd9SKiyoung Kim
240*aef9bcd9SKiyoung Kim return LDAC_S_OK;
241*aef9bcd9SKiyoung Kim }
242*aef9bcd9SKiyoung Kim
243*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_channel(
244*aef9bcd9SKiyoung Kim int chconfig_id,
245*aef9bcd9SKiyoung Kim int *p_ch)
246*aef9bcd9SKiyoung Kim {
247*aef9bcd9SKiyoung Kim if (!ldaclib_assert_channel_config_index(chconfig_id)) {
248*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
249*aef9bcd9SKiyoung Kim }
250*aef9bcd9SKiyoung Kim
251*aef9bcd9SKiyoung Kim *p_ch = ga_ch_ldac[chconfig_id];
252*aef9bcd9SKiyoung Kim
253*aef9bcd9SKiyoung Kim return LDAC_S_OK;
254*aef9bcd9SKiyoung Kim }
255*aef9bcd9SKiyoung Kim
256*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_channel_config_index(
257*aef9bcd9SKiyoung Kim int ch,
258*aef9bcd9SKiyoung Kim int *p_chconfig_id)
259*aef9bcd9SKiyoung Kim {
260*aef9bcd9SKiyoung Kim if (!ldaclib_assert_channel(ch)) {
261*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
262*aef9bcd9SKiyoung Kim }
263*aef9bcd9SKiyoung Kim
264*aef9bcd9SKiyoung Kim *p_chconfig_id = ga_chconfig_id_ldac[ch];
265*aef9bcd9SKiyoung Kim
266*aef9bcd9SKiyoung Kim return LDAC_S_OK;
267*aef9bcd9SKiyoung Kim }
268*aef9bcd9SKiyoung Kim
269*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_check_nlnn_shift(
270*aef9bcd9SKiyoung Kim int smplrate_id,
271*aef9bcd9SKiyoung Kim int nlnn_shift)
272*aef9bcd9SKiyoung Kim {
273*aef9bcd9SKiyoung Kim if (!ldaclib_assert_sampling_rate_index(smplrate_id)) {
274*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
275*aef9bcd9SKiyoung Kim }
276*aef9bcd9SKiyoung Kim if (!ldaclib_assert_supported_sampling_rate_index(smplrate_id)) {
277*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
278*aef9bcd9SKiyoung Kim }
279*aef9bcd9SKiyoung Kim if (!ldaclib_assert_nlnn_shift(nlnn_shift)) {
280*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
281*aef9bcd9SKiyoung Kim }
282*aef9bcd9SKiyoung Kim
283*aef9bcd9SKiyoung Kim if (gaa_nlnn_shift_ldac[smplrate_id][nlnn_shift+2] < 0) {
284*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
285*aef9bcd9SKiyoung Kim }
286*aef9bcd9SKiyoung Kim
287*aef9bcd9SKiyoung Kim return LDAC_S_OK;
288*aef9bcd9SKiyoung Kim }
289*aef9bcd9SKiyoung Kim
290*aef9bcd9SKiyoung Kim /***************************************************************************************************
291*aef9bcd9SKiyoung Kim Get Handle
292*aef9bcd9SKiyoung Kim ***************************************************************************************************/
293*aef9bcd9SKiyoung Kim DECLSPEC HANDLE_LDAC ldaclib_get_handle(
294*aef9bcd9SKiyoung Kim void)
295*aef9bcd9SKiyoung Kim {
296*aef9bcd9SKiyoung Kim HANDLE_LDAC hData;
297*aef9bcd9SKiyoung Kim
298*aef9bcd9SKiyoung Kim hData = (HANDLE_LDAC)malloc(sizeof(HANDLE_LDAC_STRUCT));
299*aef9bcd9SKiyoung Kim if (hData != (HANDLE_LDAC)NULL) {
300*aef9bcd9SKiyoung Kim clear_data_ldac(hData, sizeof(HANDLE_LDAC_STRUCT));
301*aef9bcd9SKiyoung Kim hData->sfinfo.p_mempos = (char *)NULL;
302*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_NONE;
303*aef9bcd9SKiyoung Kim }
304*aef9bcd9SKiyoung Kim
305*aef9bcd9SKiyoung Kim return hData;
306*aef9bcd9SKiyoung Kim }
307*aef9bcd9SKiyoung Kim
308*aef9bcd9SKiyoung Kim /***************************************************************************************************
309*aef9bcd9SKiyoung Kim Free Handle
310*aef9bcd9SKiyoung Kim ***************************************************************************************************/
311*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_free_handle(
312*aef9bcd9SKiyoung Kim HANDLE_LDAC hData)
313*aef9bcd9SKiyoung Kim {
314*aef9bcd9SKiyoung Kim if (hData != (HANDLE_LDAC)NULL) {
315*aef9bcd9SKiyoung Kim if (hData->sfinfo.p_mempos != (char *)NULL) {
316*aef9bcd9SKiyoung Kim return LDAC_S_OK;
317*aef9bcd9SKiyoung Kim }
318*aef9bcd9SKiyoung Kim
319*aef9bcd9SKiyoung Kim free(hData);
320*aef9bcd9SKiyoung Kim }
321*aef9bcd9SKiyoung Kim
322*aef9bcd9SKiyoung Kim return LDAC_S_OK;
323*aef9bcd9SKiyoung Kim }
324*aef9bcd9SKiyoung Kim
325*aef9bcd9SKiyoung Kim /***************************************************************************************************
326*aef9bcd9SKiyoung Kim Set Configuration Information
327*aef9bcd9SKiyoung Kim ***************************************************************************************************/
328*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_set_config_info(
329*aef9bcd9SKiyoung Kim HANDLE_LDAC hData,
330*aef9bcd9SKiyoung Kim int smplrate_id,
331*aef9bcd9SKiyoung Kim int chconfig_id,
332*aef9bcd9SKiyoung Kim int frame_length,
333*aef9bcd9SKiyoung Kim int frame_status)
334*aef9bcd9SKiyoung Kim {
335*aef9bcd9SKiyoung Kim CFG *p_cfg = &hData->sfinfo.cfg;
336*aef9bcd9SKiyoung Kim
337*aef9bcd9SKiyoung Kim if (!ldaclib_assert_sampling_rate_index(smplrate_id)) {
338*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_SAMPLING_RATE;
339*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
340*aef9bcd9SKiyoung Kim }
341*aef9bcd9SKiyoung Kim
342*aef9bcd9SKiyoung Kim if (!ldaclib_assert_supported_sampling_rate_index(smplrate_id)) {
343*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_SUP_SAMPLING_RATE;
344*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
345*aef9bcd9SKiyoung Kim }
346*aef9bcd9SKiyoung Kim
347*aef9bcd9SKiyoung Kim if (!ldaclib_assert_channel_config_index(chconfig_id)) {
348*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_CHANNEL_CONFIG;
349*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
350*aef9bcd9SKiyoung Kim }
351*aef9bcd9SKiyoung Kim
352*aef9bcd9SKiyoung Kim if (!ldaclib_assert_frame_length(frame_length)) {
353*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_FRAME_LENGTH;
354*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
355*aef9bcd9SKiyoung Kim }
356*aef9bcd9SKiyoung Kim
357*aef9bcd9SKiyoung Kim if (!ldaclib_assert_supported_frame_length(frame_length, chconfig_id)) {
358*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_SUP_FRAME_LENGTH;
359*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
360*aef9bcd9SKiyoung Kim }
361*aef9bcd9SKiyoung Kim
362*aef9bcd9SKiyoung Kim if (!ldaclib_assert_frame_status(frame_status)) {
363*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_FRAME_STATUS;
364*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
365*aef9bcd9SKiyoung Kim }
366*aef9bcd9SKiyoung Kim
367*aef9bcd9SKiyoung Kim p_cfg->smplrate_id = smplrate_id;
368*aef9bcd9SKiyoung Kim p_cfg->chconfig_id = chconfig_id;
369*aef9bcd9SKiyoung Kim p_cfg->frame_length = frame_length;
370*aef9bcd9SKiyoung Kim p_cfg->frame_status = frame_status;
371*aef9bcd9SKiyoung Kim
372*aef9bcd9SKiyoung Kim ldaclib_get_channel(chconfig_id, &p_cfg->ch);
373*aef9bcd9SKiyoung Kim
374*aef9bcd9SKiyoung Kim return LDAC_S_OK;
375*aef9bcd9SKiyoung Kim }
376*aef9bcd9SKiyoung Kim
377*aef9bcd9SKiyoung Kim /***************************************************************************************************
378*aef9bcd9SKiyoung Kim Get Configuration Information
379*aef9bcd9SKiyoung Kim ***************************************************************************************************/
380*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_config_info(
381*aef9bcd9SKiyoung Kim HANDLE_LDAC hData,
382*aef9bcd9SKiyoung Kim int *p_smplrate_id,
383*aef9bcd9SKiyoung Kim int *p_chconfig_id,
384*aef9bcd9SKiyoung Kim int *p_frame_length,
385*aef9bcd9SKiyoung Kim int *p_frame_status)
386*aef9bcd9SKiyoung Kim {
387*aef9bcd9SKiyoung Kim CFG *p_cfg = &hData->sfinfo.cfg;
388*aef9bcd9SKiyoung Kim
389*aef9bcd9SKiyoung Kim *p_smplrate_id = p_cfg->smplrate_id;
390*aef9bcd9SKiyoung Kim *p_chconfig_id = p_cfg->chconfig_id;
391*aef9bcd9SKiyoung Kim *p_frame_length = p_cfg->frame_length;
392*aef9bcd9SKiyoung Kim *p_frame_status = p_cfg->frame_status;
393*aef9bcd9SKiyoung Kim
394*aef9bcd9SKiyoung Kim return LDAC_S_OK;
395*aef9bcd9SKiyoung Kim }
396*aef9bcd9SKiyoung Kim
397*aef9bcd9SKiyoung Kim
398*aef9bcd9SKiyoung Kim /***************************************************************************************************
399*aef9bcd9SKiyoung Kim Set Frame Header
400*aef9bcd9SKiyoung Kim ***************************************************************************************************/
401*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_set_frame_header(
402*aef9bcd9SKiyoung Kim HANDLE_LDAC hData,
403*aef9bcd9SKiyoung Kim unsigned char *p_stream,
404*aef9bcd9SKiyoung Kim int smplrate_id,
405*aef9bcd9SKiyoung Kim int chconfig_id,
406*aef9bcd9SKiyoung Kim int frame_length,
407*aef9bcd9SKiyoung Kim int frame_status)
408*aef9bcd9SKiyoung Kim {
409*aef9bcd9SKiyoung Kim if (!ldaclib_assert_sampling_rate_index(smplrate_id)) {
410*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_SAMPLING_RATE;
411*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
412*aef9bcd9SKiyoung Kim }
413*aef9bcd9SKiyoung Kim
414*aef9bcd9SKiyoung Kim if (!ldaclib_assert_supported_sampling_rate_index(smplrate_id)) {
415*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_SUP_SAMPLING_RATE;
416*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
417*aef9bcd9SKiyoung Kim }
418*aef9bcd9SKiyoung Kim
419*aef9bcd9SKiyoung Kim if (!ldaclib_assert_channel_config_index(chconfig_id)) {
420*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_CHANNEL_CONFIG;
421*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
422*aef9bcd9SKiyoung Kim }
423*aef9bcd9SKiyoung Kim
424*aef9bcd9SKiyoung Kim if (!ldaclib_assert_frame_length(frame_length)) {
425*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_FRAME_LENGTH;
426*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
427*aef9bcd9SKiyoung Kim }
428*aef9bcd9SKiyoung Kim
429*aef9bcd9SKiyoung Kim if (!ldaclib_assert_supported_frame_length(frame_length, chconfig_id)) {
430*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_SUP_FRAME_LENGTH;
431*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
432*aef9bcd9SKiyoung Kim }
433*aef9bcd9SKiyoung Kim
434*aef9bcd9SKiyoung Kim if (!ldaclib_assert_frame_status(frame_status)) {
435*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_FRAME_STATUS;
436*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
437*aef9bcd9SKiyoung Kim }
438*aef9bcd9SKiyoung Kim
439*aef9bcd9SKiyoung Kim pack_frame_header_ldac(smplrate_id, chconfig_id, frame_length, frame_status,
440*aef9bcd9SKiyoung Kim (STREAM *)p_stream);
441*aef9bcd9SKiyoung Kim
442*aef9bcd9SKiyoung Kim return LDAC_S_OK;
443*aef9bcd9SKiyoung Kim }
444*aef9bcd9SKiyoung Kim
445*aef9bcd9SKiyoung Kim
446*aef9bcd9SKiyoung Kim /***************************************************************************************************
447*aef9bcd9SKiyoung Kim Encoder API Functions
448*aef9bcd9SKiyoung Kim ***************************************************************************************************/
449*aef9bcd9SKiyoung Kim
450*aef9bcd9SKiyoung Kim /***************************************************************************************************
451*aef9bcd9SKiyoung Kim Get Encoder Setting
452*aef9bcd9SKiyoung Kim ***************************************************************************************************/
453*aef9bcd9SKiyoung Kim #define LDAC_ENC_NSETTING 15
454*aef9bcd9SKiyoung Kim #define LDAC_ENC_NPROPERTY 9
455*aef9bcd9SKiyoung Kim
456*aef9bcd9SKiyoung Kim static const int saa_encode_setting_ldac[LDAC_ENC_NSETTING][LDAC_ENC_NPROPERTY] = {
457*aef9bcd9SKiyoung Kim {0, 512, 17, 0, 28, 44, 8, 24, 0},
458*aef9bcd9SKiyoung Kim {0, 256, 17, 0, 28, 44, 6, 22, 0},
459*aef9bcd9SKiyoung Kim #ifdef MODIFY_LDAC_ENC_SETTING_FOR_ABR_DEBUG // See file "ldacBT_abr.h" for description
460*aef9bcd9SKiyoung Kim {0, 164, 16, 0, 18, 32, 7, 23, 0},
461*aef9bcd9SKiyoung Kim {0, 110, 8, 0, 16, 32, 10, 31, 0},
462*aef9bcd9SKiyoung Kim {0, 82, 6, 0, 16, 32, 12, 31, 0},
463*aef9bcd9SKiyoung Kim {0, 66, 4, 0, 14, 26, 12, 31, 0},
464*aef9bcd9SKiyoung Kim {0, 54, 2, 0, 14, 26, 12, 31, 0},
465*aef9bcd9SKiyoung Kim {0, 46, 2, 1, 10, 26, 12, 31, 0},
466*aef9bcd9SKiyoung Kim {0, 40, 2, 2, 10, 26, 12, 31, 0},
467*aef9bcd9SKiyoung Kim {0, 36, 2, 2, 8, 26, 12, 31, 0},
468*aef9bcd9SKiyoung Kim {0, 32, 2, 2, 8, 26, 16, 31, 0},
469*aef9bcd9SKiyoung Kim {0, 30, 2, 2, 4, 26, 16, 31, 0},
470*aef9bcd9SKiyoung Kim {0, 26, 2, 3, 4, 26, 16, 31, 0},
471*aef9bcd9SKiyoung Kim {0, 24, 2, 3, 4, 26, 16, 31, 0},
472*aef9bcd9SKiyoung Kim #else
473*aef9bcd9SKiyoung Kim {0, 164, 16, 0, 18, 32, 7, 23, 0},
474*aef9bcd9SKiyoung Kim {0, 110, 13, 0, 16, 32, 10, 31, 0},
475*aef9bcd9SKiyoung Kim {0, 82, 12, 0, 16, 32, 12, 31, 0},
476*aef9bcd9SKiyoung Kim {0, 66, 11, 0, 14, 26, 12, 31, 0},
477*aef9bcd9SKiyoung Kim {0, 54, 10, 0, 14, 26, 12, 31, 0},
478*aef9bcd9SKiyoung Kim {0, 46, 9, 1, 10, 26, 12, 31, 0},
479*aef9bcd9SKiyoung Kim {0, 40, 8, 2, 10, 26, 12, 31, 0},
480*aef9bcd9SKiyoung Kim {0, 36, 7, 2, 8, 26, 12, 31, 0},
481*aef9bcd9SKiyoung Kim {0, 32, 6, 2, 8, 26, 16, 31, 0},
482*aef9bcd9SKiyoung Kim {0, 30, 5, 2, 4, 26, 16, 31, 0},
483*aef9bcd9SKiyoung Kim {0, 26, 4, 3, 4, 26, 16, 31, 0},
484*aef9bcd9SKiyoung Kim {0, 24, 3, 3, 4, 26, 16, 31, 0},
485*aef9bcd9SKiyoung Kim #endif
486*aef9bcd9SKiyoung Kim {0, 22, 2, 3, 4, 26, 16, 31, 0},
487*aef9bcd9SKiyoung Kim };
488*aef9bcd9SKiyoung Kim
489*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_encode_setting(
490*aef9bcd9SKiyoung Kim int nbytes_ch,
491*aef9bcd9SKiyoung Kim int smplrate_id,
492*aef9bcd9SKiyoung Kim int *p_nbands,
493*aef9bcd9SKiyoung Kim int *p_grad_mode,
494*aef9bcd9SKiyoung Kim int *p_grad_qu_l,
495*aef9bcd9SKiyoung Kim int *p_grad_qu_h,
496*aef9bcd9SKiyoung Kim int *p_grad_os_l,
497*aef9bcd9SKiyoung Kim int *p_grad_os_h,
498*aef9bcd9SKiyoung Kim int *p_abc_status)
499*aef9bcd9SKiyoung Kim {
500*aef9bcd9SKiyoung Kim int i, id;
501*aef9bcd9SKiyoung Kim
502*aef9bcd9SKiyoung Kim id = LDAC_ENC_NSETTING-1;
503*aef9bcd9SKiyoung Kim for (i = LDAC_ENC_NSETTING-1; i >= 0; i--) {
504*aef9bcd9SKiyoung Kim if (nbytes_ch >= saa_encode_setting_ldac[i][1]) {
505*aef9bcd9SKiyoung Kim id = i;
506*aef9bcd9SKiyoung Kim }
507*aef9bcd9SKiyoung Kim }
508*aef9bcd9SKiyoung Kim
509*aef9bcd9SKiyoung Kim *p_nbands = min_ldac(saa_encode_setting_ldac[id][2], ga_max_nbands_ldac[smplrate_id]);
510*aef9bcd9SKiyoung Kim *p_grad_mode = saa_encode_setting_ldac[id][3];
511*aef9bcd9SKiyoung Kim *p_grad_qu_l = saa_encode_setting_ldac[id][4];
512*aef9bcd9SKiyoung Kim *p_grad_qu_h = saa_encode_setting_ldac[id][5];
513*aef9bcd9SKiyoung Kim *p_grad_os_l = saa_encode_setting_ldac[id][6];
514*aef9bcd9SKiyoung Kim *p_grad_os_h = saa_encode_setting_ldac[id][7];
515*aef9bcd9SKiyoung Kim *p_abc_status = saa_encode_setting_ldac[id][8];
516*aef9bcd9SKiyoung Kim
517*aef9bcd9SKiyoung Kim return LDAC_S_OK;
518*aef9bcd9SKiyoung Kim }
519*aef9bcd9SKiyoung Kim
520*aef9bcd9SKiyoung Kim /***************************************************************************************************
521*aef9bcd9SKiyoung Kim Set Frame Length
522*aef9bcd9SKiyoung Kim ***************************************************************************************************/
523*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_set_encode_frame_length(
524*aef9bcd9SKiyoung Kim HANDLE_LDAC hData,
525*aef9bcd9SKiyoung Kim int frame_length)
526*aef9bcd9SKiyoung Kim {
527*aef9bcd9SKiyoung Kim CFG *p_cfg = &hData->sfinfo.cfg;
528*aef9bcd9SKiyoung Kim
529*aef9bcd9SKiyoung Kim if (!ldaclib_assert_frame_length(frame_length)) {
530*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_FRAME_LENGTH;
531*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
532*aef9bcd9SKiyoung Kim }
533*aef9bcd9SKiyoung Kim
534*aef9bcd9SKiyoung Kim if (!ldaclib_assert_supported_frame_length(frame_length, p_cfg->chconfig_id)) {
535*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ASSERT_SUP_FRAME_LENGTH;
536*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
537*aef9bcd9SKiyoung Kim }
538*aef9bcd9SKiyoung Kim
539*aef9bcd9SKiyoung Kim p_cfg->frame_length = frame_length;
540*aef9bcd9SKiyoung Kim
541*aef9bcd9SKiyoung Kim calc_initial_bits_ldac(&hData->sfinfo);
542*aef9bcd9SKiyoung Kim
543*aef9bcd9SKiyoung Kim return LDAC_S_OK;
544*aef9bcd9SKiyoung Kim }
545*aef9bcd9SKiyoung Kim
546*aef9bcd9SKiyoung Kim /***************************************************************************************************
547*aef9bcd9SKiyoung Kim Get Frame Length
548*aef9bcd9SKiyoung Kim ***************************************************************************************************/
549*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_encode_frame_length(
550*aef9bcd9SKiyoung Kim HANDLE_LDAC hData,
551*aef9bcd9SKiyoung Kim int *p_frame_length)
552*aef9bcd9SKiyoung Kim {
553*aef9bcd9SKiyoung Kim CFG *p_cfg = &hData->sfinfo.cfg;
554*aef9bcd9SKiyoung Kim
555*aef9bcd9SKiyoung Kim *p_frame_length = p_cfg->frame_length;
556*aef9bcd9SKiyoung Kim
557*aef9bcd9SKiyoung Kim return LDAC_S_OK;
558*aef9bcd9SKiyoung Kim }
559*aef9bcd9SKiyoung Kim
560*aef9bcd9SKiyoung Kim /***************************************************************************************************
561*aef9bcd9SKiyoung Kim Set Information
562*aef9bcd9SKiyoung Kim ***************************************************************************************************/
563*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_set_encode_info(
564*aef9bcd9SKiyoung Kim HANDLE_LDAC hData,
565*aef9bcd9SKiyoung Kim int nbands,
566*aef9bcd9SKiyoung Kim int grad_mode,
567*aef9bcd9SKiyoung Kim int grad_qu_l,
568*aef9bcd9SKiyoung Kim int grad_qu_h,
569*aef9bcd9SKiyoung Kim int grad_os_l,
570*aef9bcd9SKiyoung Kim int grad_os_h,
571*aef9bcd9SKiyoung Kim int abc_status)
572*aef9bcd9SKiyoung Kim {
573*aef9bcd9SKiyoung Kim if ((nbands < LDAC_BAND_OFFSET) ||
574*aef9bcd9SKiyoung Kim (ga_max_nbands_ldac[hData->sfinfo.cfg.smplrate_id] < nbands)) {
575*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ENC_ILL_NBANDS;
576*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
577*aef9bcd9SKiyoung Kim }
578*aef9bcd9SKiyoung Kim
579*aef9bcd9SKiyoung Kim if ((grad_mode < LDAC_MODE_0) || (LDAC_MODE_3 < grad_mode)) {
580*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ENC_ILL_GRADMODE;
581*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
582*aef9bcd9SKiyoung Kim }
583*aef9bcd9SKiyoung Kim
584*aef9bcd9SKiyoung Kim if (grad_mode == LDAC_MODE_0) {
585*aef9bcd9SKiyoung Kim if ((grad_qu_l < 0) || (LDAC_MAXGRADQU <= grad_qu_l)) {
586*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ENC_ILL_GRADPAR_A;
587*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
588*aef9bcd9SKiyoung Kim }
589*aef9bcd9SKiyoung Kim
590*aef9bcd9SKiyoung Kim if ((grad_qu_h < 1) || (LDAC_MAXGRADQU+1 <= grad_qu_h) || (grad_qu_h < grad_qu_l)) {
591*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ENC_ILL_GRADPAR_B;
592*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
593*aef9bcd9SKiyoung Kim }
594*aef9bcd9SKiyoung Kim
595*aef9bcd9SKiyoung Kim if ((grad_os_h < 0) || (LDAC_NIDSF <= grad_os_h)) {
596*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ENC_ILL_GRADPAR_C;
597*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
598*aef9bcd9SKiyoung Kim }
599*aef9bcd9SKiyoung Kim }
600*aef9bcd9SKiyoung Kim else {
601*aef9bcd9SKiyoung Kim if ((grad_qu_l < 0) || (LDAC_DEFGRADQUH < grad_qu_l)) {
602*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ENC_ILL_GRADPAR_A;
603*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
604*aef9bcd9SKiyoung Kim }
605*aef9bcd9SKiyoung Kim }
606*aef9bcd9SKiyoung Kim
607*aef9bcd9SKiyoung Kim if ((grad_os_l < 0) || (LDAC_NIDSF <= grad_os_l)) {
608*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ENC_ILL_GRADPAR_D;
609*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
610*aef9bcd9SKiyoung Kim }
611*aef9bcd9SKiyoung Kim
612*aef9bcd9SKiyoung Kim hData->nbands = nbands;
613*aef9bcd9SKiyoung Kim hData->grad_mode = grad_mode;
614*aef9bcd9SKiyoung Kim hData->grad_qu_l = grad_qu_l;
615*aef9bcd9SKiyoung Kim hData->grad_os_l = grad_os_l;
616*aef9bcd9SKiyoung Kim if (grad_mode == LDAC_MODE_0) {
617*aef9bcd9SKiyoung Kim hData->grad_qu_h = grad_qu_h;
618*aef9bcd9SKiyoung Kim hData->grad_os_h = grad_os_h;
619*aef9bcd9SKiyoung Kim }
620*aef9bcd9SKiyoung Kim else {
621*aef9bcd9SKiyoung Kim hData->grad_qu_h = LDAC_DEFGRADQUH;
622*aef9bcd9SKiyoung Kim hData->grad_os_h = LDAC_DEFGRADOSH;
623*aef9bcd9SKiyoung Kim }
624*aef9bcd9SKiyoung Kim hData->abc_status = abc_status;
625*aef9bcd9SKiyoung Kim
626*aef9bcd9SKiyoung Kim return LDAC_S_OK;
627*aef9bcd9SKiyoung Kim }
628*aef9bcd9SKiyoung Kim
629*aef9bcd9SKiyoung Kim /***************************************************************************************************
630*aef9bcd9SKiyoung Kim Initialize
631*aef9bcd9SKiyoung Kim ***************************************************************************************************/
632*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_init_encode(
633*aef9bcd9SKiyoung Kim HANDLE_LDAC hData)
634*aef9bcd9SKiyoung Kim {
635*aef9bcd9SKiyoung Kim SFINFO *p_sfinfo = &hData->sfinfo;
636*aef9bcd9SKiyoung Kim LDAC_RESULT result;
637*aef9bcd9SKiyoung Kim
638*aef9bcd9SKiyoung Kim
639*aef9bcd9SKiyoung Kim ldaclib_get_nlnn(p_sfinfo->cfg.smplrate_id, &hData->nlnn);
640*aef9bcd9SKiyoung Kim
641*aef9bcd9SKiyoung Kim set_mdct_table_ldac(hData->nlnn);
642*aef9bcd9SKiyoung Kim
643*aef9bcd9SKiyoung Kim result = init_encode_ldac(p_sfinfo);
644*aef9bcd9SKiyoung Kim if (result != LDAC_S_OK) {
645*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ENC_INIT_ALLOC;
646*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
647*aef9bcd9SKiyoung Kim }
648*aef9bcd9SKiyoung Kim
649*aef9bcd9SKiyoung Kim return LDAC_S_OK;
650*aef9bcd9SKiyoung Kim }
651*aef9bcd9SKiyoung Kim
652*aef9bcd9SKiyoung Kim /***************************************************************************************************
653*aef9bcd9SKiyoung Kim Free
654*aef9bcd9SKiyoung Kim ***************************************************************************************************/
655*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_free_encode(
656*aef9bcd9SKiyoung Kim HANDLE_LDAC hData)
657*aef9bcd9SKiyoung Kim {
658*aef9bcd9SKiyoung Kim if (hData->sfinfo.p_mempos == NULL) {
659*aef9bcd9SKiyoung Kim free_encode_ldac(&hData->sfinfo);
660*aef9bcd9SKiyoung Kim }
661*aef9bcd9SKiyoung Kim
662*aef9bcd9SKiyoung Kim return LDAC_S_OK;
663*aef9bcd9SKiyoung Kim }
664*aef9bcd9SKiyoung Kim
665*aef9bcd9SKiyoung Kim /***************************************************************************************************
666*aef9bcd9SKiyoung Kim Encode
667*aef9bcd9SKiyoung Kim ***************************************************************************************************/
668*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_encode(
669*aef9bcd9SKiyoung Kim HANDLE_LDAC hData,
670*aef9bcd9SKiyoung Kim char *ap_pcm[],
671*aef9bcd9SKiyoung Kim LDAC_SMPL_FMT_T sample_format,
672*aef9bcd9SKiyoung Kim unsigned char *p_stream,
673*aef9bcd9SKiyoung Kim int *p_nbytes_used)
674*aef9bcd9SKiyoung Kim {
675*aef9bcd9SKiyoung Kim SFINFO *p_sfinfo = &hData->sfinfo;
676*aef9bcd9SKiyoung Kim int loc = 0;
677*aef9bcd9SKiyoung Kim int error_code;
678*aef9bcd9SKiyoung Kim int frame_length;
679*aef9bcd9SKiyoung Kim
680*aef9bcd9SKiyoung Kim
681*aef9bcd9SKiyoung Kim if (!ldaclib_assert_sample_format(sample_format)) {
682*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ILL_SMPL_FORMAT;
683*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
684*aef9bcd9SKiyoung Kim }
685*aef9bcd9SKiyoung Kim
686*aef9bcd9SKiyoung Kim frame_length = p_sfinfo->cfg.frame_length;
687*aef9bcd9SKiyoung Kim clear_data_ldac(p_stream, frame_length*sizeof(unsigned char));
688*aef9bcd9SKiyoung Kim
689*aef9bcd9SKiyoung Kim set_input_pcm_ldac(p_sfinfo, ap_pcm, sample_format, hData->nlnn);
690*aef9bcd9SKiyoung Kim
691*aef9bcd9SKiyoung Kim proc_mdct_ldac(p_sfinfo, hData->nlnn);
692*aef9bcd9SKiyoung Kim
693*aef9bcd9SKiyoung Kim p_sfinfo->cfg.frame_status = ana_frame_status_ldac(p_sfinfo, hData->nlnn);
694*aef9bcd9SKiyoung Kim
695*aef9bcd9SKiyoung Kim error_code = encode_ldac(p_sfinfo, hData->nbands, hData->grad_mode,
696*aef9bcd9SKiyoung Kim hData->grad_qu_l, hData->grad_qu_h, hData->grad_os_l, hData->grad_os_h,
697*aef9bcd9SKiyoung Kim hData->abc_status);
698*aef9bcd9SKiyoung Kim if (LDAC_ERROR(error_code) && !LDAC_FATAL_ERROR(error_code)) {
699*aef9bcd9SKiyoung Kim int error_code2;
700*aef9bcd9SKiyoung Kim error_code2 = pack_null_data_frame_ldac(p_sfinfo, (STREAM *)p_stream, &loc, p_nbytes_used);
701*aef9bcd9SKiyoung Kim if (LDAC_FATAL_ERROR(error_code2)) {
702*aef9bcd9SKiyoung Kim clear_data_ldac(p_stream, frame_length*sizeof(unsigned char));
703*aef9bcd9SKiyoung Kim hData->error_code = error_code2;
704*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
705*aef9bcd9SKiyoung Kim }
706*aef9bcd9SKiyoung Kim hData->error_code = error_code;
707*aef9bcd9SKiyoung Kim return LDAC_S_FALSE;
708*aef9bcd9SKiyoung Kim }
709*aef9bcd9SKiyoung Kim
710*aef9bcd9SKiyoung Kim error_code = pack_raw_data_frame_ldac(p_sfinfo, (STREAM *)p_stream, &loc, p_nbytes_used);
711*aef9bcd9SKiyoung Kim if (LDAC_FATAL_ERROR(error_code)) {
712*aef9bcd9SKiyoung Kim int error_code2;
713*aef9bcd9SKiyoung Kim loc = 0;
714*aef9bcd9SKiyoung Kim clear_data_ldac(p_stream, frame_length*sizeof(unsigned char));
715*aef9bcd9SKiyoung Kim error_code2 = pack_null_data_frame_ldac(p_sfinfo, (STREAM *)p_stream, &loc, p_nbytes_used);
716*aef9bcd9SKiyoung Kim if (LDAC_FATAL_ERROR(error_code2)) {
717*aef9bcd9SKiyoung Kim clear_data_ldac(p_stream, frame_length*sizeof(unsigned char));
718*aef9bcd9SKiyoung Kim hData->error_code = error_code2;
719*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
720*aef9bcd9SKiyoung Kim }
721*aef9bcd9SKiyoung Kim hData->error_code = error_code;
722*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
723*aef9bcd9SKiyoung Kim }
724*aef9bcd9SKiyoung Kim
725*aef9bcd9SKiyoung Kim return LDAC_S_OK;
726*aef9bcd9SKiyoung Kim }
727*aef9bcd9SKiyoung Kim
728*aef9bcd9SKiyoung Kim /***************************************************************************************************
729*aef9bcd9SKiyoung Kim Flush Encode
730*aef9bcd9SKiyoung Kim ***************************************************************************************************/
731*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_flush_encode(
732*aef9bcd9SKiyoung Kim HANDLE_LDAC hData,
733*aef9bcd9SKiyoung Kim LDAC_SMPL_FMT_T sample_format,
734*aef9bcd9SKiyoung Kim unsigned char *p_stream,
735*aef9bcd9SKiyoung Kim int *p_nbytes_used)
736*aef9bcd9SKiyoung Kim {
737*aef9bcd9SKiyoung Kim LDAC_RESULT result;
738*aef9bcd9SKiyoung Kim int ich;
739*aef9bcd9SKiyoung Kim char *ap_buf[LDAC_PRCNCH];
740*aef9bcd9SKiyoung Kim int a_buf[LDAC_MAXLSU*LDAC_PRCNCH];
741*aef9bcd9SKiyoung Kim
742*aef9bcd9SKiyoung Kim if (!ldaclib_assert_sample_format(sample_format)) {
743*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_ILL_SMPL_FORMAT;
744*aef9bcd9SKiyoung Kim return LDAC_E_FAIL;
745*aef9bcd9SKiyoung Kim }
746*aef9bcd9SKiyoung Kim
747*aef9bcd9SKiyoung Kim clear_data_ldac(a_buf, (LDAC_MAXLSU*LDAC_PRCNCH)*sizeof(int));
748*aef9bcd9SKiyoung Kim
749*aef9bcd9SKiyoung Kim for (ich = 0; ich < LDAC_PRCNCH; ich++) {
750*aef9bcd9SKiyoung Kim ap_buf[ich] = (char *)(a_buf + ich * LDAC_MAXLSU);
751*aef9bcd9SKiyoung Kim }
752*aef9bcd9SKiyoung Kim
753*aef9bcd9SKiyoung Kim result = ldaclib_encode(hData, ap_buf, sample_format, p_stream, p_nbytes_used);
754*aef9bcd9SKiyoung Kim
755*aef9bcd9SKiyoung Kim return result;
756*aef9bcd9SKiyoung Kim }
757*aef9bcd9SKiyoung Kim
758*aef9bcd9SKiyoung Kim
759*aef9bcd9SKiyoung Kim
760*aef9bcd9SKiyoung Kim
761*aef9bcd9SKiyoung Kim /***************************************************************************************************
762*aef9bcd9SKiyoung Kim Error Code Dispatch
763*aef9bcd9SKiyoung Kim ***************************************************************************************************/
764*aef9bcd9SKiyoung Kim
765*aef9bcd9SKiyoung Kim /***************************************************************************************************
766*aef9bcd9SKiyoung Kim Clear Error Code at Handle Level
767*aef9bcd9SKiyoung Kim ***************************************************************************************************/
768*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_clear_error_code(
769*aef9bcd9SKiyoung Kim HANDLE_LDAC hData)
770*aef9bcd9SKiyoung Kim {
771*aef9bcd9SKiyoung Kim hData->error_code = LDAC_ERR_NONE;
772*aef9bcd9SKiyoung Kim
773*aef9bcd9SKiyoung Kim return LDAC_S_OK;
774*aef9bcd9SKiyoung Kim }
775*aef9bcd9SKiyoung Kim
776*aef9bcd9SKiyoung Kim /***************************************************************************************************
777*aef9bcd9SKiyoung Kim Get Error Code at Handle Level
778*aef9bcd9SKiyoung Kim ***************************************************************************************************/
779*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_error_code(
780*aef9bcd9SKiyoung Kim HANDLE_LDAC hData,
781*aef9bcd9SKiyoung Kim int *p_error_code)
782*aef9bcd9SKiyoung Kim {
783*aef9bcd9SKiyoung Kim *p_error_code = hData->error_code;
784*aef9bcd9SKiyoung Kim
785*aef9bcd9SKiyoung Kim return LDAC_S_OK;
786*aef9bcd9SKiyoung Kim }
787*aef9bcd9SKiyoung Kim
788*aef9bcd9SKiyoung Kim /***************************************************************************************************
789*aef9bcd9SKiyoung Kim Clear Error Code at Internal Block Level
790*aef9bcd9SKiyoung Kim ***************************************************************************************************/
791*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_clear_internal_error_code(
792*aef9bcd9SKiyoung Kim HANDLE_LDAC hData)
793*aef9bcd9SKiyoung Kim {
794*aef9bcd9SKiyoung Kim hData->sfinfo.error_code = LDAC_ERR_NONE;
795*aef9bcd9SKiyoung Kim
796*aef9bcd9SKiyoung Kim return LDAC_S_OK;
797*aef9bcd9SKiyoung Kim }
798*aef9bcd9SKiyoung Kim
799*aef9bcd9SKiyoung Kim /***************************************************************************************************
800*aef9bcd9SKiyoung Kim Get Error Code at Internal Block Level
801*aef9bcd9SKiyoung Kim ***************************************************************************************************/
802*aef9bcd9SKiyoung Kim DECLSPEC LDAC_RESULT ldaclib_get_internal_error_code(
803*aef9bcd9SKiyoung Kim HANDLE_LDAC hData,
804*aef9bcd9SKiyoung Kim int *p_error_code)
805*aef9bcd9SKiyoung Kim {
806*aef9bcd9SKiyoung Kim *p_error_code = hData->sfinfo.error_code;
807*aef9bcd9SKiyoung Kim
808*aef9bcd9SKiyoung Kim return LDAC_S_OK;
809*aef9bcd9SKiyoung Kim }
810*aef9bcd9SKiyoung Kim
811