Go to the documentation of this file.
22 #ifndef AVCODEC_TWINVQ_H
23 #define AVCODEC_TWINVQ_H
45 #define TWINVQ_PPC_SHAPE_CB_SIZE 64
46 #define TWINVQ_PPC_SHAPE_LEN_MAX 60
47 #define TWINVQ_SUB_AMP_MAX 4500.0
48 #define TWINVQ_MULAW_MU 100.0
49 #define TWINVQ_GAIN_BITS 8
50 #define TWINVQ_AMP_MAX 13000.0
51 #define TWINVQ_SUB_GAIN_BITS 5
52 #define TWINVQ_WINDOW_TYPE_BITS 4
53 #define TWINVQ_PGAIN_MU 200
54 #define TWINVQ_LSP_COEFS_MAX 20
55 #define TWINVQ_LSP_SPLIT_MAX 4
56 #define TWINVQ_CHANNELS_MAX 2
57 #define TWINVQ_SUBBLOCKS_MAX 16
58 #define TWINVQ_BARK_N_COEF_MAX 4
60 #define TWINVQ_MAX_FRAMES_PER_PACKET 2
174 const uint8_t *buf,
int buf_size);
176 int use_hist,
int ch,
float *
out,
float gain,
179 const float *shape,
float *speech);
198 int *got_frame_ptr,
AVPacket *avpkt);
const float * lspcodebook
const TwinVQModeTab * mtab
uint8_t sub
Number subblocks in each frame.
uint8_t bits_main_spec[2][4][2]
bits for the main codebook
uint8_t bark1[TWINVQ_CHANNELS_MAX][TWINVQ_SUBBLOCKS_MAX][TWINVQ_BARK_N_COEF_MAX]
uint8_t lpc_idx2[TWINVQ_CHANNELS_MAX][TWINVQ_LSP_SPLIT_MAX]
float * curr_frame
non-interleaved output
uint8_t bark_use_hist[TWINVQ_CHANNELS_MAX][TWINVQ_SUBBLOCKS_MAX]
This structure describes decoded (raw) audio or video data.
TwinVQFrameData bits[TWINVQ_MAX_FRAMES_PER_PACKET]
uint8_t ppc_shape_len
size of PPC shape CB
uint8_t pgain_bit
bits for PPC gain
uint8_t ppc_coeffs[TWINVQ_PPC_SHAPE_LEN_MAX]
const int16_t * cb0
main codebooks for spectrum data
uint8_t bark_n_coef
number of BSE CB coefficients to read
uint8_t sub_gain_bits[TWINVQ_CHANNELS_MAX *TWINVQ_SUBBLOCKS_MAX]
static double val(void *priv, double ch)
uint16_t size
frame size in samples
static float twinvq_mulawinv(float y, float clip, float mu)
void(* dec_bark_env)(struct TwinVQContext *tctx, const uint8_t *in, int use_hist, int ch, float *out, float gain, enum TwinVQFrameType ftype)
void(* decode_ppc)(struct TwinVQContext *tctx, int period_coef, int g_coef, const float *shape, float *speech)
int g_coef[TWINVQ_CHANNELS_MAX]
int ff_twinvq_decode_init(AVCodecContext *avctx)
Requires the caller to call ff_twinvq_decode_close() upon failure.
float lsp_hist[2][20]
LSP coefficients of the last frame.
uint8_t ppc_shape_bit
number of bits of the PPC shape CB coeffs
uint8_t lpc_idx1[TWINVQ_CHANNELS_MAX]
#define TWINVQ_BARK_N_COEF_MAX
uint8_t lpc_hist_idx[TWINVQ_CHANNELS_MAX]
int ff_twinvq_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
@ TWINVQ_FT_MEDIUM
Medium frame (divided in m<n sub-blocks)
Parameters and tables that are different for each frame type.
Parameters and tables that are different for every combination of bitrate/sample rate.
const uint16_t * bark_tab
static void twinvq_memset_float(float *buf, float val, int size)
float * prev_frame
non-interleaved previous frame
@ TWINVQ_FT_PPC
Periodic Peak Component (part of the long frame)
const int16_t * bark_cb
codebook for the bark scale envelope (BSE)
uint8_t length[4][2]
main codebook stride
uint8_t gain_bits[TWINVQ_CHANNELS_MAX]
static __device__ float fabs(float a)
uint8_t main_coeffs[1024]
@ TWINVQ_FT_LONG
Long frame (single sub-block + PPC)
uint8_t bark_n_bit
number of bits of the BSE coefs
uint8_t ppc_period_bit
number of the bits for the PPC period value
int bits_main_spec_change[4]
#define TWINVQ_PPC_SHAPE_LEN_MAX
#define TWINVQ_CHANNELS_MAX
const int16_t * ppc_shape_cb
PPC shape CB.
uint16_t peak_per2wid
constant for peak period to peak width conversion
int(* read_bitstream)(AVCodecContext *avctx, struct TwinVQContext *tctx, const uint8_t *buf, int buf_size)
float bark_hist[3][2][40]
BSE coefficients of last frame.
int ff_twinvq_decode_close(AVCodecContext *avctx)
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
@ TWINVQ_FT_SHORT
Short frame (divided in n sub-blocks)
main external API structure.
uint8_t cb_len_read
number of spectrum coefficients to read
enum TwinVQFrameType ftype
This structure stores compressed data.
#define TWINVQ_SUBBLOCKS_MAX
#define TWINVQ_MAX_FRAMES_PER_PACKET
enum TwinVQFrameType ff_twinvq_wtype_to_ftype_table[]
int p_coef[TWINVQ_CHANNELS_MAX]
#define TWINVQ_LSP_SPLIT_MAX
uint8_t lsp_split
number of CB entries for the LSP decoding
struct TwinVQFrameMode fmode[3]
frame type-dependent parameters
uint8_t bark_env_size
number of distinct bark scale envelope values
uint8_t n_lsp
number of lsp coefficients