libavcodec/g723_1.c File Reference

G.723.1 compatible decoder. More...

#include "avcodec.h"
#include "get_bits.h"
#include "acelp_vectors.h"
#include "celp_filters.h"
#include "celp_math.h"
#include "lsp.h"
#include "libavutil/lzo.h"
#include "g723_1_data.h"

Go to the source code of this file.

Data Structures

struct  g723_1_context

Defines

#define ALT_BITSTREAM_READER_LE
#define normalize_bits_int16(num)   normalize_bits(num, 0)
#define normalize_bits_int32(num)   normalize_bits(num, 1)
#define dot_product(a, b, c, d)   (ff_dot_product(a,b,c)<<(d))
#define MULL2(a, b)   MULL(a,b,15)
 Bitexact implementation of 2ab scaled by 1/2^16.
#define iir_filter(fir_coef, iir_coef, src, dest, width)
 Perform IIR filtering.

Typedefs

typedef struct g723_1_context G723_1_Context

Functions

static av_cold int g723_1_decode_init (AVCodecContext *avctx)
static int unpack_bitstream (G723_1_Context *p, const uint8_t *buf, int buf_size)
 Unpack the frame into parameters.
static int16_t square_root (int val)
 Bitexact implementation of sqrt(val/2).
static int normalize_bits (int num, int width)
 Calculate the number of left-shifts required for normalizing the input.
static int scale_vector (int16_t *vector, int length)
 Scale vector contents based on the largest of their absolutes.
static void inverse_quant (int16_t *cur_lsp, int16_t *prev_lsp, uint8_t *lsp_index, int bad_frame)
 Perform inverse quantization of LSP frequencies.
static void lsp2lpc (int16_t *lpc)
 Convert LSP frequencies to LPC coefficients.
static void lsp_interpolate (int16_t *lpc, int16_t *cur_lsp, int16_t *prev_lsp)
 Quantize LSP frequencies by interpolation and convert them to the corresponding LPC coefficients.
static void gen_dirac_train (int16_t *buf, int pitch_lag)
 Generate a train of dirac functions with period as pitch lag.
static void gen_fcb_excitation (int16_t *vector, G723_1_Subframe subfrm, Rate cur_rate, int pitch_lag, int index)
 Generate fixed codebook excitation vector.
static void get_residual (int16_t *residual, int16_t *prev_excitation, int lag)
 Get delayed contribution from the previous excitation vector.
static void gen_acb_excitation (int16_t *vector, int16_t *prev_excitation, int pitch_lag, G723_1_Subframe subfrm, Rate cur_rate)
 Generate adaptive codebook excitation.
static int autocorr_max (G723_1_Context *p, int offset, int *ccr_max, int pitch_lag, int length, int dir)
 Estimate maximum auto-correlation around pitch lag.
static void comp_ppf_gains (int lag, PPFParam *ppf, Rate cur_rate, int tgt_eng, int ccr, int res_eng)
 Calculate pitch postfilter optimal and scaling gains.
static void comp_ppf_coeff (G723_1_Context *p, int offset, int pitch_lag, PPFParam *ppf, Rate cur_rate)
 Calculate pitch postfilter parameters.
static int comp_interp_index (G723_1_Context *p, int pitch_lag, int *exc_eng, int *scale)
 Classify frames as voiced/unvoiced.
static void residual_interp (int16_t *buf, int16_t *out, int lag, int gain, int *rseed)
 Peform residual interpolation based on frame classification.
static void gain_scale (G723_1_Context *p, int16_t *buf, int energy)
 Adjust gain of postfiltered signal.
static void formant_postfilter (G723_1_Context *p, int16_t *lpc, int16_t *buf)
 Perform formant filtering.
static int g723_1_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)

Variables

AVCodec ff_g723_1_decoder


Detailed Description

G.723.1 compatible decoder.

Definition in file g723_1.c.


Define Documentation

#define ALT_BITSTREAM_READER_LE

Definition at line 29 of file g723_1.c.

#define dot_product ( a,
b,
c,
 )     (ff_dot_product(a,b,c)<<(d))

Definition at line 241 of file g723_1.c.

#define iir_filter ( fir_coef,
iir_coef,
src,
dest,
width   ) 

Value:

