91     unsigned int low = 0, high = size - 1;
 
   94         int index = (low + high) >> 1;
 
   98             return table[high] + error > value ? low : high;
 
  117     float num = 0, den = 0;
 
  143                             const float *ortho1, 
const float *ortho2,
 
  144                             const float *
data, 
float *score, 
float *gain)
 
  156         g += work[i] * work[i];
 
  157         c += data[i] * work[i];
 
  184             vect[lag + i] = cb[i];
 
  199                               const float *coefs, 
float *
data)
 
  202     float score, gain, best_score, 
av_uninit(best_gain);
 
  205     gain = best_score = 0;
 
  209         if (score > best_score) {
 
  225         data[i] -= best_gain * work[i];
 
  226     return best_vect - BLOCKSIZE / 2 + 1;
 
  248                            const float *ortho2, 
float *
data, 
int *idx,
 
  252     float g, score, best_score;
 
  255     *idx = *gain = best_score = 0;
 
  260         if (score > best_score) {
 
  282                             int cba_idx, 
int *cb1_idx, 
int *cb2_idx)
 
  294         memcpy(cba_vect, work, 
sizeof(cba_vect));
 
  297                    data, cb1_idx, &gain);
 
  310             data[i] -= gain * work[i];
 
  311         memcpy(cb1_vect, work, 
sizeof(cb1_vect));
 
  317                    ortho_cb1 ? cb1_vect : NULL, data, cb2_idx, &gain);
 
  331                                   const int16_t *sblock_data,
 
  332                                   const int16_t *lpc_coefs, 
unsigned int rms,
 
  338     int cba_idx, cb1_idx, cb2_idx, gain;
 
  342     float error, best_error;
 
  346         coefs[i] = lpc_coefs[i] * (1/4096.0);
 
  356         zero[i] = work[LPC_ORDER + i];
 
  357         data[i] = sblock_data[i] - zero[i];
 
  365     memset(work, 0, LPC_ORDER * 
sizeof(*work));
 
  374         memcpy(cba, work + LPC_ORDER, 
sizeof(cba));
 
  379     fixed_cb_search(work + LPC_ORDER, coefs, data, cba_idx, &cb1_idx, &cb2_idx);
 
  386     memcpy(cb1, work + LPC_ORDER, 
sizeof(cb1));
 
  390     memcpy(cb2, work + LPC_ORDER, 
sizeof(cb2));
 
  392     best_error = FLT_MAX;
 
  394     for (n = 0; n < 256; n++) {
 
  404                 data[i] = zero[i] + g[0] * cba[i] + g[1] * cb1[i] +
 
  406                 error += (data[i] - sblock_data[i]) *
 
  407                          (data[i] - sblock_data[i]);
 
  411                 data[i] = zero[i] + g[1] * cb1[i] + g[2] * cb2[i];
 
  412                 error += (data[i] - sblock_data[i]) *
 
  413                          (data[i] - sblock_data[i]);
 
  416         if (error < best_error) {
 
  442     unsigned int refl_rms[
NBLOCKS]; 
 
  443     const int16_t *samples = frame ? (
const int16_t *)frame->
data[0] : 
NULL;
 
  462         energy += (lpc_data[i] * lpc_data[i]) >> 4;
 
  467             lpc_data[i] = samples[j] >> 2;
 
  468             energy += (lpc_data[i] * lpc_data[i]) >> 4;
 
  472         memset(&lpc_data[i], 0, (
NBLOCKS * BLOCKSIZE - i) * 
sizeof(*lpc_data));
 
  480         block_coefs[
NBLOCKS - 1][i] = -(lpc_coefs[LPC_ORDER - 1][i] <<
 
  481                                         (12 - shift[LPC_ORDER - 1]));
 
  495             memset(lpc_refl, 0, 
sizeof(lpc_refl));
 
  507     refl_rms[1] = 
ff_interp(ractx, block_coefs[1], 2,
 
  508                             energy <= ractx->old_energy,
 
  510     refl_rms[2] = 
ff_interp(ractx, block_coefs[2], 3, 0, energy);
 
  516                               block_coefs[i], refl_rms[i], &pb);
 
  533            (NBLOCKS * BLOCKSIZE - i) * 
sizeof(*ractx->
curr_block));
 
  557     .supported_samplerates = (
const int[]){ 8000, 0 },
 
void ff_af_queue_remove(AudioFrameQueue *afq, int nb_samples, int64_t *pts, int64_t *duration)
Remove frame(s) from the queue. 
 
unsigned int lpc_tables[2][10]
 
void ff_celp_lp_synthesis_filterf(float *out, const float *filter_coeffs, const float *in, int buffer_length, int filter_length)
LP synthesis filter. 
 
static int shift(int a, int b)
 
int ff_t_sqrt(unsigned int x)
Evaluate sqrt(x << 24). 
 
This structure describes decoded (raw) audio or video data. 
 
const int16_t *const ff_lpc_refl_cb[10]
 
ptrdiff_t const GLvoid * data
 
static int adaptive_cb_search(const int16_t *adapt_cb, float *work, const float *coefs, float *data)
Search the adaptive codebook for the best entry and gain and remove its contribution from input data...
 
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit 
 
int64_t bit_rate
the average bitrate 
 
static av_cold int init(AVCodecContext *avctx)
 
static int quantize(int value, const int16_t *table, unsigned int size)
Quantize a value by searching a sorted table for the element with the nearest value. 
 
static av_cold int ra144_encode_close(AVCodecContext *avctx)
 
int16_t adapt_cb[146+2]
Adaptive codebook, its size is two units bigger to avoid a buffer overflow. 
 
static void orthogonalize(float *v, const float *u)
Orthogonalize a vector to another vector. 
 
static void get_match_score(float *work, const float *coefs, float *vect, const float *ortho1, const float *ortho2, const float *data, float *score, float *gain)
Calculate match score and gain of an LPC-filtered vector with respect to input data, possibly orthogonalizing it to up to two other vectors. 
 
AVCodec ff_ra_144_encoder
 
static int ra144_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
 
#define NBLOCKS
number of subblocks within a block 
 
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
 
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data. 
 
static double cb(void *priv, double x, double y)
 
av_cold void ff_audiodsp_init(AudioDSPContext *c)
 
unsigned int lpc_refl_rms[2]
 
av_cold void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
Initialize AudioFrameQueue. 
 
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown. 
 
unsigned int ff_rms(const int *data)
 
#define u(width, name, range_min, range_max)
 
#define FIXED_CB_SIZE
size of fixed codebooks 
 
const uint16_t ff_cb2_base[128]
 
static const uint16_t table[]
 
void ff_subblock_synthesis(RA144Context *ractx, const int16_t *lpc_coefs, int cba_idx, int cb1_idx, int cb2_idx, int gval, int gain)
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
unsigned int * lpc_coef[2]
LPC coefficients: lpc_coef[0] is the coefficients of the current frame and lpc_coef[1] of the previou...
 
static const int sizes[][2]
 
const int8_t ff_cb1_vects[128][40]
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
 
int initial_padding
Audio only. 
 
const char * name
Name of the codec implementation. 
 
int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f)
Add a frame to the queue. 
 
