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
28void 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
57void 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