{\
    int m, n;\
    int res_shift = 16 & ~-(width);\
    int in_shift  = 16 - res_shift;\
\
    for (m = 0; m < SUBFRAME_LEN; m++) {\
        int64_t filter = 0;\
        for (n = 1; n <= LPC_ORDER; n++) {\
            filter -= (fir_coef)[n - 1] * (src)[m - n] -\
                      (iir_coef)[n - 1] * ((dest)[m - n] >> in_shift);\
        }\
\
        (dest)[m] = av_clipl_int32(((src)[m] << 16) + (filter << 3) +\
                                   (1 << 15)) >> res_shift;\
    }\
}
Perform IIR filtering.

Parameters:
fir_coef FIR coefficients
iir_coef IIR coefficients
src source vector
dest destination vector
width width of the output, 16 bits(0) / 32 bits(1)

Definition at line 818 of file g723_1.c.

Referenced by formant_postfilter(), and psy_3gpp_window().

#define MULL2 ( a,
 )     MULL(a,b,15)

Bitexact implementation of 2ab scaled by 1/2^16.

Parameters:
a 32 bit multiplicand
b 16 bit multiplier

Definition at line 344 of file g723_1.c.

Referenced by lsp2lpc().

#define normalize_bits_int16 ( num   )     normalize_bits(num, 0)

Definition at line 239 of file g723_1.c.

#define normalize_bits_int32 ( num   )     normalize_bits(num, 1)

Definition at line 240 of file g723_1.c.


Typedef Documentation


Function Documentation

static int autocorr_max ( G723_1_Context p,
int  offset,
int *  ccr_max,
int  pitch_lag,
int  length,
int  dir 
) [static]

Estimate maximum auto-correlation around pitch lag.

Parameters:
p the context
offset offset of the excitation vector
ccr_max pointer to the maximum auto-correlation
pitch_lag decoded pitch lag
length length of autocorrelation
dir forward lag(1) / backward lag(-1)

Definition at line 579 of file g723_1.c.

Referenced by comp_interp_index(), and comp_ppf_coeff().

static int comp_interp_index ( G723_1_Context p,
int  pitch_lag,
int *  exc_eng,
int *  scale 
) [static]

Classify frames as voiced/unvoiced.

Parameters:
p the context
pitch_lag decoded pitch_lag
exc_eng excitation energy estimation
scale scaling factor of exc_eng
Returns:
residual interpolation index if voiced, 0 otherwise

Definition at line 744 of file g723_1.c.

Referenced by g723_1_decode_frame().

static void comp_ppf_coeff ( G723_1_Context p,
int  offset,
int  pitch_lag,
PPFParam ppf,
Rate  cur_rate 
) [static]

Calculate pitch postfilter parameters.

Parameters:
p the context
offset offset of the excitation vector
pitch_lag decoded pitch lag
ppf pitch postfilter parameters
cur_rate current bitrate

Definition at line 658 of file g723_1.c.

Referenced by g723_1_decode_frame().

static void comp_ppf_gains ( int  lag,
PPFParam ppf,
Rate  cur_rate,
int  tgt_eng,
int  ccr,
int  res_eng 
) [static]

Calculate pitch postfilter optimal and scaling gains.

Parameters:
lag pitch postfilter forward/backward lag
ppf pitch postfilter parameters
cur_rate current bitrate
tgt_eng target energy
ccr cross-correlation
res_eng residual energy

Definition at line 610 of file g723_1.c.

Referenced by comp_ppf_coeff().

static void formant_postfilter ( G723_1_Context p,
int16_t lpc,
int16_t buf 
) [static]

Perform formant filtering.

Parameters:
p the context
lpc quantized lpc coefficients
buf output buffer

Definition at line 885 of file g723_1.c.

Referenced by g723_1_decode_frame().

static int g723_1_decode_frame ( AVCodecContext avctx,
void *  data,
int *  got_frame_ptr,
AVPacket avpkt 
) [static]

Definition at line 956 of file g723_1.c.

static av_cold int g723_1_decode_init ( AVCodecContext avctx  )  [static]

Definition at line 76 of file g723_1.c.

static void gain_scale ( G723_1_Context p,
int16_t buf,
int  energy 
) [static]

Adjust gain of postfiltered signal.

Parameters:
p the context
buf postfiltered output vector
energy input energy coefficient

Definition at line 843 of file g723_1.c.

Referenced by formant_postfilter().

