summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/amrwb/src/pvamrwbdecoder_acelp.h
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/codecs/amrwb/src/pvamrwbdecoder_acelp.h')
-rw-r--r--media/libstagefright/codecs/amrwb/src/pvamrwbdecoder_acelp.h329
1 files changed, 329 insertions, 0 deletions
diff --git a/media/libstagefright/codecs/amrwb/src/pvamrwbdecoder_acelp.h b/media/libstagefright/codecs/amrwb/src/pvamrwbdecoder_acelp.h
new file mode 100644
index 0000000..5967115
--- /dev/null
+++ b/media/libstagefright/codecs/amrwb/src/pvamrwbdecoder_acelp.h
@@ -0,0 +1,329 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/****************************************************************************************
+Portions of this file are derived from the following 3GPP standard:
+
+ 3GPP TS 26.173
+ ANSI-C code for the Adaptive Multi-Rate - Wideband (AMR-WB) speech codec
+ Available from http://www.3gpp.org
+
+(C) 2007, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
+Permission to distribute, modify and use this file under the standard license
+terms listed above has been obtained from the copyright holder.
+****************************************************************************************/
+/*
+------------------------------------------------------------------------------
+
+
+
+ Pathname: ./cpp/include/pvamrwbdecoder_acelp.h
+
+ Date: 01/04/2007
+
+------------------------------------------------------------------------------
+ REVISION HISTORY
+
+ Description:
+------------------------------------------------------------------------------
+ INCLUDE DESCRIPTION
+
+------------------------------------------------------------------------------
+*/
+
+#ifndef PVAMRWBDECODER_ACELP_H
+#define PVAMRWBDECODER_ACELP_H
+
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+
+#include "pv_amr_wb_type_defs.h"
+#include "pvamrwbdecoder_mem_funcs.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /*-----------------------------------------------------------------*
+ * LPC prototypes *
+ *-----------------------------------------------------------------*/
+
+ void isf_extrapolation(int16 HfIsf[]);
+
+ void Init_Lagconc(int16 lag_hist[]);
+ void lagconceal(
+ int16 gain_hist[], /* (i) : Gain history */
+ int16 lag_hist[], /* (i) : Subframe size */
+ int16 * T0,
+ int16 * old_T0,
+ int16 * seed,
+ int16 unusable_frame
+ );
+
+ void agc2_amr_wb(
+ int16 * sig_in, /* input : postfilter input signal */
+ int16 * sig_out, /* in/out: postfilter output signal */
+ int16 l_trm /* input : subframe size */
+ );
+
+ void low_pass_filt_7k_init(int16 mem[]);
+ void low_pass_filt_7k(
+ int16 signal[], /* input: signal */
+ int16 lg, /* input: length of input */
+ int16 mem[], /* in/out: memory (size=30) */
+ int16 x[]
+ );
+
+ int16 median5(int16 x[]);
+
+ void Isp_Az(
+ int16 isp[], /* (i) Q15 : Immittance spectral pairs */
+ int16 a[], /* (o) Q12 : predictor coefficients (order = M) */
+ int16 m,
+ int16 adaptive_scaling /* (i) 0 : adaptive scaling disabled */
+ /* 1 : adaptive scaling enabled */
+ );
+ void Isf_isp(
+ int16 isf[], /* (i) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */
+ int16 isp[], /* (o) Q15 : isp[m] (range: -1<=val<1) */
+ int16 m /* (i) : LPC order */
+ );
+ void interpolate_isp(
+ int16 isp_old[], /* input : isps from past frame */
+ int16 isp_new[], /* input : isps from present frame */
+ const int16 frac[], /* input : fraction for 3 first subfr (Q15) */
+ int16 Az[] /* output: LP coefficients in 4 subframes */
+ );
+ void weight_amrwb_lpc(
+ int16 a[], /* (i) Q12 : a[m+1] LPC coefficients */
+ int16 ap[], /* (o) Q12 : Spectral expanded LPC coefficients */
+ int16 gamma, /* (i) Q15 : Spectral expansion factor. */
+ int16 m /* (i) : LPC order. */
+ );
+
+
+ /*-----------------------------------------------------------------*
+ * isf quantizers *
+ *-----------------------------------------------------------------*/
+
+ void Disf_ns(
+ int16 * indice, /* input: quantization indices */
+ int16 * isf_q /* input : ISF in the frequency domain (0..0.5) */
+ );
+
+ void Dpisf_2s_46b(
+ int16 * indice, /* input: quantization indices */
+ int16 * isf_q, /* output: quantized ISF in frequency domain (0..0.5) */
+ int16 * past_isfq, /* i/0 : past ISF quantizer */
+ int16 * isfold, /* input : past quantized ISF */
+ int16 * isf_buf, /* input : isf buffer */
+ int16 bfi, /* input : Bad frame indicator */
+ int16 enc_dec
+ );
+ void Dpisf_2s_36b(
+ int16 * indice, /* input: quantization indices */
+ int16 * isf_q, /* output: quantized ISF in frequency domain (0..0.5) */
+ int16 * past_isfq, /* i/0 : past ISF quantizer */
+ int16 * isfold, /* input : past quantized ISF */
+ int16 * isf_buf, /* input : isf buffer */
+ int16 bfi, /* input : Bad frame indicator */
+ int16 enc_dec
+ );
+
+
+ void Reorder_isf(
+ int16 * isf, /* (i/o) Q15: ISF in the frequency domain (0..0.5) */
+ int16 min_dist, /* (i) Q15 : minimum distance to keep */
+ int16 n /* (i) : number of ISF */
+ );
+
+ /*-----------------------------------------------------------------*
+ * filter prototypes *
+ *-----------------------------------------------------------------*/
+
+ void oversamp_12k8_to_16k_init(
+ int16 mem[] /* output: memory (2*NB_COEF_UP) set to zeros */
+ );
+ void oversamp_12k8_to_16k(
+ int16 sig12k8[], /* input: signal to oversampling */
+ int16 lg, /* input: length of input */
+ int16 sig16k[], /* output: oversampled signal */
+ int16 mem[], /* in/out: memory (2*NB_COEF_UP) */
+ int16 signal[]
+ );
+
+ void highpass_50Hz_at_12k8_init(int16 mem[]);
+ void highpass_50Hz_at_12k8(
+ int16 signal[], /* input/output signal */
+ int16 lg, /* lenght of signal */
+ int16 mem[] /* filter memory [6] */
+ );
+ void highpass_400Hz_at_12k8_init(int16 mem[]);
+ void highpass_400Hz_at_12k8(
+ int16 signal[], /* input/output signal */
+ int16 lg, /* lenght of signal */
+ int16 mem[] /* filter memory [6] */
+ );
+
+ void band_pass_6k_7k_init(int16 mem[]);
+ void band_pass_6k_7k(
+ int16 signal[], /* input: signal */
+ int16 lg, /* input: length of input */
+ int16 mem[], /* in/out: memory (size=30) */
+ int16 x[]
+ );
+
+
+ void preemph_amrwb_dec(
+ int16 x[], /* (i/o) : input signal overwritten by the output */
+ int16 mu, /* (i) Q15 : preemphasis coefficient */
+ int16 lg /* (i) : lenght of filtering */
+ );
+
+ void deemphasis_32(
+ int16 x_hi[], /* (i) : input signal (bit31..16) */
+ int16 x_lo[], /* (i) : input signal (bit15..4) */
+ int16 y[], /* (o) : output signal (x16) */
+ int16 mu, /* (i) Q15 : deemphasis factor */
+ int16 L, /* (i) : vector size */
+ int16 * mem /* (i/o) : memory (y[-1]) */
+ );
+
+
+ void wb_syn_filt(
+ int16 a[], /* (i) Q12 : a[m+1] prediction coefficients */
+ int16 m, /* (i) : order of LP filter */
+ int16 x[], /* (i) : input signal */
+ int16 y[], /* (o) : output signal */
+ int16 lg, /* (i) : size of filtering */
+ int16 mem[], /* (i/o) : memory associated with this filtering. */
+ int16 update, /* (i) : 0=no update, 1=update of memory. */
+ int16 y_buf[]
+ );
+ void Syn_filt_32(
+ int16 a[], /* (i) Q12 : a[m+1] prediction coefficients */
+ int16 m, /* (i) : order of LP filter */
+ int16 exc[], /* (i) Qnew: excitation (exc[i] >> Qnew) */
+ int16 Qnew, /* (i) : exc scaling = 0(min) to 8(max) */
+ int16 sig_hi[], /* (o) /16 : synthesis high */
+ int16 sig_lo[], /* (o) /16 : synthesis low */
+ int16 lg /* (i) : size of filtering */
+ );
+
+ /*-----------------------------------------------------------------*
+ * pitch prototypes *
+ *-----------------------------------------------------------------*/
+
+
+ void Pred_lt4(
+ int16 exc[], /* in/out: excitation buffer */
+ int16 T0, /* input : integer pitch lag */
+ int16 frac, /* input : fraction of lag */
+ int16 L_subfr /* input : subframe size */
+ );
+
+ /*-----------------------------------------------------------------*
+ * gain prototypes *
+ *-----------------------------------------------------------------*/
+
+
+ void dec_gain2_amr_wb_init(
+ int16 * mem /* output : memory (4 words) */
+ );
+ void dec_gain2_amr_wb(
+ int16 index, /* (i) :index of quantization. */
+ int16 nbits, /* (i) : number of bits (6 or 7) */
+ int16 code[], /* (i) Q9 :Innovative vector. */
+ int16 L_subfr, /* (i) :Subframe lenght. */
+ int16 * gain_pit, /* (o) Q14 :Pitch gain. */
+ int32 * gain_cod, /* (o) Q16 :Code gain. */
+ int16 bfi, /* (i) :bad frame indicator */
+ int16 prev_bfi, /* (i) : Previous BF indicator */
+ int16 state, /* (i) : State of BFH */
+ int16 unusable_frame, /* (i) : UF indicator */
+ int16 vad_hist, /* (i) :number of non-speech frames */
+ int16 * mem /* (i/o) : memory (4 words) */
+ );
+
+ /*-----------------------------------------------------------------*
+ * acelp prototypes *
+ *-----------------------------------------------------------------*/
+
+ void dec_acelp_2p_in_64(
+ int16 index, /* (i) : 12 bits index */
+ int16 code[] /* (o) :Q9 algebraic (fixed) codebook excitation */
+ );
+
+ void dec_acelp_4p_in_64(
+ int16 index[], /* (i) : index (20): 5+5+5+5 = 20 bits. */
+ /* (i) : index (36): 9+9+9+9 = 36 bits. */
+ /* (i) : index (44): 13+9+13+9 = 44 bits. */
+ /* (i) : index (52): 13+13+13+13 = 52 bits. */
+ /* (i) : index (64): 2+2+2+2+14+14+14+14 = 64 bits. */
+ /* (i) : index (72): 10+2+10+2+10+14+10+14 = 72 bits. */
+ /* (i) : index (88): 11+11+11+11+11+11+11+11 = 88 bits. */
+ int16 nbbits, /* (i) : 20, 36, 44, 52, 64, 72 or 88 bits */
+ int16 code[] /* (o) Q9: algebraic (fixed) codebook excitation */
+ );
+ void Pit_shrp(
+ int16 * x, /* in/out: impulse response (or algebraic code) */
+ int16 pit_lag, /* input : pitch lag */
+ int16 sharp, /* input : pitch sharpening factor (Q15) */
+ int16 L_subfr /* input : subframe size */
+ );
+
+
+ /*-----------------------------------------------------------------*
+ * others prototypes *
+ *-----------------------------------------------------------------*/
+
+ int16 voice_factor( /* (o) Q15 : factor (-1=unvoiced to 1=voiced) */
+ int16 exc[], /* (i) Q_exc: pitch excitation */
+ int16 Q_exc, /* (i) : exc format */
+ int16 gain_pit, /* (i) Q14 : gain of pitch */
+ int16 code[], /* (i) Q9 : Fixed codebook excitation */
+ int16 gain_code, /* (i) Q0 : gain of code */
+ int16 L_subfr /* (i) : subframe length */
+ );
+
+ void scale_signal(
+ int16 x[], /* (i/o) : signal to scale */
+ int16 lg, /* (i) : size of x[] */
+ int16 exp /* (i) : exponent: x = round(x << exp) */
+ );
+
+ int16 noise_gen_amrwb(int16 * seed);
+
+
+ void phase_dispersion(
+ int16 gain_code, /* (i) Q0 : gain of code */
+ int16 gain_pit, /* (i) Q14 : gain of pitch */
+ int16 code[], /* (i/o) : code vector */
+ int16 mode, /* (i) : level, 0=hi, 1=lo, 2=off */
+ int16 disp_mem[], /* (i/o) : memory (size = 8) */
+ int16 ScratchMem[]
+ );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ACELP_H */
+