1 /*
2  * Copyright (C) 2004-2010 NXP Software
3  * Copyright (C) 2010 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /**********************************************************************************
19    INCLUDE FILES
20 ***********************************************************************************/
21 
22 #include "VectorArithmetic.h"
23 
24 /**********************************************************************************
25    FUNCTION From2iToMono_32
26 ***********************************************************************************/
27 
From2iToMono_32(const LVM_INT32 * src,LVM_INT32 * dst,LVM_INT16 n)28 void From2iToMono_32( const LVM_INT32 *src,
29                             LVM_INT32 *dst,
30                             LVM_INT16 n)
31 {
32     LVM_INT16 ii;
33     LVM_INT32 Temp;
34 
35     for (ii = n; ii != 0; ii--)
36     {
37         Temp = (*src>>1);
38         src++;
39 
40         Temp +=(*src>>1);
41         src++;
42 
43         *dst = Temp;
44         dst++;
45     }
46 
47     return;
48 }
49 #ifdef BUILD_FLOAT
From2iToMono_Float(const LVM_FLOAT * src,LVM_FLOAT * dst,LVM_INT16 n)50 void From2iToMono_Float( const LVM_FLOAT *src,
51                          LVM_FLOAT *dst,
52                          LVM_INT16 n)
53 {
54     LVM_INT16 ii;
55     LVM_FLOAT Temp;
56 
57     for (ii = n; ii != 0; ii--)
58     {
59         Temp = (*src);
60         src++;
61 
62         Temp += (*src);
63         src++;
64 
65         *dst = Temp / 2.0f;
66         dst++;
67     }
68 
69     return;
70 }
71 #ifdef SUPPORT_MC
72 /*
73  * FUNCTION:       FromMcToMono_Float
74  *
75  * DESCRIPTION:
76  *  Creates a mono stream from a multichannel input taking the avergae of
77  *  sample values of all channels
78  *
79  * PARAMETERS:
80  *  src            Source
81  *  dst            Destination
82  *  NrFrames       Number of frames
83  *  NrChannels     Number of channels
84  *
85  * RETURNS:
86  *  void
87  *
88  */
FromMcToMono_Float(const LVM_FLOAT * src,LVM_FLOAT * dst,LVM_INT16 NrFrames,LVM_INT16 NrChannels)89 void FromMcToMono_Float(const LVM_FLOAT *src,
90                         LVM_FLOAT *dst,
91                         LVM_INT16 NrFrames,
92                         LVM_INT16 NrChannels)
93 {
94     LVM_INT16 ii, jj;
95     LVM_FLOAT Temp;
96 
97     for (ii = NrFrames; ii != 0; ii--)
98     {
99         Temp = 0.0f;
100         for (jj = NrChannels; jj !=0; jj--)
101         {
102             Temp += (*src);
103             src++;
104         }
105         *dst = Temp / NrChannels;
106         dst++;
107     }
108 
109     return;
110 }
111 #endif
112 
113 #endif
114 /**********************************************************************************/
115