1d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/* ------------------------------------------------------------------
2d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * Copyright (C) 1998-2009 PacketVideo
3d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *
4d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * you may not use this file except in compliance with the License.
6d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * You may obtain a copy of the License at
7d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *
8d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *
10d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * Unless required by applicable law or agreed to in writing, software
11d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * express or implied.
14d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * See the License for the specific language governing permissions
15d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * and limitations under the License.
16d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * -------------------------------------------------------------------
17d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber */
18d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/****************************************************************************************
19d49b526dd2009270cb15f7fe4e70b74673950608Andreas HuberPortions of this file are derived from the following 3GPP standard:
20d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
21d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    3GPP TS 26.073
22d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
23d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Available from http://www.3gpp.org
24d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
25d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
26d49b526dd2009270cb15f7fe4e70b74673950608Andreas HuberPermission to distribute, modify and use this file under the standard license
27d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huberterms listed above has been obtained from the copyright holder.
28d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber****************************************************************************************/
29d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*
30d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
31d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
32d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
33d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
34d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Filename: /audio/gsm_amr/c/src/l_extract.c
35d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
36d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     Date: 09/07/2000
37d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
38d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
39d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REVISION HISTORY
40d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
41d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description: Updated template. Changed function interface to pass in a
42d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              pointer to overflow flag into the function instead of using a
43d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              global flag. Changed names of function parameters for clarity.
44d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Removed inclusion of unwanted header files.
45d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
46d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description:
47d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
48d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
49d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber*/
50d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
51d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
52d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; INCLUDES
53d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
54d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include    "basic_op.h"
55d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
56d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
57d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; MACROS
58d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; [Define module specific macros here]
59d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
60d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
61d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
62d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; DEFINES
63d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; [Include all pre-processor statements here. Include conditional
64d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; compile variables also.]
65d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
66d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
67d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
68d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; LOCAL FUNCTION DEFINITIONS
69d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; [List function prototypes here]
70d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
71d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
72d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
73d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; LOCAL VARIABLE DEFINITIONS
74d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; [Variable declaration - defined here and used outside this module]
75d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
76d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
77d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
78d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*
79d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
80d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION NAME: L_extract
81d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
82d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber INPUT AND OUTPUT DEFINITIONS
83d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
84d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Inputs:
85d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    L_var = 32 bit signed integer (Word32) whose value falls
86d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber           in the range : 0x8000 0000 <= L_32 <= 0x7fff ffff.
87d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
88d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    pL_var_hi =  pointer to the most significant word of L_var (Word16).
89d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
90d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    pL_var_lo =  pointer to the least significant word of L_var shifted
91d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              to the left by 1 (Word16).
92d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
93d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    pOverflow = pointer to overflow (Flag)
94d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
95d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Outputs:
96d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    pOverflow -> 1 if the 32 bit add operation resulted in overflow
97d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    pL_var_hi -> MS word of L_32.
98d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    pL_var_lo -> LS word of L_32 shifted left by 1.
99d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
100d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Returns:
101d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None
102d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
103d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Global Variables Used:
104d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None
105d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
106d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Local Variables Needed:
107d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None
108d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
109d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
110d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION DESCRIPTION
111d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
112d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber This function extracts two 16-bit double precision format (DPF) numbers
113d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber from a 32-bit integer. The MS word of L_var will be stored in the location
114d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber pointed to by pL_var_hi and the shifted LS word of L_var will be stored in
115d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber the location pointed to by pL_var_lo.
116d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
117d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
118d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REQUIREMENTS
119d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
120d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber None
121d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
122d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
123d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REFERENCES
124d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
125d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber [1] L_extract() function in oper_32b.c,  UMTS GSM AMR speech codec, R99 -
126d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Version 3.2.0, March 2, 2001
127d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
128d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
129d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber PSEUDO-CODE
130d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
131d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
132d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
133d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber RESOURCES USED [optional]
134d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
135d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber When the code is written for a specific target processor the
136d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber the resources used should be documented below.
137d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
138d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber HEAP MEMORY USED: x bytes
139d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
140d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber STACK MEMORY USED: x bytes
141d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
142d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable
143d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                used to represent cycle count for each subroutine
144d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                called)
145d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     where: (cycle count variable) = cycle count for [subroutine
146d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                                     name]
147d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
148d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
149d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CAUTION [optional]
150d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber [State any special notes, constraints or cautions for users of this function]
151d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
152d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
153d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber*/
154d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
155d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
156d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; FUNCTION CODE
157d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
158d49b526dd2009270cb15f7fe4e70b74673950608Andreas Hubervoid L_Extract(Word32 L_var,
159d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber               Word16 *pL_var_hi,
160d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber               Word16 *pL_var_lo,
161d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber               Flag   *pOverflow)
162d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber{
163d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
164d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word32  temp;
165d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
166d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    OSCL_UNUSED_ARG(pOverflow);
167d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
168d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    temp = (L_var >> 16);
169d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
170d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    *(pL_var_hi) = (Word16) temp;
171d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    *(pL_var_lo) = (Word16)((L_var >> 1) - (temp << 15));
172d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
173d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    return;
174d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber}
175