mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 04:11:08 +00:00
Update to new iLBC codec
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3997 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1,104 +1,106 @@
|
||||
|
||||
/******************************************************************
|
||||
|
||||
iLBC Speech Coder ANSI-C Source Code
|
||||
|
||||
gainquant.c
|
||||
|
||||
Copyright (c) 2001,
|
||||
Global IP Sound AB.
|
||||
All rights reserved.
|
||||
|
||||
******************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include "constants.h"
|
||||
#include "filter.h"
|
||||
#include "gainquant.h"
|
||||
|
||||
/*----------------------------------------------------------------*
|
||||
* quantizer for the gain in the gain-shape coding of residual
|
||||
*---------------------------------------------------------------*/
|
||||
|
||||
float gainquant(/* (o) quantized gain value */
|
||||
float in, /* (i) gain value */
|
||||
float maxIn,/* (i) maximum of gain value */
|
||||
int cblen, /* (i) number of quantization indices */
|
||||
int *index /* (o) quantization index */
|
||||
){
|
||||
int i, tindex;
|
||||
float minmeasure,measure, *cb, scale;
|
||||
|
||||
/* ensure a lower bound on the scaling factor */
|
||||
|
||||
scale=maxIn;
|
||||
|
||||
if (scale<0.1) {
|
||||
scale=(float)0.1;
|
||||
}
|
||||
|
||||
/* select the quantization table */
|
||||
|
||||
if (cblen == 8) {
|
||||
cb = gain_sq3Tbl;
|
||||
} else if (cblen == 16) {
|
||||
cb = gain_sq4Tbl;
|
||||
} else {
|
||||
cb = gain_sq5Tbl;
|
||||
}
|
||||
|
||||
/* select the best index in the quantization table */
|
||||
|
||||
minmeasure=10000000.0;
|
||||
tindex=0;
|
||||
for (i=0;i<cblen;i++) {
|
||||
measure=(in-scale*cb[i])*(in-scale*cb[i]);
|
||||
|
||||
if (measure<minmeasure) {
|
||||
tindex=i;
|
||||
minmeasure=measure;
|
||||
}
|
||||
}
|
||||
*index=tindex;
|
||||
|
||||
/******************************************************************
|
||||
|
||||
iLBC Speech Coder ANSI-C Source Code
|
||||
|
||||
gainquant.c
|
||||
|
||||
Copyright (C) The Internet Society (2004).
|
||||
All Rights Reserved.
|
||||
|
||||
|
||||
|
||||
******************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include "constants.h"
|
||||
#include "filter.h"
|
||||
|
||||
/*----------------------------------------------------------------*
|
||||
* quantizer for the gain in the gain-shape coding of residual
|
||||
*---------------------------------------------------------------*/
|
||||
|
||||
float gainquant(/* (o) quantized gain value */
|
||||
float in, /* (i) gain value */
|
||||
float maxIn,/* (i) maximum of gain value */
|
||||
int cblen, /* (i) number of quantization indices */
|
||||
int *index /* (o) quantization index */
|
||||
){
|
||||
int i, tindex;
|
||||
float minmeasure,measure, *cb, scale;
|
||||
|
||||
/* ensure a lower bound on the scaling factor */
|
||||
|
||||
scale=maxIn;
|
||||
|
||||
if (scale<0.1) {
|
||||
scale=(float)0.1;
|
||||
}
|
||||
|
||||
/* select the quantization table */
|
||||
|
||||
if (cblen == 8) {
|
||||
cb = gain_sq3Tbl;
|
||||
} else if (cblen == 16) {
|
||||
cb = gain_sq4Tbl;
|
||||
} else {
|
||||
cb = gain_sq5Tbl;
|
||||
}
|
||||
|
||||
/* select the best index in the quantization table */
|
||||
|
||||
minmeasure=10000000.0;
|
||||
tindex=0;
|
||||
for (i=0; i<cblen; i++) {
|
||||
measure=(in-scale*cb[i])*(in-scale*cb[i]);
|
||||
|
||||
/* return the quantized value */
|
||||
|
||||
return scale*cb[tindex];
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------*
|
||||
* decoder for quantized gains in the gain-shape coding of
|
||||
* residual
|
||||
*---------------------------------------------------------------*/
|
||||
|
||||
float gaindequant( /* (o) quantized gain value */
|
||||
int index, /* (i) quantization index */
|
||||
float maxIn,/* (i) maximum of unquantized gain */
|
||||
int cblen /* (i) number of quantization indices */
|
||||
){
|
||||
float scale;
|
||||
|
||||
/* obtain correct scale factor */
|
||||
|
||||
scale=(float)fabs(maxIn);
|
||||
|
||||
if (scale<0.1) {
|
||||
scale=(float)0.1;
|
||||
}
|
||||
|
||||
/* select the quantization table and return the decoded value */
|
||||
|
||||
if (cblen==8) {
|
||||
return scale*gain_sq3Tbl[index];
|
||||
} else if (cblen==16) {
|
||||
return scale*gain_sq4Tbl[index];
|
||||
}
|
||||
else if (cblen==32) {
|
||||
return scale*gain_sq5Tbl[index];
|
||||
}
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
|
||||
if (measure<minmeasure) {
|
||||
tindex=i;
|
||||
minmeasure=measure;
|
||||
}
|
||||
}
|
||||
*index=tindex;
|
||||
|
||||
/* return the quantized value */
|
||||
|
||||
|
||||
|
||||
return scale*cb[tindex];
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------*
|
||||
* decoder for quantized gains in the gain-shape coding of
|
||||
* residual
|
||||
*---------------------------------------------------------------*/
|
||||
|
||||
float gaindequant( /* (o) quantized gain value */
|
||||
int index, /* (i) quantization index */
|
||||
float maxIn,/* (i) maximum of unquantized gain */
|
||||
int cblen /* (i) number of quantization indices */
|
||||
){
|
||||
float scale;
|
||||
|
||||
/* obtain correct scale factor */
|
||||
|
||||
scale=(float)fabs(maxIn);
|
||||
|
||||
if (scale<0.1) {
|
||||
scale=(float)0.1;
|
||||
}
|
||||
|
||||
/* select the quantization table and return the decoded value */
|
||||
|
||||
if (cblen==8) {
|
||||
return scale*gain_sq3Tbl[index];
|
||||
} else if (cblen==16) {
|
||||
return scale*gain_sq4Tbl[index];
|
||||
}
|
||||
else if (cblen==32) {
|
||||
return scale*gain_sq5Tbl[index];
|
||||
}
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user