48 #define BITSTREAM_WRITER_LE
51 #define POW_TABLE_SIZE (1<<11)
52 #define POW_TABLE_OFFSET 3
53 #define OPT_SIZE ((1<<15) + 3000)
72 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
73 5, 5, 5, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13, 13, 14,
74 15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26,
75 27, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40,
76 41, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 52, 53,
77 54, 55, 55, 56, 57, 57, 58, 59, 59, 60, 60, 60, 61, 61, 61, 62,
81 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4,
82 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 10, 10, 11, 11, 12,
83 13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 20, 21, 21, 22, 22, 23,
84 23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
85 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30,
95 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11,
98 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8,
99 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
100 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29,
103 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3,
104 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9,
105 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,
106 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20,
107 21, 21, 22, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32,
108 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 42, 43, 44, 44, 45, 45,
109 46, 47, 47, 48, 48, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52,
110 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 57,
111 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61,
115 static const float quant_lut_mul[7] = { 0.0, 0.0, 2.0, 2.0, 5.0, 12.0, 36.6 };
116 static const float quant_lut_add[7] = { 0.0, 0.0, 2.0, 7.0, 21.0, 56.0, 157.0 };
145 #if FF_API_OLD_ENCODE_AUDIO
166 av_log(avctx,
AV_LOG_ERROR,
"Nellymoser works only with 8000, 16000, 11025, 22050 and 44100 sample rate\n");
193 #if FF_API_OLD_ENCODE_AUDIO
207 #define find_best(val, table, LUT, LUT_add, LUT_size) \
209 LUT[av_clip ((lrintf(val) >> 8) + LUT_add, 0, LUT_size - 1)]; \
210 if (fabs(val - table[best_idx]) > fabs(val - table[best_idx + 1])) \
215 int band, best_idx, power_idx = 0;
216 float power_candidate;
220 idx_table[0] = best_idx;
224 power_candidate = cand[band] - power_idx;
226 idx_table[band] = best_idx;
231 static inline float distance(
float x,
float y,
int band)
240 int i, j, band, best_idx;
241 float power_candidate, best_val;
250 for (i = 0; i < 64; i++) {
252 path[0][ff_nelly_init_table[i]] = i;
258 int idx_min, idx_max, idx;
259 power_candidate = cand[band];
260 for (q = 1000; !c && q <
OPT_SIZE; q <<= 2) {
261 idx_min =
FFMAX(0, cand[band] - q);
262 idx_max =
FFMIN(OPT_SIZE, cand[band - 1] + q);
263 for (i =
FFMAX(0, cand[band - 1] - q); i <
FFMIN(OPT_SIZE, cand[band - 1] + q); i++) {
264 if (
isinf(opt[band - 1][i]) )
266 for (j = 0; j < 32; j++) {
270 if (idx >= idx_min) {
271 tmp = opt[band - 1][i] +
distance(idx, power_candidate, band);
272 if (opt[band][idx] > tmp) {
273 opt[band][idx] = tmp;
286 band = NELLY_BANDS - 1;
288 if (best_val > opt[band][i]) {
289 best_val = opt[band][i];
293 for (band = NELLY_BANDS - 1; band >= 0; band--) {
294 idx_table[band] = path[band][best_idx];
310 int i, j, band,
block, best_idx, power_idx = 0;
311 float power_val, coeff, coeff_sum;
328 log(
FFMAX(1.0, coeff_sum / (ff_nelly_band_sizes_table[band] << 7))) * 1024.0 / M_LN2;
356 for (block = 0; block < 2; block++) {
367 if (fabs(coeff - table[best_idx]) > fabs(coeff - table[best_idx + 1]))
382 const AVFrame *frame,
int *got_packet_ptr)
422 .
name =
"nellymoser",
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
#define CODEC_FLAG_BITEXACT
This structure describes decoded (raw) audio or video data.
static int encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
void(* mdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
AVFrame * coded_frame
the picture in the bitstream
static av_cold int encode_end(AVCodecContext *avctx)
static const float quant_lut_add[7]
float mdct_out[NELLY_SAMPLES]
static void apply_mdct(NellyMoserEncodeContext *s)
const float ff_nelly_dequantization_table[127]
#define NELLY_DETAIL_BITS
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
const uint16_t ff_nelly_init_table[64]
static void get_exponent_dynamic(NellyMoserEncodeContext *s, float *cand, int *idx_table)
static void get_exponent_greedy(NellyMoserEncodeContext *s, float *cand, int *idx_table)
float(* opt)[NELLY_BANDS]
int duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
static int init(AVCodecParserContext *s)
struct NellyMoserEncodeContext NellyMoserEncodeContext
#define CODEC_CAP_SMALL_LAST_FRAME
static float pow_table[POW_TABLE_SIZE]
-pow(2, -i / 2048.0 - 3.0);
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
void(* vector_fmul)(float *dst, const float *src0, const float *src1, int len)
Calculate the product of two vectors of floats and store the result in a vector of floats...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static av_cold int encode_init(AVCodecContext *avctx)
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
static void put_bits(PutBitContext *s, int n, unsigned int value)
Write up to 31 bits into a bitstream.
int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f)
Add a frame to the queue.
static int put_bits_count(PutBitContext *s)
static float distance(float x, float y, int band)
AVFrame * avcodec_alloc_frame(void)
Allocate an AVFrame and set its fields to default values.
float in_buff[NELLY_SAMPLES]
const uint8_t ff_nelly_band_sizes_table[NELLY_BANDS]
#define NELLY_HEADER_BITS
int ff_alloc_packet(AVPacket *avpkt, int size)
Check AVPacket size and/or allocate data.
AVCodec ff_nellymoser_encoder
void ff_sine_window_init(float *window, int n)
Generate a sine window.
int frame_size
Number of samples per channel in an audio frame.
static const uint8_t quant_lut[230]
int sample_rate
samples per second
static const uint8_t sf_lut[96]
main external API structure.
static void close(AVCodecParserContext *s)
float buf[3 *NELLY_BUF_LEN]
sample buffer
static const uint8_t quant_lut_offset[8]
#define find_best(val, table, LUT, LUT_add, LUT_size)
#define FF_COMPLIANCE_NORMAL
void(* vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len)
#define DECLARE_ALIGNED(n, t, v)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
uint8_t(* path)[NELLY_BANDS]
common internal api header.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
AVSampleFormat
Audio Sample Formats.
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static void encode_block(NellyMoserEncodeContext *s, unsigned char *output, int output_size)
Encode NELLY_SAMPLES samples.
int trellis
trellis RD quantization
void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
Initialize AudioFrameQueue.
void ff_af_queue_remove(AudioFrameQueue *afq, int nb_samples, int64_t *pts, int *duration)
Remove frame(s) from the queue.
int channels
number of audio channels
const int16_t ff_nelly_delta_table[32]
void ff_af_queue_close(AudioFrameQueue *afq)
Close AudioFrameQueue.
static av_always_inline av_const int isinf(float x)
void avpriv_float_dsp_init(AVFloatDSPContext *fdsp, int bit_exact)
Initialize a float DSP context.
void ff_nelly_get_sample_bits(const float *buf, int *bits)
The 3 alphanumeric copyright notices are md5summed they are from the original implementors.
This structure stores compressed data.
static const float quant_lut_mul[7]
int nb_samples
number of audio samples (per channel) described by this frame
int strict_std_compliance
strictly follow the standard (MPEG4, ...).
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
static const uint8_t sf_delta_lut[78]