static void fixed_cb_search(float *work, const float *coefs, float *data, int cba_idx, int *cb1_idx, int *cb2_idx)
Search the two fixed codebooks for the best entry and gain. 
 
av_cold void ff_lpc_end(LPCContext *s)
Uninitialize LPCContext. 
 
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size. 
 
int ff_interp(RA144Context *ractx, int16_t *out, int a, int copyold, int energy)
 
GLsizei GLboolean const GLfloat * value
 
void ff_copy_and_dup(int16_t *target, const int16_t *source, int offset)
Copy the last offset values of *source to *target. 
 
void ff_int_to_int16(int16_t *out, const int *inp)
 
static void error(const char *err)
 
const int16_t ff_gain_val_tab[256][3]
 
int frame_size
Number of samples per channel in an audio frame. 
 
#define BLOCKSIZE
subblock size in 16-bit words 
 
void ff_eval_coefs(int *coefs, const int *refl)
Evaluate the LPC filter coefficients from the reflection coefficients. 
 
Libavcodec external API header. 
 
AVSampleFormat
Audio sample formats. 
 
main external API structure. 
 
static av_cold int ra144_encode_init(AVCodecContext *avctx)
 
Levinson-Durbin recursion. 
 
int16_t buffer_a[FFALIGN(BLOCKSIZE, 16)]
 
int ff_eval_refl(int *refl, const int16_t *coefs, AVCodecContext *avctx)
Evaluate the reflection coefficients from the filter coefficients. 
 
#define BUFFERSIZE
the size of the adaptive codebook 
 
unsigned int ff_rescale_rms(unsigned int rms, unsigned int energy)
 
int ff_lpc_calc_coefs(LPCContext *s, const int32_t *samples, int blocksize, int min_order, int max_order, int precision, int32_t coefs[][MAX_LPC_ORDER], int *shift, enum FFLPCType lpc_type, int lpc_passes, int omethod, int min_shift, int max_shift, int zero_shift)
Calculate LPC coefficients for multiple orders. 
 
av_cold int ff_lpc_init(LPCContext *s, int blocksize, int max_order, enum FFLPCType lpc_type)
Initialize LPCContext. 
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
 
static void find_best_vect(float *work, const float *coefs, const int8_t cb[][BLOCKSIZE], const float *ortho1, const float *ortho2, float *data, int *idx, float *gain)
Find the best vector of a fixed codebook by applying an LPC filter to codebook entries, possibly orthogonalizing them to up to two other vectors and matching the results with input data. 
 
const int8_t ff_cb2_vects[128][40]
 
common internal api header. 
 
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros. 
 
unsigned int old_energy
previous frame energy 
 
const int16_t ff_energy_tab[32]
 
const uint8_t ff_gain_exp_tab[256]
 
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s. 
 
int16_t curr_sblock[50]
The current subblock padded by the last 10 values of the previous one. 
 
int channels
number of audio channels 
 
void ff_af_queue_close(AudioFrameQueue *afq)
Close AudioFrameQueue. 
 
static enum AVSampleFormat sample_fmts[]
 
const uint16_t ff_cb1_base[128]
 
int16_t curr_block[NBLOCKS *BLOCKSIZE]
 
#define FFSWAP(type, a, b)
 
int ff_irms(AudioDSPContext *adsp, const int16_t *data)
inverse root mean square 
 
#define AV_CH_LAYOUT_MONO
 
static void create_adapt_vect(float *vect, const int16_t *cb, int lag)
Create a vector from the adaptive codebook at a given lag value. 
 
This structure stores compressed data. 
 
int nb_samples
number of audio samples (per channel) described by this frame 
 
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
 
static void ra144_encode_subblock(RA144Context *ractx, const int16_t *sblock_data, const int16_t *lpc_coefs, unsigned int rms, PutBitContext *pb)
Encode a subblock of the current frame.