blob: 21458c88c558bdc539f004a1b858a280d4c0dfc1 [file] [log] [blame]
/*
** Copyright 2003-2010, VisualOn, Inc.
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
/***********************************************************************
* File: scale.c *
* *
* Description: Scale signal to get maximum of dynamic *
* *
************************************************************************/
#include "typedef.h"
#include "basic_op.h"
void Scale_sig(
Word16 x[], /* (i/o) : signal to scale */
Word16 lg, /* (i) : size of x[] */
Word16 exp /* (i) : exponent: x = round(x << exp) */
)
{
Word32 i;
Word32 L_tmp;
if(exp > 0)
{
for (i = lg - 1 ; i >= 0; i--)
{
L_tmp = L_shl2(x[i], 16 + exp);
x[i] = extract_h(L_add(L_tmp, 0x8000));
}
}
else
{
exp = -exp;
for (i = lg - 1; i >= 0; i--)
{
L_tmp = x[i] << 16;
L_tmp >>= exp;
x[i] = (L_tmp + 0x8000)>>16;
}
}
return;
}