blob: 3b8e589b2f8a92e581c8868652326a12eb1ea5e8 [file] [log] [blame]
Chisato Kenmochi94704432017-01-10 11:56:48 +09001/*
2 * Copyright (C) 2003 - 2016 Sony Corporation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "ldac.h"
18
19/***************************************************************************************************
20 Subfunction: Convert from 16bit Signed Integer PCM
21***************************************************************************************************/
22__inline static void byte_data_to_int_s16_ldac(
23char *p_in,
24INT32 *p_out,
25int nsmpl)
26{
27 int i;
28 short *p_s;
29
30 p_s = (short *)p_in;
31 for (i = 0; i < nsmpl; i++) {
32 *p_out++ = lsft_ldac((INT32)*p_s++, LDAC_Q_SETPCM);
33 }
34
35 return;
36}
37
38/***************************************************************************************************
39 Subfunction: Convert from 24bit Signed Integer PCM
40***************************************************************************************************/
41__inline static void byte_data_to_int_s24_ldac(
42char *p_in,
43INT32 *p_out,
44int nsmpl)
45{
46 int i, val;
47 char *p_c;
48
49 p_c = (char *)p_in;
50 for (i = 0; i < nsmpl; i++) {
51#ifdef LDAC_HOST_ENDIAN_LITTLE
52 val = 0x000000ff & (*p_c++);
53 val |= 0x0000ff00 & (*p_c++ << 8);
54 val |= 0xffff0000 & (*p_c++ << 16);
55#else /* LDAC_HOST_ENDIAN_LITTLE */
56 val = 0xffff0000 & (*p_c++ << 16);
57 val |= 0x0000ff00 & (*p_c++ << 8);
58 val |= 0x000000ff & (*p_c++);
59#endif /* LDAC_HOST_ENDIAN_LITTLE */
60 *p_out++ = (INT32)((val << 8) >> 1); /* Sign Extension */
61 }
62
63 return;
64}
65
66/***************************************************************************************************
67 Subfunction: Convert from 32bit Signed Integer PCM
68***************************************************************************************************/
69__inline static void byte_data_to_int_s32_ldac(
70char *p_in,
71INT32 *p_out,
72int nsmpl)
73{
74 int i;
75 int *p_l;
76
77 p_l = (int *)p_in;
78 for (i = 0; i < nsmpl; i++) {
79 *p_out++ = rsft_ldac((INT32)*p_l++, 16-LDAC_Q_SETPCM);
80 }
81
82 return;
83}
84
85/***************************************************************************************************
86 Set Input PCM
87***************************************************************************************************/
88DECLFUNC void set_input_pcm_ldac(
89SFINFO *p_sfinfo,
90char *pp_pcm[],
91LDAC_SMPL_FMT_T format,
92int nlnn)
93{
94 int ich, isp;
95 int nchs = p_sfinfo->cfg.ch;
96 int nsmpl = npow2_ldac(nlnn);
97 INT32 *p_time;
98
99 if (format == LDAC_SMPL_FMT_S16) {
100 for (ich = 0; ich < nchs; ich++) {
101 p_time = p_sfinfo->ap_ac[ich]->p_acsub->a_time;
102 for (isp = 0; isp < nsmpl; isp++) {
103 p_time[isp] = p_time[nsmpl+isp];
104 }
105 byte_data_to_int_s16_ldac(pp_pcm[ich], p_time+nsmpl, nsmpl);
106 }
107 }
108 else if (format == LDAC_SMPL_FMT_S24) {
109 for (ich = 0; ich < nchs; ich++) {
110 p_time = p_sfinfo->ap_ac[ich]->p_acsub->a_time;
111 for (isp = 0; isp < nsmpl; isp++) {
112 p_time[isp] = p_time[nsmpl+isp];
113 }
114 byte_data_to_int_s24_ldac(pp_pcm[ich], p_time+nsmpl, nsmpl);
115 }
116 }
117 else if (format == LDAC_SMPL_FMT_S32) {
118 for (ich = 0; ich < nchs; ich++) {
119 p_time = p_sfinfo->ap_ac[ich]->p_acsub->a_time;
120 for (isp = 0; isp < nsmpl; isp++) {
121 p_time[isp] = p_time[nsmpl+isp];
122 }
123 byte_data_to_int_s32_ldac(pp_pcm[ich], p_time+nsmpl, nsmpl);
124 }
125 }
126
127 return;
128}
129
130