- initial import
This commit is contained in:
145
src/libs/libg729/util.c
Normal file
145
src/libs/libg729/util.c
Normal file
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
ITU-T G.729A Speech Coder ANSI-C Source Code
|
||||
Version 1.1 Last modified: September 1996
|
||||
|
||||
Copyright (c) 1996,
|
||||
AT&T, France Telecom, NTT, Universite de Sherbrooke
|
||||
All rights reserved.
|
||||
*/
|
||||
|
||||
/*-------------------------------------------------------------------*
|
||||
* Function Set zero() *
|
||||
* ~~~~~~~~~~ *
|
||||
* Set vector x[] to zero *
|
||||
*-------------------------------------------------------------------*/
|
||||
|
||||
#include "typedef.h"
|
||||
#include "basic_op.h"
|
||||
#include "ld8a.h"
|
||||
#include "tab_ld8a.h"
|
||||
|
||||
void
|
||||
Set_zero (Word16 x[], Word16 L)
|
||||
{
|
||||
Word16 i;
|
||||
|
||||
for (i = 0; i < L; i++)
|
||||
x[i] = 0;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------*
|
||||
* Function Copy: *
|
||||
* ~~~~~ *
|
||||
* Copy vector x[] to y[] *
|
||||
*-------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
Copy (Word16 x[], Word16 y[], Word16 L)
|
||||
{
|
||||
Word16 i;
|
||||
|
||||
for (i = 0; i < L; i++)
|
||||
y[i] = x[i];
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* Random generator */
|
||||
|
||||
Word16
|
||||
Random_16 (Word16* seed)
|
||||
{
|
||||
/* seed = seed*31821 + 13849; */
|
||||
*seed = extract_l (L_add (L_shr (L_mult (*seed, 31821), 1), 13849L));
|
||||
|
||||
return (*seed);
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Store_Param - converts encoder parameter vector into frame
|
||||
* Restore_Params - converts serial received frame to encoder parameter vector
|
||||
*
|
||||
* The transmitted parameters are:
|
||||
*
|
||||
* LPC: 1st codebook 7+1 bit
|
||||
* 2nd codebook 5+5 bit
|
||||
*
|
||||
* 1st subframe:
|
||||
* pitch period 8 bit
|
||||
* parity check on 1st period 1 bit
|
||||
* codebook index1 (positions) 13 bit
|
||||
* codebook index2 (signs) 4 bit
|
||||
* pitch and codebook gains 4+3 bit
|
||||
*
|
||||
* 2nd subframe:
|
||||
* pitch period (relative) 5 bit
|
||||
* codebook index1 (positions) 13 bit
|
||||
* codebook index2 (signs) 4 bit
|
||||
* pitch and codebook gains 4+3 bit
|
||||
*----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
void
|
||||
Store_Params(Word16 * parm, void *to)
|
||||
{
|
||||
int i, j;
|
||||
unsigned char mask, *to_b;
|
||||
Word16 value, val_mask;
|
||||
|
||||
to_b = (unsigned char *)to;
|
||||
mask = 0x80;
|
||||
for (i = 0; i < PRM_SIZE; i++) {
|
||||
value = parm[i];
|
||||
val_mask = 1 << (bitsno[i] - 1);
|
||||
for (j = 0; j < bitsno[i]; j++) {
|
||||
|
||||
if (value & val_mask)
|
||||
*to_b |= mask;
|
||||
else
|
||||
*to_b &= ~mask;
|
||||
|
||||
value = value << 1;
|
||||
mask = mask >> 1;
|
||||
|
||||
if (mask == 0) {
|
||||
mask = 0x80;
|
||||
to_b++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void Restore_Params(const void *from, Word16 * parm)
|
||||
{
|
||||
int i, j;
|
||||
unsigned char mask, *from_b;
|
||||
Word16 value;
|
||||
|
||||
mask = 0x80;
|
||||
from_b = (unsigned char *)from;
|
||||
|
||||
for (i = 0; i < PRM_SIZE; i++) {
|
||||
value = 0;
|
||||
for (j = 0; j < bitsno[i]; j++) {
|
||||
|
||||
value = value << 1;
|
||||
|
||||
if (mask & (*from_b))
|
||||
value += 1;
|
||||
|
||||
mask = mask >> 1;
|
||||
if (mask == 0) {
|
||||
mask = 0x80;
|
||||
from_b++;
|
||||
}
|
||||
}
|
||||
parm[i] = value;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user