libavcodec/nellymoserenc.c File Reference

Nellymoser encoder by Bartlomiej Wolowiec. More...

#include "libavutil/mathematics.h"
#include "nellymoser.h"
#include "avcodec.h"
#include "dsputil.h"
#include "fft.h"
#include "sinewin.h"
#include "put_bits.h"

Go to the source code of this file.

Data Structures

struct  NellyMoserEncodeContext

Defines

#define BITSTREAM_WRITER_LE
#define POW_TABLE_SIZE   (1<<11)
#define POW_TABLE_OFFSET   3
#define OPT_SIZE   ((1<<15) + 3000)
#define find_best(val, table, LUT, LUT_add, LUT_size)

Functions

static void apply_mdct (NellyMoserEncodeContext *s)
static av_cold int encode_init (AVCodecContext *avctx)
static av_cold int encode_end (AVCodecContext *avctx)
static void get_exponent_greedy (NellyMoserEncodeContext *s, float *cand, int *idx_table)
static float distance (float x, float y, int band)
static void get_exponent_dynamic (NellyMoserEncodeContext *s, float *cand, int *idx_table)
static void encode_block (NellyMoserEncodeContext *s, unsigned char *output, int output_size)
 Encode NELLY_SAMPLES samples.
static int encode_frame (AVCodecContext *avctx, uint8_t *frame, int buf_size, void *data)

Variables

static float pow_table [POW_TABLE_SIZE]
 -pow(2, -i / 2048.0 - 3.0);
static const uint8_t sf_lut [96]
static const uint8_t sf_delta_lut [78]
static const uint8_t quant_lut [230]
static const float quant_lut_mul [7] = { 0.0, 0.0, 2.0, 2.0, 5.0, 12.0, 36.6 }
static const float quant_lut_add [7] = { 0.0, 0.0, 2.0, 7.0, 21.0, 56.0, 157.0 }
static const uint8_t quant_lut_offset [8] = { 0, 0, 1, 4, 11, 32, 81, 230 }
AVCodec ff_nellymoser_encoder


Detailed Description

Nellymoser encoder by Bartlomiej Wolowiec.

Generic codec information: libavcodec/nellymoserdec.c

Some information also from: http://samples.mplayerhq.hu/A-codecs/Nelly_Moser/ASAO/ASAO.zip (Copyright Joseph Artsimovich and UAB "DKD")

for more information about nellymoser format, visit: http://wiki.multimedia.cx/index.php?title=Nellymoser

Definition in file nellymoserenc.c.


Define Documentation

#define BITSTREAM_WRITER_LE

Definition at line 45 of file nellymoserenc.c.

#define find_best ( val,
table,
LUT,
LUT_add,
LUT_size   ) 

Value:

best_idx = \
        LUT[av_clip ((lrintf(val) >> 8) + LUT_add, 0, LUT_size - 1)]; \
    if (fabs(val - table[best_idx]) > fabs(val - table[best_idx + 1])) \
        best_idx++;

Definition at line 180 of file nellymoserenc.c.

Referenced by config(), get_exponent_greedy(), and query_format().

#define OPT_SIZE   ((1<<15) + 3000)

Definition at line 50 of file nellymoserenc.c.

Referenced by encode_init(), and get_exponent_dynamic().

#define POW_TABLE_OFFSET   3

Definition at line 49 of file nellymoserenc.c.

Referenced by encode_block(), and encode_init().

#define POW_TABLE_SIZE   (1<<11)

Definition at line 48 of file nellymoserenc.c.

Referenced by encode_init().


Function Documentation

static void apply_mdct ( NellyMoserEncodeContext s  )  [static]

Definition at line 116 of file nellymoserenc.c.

static float distance ( float  x,
float  y,
int  band 
) [inline, static]

static void encode_block ( NellyMoserEncodeContext s,
unsigned char *  output,
int  output_size 
) [static]

Encode NELLY_SAMPLES samples.

It assumes, that samples contains 3 * NELLY_BUF_LEN values

Parameters:
s encoder context
output output buffer
output_size size of output buffer

