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  From2iToMS_16x16
26 ***********************************************************************************/
27 
From2iToMS_16x16(const LVM_INT16 * src,LVM_INT16 * dstM,LVM_INT16 * dstS,LVM_INT16 n)28 void From2iToMS_16x16( const LVM_INT16  *src,
29                              LVM_INT16  *dstM,
30                              LVM_INT16  *dstS,
31                              LVM_INT16  n )
32 {
33     LVM_INT32 temp1,left,right;
34     LVM_INT16 ii;
35     for (ii = n; ii != 0; ii--)
36     {
37         left = (LVM_INT32)*src;
38         src++;
39 
40         right = (LVM_INT32)*src;
41         src++;
42 
43         /* Compute M signal*/
44         temp1 =  (left+right)>>1;
45         *dstM = (LVM_INT16)temp1;
46         dstM++;
47 
48         /* Compute S signal*/
49         temp1 =  (left-right)>>1;
50         *dstS = (LVM_INT16)temp1;
51         dstS++;
52     }
53 
54     return;
55 }
56 #ifdef BUILD_FLOAT
From2iToMS_Float(const LVM_FLOAT * src,LVM_FLOAT * dstM,LVM_FLOAT * dstS,LVM_INT16 n)57 void From2iToMS_Float( const LVM_FLOAT  *src,
58                              LVM_FLOAT  *dstM,
59                              LVM_FLOAT  *dstS,
60                              LVM_INT16  n )
61 {
62     LVM_FLOAT temp1,left,right;
63     LVM_INT16 ii;
64     for (ii = n; ii != 0; ii--)
65     {
66         left = (LVM_FLOAT)*src;
67         src++;
68 
69         right = (LVM_FLOAT)*src;
70         src++;
71 
72         /* Compute M signal*/
73         temp1 =  (left + right) / 2.0f;
74         *dstM = (LVM_FLOAT)temp1;
75         dstM++;
76 
77         /* Compute S signal*/
78         temp1 =  (left - right) / 2.0f;
79         *dstS = (LVM_FLOAT)temp1;
80         dstS++;
81     }
82 
83     return;
84 }
85 #endif
86 /**********************************************************************************/
87