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 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 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_coefFIR coefficients
iir_coefIIR coefficients
srcsource vector
destdestination vector
widthwidth of the output, 16 bits(0) / 32 bits(1)

Definition at line 818 of file g723_1.c.

Referenced by formant_postfilter().

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

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

Parameters:
a32 bit multiplicand
b16 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:
pthe context
offsetoffset of the excitation vector
ccr_maxpointer to the maximum auto-correlation
pitch_lagdecoded pitch lag
lengthlength of autocorrelation
dirforward 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:
pthe context
pitch_lagdecoded pitch_lag
exc_engexcitation energy estimation
scalescaling 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:
pthe context
offsetoffset of the excitation vector
pitch_lagdecoded pitch lag
ppfpitch postfilter parameters
cur_ratecurrent 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:
lagpitch postfilter forward/backward lag
ppfpitch postfilter parameters
cur_ratecurrent bitrate
tgt_engtarget energy
ccrcross-correlation
res_engresidual 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:
pthe context
lpcquantized lpc coefficients
bufoutput 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:
pthe context
bufpostfiltered output vector
energyinput 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:
vectordecoded excitation vector
subfrmcurrent subframe
cur_ratecurrent bitrate
pitch_lagclosed loop pitch lag
indexcurrent 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_lspthe current LSP vector
prev_lspthe previous LSP vector
lsp_indexVQ indices
bad_framebad frame flag

Definition at line 276 of file g723_1.c.

Referenced by g723_1_decode_frame().

static void lsp2lpc ( int16_t *  lpc) [static]

Convert LSP frequencies to LPC coefficients.

Parameters:
lpcbuffer 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:
lpcbuffer for LPC coefficients
cur_lspthe current LSP vector
prev_lspthe 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:
numinput number
widthwidth 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:
bufdecoded excitation vector
outoutput vector
lagdecoded pitch lag
gaininterpolated gain
rseedseed 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:
pthe context
bufpointer to the input buffer
buf_sizesize of the input buffer

Definition at line 97 of file g723_1.c.

Referenced by g723_1_decode_frame().


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.