libavcodec/g723_1.c File Reference

G.723.1 compatible decoder. More...

#include "libavutil/audioconvert.h"
#include "libavutil/lzo.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "internal.h"
#include "get_bits.h"
#include "acelp_vectors.h"
#include "celp_filters.h"
#include "celp_math.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 CNG_RANDOM_SEED   12345
#define normalize_bits_int16(num)   normalize_bits(num, 15)
#define normalize_bits_int32(num)   normalize_bits(num, 31)
#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.
#define OFFSET(x)   offsetof(G723_1_Context, x)
#define AD   AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM

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 *dst, const 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, enum 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 int dot_product (const int16_t *a, const int16_t *b, int length)
static void gen_acb_excitation (int16_t *vector, int16_t *prev_excitation, int pitch_lag, G723_1_Subframe *subfrm, enum Rate cur_rate)
 Generate adaptive codebook excitation.
static int autocorr_max (const int16_t *buf, 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, enum 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, enum 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, int16_t *dst)
 Perform formant filtering.
static int sid_gain_to_lsp_index (int gain)
static int cng_rand (int *state, int base)
static int estimate_sid_gain (G723_1_Context *p)
static void generate_noise (G723_1_Context *p)
static int g723_1_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)

Variables

static const AVOption options []
static const AVClass g723_1dec_class
AVCodec ff_g723_1_decoder


Detailed Description

G.723.1 compatible decoder.

Definition in file g723_1.c.


Define Documentation

#define AD   AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM

Definition at line 1320 of file g723_1.c.

#define BITSTREAM_READER_LE

Definition at line 28 of file g723_1.c.

#define CNG_RANDOM_SEED   12345

Definition at line 40 of file g723_1.c.

Referenced by g723_1_decode_frame(), and g723_1_decode_init().

#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 823 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:
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, 15)

Definition at line 245 of file g723_1.c.

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

Definition at line 246 of file g723_1.c.

#define OFFSET (  )     offsetof(G723_1_Context, x)

Definition at line 1319 of file g723_1.c.


Typedef Documentation


Function Documentation

static int autocorr_max ( const int16_t buf,
int  offset,
int ccr_max,
int  pitch_lag,
int  length,
int  dir 
) [static]

Estimate maximum auto-correlation around pitch lag.

Parameters:
buf buffer with offset applied
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 585 of file g723_1.c.

Referenced by comp_interp_index(), and comp_ppf_coeff().

static int cng_rand ( int state,
int  base 
) [inline, static]

Definition at line 969 of file g723_1.c.

Referenced by generate_noise().

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 750 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,
enum 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 666 of file g723_1.c.

Referenced by g723_1_decode_frame().

static void comp_ppf_gains ( int  lag,
PPFParam ppf,
enum 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 618 of file g723_1.c.

Referenced by comp_ppf_coeff().

static int dot_product ( const int16_t a,
const int16_t b,
int  length 
) [static]

Definition at line 539 of file g723_1.c.

Referenced by autocorr_max(), comp_interp_index(), comp_ppf_coeff(), and formant_postfilter().

static int estimate_sid_gain ( G723_1_Context p  )  [static]

Definition at line 975 of file g723_1.c.

Referenced by g723_1_decode_frame().

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

Perform formant filtering.

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

Definition at line 891 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 1154 of file g723_1.c.

static av_cold int g723_1_decode_init ( AVCodecContext avctx  )  [static]

Definition at line 86 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 848 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,
enum Rate  cur_rate 
) [static]

Generate adaptive codebook excitation.

Definition at line 548 of file g723_1.c.

Referenced by g723_1_decode_frame(), and generate_noise().

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,
enum 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 generate_noise ( G723_1_Context p  )  [static]

Definition at line 1029 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, 15 or 31 bits

Definition at line 240 of file g723_1.c.

Referenced by comp_ppf_coeff(), and gain_scale().

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 794 of file g723_1.c.

Referenced by g723_1_decode_frame().

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

Scale vector contents based on the largest of their absolutes.

Definition at line 251 of file g723_1.c.

Referenced by comp_interp_index(), and formant_postfilter().

static int sid_gain_to_lsp_index ( int  gain  )  [static]

Definition at line 959 of file g723_1.c.

Referenced by g723_1_decode_frame().

static int16_t square_root ( int  val  )  [static]

Bitexact implementation of sqrt(val/2).

Definition at line 229 of file g723_1.c.

Referenced by comp_ppf_gains(), gain_scale(), and generate_noise().

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 114 of file g723_1.c.


Variable Documentation

Initial value:

 {
    .name           = "g723_1",
    .type           = AVMEDIA_TYPE_AUDIO,
    .id             = AV_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 | CODEC_CAP_DR1,
    .priv_class     = &g723_1dec_class,
}

Definition at line 1336 of file g723_1.c.

const AVClass g723_1dec_class [static]

Initial value:

 {
    .class_name = "G.723.1 decoder",
    .item_name  = av_default_item_name,
    .option     = options,
    .version    = LIBAVUTIL_VERSION_INT,
}

Definition at line 1329 of file g723_1.c.

const AVOption options[] [static]

Initial value:

 {
    { "postfilter", "postfilter on/off", OFFSET(postfilter), AV_OPT_TYPE_INT,
      { .i64 = 1 }, 0, 1, AD },
    { NULL }
}

Definition at line 1322 of file g723_1.c.


Generated on Fri Oct 26 02:50:05 2012 for FFmpeg by  doxygen 1.5.8