FFmpeg
Data Structures | Macros | Functions
silk.c File Reference
#include <stdint.h>
#include "libavutil/mem.h"
#include "mathops.h"
#include "opus.h"
#include "rc.h"
#include "silk.h"
#include "tab.h"

Go to the source code of this file.

Data Structures

struct  SilkFrame
 
struct  SilkContext
 

Macros

#define ROUND_MULL(a, b, s)   (((MUL64(a, b) >> ((s) - 1)) + 1) >> 1)
 
#define SILK_MAX_LAG   (288 + LTP_ORDER / 2)
 Maximum residual history according to 4.2.7.6.1. More...
 
#define LTP_ORDER   5
 Order of the LTP filter. More...
 

Functions

static void silk_stabilize_lsf (int16_t nlsf[16], int order, const uint16_t min_delta[17])
 
static int silk_is_lpc_stable (const int16_t lpc[16], int order)
 
static void silk_lsp2poly (const int32_t lsp[], int32_t pol[], int half_order)
 
static void silk_lsf2lpc (const int16_t nlsf[16], float lpcf[16], int order)
 
static void silk_decode_lpc (SilkContext *s, SilkFrame *frame, OpusRangeCoder *rc, float lpc_leadin[16], float lpc[16], int *lpc_order, int *has_lpc_leadin, int voiced)
 
static void silk_count_children (OpusRangeCoder *rc, int model, int32_t total, int32_t child[2])
 
static void silk_decode_excitation (SilkContext *s, OpusRangeCoder *rc, float *excitationf, int qoffset_high, int active, int voiced)
 
static void silk_decode_frame (SilkContext *s, OpusRangeCoder *rc, int frame_num, int channel, int coded_channels, int active, int active1, int redundant)
 
static void silk_unmix_ms (SilkContext *s, float *l, float *r)
 
static void silk_flush_frame (SilkFrame *frame)
 
int ff_silk_decode_superframe (SilkContext *s, OpusRangeCoder *rc, float *output[2], enum OpusBandwidth bandwidth, int coded_channels, int duration_ms)
 Decode the LP layer of one Opus frame (which may correspond to several SILK frames). More...
 
void ff_silk_free (SilkContext **ps)
 
void ff_silk_flush (SilkContext *s)
 
int ff_silk_init (void *logctx, SilkContext **ps, int output_channels)
 

Detailed Description

Opus SILK decoder

Definition in file silk.c.

Macro Definition Documentation

◆ ROUND_MULL

#define ROUND_MULL (   a,
  b,
  s 
)    (((MUL64(a, b) >> ((s) - 1)) + 1) >> 1)

Definition at line 36 of file silk.c.

◆ SILK_MAX_LAG

#define SILK_MAX_LAG   (288 + LTP_ORDER / 2)

Maximum residual history according to 4.2.7.6.1.

Definition at line 510 of file silk.c.

◆ LTP_ORDER

#define LTP_ORDER   5

Order of the LTP filter.

Definition at line 513 of file silk.c.

Function Documentation

◆ silk_stabilize_lsf()

static void silk_stabilize_lsf ( int16_t  nlsf[16],
int  order,
const uint16_t  min_delta[17] 
)
inlinestatic

Definition at line 71 of file silk.c.

Referenced by silk_decode_lpc().

◆ silk_is_lpc_stable()

static int silk_is_lpc_stable ( const int16_t  lpc[16],
int  order 
)
inlinestatic

Definition at line 149 of file silk.c.

Referenced by silk_lsf2lpc().

◆ silk_lsp2poly()

static void silk_lsp2poly ( const int32_t  lsp[],
int32_t  pol[],
int  half_order 
)
static

Definition at line 207 of file silk.c.

Referenced by silk_lsf2lpc().

◆ silk_lsf2lpc()

static void silk_lsf2lpc ( const int16_t  nlsf[16],
float  lpcf[16],
int  order 
)
static

Definition at line 224 of file silk.c.

Referenced by silk_decode_lpc().

◆ silk_decode_lpc()

static void silk_decode_lpc ( SilkContext s,
SilkFrame frame,
OpusRangeCoder rc,
float  lpc_leadin[16],
float  lpc[16],
int *  lpc_order,
int *  has_lpc_leadin,
int  voiced 
)
inlinestatic

Definition at line 311 of file silk.c.

Referenced by silk_decode_frame().

◆ silk_count_children()

static void silk_count_children ( OpusRangeCoder rc,
int  model,
int32_t  total,
int32_t  child[2] 
)
inlinestatic

Definition at line 408 of file silk.c.

Referenced by silk_decode_excitation().

◆ silk_decode_excitation()

static void silk_decode_excitation ( SilkContext s,
OpusRangeCoder rc,
float excitationf,
int  qoffset_high,
int  active,
int  voiced 
)
inlinestatic

Definition at line 421 of file silk.c.

Referenced by silk_decode_frame().

◆ silk_decode_frame()

static void silk_decode_frame ( SilkContext s,
OpusRangeCoder rc,
int  frame_num,
int  channel,
int  coded_channels,
int  active,
int  active1,
int  redundant 
)
static

Definition at line 515 of file silk.c.

Referenced by ff_silk_decode_superframe().

◆ silk_unmix_ms()

static void silk_unmix_ms ( SilkContext s,
float l,
float r 
)
static

Definition at line 744 of file silk.c.

Referenced by ff_silk_decode_superframe().

◆ silk_flush_frame()

static void silk_flush_frame ( SilkFrame frame)
static

Definition at line 774 of file silk.c.

Referenced by ff_silk_decode_superframe(), and ff_silk_flush().

◆ ff_silk_decode_superframe()

int ff_silk_decode_superframe ( SilkContext s,
OpusRangeCoder rc,
float output[2],
enum OpusBandwidth  bandwidth,
int  coded_channels,
int  duration_ms 
)

Decode the LP layer of one Opus frame (which may correspond to several SILK frames).

Definition at line 792 of file silk.c.

Referenced by opus_decode_frame().

◆ ff_silk_free()

void ff_silk_free ( SilkContext **  ps)

Definition at line 870 of file silk.c.

Referenced by opus_decode_close().

◆ ff_silk_flush()

void ff_silk_flush ( SilkContext s)

Definition at line 875 of file silk.c.

Referenced by ff_silk_init(), opus_decode_flush(), and opus_decode_frame().

◆ ff_silk_init()

int ff_silk_init ( void *  logctx,
SilkContext **  ps,
int  output_channels 
)

Definition at line 883 of file silk.c.

Referenced by opus_decode_init().