diff options
Diffstat (limited to 'media/libstagefright/codecs/amrwbenc/src/qisf_ns.c')
-rw-r--r-- | media/libstagefright/codecs/amrwbenc/src/qisf_ns.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/media/libstagefright/codecs/amrwbenc/src/qisf_ns.c b/media/libstagefright/codecs/amrwbenc/src/qisf_ns.c new file mode 100644 index 0000000..fc2f00d --- /dev/null +++ b/media/libstagefright/codecs/amrwbenc/src/qisf_ns.c @@ -0,0 +1,111 @@ +/* + ** 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: qisf_ns.c * +* * +* Description: Coding/Decoding of ISF parameters for background noise.* +* The ISF vector is quantized using VQ with split-by-5 * +* * +****************************************************************************/ + +#include "typedef.h" +#include "basic_op.h" +#include "acelp.h" +#include "qisf_ns.tab" /* Codebooks of ISFs */ + +/*------------------------------------------------------------------* +* routine: Qisf_ns() * +* ~~~~~~~~~ * +*------------------------------------------------------------------*/ + +void Qisf_ns( + Word16 * isf1, /* input : ISF in the frequency domain (0..0.5) */ + Word16 * isf_q, /* output: quantized ISF */ + Word16 * indice /* output: quantization indices */ + ) +{ + Word16 i; + Word32 tmp; + + for (i = 0; i < ORDER; i++) + { + isf_q[i] = sub(isf1[i], mean_isf_noise[i]); + } + + indice[0] = Sub_VQ(&isf_q[0], dico1_isf_noise, 2, SIZE_BK_NOISE1, &tmp); + indice[1] = Sub_VQ(&isf_q[2], dico2_isf_noise, 3, SIZE_BK_NOISE2, &tmp); + indice[2] = Sub_VQ(&isf_q[5], dico3_isf_noise, 3, SIZE_BK_NOISE3, &tmp); + indice[3] = Sub_VQ(&isf_q[8], dico4_isf_noise, 4, SIZE_BK_NOISE4, &tmp); + indice[4] = Sub_VQ(&isf_q[12], dico5_isf_noise, 4, SIZE_BK_NOISE5, &tmp); + + /* decoding the ISFs */ + + Disf_ns(indice, isf_q); + + return; +} + +/******************************************************************** +* Function: Disf_ns() * +* ~~~~~~~~~ * +* Decoding of ISF parameters * +*-------------------------------------------------------------------* +* Arguments: * +* indice[] : indices of the selected codebook entries * +* isf[] : quantized ISFs (in frequency domain) * +*********************************************************************/ + +void Disf_ns( + Word16 * indice, /* input: quantization indices */ + Word16 * isf_q /* input : ISF in the frequency domain (0..0.5) */ + ) +{ + Word16 i; + + for (i = 0; i < 2; i++) + { + isf_q[i] = dico1_isf_noise[indice[0] * 2 + i]; + } + for (i = 0; i < 3; i++) + { + isf_q[i + 2] = dico2_isf_noise[indice[1] * 3 + i]; + } + for (i = 0; i < 3; i++) + { + isf_q[i + 5] = dico3_isf_noise[indice[2] * 3 + i]; + } + for (i = 0; i < 4; i++) + { + isf_q[i + 8] = dico4_isf_noise[indice[3] * 4 + i]; + } + for (i = 0; i < 4; i++) + { + isf_q[i + 12] = dico5_isf_noise[indice[4] * 4 + i]; + } + + for (i = 0; i < ORDER; i++) + { + isf_q[i] = add(isf_q[i], mean_isf_noise[i]); + } + + Reorder_isf(isf_q, ISF_GAP, ORDER); + + return; +} + + + |