static void gen_acb_excitation ( int16_t vector,
int16_t prev_excitation,
int  pitch_lag,
G723_1_Subframe  subfrm,
Rate  cur_rate 
) [static]

Generate adaptive codebook excitation.

Definition at line 542 of file g723_1.c.

Referenced by g723_1_decode_frame().

static void gen_dirac_train ( int16_t buf,
int  pitch_lag 
) [static]

Generate a train of dirac functions with period as pitch lag.

Definition at line 445 of file g723_1.c.

Referenced by gen_fcb_excitation().

static void gen_fcb_excitation ( int16_t vector,
G723_1_Subframe  subfrm,
Rate  cur_rate,
int  pitch_lag,
int  index 
) [static]

Generate fixed codebook excitation vector.

Parameters:
vector decoded excitation vector
subfrm current subframe
cur_rate current bitrate
pitch_lag closed loop pitch lag
index current subframe index

Definition at line 466 of file g723_1.c.

Referenced by g723_1_decode_frame().

static void get_residual ( int16_t residual,
int16_t prev_excitation,
int  lag 
) [static]

Get delayed contribution from the previous excitation vector.

Definition at line 526 of file g723_1.c.

Referenced by gen_acb_excitation().

static void inverse_quant ( int16_t cur_lsp,
int16_t prev_lsp,
uint8_t *  lsp_index,
int  bad_frame 
) [static]

Perform inverse quantization of LSP frequencies.

Parameters:
cur_lsp the current LSP vector
prev_lsp the previous LSP vector
lsp_index VQ indices
bad_frame bad frame flag

Definition at line 276 of file g723_1.c.

Referenced by g723_1_decode_frame(), and g726_decode().

static void lsp2lpc ( int16_t lpc  )  [static]

Convert LSP frequencies to LPC coefficients.

Parameters:
lpc buffer for LPC coefficients

Definition at line 352 of file g723_1.c.

Referenced by lsp_interpolate().

static void lsp_interpolate ( int16_t lpc,
int16_t cur_lsp,
int16_t prev_lsp 
) [static]

Quantize LSP frequencies by interpolation and convert them to the corresponding LPC coefficients.

Parameters:
lpc buffer for LPC coefficients
cur_lsp the current LSP vector
prev_lsp the previous LSP vector

Definition at line 422 of file g723_1.c.

Referenced by g723_1_decode_frame().

static int normalize_bits ( int  num,
int  width 
) [static]

Calculate the number of left-shifts required for normalizing the input.

Parameters:
num input number
width width of the input, 16 bits(0) / 32 bits(1)

Definition at line 223 of file g723_1.c.

Referenced by comp_ppf_coeff(), gain_scale(), and scale_vector().

static void residual_interp ( int16_t buf,
int16_t out,
int  lag,
int  gain,
int *  rseed 
) [static]

Peform residual interpolation based on frame classification.

Parameters:
buf decoded excitation vector
out output vector
lag decoded pitch lag
gain interpolated gain
rseed seed for random number generator

Definition at line 788 of file g723_1.c.

Referenced by g723_1_decode_frame().

static int scale_vector ( int16_t vector,
int  length 
) [static]

Scale vector contents based on the largest of their absolutes.

Definition at line 246 of file g723_1.c.

Referenced by comp_interp_index(), and formant_postfilter().

static int16_t square_root ( int  val  )  [static]

Bitexact implementation of sqrt(val/2).

Definition at line 212 of file g723_1.c.

Referenced by comp_ppf_gains(), and gain_scale().

static int unpack_bitstream ( G723_1_Context p,
const uint8_t *  buf,
int  buf_size 
) [static]

Unpack the frame into parameters.

Parameters:
p the context
buf pointer to the input buffer
buf_size size of the input buffer

Definition at line 97 of file g723_1.c.


Variable Documentation

Initial value:

 {
    .name           = "g723_1",
    .type           = AVMEDIA_TYPE_AUDIO,
    .id             = CODEC_ID_G723_1,
    .priv_data_size = sizeof(G723_1_Context),
    .init           = g723_1_decode_init,
    .decode         = g723_1_decode_frame,
    .long_name      = NULL_IF_CONFIG_SMALL("G.723.1"),
    .capabilities   = CODEC_CAP_SUBFRAMES,
}

Definition at line 1090 of file g723_1.c.


Generated on Fri Oct 26 02:43:47 2012 for FFmpeg by  doxygen 1.5.8