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 }
From2iToMS_Float(const LVM_FLOAT * src,LVM_FLOAT * dstM,LVM_FLOAT * dstS,LVM_INT16 n)56 void From2iToMS_Float( const LVM_FLOAT  *src,
57                              LVM_FLOAT  *dstM,
58                              LVM_FLOAT  *dstS,
59                              LVM_INT16  n )
60 {
61     LVM_FLOAT temp1,left,right;
62     LVM_INT16 ii;
63     for (ii = n; ii != 0; ii--)
64     {
65         left = (LVM_FLOAT)*src;
66         src++;
67 
68         right = (LVM_FLOAT)*src;
69         src++;
70 
71         /* Compute M signal*/
72         temp1 =  (left + right) / 2.0f;
73         *dstM = (LVM_FLOAT)temp1;
74         dstM++;
75 
76         /* Compute S signal*/
77         temp1 =  (left - right) / 2.0f;
78         *dstS = (LVM_FLOAT)temp1;
79         dstS++;
80     }
81 
82     return;
83 }
84 /**********************************************************************************/
85