FFmpeg
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions | Variables
nellymoserenc.c File Reference

Nellymoser encoder by Bartlomiej Wolowiec. More...

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

Go to the source code of this file.

Data Structures

struct  NellyMoserEncodeContext
 

Macros

#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_end (AVCodecContext *avctx)
 
static av_cold int encode_init (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, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
 

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.

Macro Definition Documentation

#define BITSTREAM_WRITER_LE

Definition at line 48 of file nellymoserenc.c.

#define POW_TABLE_SIZE   (1<<11)

Definition at line 51 of file nellymoserenc.c.

Referenced by encode_init().

#define POW_TABLE_OFFSET   3

Definition at line 52 of file nellymoserenc.c.

Referenced by encode_block(), and encode_init().

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

Definition at line 53 of file nellymoserenc.c.

Referenced by encode_init(), and get_exponent_dynamic().

#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 207 of file nellymoserenc.c.

Referenced by get_exponent_greedy().

Function Documentation

static void apply_mdct ( NellyMoserEncodeContext s)
static

Definition at line 119 of file nellymoserenc.c.

Referenced by encode_block().

static av_cold int encode_end ( AVCodecContext avctx)
static

Definition at line 134 of file nellymoserenc.c.

Referenced by encode_init().

static av_cold int encode_init ( AVCodecContext avctx)
static

Definition at line 152 of file nellymoserenc.c.

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

Definition at line 213 of file nellymoserenc.c.

Referenced by encode_block().

static float distance ( float  x,
float  y,
int  band 
)
inlinestatic
static void get_exponent_dynamic ( NellyMoserEncodeContext s,
float *  cand,
int *  idx_table 
)
static

Definition at line 238 of file nellymoserenc.c.

Referenced by encode_block().

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
sencoder context
outputoutput buffer
output_sizesize of output buffer

Definition at line 307 of file nellymoserenc.c.

Referenced by encode_frame().

static int encode_frame ( AVCodecContext avctx,
AVPacket avpkt,
const AVFrame frame,
int *  got_packet_ptr 
)
static

Definition at line 381 of file nellymoserenc.c.

Variable Documentation

float pow_table[POW_TABLE_SIZE]
static

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

Definition at line 69 of file nellymoserenc.c.

Referenced by encode_block(), and encode_init().

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 71 of file nellymoserenc.c.

Referenced by get_exponent_greedy().

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 80 of file nellymoserenc.c.

Referenced by get_exponent_greedy().

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 88 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 115 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 116 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 117 of file nellymoserenc.c.

Referenced by encode_block().

AVCodec ff_nellymoser_encoder
Initial value:
= {
.name = "nellymoser",
.priv_data_size = sizeof(NellyMoserEncodeContext),
.encode2 = encode_frame,
.long_name = NULL_IF_CONFIG_SMALL("Nellymoser Asao"),
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT,
}

Definition at line 419 of file nellymoserenc.c.