Definition at line 280 of file nellymoserenc.c.

static av_cold int encode_end ( AVCodecContext avctx  )  [static]

Definition at line 166 of file nellymoserenc.c.

static int encode_frame ( AVCodecContext avctx,
uint8_t *  frame,
int  buf_size,
void *  data 
) [static]

Definition at line 353 of file nellymoserenc.c.

static av_cold int encode_init ( AVCodecContext avctx  )  [static]

Definition at line 130 of file nellymoserenc.c.

static void get_exponent_dynamic ( NellyMoserEncodeContext s,
float *  cand,
int *  idx_table 
) [static]

Definition at line 211 of file nellymoserenc.c.

Referenced by encode_block().

static void get_exponent_greedy ( NellyMoserEncodeContext s,
float *  cand,
int *  idx_table 
) [static]

Definition at line 186 of file nellymoserenc.c.

Referenced by encode_block().


Variable Documentation

Initial value:

 {
    .name = "nellymoser",
    .type = AVMEDIA_TYPE_AUDIO,
    .id = CODEC_ID_NELLYMOSER,
    .priv_data_size = sizeof(NellyMoserEncodeContext),
    .init = encode_init,
    .encode = encode_frame,
    .close = encode_end,
    .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
    .long_name = NULL_IF_CONFIG_SMALL("Nellymoser Asao"),
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE},
}

Definition at line 385 of file nellymoserenc.c.

float pow_table[POW_TABLE_SIZE] [static]

-pow(2, -i / 2048.0 - 3.0);

Definition at line 66 of file nellymoserenc.c.

Referenced by encode_block(), and encode_init().

const uint8_t quant_lut[230] [static]

Initial value:

 {
     0,

     0,  1,  2,

     0,  1,  2,  3,  4,  5,  6,

     0,  1,  1,  2,  2,  3,  3,  4,  5,  6,  7,  8,  9, 10, 11, 11,
    12, 13, 13, 13, 14,

     0,  1,  1,  2,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  8,
     8,  9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
    22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29,
    30,

     0,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  3,  3,  3,  3,
     4,  4,  4,  5,  5,  5,  6,  6,  7,  7,  7,  8,  8,  9,  9,  9,
    10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,
    15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20,
    21, 21, 22, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32,
    33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 44, 45, 45,
    46, 47, 47, 48, 48, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52,
    53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 57,
    58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61,
    61, 61, 61, 61, 62,
}

Definition at line 85 of file nellymoserenc.c.

Referenced by encode_block().

const float quant_lut_add[7] = { 0.0, 0.0, 2.0, 7.0, 21.0, 56.0, 157.0 } [static]

Definition at line 113 of file nellymoserenc.c.

Referenced by encode_block().

const float quant_lut_mul[7] = { 0.0, 0.0, 2.0, 2.0, 5.0, 12.0, 36.6 } [static]

Definition at line 112 of file nellymoserenc.c.

Referenced by encode_block().

const uint8_t quant_lut_offset[8] = { 0, 0, 1, 4, 11, 32, 81, 230 } [static]

Definition at line 114 of file nellymoserenc.c.

Referenced by encode_block().

const uint8_t sf_delta_lut[78] [static]

Initial value:

 {
     0,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  4,  4,
     4,  5,  5,  5,  6,  6,  7,  7,  8,  8,  9, 10, 10, 11, 11, 12,
    13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 22, 23,
    23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
    28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30,
}

Definition at line 77 of file nellymoserenc.c.

Referenced by get_exponent_greedy().

const uint8_t sf_lut[96] [static]

Initial value:

 {
     0,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  4,  4,
     5,  5,  5,  6,  7,  7,  8,  8,  9, 10, 11, 11, 12, 13, 13, 14,
    15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26,
    27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
    41, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 52, 53,
    54, 55, 55, 56, 57, 57, 58, 59, 59, 60, 60, 60, 61, 61, 61, 62,
}

Definition at line 68 of file nellymoserenc.c.

Referenced by get_exponent_greedy().


Generated on Fri Oct 26 02:46:09 2012 for FFmpeg by  doxygen 1.5.8