mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
whitespace cosmetics, prettyprinting, K&R coding style
Originally committed as revision 20080 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
badce93dad
commit
a7adcf29cf
@ -2,7 +2,7 @@
|
|||||||
* @file libavcodec/vorbis.c
|
* @file libavcodec/vorbis.c
|
||||||
* Common code for Vorbis I encoder and decoder
|
* Common code for Vorbis I encoder and decoder
|
||||||
* @author Denes Balatoni ( dbalatoni programozo hu )
|
* @author Denes Balatoni ( dbalatoni programozo hu )
|
||||||
|
*
|
||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
*
|
*
|
||||||
* FFmpeg is free software; you can redistribute it and/or
|
* FFmpeg is free software; you can redistribute it and/or
|
||||||
@ -35,13 +35,13 @@
|
|||||||
// x^(1/n)
|
// x^(1/n)
|
||||||
unsigned int ff_vorbis_nth_root(unsigned int x, unsigned int n)
|
unsigned int ff_vorbis_nth_root(unsigned int x, unsigned int n)
|
||||||
{
|
{
|
||||||
unsigned int ret=0, i, j;
|
unsigned int ret = 0, i, j;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
++ret;
|
++ret;
|
||||||
for(i=0,j=ret;i<n-1;i++)
|
for (i = 0, j = ret; i < n - 1; i++)
|
||||||
j*=ret;
|
j *= ret;
|
||||||
} while (j<=x);
|
} while (j <= x);
|
||||||
|
|
||||||
return ret - 1;
|
return ret - 1;
|
||||||
}
|
}
|
||||||
@ -53,61 +53,62 @@ unsigned int ff_vorbis_nth_root(unsigned int x, unsigned int n)
|
|||||||
// reasonable to check redundantly.
|
// reasonable to check redundantly.
|
||||||
int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, uint_fast32_t num)
|
int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, uint_fast32_t num)
|
||||||
{
|
{
|
||||||
uint_fast32_t exit_at_level[33]={404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
uint_fast32_t exit_at_level[33] = {
|
||||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
uint_fast8_t i,j;
|
uint_fast8_t i, j;
|
||||||
uint_fast32_t code,p;
|
uint_fast32_t code, p;
|
||||||
|
|
||||||
#ifdef V_DEBUG
|
#ifdef V_DEBUG
|
||||||
GetBitContext gb;
|
GetBitContext gb;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for(p=0;(bits[p]==0) && (p<num);++p)
|
for (p = 0; (bits[p] == 0) && (p < num); ++p)
|
||||||
;
|
;
|
||||||
if (p==num) {
|
if (p == num) {
|
||||||
// av_log(vc->avccontext, AV_LOG_INFO, "An empty codebook. Heh?! \n");
|
// av_log(vc->avccontext, AV_LOG_INFO, "An empty codebook. Heh?! \n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
codes[p]=0;
|
codes[p] = 0;
|
||||||
if (bits[p] > 32)
|
if (bits[p] > 32)
|
||||||
return 1;
|
return 1;
|
||||||
for(i=0;i<bits[p];++i)
|
for (i = 0; i < bits[p]; ++i)
|
||||||
exit_at_level[i+1]=1<<i;
|
exit_at_level[i+1] = 1 << i;
|
||||||
|
|
||||||
#ifdef V_DEBUG
|
#ifdef V_DEBUG
|
||||||
av_log(NULL, AV_LOG_INFO, " %d. of %d code len %d code %d - ", p, num, bits[p], codes[p]);
|
av_log(NULL, AV_LOG_INFO, " %d. of %d code len %d code %d - ", p, num, bits[p], codes[p]);
|
||||||
init_get_bits(&gb, (uint_fast8_t *)&codes[p], bits[p]);
|
init_get_bits(&gb, (uint_fast8_t *)&codes[p], bits[p]);
|
||||||
for(i=0;i<bits[p];++i)
|
for (i = 0; i < bits[p]; ++i)
|
||||||
av_log(NULL, AV_LOG_INFO, "%s", get_bits1(&gb) ? "1" : "0");
|
av_log(NULL, AV_LOG_INFO, "%s", get_bits1(&gb) ? "1" : "0");
|
||||||
av_log(NULL, AV_LOG_INFO, "\n");
|
av_log(NULL, AV_LOG_INFO, "\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
++p;
|
++p;
|
||||||
|
|
||||||
for(;p<num;++p) {
|
for (; p < num; ++p) {
|
||||||
if (bits[p] > 32)
|
if (bits[p] > 32)
|
||||||
return 1;
|
return 1;
|
||||||
if (bits[p]==0)
|
if (bits[p] == 0)
|
||||||
continue;
|
continue;
|
||||||
// find corresponding exit(node which the tree can grow further from)
|
// find corresponding exit(node which the tree can grow further from)
|
||||||
for(i=bits[p];i>0;--i)
|
for (i = bits[p]; i > 0; --i)
|
||||||
if (exit_at_level[i])
|
if (exit_at_level[i])
|
||||||
break;
|
break;
|
||||||
if (!i) // overspecified tree
|
if (!i) // overspecified tree
|
||||||
return 1;
|
return 1;
|
||||||
code=exit_at_level[i];
|
code = exit_at_level[i];
|
||||||
exit_at_level[i]=0;
|
exit_at_level[i] = 0;
|
||||||
// construct code (append 0s to end) and introduce new exits
|
// construct code (append 0s to end) and introduce new exits
|
||||||
for(j=i+1;j<=bits[p];++j)
|
for (j = i + 1 ;j <= bits[p]; ++j)
|
||||||
exit_at_level[j]=code+(1<<(j-1));
|
exit_at_level[j] = code + (1 << (j - 1));
|
||||||
codes[p]=code;
|
codes[p] = code;
|
||||||
|
|
||||||
#ifdef V_DEBUG
|
#ifdef V_DEBUG
|
||||||
av_log(NULL, AV_LOG_INFO, " %d. code len %d code %d - ", p, bits[p], codes[p]);
|
av_log(NULL, AV_LOG_INFO, " %d. code len %d code %d - ", p, bits[p], codes[p]);
|
||||||
init_get_bits(&gb, (uint_fast8_t *)&codes[p], bits[p]);
|
init_get_bits(&gb, (uint_fast8_t *)&codes[p], bits[p]);
|
||||||
for(i=0;i<bits[p];++i)
|
for (i = 0; i < bits[p]; ++i)
|
||||||
av_log(NULL, AV_LOG_INFO, "%s", get_bits1(&gb) ? "1" : "0");
|
av_log(NULL, AV_LOG_INFO, "%s", get_bits1(&gb) ? "1" : "0");
|
||||||
av_log(NULL, AV_LOG_INFO, "\n");
|
av_log(NULL, AV_LOG_INFO, "\n");
|
||||||
#endif
|
#endif
|
||||||
@ -115,7 +116,7 @@ int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, uint_fast32_t num)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//no exits should be left (underspecified tree - ie. unused valid vlcs - not allowed by SPEC)
|
//no exits should be left (underspecified tree - ie. unused valid vlcs - not allowed by SPEC)
|
||||||
for (p=1; p<33; p++)
|
for (p = 1; p < 33; p++)
|
||||||
if (exit_at_level[p])
|
if (exit_at_level[p])
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@ -129,14 +130,14 @@ void ff_vorbis_ready_floor1_list(vorbis_floor1_entry * list, int values)
|
|||||||
list[1].sort = 1;
|
list[1].sort = 1;
|
||||||
for (i = 2; i < values; i++) {
|
for (i = 2; i < values; i++) {
|
||||||
int j;
|
int j;
|
||||||
list[i].low = 0;
|
list[i].low = 0;
|
||||||
list[i].high = 1;
|
list[i].high = 1;
|
||||||
list[i].sort = i;
|
list[i].sort = i;
|
||||||
for (j = 2; j < i; j++) {
|
for (j = 2; j < i; j++) {
|
||||||
int tmp = list[j].x;
|
int tmp = list[j].x;
|
||||||
if (tmp < list[i].x) {
|
if (tmp < list[i].x) {
|
||||||
if (tmp > list[list[i].low].x)
|
if (tmp > list[list[i].low].x)
|
||||||
list[i].low = j;
|
list[i].low = j;
|
||||||
} else {
|
} else {
|
||||||
if (tmp < list[list[i].high].x)
|
if (tmp < list[list[i].high].x)
|
||||||
list[i].high = j;
|
list[i].high = j;
|
||||||
@ -157,16 +158,16 @@ void ff_vorbis_ready_floor1_list(vorbis_floor1_entry * list, int values)
|
|||||||
|
|
||||||
static inline void render_line_unrolled(intptr_t x, intptr_t y, int x1,
|
static inline void render_line_unrolled(intptr_t x, intptr_t y, int x1,
|
||||||
intptr_t sy, int ady, int adx,
|
intptr_t sy, int ady, int adx,
|
||||||
float * buf)
|
float *buf)
|
||||||
{
|
{
|
||||||
int err = -adx;
|
int err = -adx;
|
||||||
x -= x1-1;
|
x -= x1 - 1;
|
||||||
buf += x1-1;
|
buf += x1 - 1;
|
||||||
while (++x < 0) {
|
while (++x < 0) {
|
||||||
err += ady;
|
err += ady;
|
||||||
if (err >= 0) {
|
if (err >= 0) {
|
||||||
err += ady - adx;
|
err += ady - adx;
|
||||||
y += sy;
|
y += sy;
|
||||||
buf[x++] = ff_vorbis_floor1_inverse_db_table[y];
|
buf[x++] = ff_vorbis_floor1_inverse_db_table[y];
|
||||||
}
|
}
|
||||||
buf[x] = ff_vorbis_floor1_inverse_db_table[y];
|
buf[x] = ff_vorbis_floor1_inverse_db_table[y];
|
||||||
@ -178,27 +179,27 @@ static inline void render_line_unrolled(intptr_t x, intptr_t y, int x1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void render_line(int x0, int y0, int x1, int y1, float * buf)
|
static void render_line(int x0, int y0, int x1, int y1, float *buf)
|
||||||
{
|
{
|
||||||
int dy = y1 - y0;
|
int dy = y1 - y0;
|
||||||
int adx = x1 - x0;
|
int adx = x1 - x0;
|
||||||
int ady = FFABS(dy);
|
int ady = FFABS(dy);
|
||||||
int sy = dy<0 ? -1 : 1;
|
int sy = dy < 0 ? -1 : 1;
|
||||||
buf[x0] = ff_vorbis_floor1_inverse_db_table[y0];
|
buf[x0] = ff_vorbis_floor1_inverse_db_table[y0];
|
||||||
if(ady*2<=adx) { // optimized common case
|
if (ady*2 <= adx) { // optimized common case
|
||||||
render_line_unrolled(x0, y0, x1, sy, ady, adx, buf);
|
render_line_unrolled(x0, y0, x1, sy, ady, adx, buf);
|
||||||
} else {
|
} else {
|
||||||
int base = dy / adx;
|
int base = dy / adx;
|
||||||
int x = x0;
|
int x = x0;
|
||||||
int y = y0;
|
int y = y0;
|
||||||
int err = -adx;
|
int err = -adx;
|
||||||
ady -= FFABS(base) * adx;
|
ady -= FFABS(base) * adx;
|
||||||
while (++x < x1) {
|
while (++x < x1) {
|
||||||
y += base;
|
y += base;
|
||||||
err += ady;
|
err += ady;
|
||||||
if (err >= 0) {
|
if (err >= 0) {
|
||||||
err -= adx;
|
err -= adx;
|
||||||
y += sy;
|
y += sy;
|
||||||
}
|
}
|
||||||
buf[x] = ff_vorbis_floor1_inverse_db_table[y];
|
buf[x] = ff_vorbis_floor1_inverse_db_table[y];
|
||||||
}
|
}
|
||||||
@ -206,8 +207,8 @@ static void render_line(int x0, int y0, int x1, int y1, float * buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ff_vorbis_floor1_render_list(vorbis_floor1_entry * list, int values,
|
void ff_vorbis_floor1_render_list(vorbis_floor1_entry * list, int values,
|
||||||
uint_fast16_t * y_list, int * flag,
|
uint_fast16_t *y_list, int *flag,
|
||||||
int multiplier, float * out, int samples)
|
int multiplier, float *out, int samples)
|
||||||
{
|
{
|
||||||
int lx, ly, i;
|
int lx, ly, i;
|
||||||
lx = 0;
|
lx = 0;
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -38,34 +38,34 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int nentries;
|
int nentries;
|
||||||
uint8_t * lens;
|
uint8_t *lens;
|
||||||
uint32_t * codewords;
|
uint32_t *codewords;
|
||||||
int ndimentions;
|
int ndimentions;
|
||||||
float min;
|
float min;
|
||||||
float delta;
|
float delta;
|
||||||
int seq_p;
|
int seq_p;
|
||||||
int lookup;
|
int lookup;
|
||||||
int * quantlist;
|
int *quantlist;
|
||||||
float * dimentions;
|
float *dimentions;
|
||||||
float * pow2;
|
float *pow2;
|
||||||
} vorbis_enc_codebook;
|
} vorbis_enc_codebook;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int dim;
|
int dim;
|
||||||
int subclass;
|
int subclass;
|
||||||
int masterbook;
|
int masterbook;
|
||||||
int * books;
|
int *books;
|
||||||
} vorbis_enc_floor_class;
|
} vorbis_enc_floor_class;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int partitions;
|
int partitions;
|
||||||
int * partition_to_class;
|
int *partition_to_class;
|
||||||
int nclasses;
|
int nclasses;
|
||||||
vorbis_enc_floor_class * classes;
|
vorbis_enc_floor_class *classes;
|
||||||
int multiplier;
|
int multiplier;
|
||||||
int rangebits;
|
int rangebits;
|
||||||
int values;
|
int values;
|
||||||
vorbis_floor1_entry * list;
|
vorbis_floor1_entry *list;
|
||||||
} vorbis_enc_floor;
|
} vorbis_enc_floor;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -81,12 +81,12 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int submaps;
|
int submaps;
|
||||||
int * mux;
|
int *mux;
|
||||||
int * floor;
|
int *floor;
|
||||||
int * residue;
|
int *residue;
|
||||||
int coupling_steps;
|
int coupling_steps;
|
||||||
int * magnitude;
|
int *magnitude;
|
||||||
int * angle;
|
int *angle;
|
||||||
} vorbis_enc_mapping;
|
} vorbis_enc_mapping;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -99,33 +99,33 @@ typedef struct {
|
|||||||
int sample_rate;
|
int sample_rate;
|
||||||
int log2_blocksize[2];
|
int log2_blocksize[2];
|
||||||
FFTContext mdct[2];
|
FFTContext mdct[2];
|
||||||
const float * win[2];
|
const float *win[2];
|
||||||
int have_saved;
|
int have_saved;
|
||||||
float * saved;
|
float *saved;
|
||||||
float * samples;
|
float *samples;
|
||||||
float * floor; // also used for tmp values for mdct
|
float *floor; // also used for tmp values for mdct
|
||||||
float * coeffs; // also used for residue after floor
|
float *coeffs; // also used for residue after floor
|
||||||
float quality;
|
float quality;
|
||||||
|
|
||||||
int ncodebooks;
|
int ncodebooks;
|
||||||
vorbis_enc_codebook * codebooks;
|
vorbis_enc_codebook *codebooks;
|
||||||
|
|
||||||
int nfloors;
|
int nfloors;
|
||||||
vorbis_enc_floor * floors;
|
vorbis_enc_floor *floors;
|
||||||
|
|
||||||
int nresidues;
|
int nresidues;
|
||||||
vorbis_enc_residue * residues;
|
vorbis_enc_residue *residues;
|
||||||
|
|
||||||
int nmappings;
|
int nmappings;
|
||||||
vorbis_enc_mapping * mappings;
|
vorbis_enc_mapping *mappings;
|
||||||
|
|
||||||
int nmodes;
|
int nmodes;
|
||||||
vorbis_enc_mode * modes;
|
vorbis_enc_mode *modes;
|
||||||
|
|
||||||
int64_t sample_count;
|
int64_t sample_count;
|
||||||
} vorbis_enc_context;
|
} vorbis_enc_context;
|
||||||
|
|
||||||
static inline void put_codeword(PutBitContext * pb, vorbis_enc_codebook * cb,
|
static inline void put_codeword(PutBitContext *pb, vorbis_enc_codebook *cb,
|
||||||
int entry)
|
int entry)
|
||||||
{
|
{
|
||||||
assert(entry >= 0);
|
assert(entry >= 0);
|
||||||
@ -139,19 +139,19 @@ static int cb_lookup_vals(int lookup, int dimentions, int entries)
|
|||||||
if (lookup == 1)
|
if (lookup == 1)
|
||||||
return ff_vorbis_nth_root(entries, dimentions);
|
return ff_vorbis_nth_root(entries, dimentions);
|
||||||
else if (lookup == 2)
|
else if (lookup == 2)
|
||||||
return dimentions * entries;
|
return dimentions *entries;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ready_codebook(vorbis_enc_codebook * cb)
|
static void ready_codebook(vorbis_enc_codebook *cb)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
ff_vorbis_len2vlc(cb->lens, cb->codewords, cb->nentries);
|
ff_vorbis_len2vlc(cb->lens, cb->codewords, cb->nentries);
|
||||||
|
|
||||||
if (!cb->lookup)
|
if (!cb->lookup) {
|
||||||
cb->pow2 = cb->dimentions = NULL;
|
cb->pow2 = cb->dimentions = NULL;
|
||||||
else {
|
} else {
|
||||||
int vals = cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries);
|
int vals = cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries);
|
||||||
cb->dimentions = av_malloc(sizeof(float) * cb->nentries * cb->ndimentions);
|
cb->dimentions = av_malloc(sizeof(float) * cb->nentries * cb->ndimentions);
|
||||||
cb->pow2 = av_mallocz(sizeof(float) * cb->nentries);
|
cb->pow2 = av_mallocz(sizeof(float) * cb->nentries);
|
||||||
@ -169,7 +169,7 @@ static void ready_codebook(vorbis_enc_codebook * cb)
|
|||||||
cb->dimentions[i * cb->ndimentions + j] = last + cb->min + cb->quantlist[off] * cb->delta;
|
cb->dimentions[i * cb->ndimentions + j] = last + cb->min + cb->quantlist[off] * cb->delta;
|
||||||
if (cb->seq_p)
|
if (cb->seq_p)
|
||||||
last = cb->dimentions[i * cb->ndimentions + j];
|
last = cb->dimentions[i * cb->ndimentions + j];
|
||||||
cb->pow2[i] += cb->dimentions[i * cb->ndimentions + j]*cb->dimentions[i * cb->ndimentions + j];
|
cb->pow2[i] += cb->dimentions[i * cb->ndimentions + j] * cb->dimentions[i * cb->ndimentions + j];
|
||||||
div *= vals;
|
div *= vals;
|
||||||
}
|
}
|
||||||
cb->pow2[i] /= 2.;
|
cb->pow2[i] /= 2.;
|
||||||
@ -177,7 +177,7 @@ static void ready_codebook(vorbis_enc_codebook * cb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ready_residue(vorbis_enc_residue * rc, vorbis_enc_context * venc)
|
static void ready_residue(vorbis_enc_residue *rc, vorbis_enc_context *venc)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
assert(rc->type == 2);
|
assert(rc->type == 2);
|
||||||
@ -188,8 +188,8 @@ static void ready_residue(vorbis_enc_residue * rc, vorbis_enc_context * venc)
|
|||||||
for (j = 0; j < 8; j++)
|
for (j = 0; j < 8; j++)
|
||||||
if (rc->books[i][j] != -1)
|
if (rc->books[i][j] != -1)
|
||||||
break;
|
break;
|
||||||
if (j == 8)
|
if (j == 8) // zero
|
||||||
continue; // zero
|
continue;
|
||||||
cb = &venc->codebooks[rc->books[i][j]];
|
cb = &venc->codebooks[rc->books[i][j]];
|
||||||
assert(cb->ndimentions >= 2);
|
assert(cb->ndimentions >= 2);
|
||||||
assert(cb->lookup);
|
assert(cb->lookup);
|
||||||
@ -213,35 +213,35 @@ static void ready_residue(vorbis_enc_residue * rc, vorbis_enc_context * venc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void create_vorbis_context(vorbis_enc_context * venc,
|
static void create_vorbis_context(vorbis_enc_context *venc,
|
||||||
AVCodecContext * avccontext)
|
AVCodecContext *avccontext)
|
||||||
{
|
{
|
||||||
vorbis_enc_floor * fc;
|
vorbis_enc_floor *fc;
|
||||||
vorbis_enc_residue * rc;
|
vorbis_enc_residue *rc;
|
||||||
vorbis_enc_mapping * mc;
|
vorbis_enc_mapping *mc;
|
||||||
int i, book;
|
int i, book;
|
||||||
|
|
||||||
venc->channels = avccontext->channels;
|
venc->channels = avccontext->channels;
|
||||||
venc->sample_rate = avccontext->sample_rate;
|
venc->sample_rate = avccontext->sample_rate;
|
||||||
venc->log2_blocksize[0] = venc->log2_blocksize[1] = 11;
|
venc->log2_blocksize[0] = venc->log2_blocksize[1] = 11;
|
||||||
|
|
||||||
venc->ncodebooks = FF_ARRAY_ELEMS(cvectors);
|
venc->ncodebooks = FF_ARRAY_ELEMS(cvectors);
|
||||||
venc->codebooks = av_malloc(sizeof(vorbis_enc_codebook) * venc->ncodebooks);
|
venc->codebooks = av_malloc(sizeof(vorbis_enc_codebook) * venc->ncodebooks);
|
||||||
|
|
||||||
// codebook 0..14 - floor1 book, values 0..255
|
// codebook 0..14 - floor1 book, values 0..255
|
||||||
// codebook 15 residue masterbook
|
// codebook 15 residue masterbook
|
||||||
// codebook 16..29 residue
|
// codebook 16..29 residue
|
||||||
for (book = 0; book < venc->ncodebooks; book++) {
|
for (book = 0; book < venc->ncodebooks; book++) {
|
||||||
vorbis_enc_codebook * cb = &venc->codebooks[book];
|
vorbis_enc_codebook *cb = &venc->codebooks[book];
|
||||||
int vals;
|
int vals;
|
||||||
cb->ndimentions = cvectors[book].dim;
|
cb->ndimentions = cvectors[book].dim;
|
||||||
cb->nentries = cvectors[book].real_len;
|
cb->nentries = cvectors[book].real_len;
|
||||||
cb->min = cvectors[book].min;
|
cb->min = cvectors[book].min;
|
||||||
cb->delta = cvectors[book].delta;
|
cb->delta = cvectors[book].delta;
|
||||||
cb->lookup = cvectors[book].lookup;
|
cb->lookup = cvectors[book].lookup;
|
||||||
cb->seq_p = 0;
|
cb->seq_p = 0;
|
||||||
|
|
||||||
cb->lens = av_malloc(sizeof(uint8_t) * cb->nentries);
|
cb->lens = av_malloc(sizeof(uint8_t) * cb->nentries);
|
||||||
cb->codewords = av_malloc(sizeof(uint32_t) * cb->nentries);
|
cb->codewords = av_malloc(sizeof(uint32_t) * cb->nentries);
|
||||||
memcpy(cb->lens, cvectors[book].clens, cvectors[book].len);
|
memcpy(cb->lens, cvectors[book].clens, cvectors[book].len);
|
||||||
memset(cb->lens + cvectors[book].len, 0, cb->nentries - cvectors[book].len);
|
memset(cb->lens + cvectors[book].len, 0, cb->nentries - cvectors[book].len);
|
||||||
@ -258,15 +258,15 @@ static void create_vorbis_context(vorbis_enc_context * venc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
venc->nfloors = 1;
|
venc->nfloors = 1;
|
||||||
venc->floors = av_malloc(sizeof(vorbis_enc_floor) * venc->nfloors);
|
venc->floors = av_malloc(sizeof(vorbis_enc_floor) * venc->nfloors);
|
||||||
|
|
||||||
// just 1 floor
|
// just 1 floor
|
||||||
fc = &venc->floors[0];
|
fc = &venc->floors[0];
|
||||||
fc->partitions = 8;
|
fc->partitions = 8;
|
||||||
fc->partition_to_class = av_malloc(sizeof(int) * fc->partitions);
|
fc->partition_to_class = av_malloc(sizeof(int) * fc->partitions);
|
||||||
fc->nclasses = 0;
|
fc->nclasses = 0;
|
||||||
for (i = 0; i < fc->partitions; i++) {
|
for (i = 0; i < fc->partitions; i++) {
|
||||||
static const int a[] = {0,1,2,2,3,3,4,4};
|
static const int a[] = {0, 1, 2, 2, 3, 3, 4, 4};
|
||||||
fc->partition_to_class[i] = a[i];
|
fc->partition_to_class[i] = a[i];
|
||||||
fc->nclasses = FFMAX(fc->nclasses, fc->partition_to_class[i]);
|
fc->nclasses = FFMAX(fc->nclasses, fc->partition_to_class[i]);
|
||||||
}
|
}
|
||||||
@ -275,16 +275,16 @@ static void create_vorbis_context(vorbis_enc_context * venc,
|
|||||||
for (i = 0; i < fc->nclasses; i++) {
|
for (i = 0; i < fc->nclasses; i++) {
|
||||||
vorbis_enc_floor_class * c = &fc->classes[i];
|
vorbis_enc_floor_class * c = &fc->classes[i];
|
||||||
int j, books;
|
int j, books;
|
||||||
c->dim = floor_classes[i].dim;
|
c->dim = floor_classes[i].dim;
|
||||||
c->subclass = floor_classes[i].subclass;
|
c->subclass = floor_classes[i].subclass;
|
||||||
c->masterbook = floor_classes[i].masterbook;
|
c->masterbook = floor_classes[i].masterbook;
|
||||||
books = (1 << c->subclass);
|
books = (1 << c->subclass);
|
||||||
c->books = av_malloc(sizeof(int) * books);
|
c->books = av_malloc(sizeof(int) * books);
|
||||||
for (j = 0; j < books; j++)
|
for (j = 0; j < books; j++)
|
||||||
c->books[j] = floor_classes[i].nbooks[j];
|
c->books[j] = floor_classes[i].nbooks[j];
|
||||||
}
|
}
|
||||||
fc->multiplier = 2;
|
fc->multiplier = 2;
|
||||||
fc->rangebits = venc->log2_blocksize[0] - 1;
|
fc->rangebits = venc->log2_blocksize[0] - 1;
|
||||||
|
|
||||||
fc->values = 2;
|
fc->values = 2;
|
||||||
for (i = 0; i < fc->partitions; i++)
|
for (i = 0; i < fc->partitions; i++)
|
||||||
@ -304,17 +304,17 @@ static void create_vorbis_context(vorbis_enc_context * venc,
|
|||||||
ff_vorbis_ready_floor1_list(fc->list, fc->values);
|
ff_vorbis_ready_floor1_list(fc->list, fc->values);
|
||||||
|
|
||||||
venc->nresidues = 1;
|
venc->nresidues = 1;
|
||||||
venc->residues = av_malloc(sizeof(vorbis_enc_residue) * venc->nresidues);
|
venc->residues = av_malloc(sizeof(vorbis_enc_residue) * venc->nresidues);
|
||||||
|
|
||||||
// single residue
|
// single residue
|
||||||
rc = &venc->residues[0];
|
rc = &venc->residues[0];
|
||||||
rc->type = 2;
|
rc->type = 2;
|
||||||
rc->begin = 0;
|
rc->begin = 0;
|
||||||
rc->end = 1600;
|
rc->end = 1600;
|
||||||
rc->partition_size = 32;
|
rc->partition_size = 32;
|
||||||
rc->classifications = 10;
|
rc->classifications = 10;
|
||||||
rc->classbook = 15;
|
rc->classbook = 15;
|
||||||
rc->books = av_malloc(sizeof(*rc->books) * rc->classifications);
|
rc->books = av_malloc(sizeof(*rc->books) * rc->classifications);
|
||||||
{
|
{
|
||||||
static const int8_t a[10][8] = {
|
static const int8_t a[10][8] = {
|
||||||
{ -1, -1, -1, -1, -1, -1, -1, -1, },
|
{ -1, -1, -1, -1, -1, -1, -1, -1, },
|
||||||
@ -333,40 +333,40 @@ static void create_vorbis_context(vorbis_enc_context * venc,
|
|||||||
ready_residue(rc, venc);
|
ready_residue(rc, venc);
|
||||||
|
|
||||||
venc->nmappings = 1;
|
venc->nmappings = 1;
|
||||||
venc->mappings = av_malloc(sizeof(vorbis_enc_mapping) * venc->nmappings);
|
venc->mappings = av_malloc(sizeof(vorbis_enc_mapping) * venc->nmappings);
|
||||||
|
|
||||||
// single mapping
|
// single mapping
|
||||||
mc = &venc->mappings[0];
|
mc = &venc->mappings[0];
|
||||||
mc->submaps = 1;
|
mc->submaps = 1;
|
||||||
mc->mux = av_malloc(sizeof(int) * venc->channels);
|
mc->mux = av_malloc(sizeof(int) * venc->channels);
|
||||||
for (i = 0; i < venc->channels; i++)
|
for (i = 0; i < venc->channels; i++)
|
||||||
mc->mux[i] = 0;
|
mc->mux[i] = 0;
|
||||||
mc->floor = av_malloc(sizeof(int) * mc->submaps);
|
mc->floor = av_malloc(sizeof(int) * mc->submaps);
|
||||||
mc->residue = av_malloc(sizeof(int) * mc->submaps);
|
mc->residue = av_malloc(sizeof(int) * mc->submaps);
|
||||||
for (i = 0; i < mc->submaps; i++) {
|
for (i = 0; i < mc->submaps; i++) {
|
||||||
mc->floor[i] = 0;
|
mc->floor[i] = 0;
|
||||||
mc->residue[i] = 0;
|
mc->residue[i] = 0;
|
||||||
}
|
}
|
||||||
mc->coupling_steps = venc->channels == 2 ? 1 : 0;
|
mc->coupling_steps = venc->channels == 2 ? 1 : 0;
|
||||||
mc->magnitude = av_malloc(sizeof(int) * mc->coupling_steps);
|
mc->magnitude = av_malloc(sizeof(int) * mc->coupling_steps);
|
||||||
mc->angle = av_malloc(sizeof(int) * mc->coupling_steps);
|
mc->angle = av_malloc(sizeof(int) * mc->coupling_steps);
|
||||||
if (mc->coupling_steps) {
|
if (mc->coupling_steps) {
|
||||||
mc->magnitude[0] = 0;
|
mc->magnitude[0] = 0;
|
||||||
mc->angle[0] = 1;
|
mc->angle[0] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
venc->nmodes = 1;
|
venc->nmodes = 1;
|
||||||
venc->modes = av_malloc(sizeof(vorbis_enc_mode) * venc->nmodes);
|
venc->modes = av_malloc(sizeof(vorbis_enc_mode) * venc->nmodes);
|
||||||
|
|
||||||
// single mode
|
// single mode
|
||||||
venc->modes[0].blockflag = 0;
|
venc->modes[0].blockflag = 0;
|
||||||
venc->modes[0].mapping = 0;
|
venc->modes[0].mapping = 0;
|
||||||
|
|
||||||
venc->have_saved = 0;
|
venc->have_saved = 0;
|
||||||
venc->saved = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]) / 2);
|
venc->saved = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]) / 2);
|
||||||
venc->samples = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]));
|
venc->samples = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]));
|
||||||
venc->floor = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]) / 2);
|
venc->floor = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]) / 2);
|
||||||
venc->coeffs = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]) / 2);
|
venc->coeffs = av_malloc(sizeof(float) * venc->channels * (1 << venc->log2_blocksize[1]) / 2);
|
||||||
|
|
||||||
venc->win[0] = ff_vorbis_vwin[venc->log2_blocksize[0] - 6];
|
venc->win[0] = ff_vorbis_vwin[venc->log2_blocksize[0] - 6];
|
||||||
venc->win[1] = ff_vorbis_vwin[venc->log2_blocksize[1] - 6];
|
venc->win[1] = ff_vorbis_vwin[venc->log2_blocksize[1] - 6];
|
||||||
@ -375,7 +375,7 @@ static void create_vorbis_context(vorbis_enc_context * venc,
|
|||||||
ff_mdct_init(&venc->mdct[1], venc->log2_blocksize[1], 0, 1.0);
|
ff_mdct_init(&venc->mdct[1], venc->log2_blocksize[1], 0, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void put_float(PutBitContext * pb, float f)
|
static void put_float(PutBitContext *pb, float f)
|
||||||
{
|
{
|
||||||
int exp, mant;
|
int exp, mant;
|
||||||
uint32_t res = 0;
|
uint32_t res = 0;
|
||||||
@ -389,7 +389,7 @@ static void put_float(PutBitContext * pb, float f)
|
|||||||
put_bits(pb, 32, res);
|
put_bits(pb, 32, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void put_codebook_header(PutBitContext * pb, vorbis_enc_codebook * cb)
|
static void put_codebook_header(PutBitContext *pb, vorbis_enc_codebook *cb)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int ordered = 0;
|
int ordered = 0;
|
||||||
@ -437,7 +437,7 @@ static void put_codebook_header(PutBitContext * pb, vorbis_enc_codebook * cb)
|
|||||||
|
|
||||||
put_bits(pb, 4, cb->lookup);
|
put_bits(pb, 4, cb->lookup);
|
||||||
if (cb->lookup) {
|
if (cb->lookup) {
|
||||||
int tmp = cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries);
|
int tmp = cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries);
|
||||||
int bits = ilog(cb->quantlist[0]);
|
int bits = ilog(cb->quantlist[0]);
|
||||||
|
|
||||||
for (i = 1; i < tmp; i++)
|
for (i = 1; i < tmp; i++)
|
||||||
@ -454,7 +454,7 @@ static void put_codebook_header(PutBitContext * pb, vorbis_enc_codebook * cb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void put_floor_header(PutBitContext * pb, vorbis_enc_floor * fc)
|
static void put_floor_header(PutBitContext *pb, vorbis_enc_floor *fc)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -487,7 +487,7 @@ static void put_floor_header(PutBitContext * pb, vorbis_enc_floor * fc)
|
|||||||
put_bits(pb, fc->rangebits, fc->list[i].x);
|
put_bits(pb, fc->rangebits, fc->list[i].x);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void put_residue_header(PutBitContext * pb, vorbis_enc_residue * rc)
|
static void put_residue_header(PutBitContext *pb, vorbis_enc_residue *rc)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -519,11 +519,11 @@ static void put_residue_header(PutBitContext * pb, vorbis_enc_residue * rc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int put_main_header(vorbis_enc_context * venc, uint8_t ** out)
|
static int put_main_header(vorbis_enc_context *venc, uint8_t **out)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
PutBitContext pb;
|
PutBitContext pb;
|
||||||
uint8_t buffer[50000] = {0}, * p = buffer;
|
uint8_t buffer[50000] = {0}, *p = buffer;
|
||||||
int buffer_len = sizeof buffer;
|
int buffer_len = sizeof buffer;
|
||||||
int len, hlens[3];
|
int len, hlens[3];
|
||||||
|
|
||||||
@ -533,14 +533,14 @@ static int put_main_header(vorbis_enc_context * venc, uint8_t ** out)
|
|||||||
for (i = 0; "vorbis"[i]; i++)
|
for (i = 0; "vorbis"[i]; i++)
|
||||||
put_bits(&pb, 8, "vorbis"[i]);
|
put_bits(&pb, 8, "vorbis"[i]);
|
||||||
put_bits(&pb, 32, 0); // version
|
put_bits(&pb, 32, 0); // version
|
||||||
put_bits(&pb, 8, venc->channels);
|
put_bits(&pb, 8, venc->channels);
|
||||||
put_bits(&pb, 32, venc->sample_rate);
|
put_bits(&pb, 32, venc->sample_rate);
|
||||||
put_bits(&pb, 32, 0); // bitrate
|
put_bits(&pb, 32, 0); // bitrate
|
||||||
put_bits(&pb, 32, 0); // bitrate
|
put_bits(&pb, 32, 0); // bitrate
|
||||||
put_bits(&pb, 32, 0); // bitrate
|
put_bits(&pb, 32, 0); // bitrate
|
||||||
put_bits(&pb, 4, venc->log2_blocksize[0]);
|
put_bits(&pb, 4, venc->log2_blocksize[0]);
|
||||||
put_bits(&pb, 4, venc->log2_blocksize[1]);
|
put_bits(&pb, 4, venc->log2_blocksize[1]);
|
||||||
put_bits(&pb, 1, 1); // framing
|
put_bits(&pb, 1, 1); // framing
|
||||||
|
|
||||||
flush_put_bits(&pb);
|
flush_put_bits(&pb);
|
||||||
hlens[0] = (put_bits_count(&pb) + 7) / 8;
|
hlens[0] = (put_bits_count(&pb) + 7) / 8;
|
||||||
@ -554,7 +554,7 @@ static int put_main_header(vorbis_enc_context * venc, uint8_t ** out)
|
|||||||
put_bits(&pb, 8, "vorbis"[i]);
|
put_bits(&pb, 8, "vorbis"[i]);
|
||||||
put_bits(&pb, 32, 0); // vendor length TODO
|
put_bits(&pb, 32, 0); // vendor length TODO
|
||||||
put_bits(&pb, 32, 0); // amount of comments
|
put_bits(&pb, 32, 0); // amount of comments
|
||||||
put_bits(&pb, 1, 1); // framing
|
put_bits(&pb, 1, 1); // framing
|
||||||
|
|
||||||
flush_put_bits(&pb);
|
flush_put_bits(&pb);
|
||||||
hlens[1] = (put_bits_count(&pb) + 7) / 8;
|
hlens[1] = (put_bits_count(&pb) + 7) / 8;
|
||||||
@ -573,7 +573,7 @@ static int put_main_header(vorbis_enc_context * venc, uint8_t ** out)
|
|||||||
put_codebook_header(&pb, &venc->codebooks[i]);
|
put_codebook_header(&pb, &venc->codebooks[i]);
|
||||||
|
|
||||||
// time domain, reserved, zero
|
// time domain, reserved, zero
|
||||||
put_bits(&pb, 6, 0);
|
put_bits(&pb, 6, 0);
|
||||||
put_bits(&pb, 16, 0);
|
put_bits(&pb, 16, 0);
|
||||||
|
|
||||||
// floors
|
// floors
|
||||||
@ -589,7 +589,7 @@ static int put_main_header(vorbis_enc_context * venc, uint8_t ** out)
|
|||||||
// mappings
|
// mappings
|
||||||
put_bits(&pb, 6, venc->nmappings - 1);
|
put_bits(&pb, 6, venc->nmappings - 1);
|
||||||
for (i = 0; i < venc->nmappings; i++) {
|
for (i = 0; i < venc->nmappings; i++) {
|
||||||
vorbis_enc_mapping * mc = &venc->mappings[i];
|
vorbis_enc_mapping *mc = &venc->mappings[i];
|
||||||
int j;
|
int j;
|
||||||
put_bits(&pb, 16, 0); // mapping type
|
put_bits(&pb, 16, 0); // mapping type
|
||||||
|
|
||||||
@ -649,7 +649,7 @@ static int put_main_header(vorbis_enc_context * venc, uint8_t ** out)
|
|||||||
return p - *out;
|
return p - *out;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float get_floor_average(vorbis_enc_floor * fc, float * coeffs, int i)
|
static float get_floor_average(vorbis_enc_floor * fc, float *coeffs, int i)
|
||||||
{
|
{
|
||||||
int begin = fc->list[fc->list[FFMAX(i-1, 0)].sort].x;
|
int begin = fc->list[fc->list[FFMAX(i-1, 0)].sort].x;
|
||||||
int end = fc->list[fc->list[FFMIN(i+1, fc->values - 1)].sort].x;
|
int end = fc->list[fc->list[FFMIN(i+1, fc->values - 1)].sort].x;
|
||||||
@ -661,14 +661,14 @@ static float get_floor_average(vorbis_enc_floor * fc, float * coeffs, int i)
|
|||||||
return average / (end - begin);
|
return average / (end - begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void floor_fit(vorbis_enc_context * venc, vorbis_enc_floor * fc,
|
static void floor_fit(vorbis_enc_context *venc, vorbis_enc_floor *fc,
|
||||||
float * coeffs, uint_fast16_t * posts, int samples)
|
float *coeffs, uint_fast16_t *posts, int samples)
|
||||||
{
|
{
|
||||||
int range = 255 / fc->multiplier + 1;
|
int range = 255 / fc->multiplier + 1;
|
||||||
int i;
|
int i;
|
||||||
float tot_average = 0.;
|
float tot_average = 0.;
|
||||||
float averages[fc->values];
|
float averages[fc->values];
|
||||||
for (i = 0; i < fc->values; i++){
|
for (i = 0; i < fc->values; i++) {
|
||||||
averages[i] = get_floor_average(fc, coeffs, i);
|
averages[i] = get_floor_average(fc, coeffs, i);
|
||||||
tot_average += averages[i];
|
tot_average += averages[i];
|
||||||
}
|
}
|
||||||
@ -676,7 +676,7 @@ static void floor_fit(vorbis_enc_context * venc, vorbis_enc_floor * fc,
|
|||||||
tot_average /= venc->quality;
|
tot_average /= venc->quality;
|
||||||
|
|
||||||
for (i = 0; i < fc->values; i++) {
|
for (i = 0; i < fc->values; i++) {
|
||||||
int position = fc->list[fc->list[i].sort].x;
|
int position = fc->list[fc->list[i].sort].x;
|
||||||
float average = averages[i];
|
float average = averages[i];
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
@ -693,9 +693,9 @@ static int render_point(int x0, int y0, int x1, int y1, int x)
|
|||||||
return y0 + (x - x0) * (y1 - y0) / (x1 - x0);
|
return y0 + (x - x0) * (y1 - y0) / (x1 - x0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void floor_encode(vorbis_enc_context * venc, vorbis_enc_floor * fc,
|
static void floor_encode(vorbis_enc_context *venc, vorbis_enc_floor *fc,
|
||||||
PutBitContext * pb, uint_fast16_t * posts,
|
PutBitContext *pb, uint_fast16_t *posts,
|
||||||
float * floor, int samples)
|
float *floor, int samples)
|
||||||
{
|
{
|
||||||
int range = 255 / fc->multiplier + 1;
|
int range = 255 / fc->multiplier + 1;
|
||||||
int coded[fc->values]; // first 2 values are unused
|
int coded[fc->values]; // first 2 values are unused
|
||||||
@ -755,13 +755,13 @@ static void floor_encode(vorbis_enc_context * venc, vorbis_enc_floor * fc,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
assert(l != csub);
|
assert(l != csub);
|
||||||
cval |= l << cshift;
|
cval |= l << cshift;
|
||||||
cshift += c->subclass;
|
cshift += c->subclass;
|
||||||
}
|
}
|
||||||
put_codeword(pb, book, cval);
|
put_codeword(pb, book, cval);
|
||||||
}
|
}
|
||||||
for (k = 0; k < c->dim; k++) {
|
for (k = 0; k < c->dim; k++) {
|
||||||
int book = c->books[cval & (csub-1)];
|
int book = c->books[cval & (csub-1)];
|
||||||
int entry = coded[counter++];
|
int entry = coded[counter++];
|
||||||
cval >>= c->subclass;
|
cval >>= c->subclass;
|
||||||
if (book == -1)
|
if (book == -1)
|
||||||
@ -772,10 +772,12 @@ static void floor_encode(vorbis_enc_context * venc, vorbis_enc_floor * fc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ff_vorbis_floor1_render_list(fc->list, fc->values, posts, coded, fc->multiplier, floor, samples);
|
ff_vorbis_floor1_render_list(fc->list, fc->values, posts, coded,
|
||||||
|
fc->multiplier, floor, samples);
|
||||||
}
|
}
|
||||||
|
|
||||||
static float * put_vector(vorbis_enc_codebook * book, PutBitContext * pb, float * num)
|
static float *put_vector(vorbis_enc_codebook *book, PutBitContext *pb,
|
||||||
|
float *num)
|
||||||
{
|
{
|
||||||
int i, entry = -1;
|
int i, entry = -1;
|
||||||
float distance = FLT_MAX;
|
float distance = FLT_MAX;
|
||||||
@ -788,7 +790,7 @@ static float * put_vector(vorbis_enc_codebook * book, PutBitContext * pb, float
|
|||||||
for (j = 0; j < book->ndimentions; j++)
|
for (j = 0; j < book->ndimentions; j++)
|
||||||
d -= vec[j] * num[j];
|
d -= vec[j] * num[j];
|
||||||
if (distance > d) {
|
if (distance > d) {
|
||||||
entry = i;
|
entry = i;
|
||||||
distance = d;
|
distance = d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -796,14 +798,14 @@ static float * put_vector(vorbis_enc_codebook * book, PutBitContext * pb, float
|
|||||||
return &book->dimentions[entry * book->ndimentions];
|
return &book->dimentions[entry * book->ndimentions];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
static void residue_encode(vorbis_enc_context *venc, vorbis_enc_residue *rc,
|
||||||
PutBitContext * pb, float * coeffs, int samples,
|
PutBitContext *pb, float *coeffs, int samples,
|
||||||
int real_ch)
|
int real_ch)
|
||||||
{
|
{
|
||||||
int pass, i, j, p, k;
|
int pass, i, j, p, k;
|
||||||
int psize = rc->partition_size;
|
int psize = rc->partition_size;
|
||||||
int partitions = (rc->end - rc->begin) / psize;
|
int partitions = (rc->end - rc->begin) / psize;
|
||||||
int channels = (rc->type == 2) ? 1 : real_ch;
|
int channels = (rc->type == 2) ? 1 : real_ch;
|
||||||
int classes[channels][partitions];
|
int classes[channels][partitions];
|
||||||
int classwords = venc->codebooks[rc->classbook].ndimentions;
|
int classwords = venc->codebooks[rc->classbook].ndimentions;
|
||||||
|
|
||||||
@ -840,7 +842,7 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
|||||||
for (j = 0; j < channels; j++) {
|
for (j = 0; j < channels; j++) {
|
||||||
int nbook = rc->books[classes[j][p]][pass];
|
int nbook = rc->books[classes[j][p]][pass];
|
||||||
vorbis_enc_codebook * book = &venc->codebooks[nbook];
|
vorbis_enc_codebook * book = &venc->codebooks[nbook];
|
||||||
float * buf = coeffs + samples*j + rc->begin + p*psize;
|
float *buf = coeffs + samples*j + rc->begin + p*psize;
|
||||||
if (nbook == -1)
|
if (nbook == -1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -849,7 +851,7 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
|||||||
|
|
||||||
if (rc->type == 0) {
|
if (rc->type == 0) {
|
||||||
for (k = 0; k < psize; k += book->ndimentions) {
|
for (k = 0; k < psize; k += book->ndimentions) {
|
||||||
float * a = put_vector(book, pb, &buf[k]);
|
float *a = put_vector(book, pb, &buf[k]);
|
||||||
int l;
|
int l;
|
||||||
for (l = 0; l < book->ndimentions; l++)
|
for (l = 0; l < book->ndimentions; l++)
|
||||||
buf[k + l] -= a[l];
|
buf[k + l] -= a[l];
|
||||||
@ -858,14 +860,14 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
|||||||
int s = rc->begin + p * psize, a1, b1;
|
int s = rc->begin + p * psize, a1, b1;
|
||||||
a1 = (s % real_ch) * samples;
|
a1 = (s % real_ch) * samples;
|
||||||
b1 = s / real_ch;
|
b1 = s / real_ch;
|
||||||
s = real_ch * samples;
|
s = real_ch * samples;
|
||||||
for (k = 0; k < psize; k += book->ndimentions) {
|
for (k = 0; k < psize; k += book->ndimentions) {
|
||||||
int dim, a2 = a1, b2 = b1;
|
int dim, a2 = a1, b2 = b1;
|
||||||
float vec[book->ndimentions], * pv = vec;
|
float vec[book->ndimentions], *pv = vec;
|
||||||
for (dim = book->ndimentions; dim--; ) {
|
for (dim = book->ndimentions; dim--; ) {
|
||||||
*pv++ = coeffs[a2 + b2];
|
*pv++ = coeffs[a2 + b2];
|
||||||
if ((a2 += samples) == s) {
|
if ((a2 += samples) == s) {
|
||||||
a2=0;
|
a2 = 0;
|
||||||
b2++;
|
b2++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -873,7 +875,7 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
|||||||
for (dim = book->ndimentions; dim--; ) {
|
for (dim = book->ndimentions; dim--; ) {
|
||||||
coeffs[a1 + b1] -= *pv++;
|
coeffs[a1 + b1] -= *pv++;
|
||||||
if ((a1 += samples) == s) {
|
if ((a1 += samples) == s) {
|
||||||
a1=0;
|
a1 = 0;
|
||||||
b1++;
|
b1++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -885,8 +887,8 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int apply_window_and_mdct(vorbis_enc_context * venc,
|
static int apply_window_and_mdct(vorbis_enc_context *venc, signed short *audio,
|
||||||
signed short * audio, int samples)
|
int samples)
|
||||||
{
|
{
|
||||||
int i, j, channel;
|
int i, j, channel;
|
||||||
const float * win = venc->win[0];
|
const float * win = venc->win[0];
|
||||||
@ -897,12 +899,15 @@ static int apply_window_and_mdct(vorbis_enc_context * venc,
|
|||||||
if (!venc->have_saved && !samples)
|
if (!venc->have_saved && !samples)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (venc->have_saved)
|
if (venc->have_saved) {
|
||||||
for (channel = 0; channel < venc->channels; channel++)
|
for (channel = 0; channel < venc->channels; channel++)
|
||||||
memcpy(venc->samples + channel*window_len*2, venc->saved + channel*window_len, sizeof(float)*window_len);
|
memcpy(venc->samples + channel * window_len * 2,
|
||||||
else
|
venc->saved + channel * window_len, sizeof(float) * window_len);
|
||||||
|
} else {
|
||||||
for (channel = 0; channel < venc->channels; channel++)
|
for (channel = 0; channel < venc->channels; channel++)
|
||||||
memset(venc->samples + channel*window_len*2, 0, sizeof(float)*window_len);
|
memset(venc->samples + channel * window_len * 2, 0,
|
||||||
|
sizeof(float) * window_len);
|
||||||
|
}
|
||||||
|
|
||||||
if (samples) {
|
if (samples) {
|
||||||
for (channel = 0; channel < venc->channels; channel++) {
|
for (channel = 0; channel < venc->channels; channel++) {
|
||||||
@ -913,15 +918,17 @@ static int apply_window_and_mdct(vorbis_enc_context * venc,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (channel = 0; channel < venc->channels; channel++)
|
for (channel = 0; channel < venc->channels; channel++)
|
||||||
memset(venc->samples + channel*window_len*2 + window_len, 0, sizeof(float)*window_len);
|
memset(venc->samples + channel * window_len * 2 + window_len,
|
||||||
|
0, sizeof(float) * window_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (channel = 0; channel < venc->channels; channel++)
|
for (channel = 0; channel < venc->channels; channel++)
|
||||||
ff_mdct_calc(&venc->mdct[0], venc->coeffs + channel*window_len, venc->samples + channel*window_len*2);
|
ff_mdct_calc(&venc->mdct[0], venc->coeffs + channel * window_len,
|
||||||
|
venc->samples + channel * window_len * 2);
|
||||||
|
|
||||||
if (samples) {
|
if (samples) {
|
||||||
for (channel = 0; channel < venc->channels; channel++) {
|
for (channel = 0; channel < venc->channels; channel++) {
|
||||||
float * offset = venc->saved + channel*window_len;
|
float *offset = venc->saved + channel * window_len;
|
||||||
j = channel;
|
j = channel;
|
||||||
for (i = 0; i < samples; i++, j += venc->channels)
|
for (i = 0; i < samples; i++, j += venc->channels)
|
||||||
offset[i] = -audio[j] / 32768. / n * win[i]; //FIXME find out why the sign has to be fliped
|
offset[i] = -audio[j] / 32768. / n * win[i]; //FIXME find out why the sign has to be fliped
|
||||||
@ -933,9 +940,9 @@ static int apply_window_and_mdct(vorbis_enc_context * venc,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static av_cold int vorbis_encode_init(AVCodecContext * avccontext)
|
static av_cold int vorbis_encode_init(AVCodecContext *avccontext)
|
||||||
{
|
{
|
||||||
vorbis_enc_context * venc = avccontext->priv_data;
|
vorbis_enc_context *venc = avccontext->priv_data;
|
||||||
|
|
||||||
if (avccontext->channels != 2) {
|
if (avccontext->channels != 2) {
|
||||||
av_log(avccontext, AV_LOG_ERROR, "Current FFmpeg Vorbis encoder only supports 2 channels.\n");
|
av_log(avccontext, AV_LOG_ERROR, "Current FFmpeg Vorbis encoder only supports 2 channels.\n");
|
||||||
@ -952,21 +959,23 @@ static av_cold int vorbis_encode_init(AVCodecContext * avccontext)
|
|||||||
|
|
||||||
avccontext->extradata_size = put_main_header(venc, (uint8_t**)&avccontext->extradata);
|
avccontext->extradata_size = put_main_header(venc, (uint8_t**)&avccontext->extradata);
|
||||||
|
|
||||||
avccontext->frame_size = 1 << (venc->log2_blocksize[0] - 1);
|
avccontext->frame_size = 1 << (venc->log2_blocksize[0] - 1);
|
||||||
|
|
||||||
avccontext->coded_frame = avcodec_alloc_frame();
|
avccontext->coded_frame = avcodec_alloc_frame();
|
||||||
avccontext->coded_frame->key_frame = 1;
|
avccontext->coded_frame->key_frame = 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * packets, int buf_size, void *data)
|
static int vorbis_encode_frame(AVCodecContext *avccontext,
|
||||||
|
unsigned char *packets,
|
||||||
|
int buf_size, void *data)
|
||||||
{
|
{
|
||||||
vorbis_enc_context * venc = avccontext->priv_data;
|
vorbis_enc_context *venc = avccontext->priv_data;
|
||||||
signed short * audio = data;
|
signed short *audio = data;
|
||||||
int samples = data ? avccontext->frame_size : 0;
|
int samples = data ? avccontext->frame_size : 0;
|
||||||
vorbis_enc_mode * mode;
|
vorbis_enc_mode *mode;
|
||||||
vorbis_enc_mapping * mapping;
|
vorbis_enc_mapping *mapping;
|
||||||
PutBitContext pb;
|
PutBitContext pb;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -980,7 +989,7 @@ static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * pack
|
|||||||
|
|
||||||
put_bits(&pb, ilog(venc->nmodes - 1), 0); // 0 bits, the mode
|
put_bits(&pb, ilog(venc->nmodes - 1), 0); // 0 bits, the mode
|
||||||
|
|
||||||
mode = &venc->modes[0];
|
mode = &venc->modes[0];
|
||||||
mapping = &venc->mappings[mode->mapping];
|
mapping = &venc->mappings[mode->mapping];
|
||||||
if (mode->blockflag) {
|
if (mode->blockflag) {
|
||||||
put_bits(&pb, 1, 0);
|
put_bits(&pb, 1, 0);
|
||||||
@ -988,7 +997,7 @@ static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * pack
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < venc->channels; i++) {
|
for (i = 0; i < venc->channels; i++) {
|
||||||
vorbis_enc_floor * fc = &venc->floors[mapping->floor[mapping->mux[i]]];
|
vorbis_enc_floor *fc = &venc->floors[mapping->floor[mapping->mux[i]]];
|
||||||
uint_fast16_t posts[fc->values];
|
uint_fast16_t posts[fc->values];
|
||||||
floor_fit(venc, fc, &venc->coeffs[i * samples], posts, samples);
|
floor_fit(venc, fc, &venc->coeffs[i * samples], posts, samples);
|
||||||
floor_encode(venc, fc, &pb, posts, &venc->floor[i * samples], samples);
|
floor_encode(venc, fc, &pb, posts, &venc->floor[i * samples], samples);
|
||||||
@ -998,8 +1007,8 @@ static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * pack
|
|||||||
venc->coeffs[i] /= venc->floor[i];
|
venc->coeffs[i] /= venc->floor[i];
|
||||||
|
|
||||||
for (i = 0; i < mapping->coupling_steps; i++) {
|
for (i = 0; i < mapping->coupling_steps; i++) {
|
||||||
float * mag = venc->coeffs + mapping->magnitude[i] * samples;
|
float *mag = venc->coeffs + mapping->magnitude[i] * samples;
|
||||||
float * ang = venc->coeffs + mapping->angle[i] * samples;
|
float *ang = venc->coeffs + mapping->angle[i] * samples;
|
||||||
int j;
|
int j;
|
||||||
for (j = 0; j < samples; j++) {
|
for (j = 0; j < samples; j++) {
|
||||||
float a = ang[j];
|
float a = ang[j];
|
||||||
@ -1011,7 +1020,8 @@ static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * pack
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
residue_encode(venc, &venc->residues[mapping->residue[mapping->mux[0]]], &pb, venc->coeffs, samples, venc->channels);
|
residue_encode(venc, &venc->residues[mapping->residue[mapping->mux[0]]],
|
||||||
|
&pb, venc->coeffs, samples, venc->channels);
|
||||||
|
|
||||||
avccontext->coded_frame->pts = venc->sample_count;
|
avccontext->coded_frame->pts = venc->sample_count;
|
||||||
venc->sample_count += avccontext->frame_size;
|
venc->sample_count += avccontext->frame_size;
|
||||||
@ -1020,9 +1030,9 @@ static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * pack
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static av_cold int vorbis_encode_close(AVCodecContext * avccontext)
|
static av_cold int vorbis_encode_close(AVCodecContext *avccontext)
|
||||||
{
|
{
|
||||||
vorbis_enc_context * venc = avccontext->priv_data;
|
vorbis_enc_context *venc = avccontext->priv_data;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (venc->codebooks)
|
if (venc->codebooks)
|
||||||
|
@ -24,96 +24,95 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
static const uint8_t codebook0[] = {
|
static const uint8_t codebook0[] = {
|
||||||
2, 10, 8, 14, 7, 12, 11, 14, 1, 5, 3, 7, 4, 9, 7,
|
2, 10, 8, 14, 7, 12, 11, 14, 1, 5, 3, 7, 4, 9, 7, 13,
|
||||||
13,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook1[] = {
|
static const uint8_t codebook1[] = {
|
||||||
1, 4, 2, 6, 3, 7, 5, 7,
|
1, 4, 2, 6, 3, 7, 5, 7,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook2[] = {
|
static const uint8_t codebook2[] = {
|
||||||
1, 5, 7, 21, 5, 8, 9, 21, 10, 9, 12, 20, 20, 16, 20,
|
1, 5, 7, 21, 5, 8, 9, 21, 10, 9, 12, 20, 20, 16, 20,
|
||||||
20, 4, 8, 9, 20, 6, 8, 9, 20, 11, 11, 13, 20, 20, 15,
|
20, 4, 8, 9, 20, 6, 8, 9, 20, 11, 11, 13, 20, 20, 15,
|
||||||
17, 20, 9, 11, 14, 20, 8, 10, 15, 20, 11, 13, 15, 20, 20,
|
17, 20, 9, 11, 14, 20, 8, 10, 15, 20, 11, 13, 15, 20, 20,
|
||||||
20, 20, 20, 20, 20, 20, 20, 13, 20, 20, 20, 18, 18, 20, 20,
|
20, 20, 20, 20, 20, 20, 20, 13, 20, 20, 20, 18, 18, 20, 20,
|
||||||
20, 20, 20, 20, 3, 6, 8, 20, 6, 7, 9, 20, 10, 9, 12,
|
20, 20, 20, 20, 3, 6, 8, 20, 6, 7, 9, 20, 10, 9, 12,
|
||||||
20, 20, 20, 20, 20, 5, 7, 9, 20, 6, 6, 9, 20, 10, 9,
|
20, 20, 20, 20, 20, 5, 7, 9, 20, 6, 6, 9, 20, 10, 9,
|
||||||
12, 20, 20, 20, 20, 20, 8, 10, 13, 20, 8, 9, 12, 20, 11,
|
12, 20, 20, 20, 20, 20, 8, 10, 13, 20, 8, 9, 12, 20, 11,
|
||||||
10, 12, 20, 20, 20, 20, 20, 18, 20, 20, 20, 15, 17, 18, 20,
|
10, 12, 20, 20, 20, 20, 20, 18, 20, 20, 20, 15, 17, 18, 20,
|
||||||
18, 17, 18, 20, 20, 20, 20, 20, 7, 10, 12, 20, 8, 9, 11,
|
18, 17, 18, 20, 20, 20, 20, 20, 7, 10, 12, 20, 8, 9, 11,
|
||||||
20, 14, 13, 14, 20, 20, 20, 20, 20, 6, 9, 12, 20, 7, 8,
|
20, 14, 13, 14, 20, 20, 20, 20, 20, 6, 9, 12, 20, 7, 8,
|
||||||
11, 20, 12, 11, 13, 20, 20, 20, 20, 20, 9, 11, 15, 20, 8,
|
11, 20, 12, 11, 13, 20, 20, 20, 20, 20, 9, 11, 15, 20, 8,
|
||||||
10, 14, 20, 12, 11, 14, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
10, 14, 20, 12, 11, 14, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 11, 16, 18,
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 11, 16, 18,
|
||||||
20, 15, 15, 17, 20, 20, 17, 20, 20, 20, 20, 20, 20, 9, 14,
|
20, 15, 15, 17, 20, 20, 17, 20, 20, 20, 20, 20, 20, 9, 14,
|
||||||
16, 20, 12, 12, 15, 20, 17, 15, 18, 20, 20, 20, 20, 20, 16,
|
16, 20, 12, 12, 15, 20, 17, 15, 18, 20, 20, 20, 20, 20, 16,
|
||||||
19, 18, 20, 15, 16, 20, 20, 17, 17, 20, 20, 20, 20, 20, 20,
|
19, 18, 20, 15, 16, 20, 20, 17, 17, 20, 20, 20, 20, 20, 20,
|
||||||
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
20,
|
20,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook3[] = {
|
static const uint8_t codebook3[] = {
|
||||||
2, 3, 7, 13, 4, 4, 7, 15, 8, 6, 9, 17, 21, 16, 15,
|
2, 3, 7, 13, 4, 4, 7, 15, 8, 6, 9, 17, 21, 16, 15,
|
||||||
21, 2, 5, 7, 11, 5, 5, 7, 14, 9, 7, 10, 16, 17, 15,
|
21, 2, 5, 7, 11, 5, 5, 7, 14, 9, 7, 10, 16, 17, 15,
|
||||||
16, 21, 4, 7, 10, 17, 7, 7, 9, 15, 11, 9, 11, 16, 21,
|
16, 21, 4, 7, 10, 17, 7, 7, 9, 15, 11, 9, 11, 16, 21,
|
||||||
18, 15, 21, 18, 21, 21, 21, 15, 17, 17, 19, 21, 19, 18, 20,
|
18, 15, 21, 18, 21, 21, 21, 15, 17, 17, 19, 21, 19, 18, 20,
|
||||||
21, 21, 21, 20,
|
21, 21, 21, 20,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook4[] = {
|
static const uint8_t codebook4[] = {
|
||||||
5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6,
|
5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6,
|
||||||
5, 6, 5, 6, 5, 6, 5, 6, 5, 7, 5, 7, 5, 7, 5,
|
5, 6, 5, 6, 5, 6, 5, 6, 5, 7, 5, 7, 5, 7, 5,
|
||||||
7, 5, 8, 6, 8, 6, 8, 6, 9, 6, 9, 6, 10, 6, 10,
|
7, 5, 8, 6, 8, 6, 8, 6, 9, 6, 9, 6, 10, 6, 10,
|
||||||
6, 11, 6, 11, 7, 11, 7, 12, 7, 12, 7, 12, 7, 12, 7,
|
6, 11, 6, 11, 7, 11, 7, 12, 7, 12, 7, 12, 7, 12, 7,
|
||||||
12, 7, 12, 7, 12, 7, 12, 8, 13, 8, 12, 8, 12, 8, 13,
|
12, 7, 12, 7, 12, 7, 12, 8, 13, 8, 12, 8, 12, 8, 13,
|
||||||
8, 13, 9, 13, 9, 13, 9, 13, 9, 12, 10, 12, 10, 13, 10,
|
8, 13, 9, 13, 9, 13, 9, 13, 9, 12, 10, 12, 10, 13, 10,
|
||||||
14, 11, 14, 12, 14, 13, 14, 13, 14, 14, 15, 16, 15, 15, 15,
|
14, 11, 14, 12, 14, 13, 14, 13, 14, 14, 15, 16, 15, 15, 15,
|
||||||
14, 15, 17, 21, 22, 22, 21, 22, 22, 22, 22, 22, 22, 21, 21,
|
14, 15, 17, 21, 22, 22, 21, 22, 22, 22, 22, 22, 22, 21, 21,
|
||||||
21, 21, 21, 21, 21, 21, 21, 21,
|
21, 21, 21, 21, 21, 21, 21, 21,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook5[] = {
|
static const uint8_t codebook5[] = {
|
||||||
2, 5, 5, 4, 5, 4, 5, 4, 5, 4, 6, 5, 6, 5, 6,
|
2, 5, 5, 4, 5, 4, 5, 4, 5, 4, 6, 5, 6, 5, 6,
|
||||||
5, 6, 5, 7, 5, 7, 6, 8, 6, 8, 6, 8, 6, 9, 6,
|
5, 6, 5, 7, 5, 7, 6, 8, 6, 8, 6, 8, 6, 9, 6,
|
||||||
9, 6,
|
9, 6,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook6[] = {
|
static const uint8_t codebook6[] = {
|
||||||
8, 5, 8, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9,
|
8, 5, 8, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9,
|
||||||
4, 9, 4, 9, 4, 9, 4, 8, 4, 8, 4, 9, 5, 9, 5,
|
4, 9, 4, 9, 4, 9, 4, 8, 4, 8, 4, 9, 5, 9, 5,
|
||||||
9, 5, 9, 5, 9, 6, 10, 6, 10, 7, 10, 8, 11, 9, 11,
|
9, 5, 9, 5, 9, 6, 10, 6, 10, 7, 10, 8, 11, 9, 11,
|
||||||
11, 12, 13, 12, 14, 13, 15, 13, 15, 14, 16, 14, 17, 15, 17,
|
11, 12, 13, 12, 14, 13, 15, 13, 15, 14, 16, 14, 17, 15, 17,
|
||||||
15, 15, 16, 16, 15, 16, 16, 16, 15, 18, 16, 15, 17, 17, 19,
|
15, 15, 16, 16, 15, 16, 16, 16, 15, 18, 16, 15, 17, 17, 19,
|
||||||
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
|
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
|
||||||
19, 19, 19, 19, 19, 19,
|
19, 19, 19, 19, 19, 19,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook7[] = {
|
static const uint8_t codebook7[] = {
|
||||||
1, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6,
|
1, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6,
|
||||||
5, 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 9, 8, 10, 9,
|
5, 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 9, 8, 10, 9,
|
||||||
10, 9,
|
10, 9,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook8[] = {
|
static const uint8_t codebook8[] = {
|
||||||
4, 3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 5, 6, 5, 6,
|
4, 3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 5, 6, 5, 6,
|
||||||
5, 7, 5, 7, 6, 7, 6, 8, 7, 8, 7, 8, 7, 9, 8,
|
5, 7, 5, 7, 6, 7, 6, 8, 7, 8, 7, 8, 7, 9, 8,
|
||||||
9, 9, 9, 9, 10, 10, 10, 11, 9, 12, 9, 12, 9, 15, 10,
|
9, 9, 9, 9, 10, 10, 10, 11, 9, 12, 9, 12, 9, 15, 10,
|
||||||
14, 9, 13, 10, 13, 10, 12, 10, 12, 10, 13, 10, 12, 11, 13,
|
14, 9, 13, 10, 13, 10, 12, 10, 12, 10, 13, 10, 12, 11, 13,
|
||||||
11, 14, 12, 13, 13, 14, 14, 13, 14, 15, 14, 16, 13, 13, 14,
|
11, 14, 12, 13, 13, 14, 14, 13, 14, 15, 14, 16, 13, 13, 14,
|
||||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||||
16, 16, 16, 16, 15, 15,
|
16, 16, 16, 16, 15, 15,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook9[] = {
|
static const uint8_t codebook9[] = {
|
||||||
4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 4, 4, 4, 5,
|
4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 4, 4, 4, 5,
|
||||||
5, 5,
|
5, 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook10[] = {
|
static const uint8_t codebook10[] = {
|
||||||
3, 3, 4, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 5,
|
3, 3, 4, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 5,
|
||||||
7, 5, 8, 6, 8, 6, 9, 7, 10, 7, 10, 8, 10, 8, 11,
|
7, 5, 8, 6, 8, 6, 9, 7, 10, 7, 10, 8, 10, 8, 11,
|
||||||
9, 11,
|
9, 11,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook11[] = {
|
static const uint8_t codebook11[] = {
|
||||||
@ -126,337 +125,337 @@ static const uint8_t codebook11[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook12[] = {
|
static const uint8_t codebook12[] = {
|
||||||
4, 5, 4, 5, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4,
|
4, 5, 4, 5, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4,
|
||||||
5, 4,
|
5, 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook13[] = {
|
static const uint8_t codebook13[] = {
|
||||||
4, 2, 4, 2, 5, 3, 5, 4, 6, 6, 6, 7, 7, 8, 7,
|
4, 2, 4, 2, 5, 3, 5, 4, 6, 6, 6, 7, 7, 8, 7,
|
||||||
8, 7, 8, 7, 9, 8, 9, 8, 9, 8, 10, 8, 11, 9, 12,
|
8, 7, 8, 7, 9, 8, 9, 8, 9, 8, 10, 8, 11, 9, 12,
|
||||||
9, 12,
|
9, 12,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook14[] = {
|
static const uint8_t codebook14[] = {
|
||||||
2, 5, 2, 6, 3, 6, 4, 7, 4, 7, 5, 9, 5, 11, 6,
|
2, 5, 2, 6, 3, 6, 4, 7, 4, 7, 5, 9, 5, 11, 6,
|
||||||
11, 6, 11, 7, 11, 6, 11, 6, 11, 9, 11, 8, 11, 11, 11,
|
11, 6, 11, 7, 11, 6, 11, 6, 11, 9, 11, 8, 11, 11, 11,
|
||||||
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
|
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
|
||||||
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
|
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
|
||||||
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10,
|
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10,
|
||||||
10, 10, 10,
|
10, 10, 10,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook15[] = {
|
static const uint8_t codebook15[] = {
|
||||||
5, 6, 11, 11, 11, 11, 10, 10, 12, 11, 5, 2, 11, 5, 6,
|
5, 6, 11, 11, 11, 11, 10, 10, 12, 11, 5, 2, 11, 5, 6,
|
||||||
6, 7, 9, 11, 13, 13, 10, 7, 11, 6, 7, 8, 9, 10, 12,
|
6, 7, 9, 11, 13, 13, 10, 7, 11, 6, 7, 8, 9, 10, 12,
|
||||||
11, 5, 11, 6, 8, 7, 9, 11, 14, 15, 11, 6, 6, 8, 4,
|
11, 5, 11, 6, 8, 7, 9, 11, 14, 15, 11, 6, 6, 8, 4,
|
||||||
5, 7, 8, 10, 13, 10, 5, 7, 7, 5, 5, 6, 8, 10, 11,
|
5, 7, 8, 10, 13, 10, 5, 7, 7, 5, 5, 6, 8, 10, 11,
|
||||||
10, 7, 7, 8, 6, 5, 5, 7, 9, 9, 11, 8, 8, 11, 8,
|
10, 7, 7, 8, 6, 5, 5, 7, 9, 9, 11, 8, 8, 11, 8,
|
||||||
7, 6, 6, 7, 9, 12, 11, 10, 13, 9, 9, 7, 7, 7, 9,
|
7, 6, 6, 7, 9, 12, 11, 10, 13, 9, 9, 7, 7, 7, 9,
|
||||||
11, 13, 12, 15, 12, 11, 9, 8, 8, 8,
|
11, 13, 12, 15, 12, 11, 9, 8, 8, 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook16[] = {
|
static const uint8_t codebook16[] = {
|
||||||
2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0,
|
2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0,
|
||||||
0, 0, 0, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0,
|
||||||
7, 8, 8, 0, 0, 0, 0, 0, 0, 6, 7, 8, 0, 0, 0,
|
7, 8, 8, 0, 0, 0, 0, 0, 0, 6, 7, 8, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7,
|
||||||
0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0, 0, 0, 0, 0,
|
||||||
7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0,
|
||||||
0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8,
|
0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0,
|
7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0,
|
||||||
0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0,
|
||||||
7, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0,
|
7, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8,
|
0, 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8,
|
||||||
0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0, 0,
|
||||||
0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 7, 8, 9,
|
0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 7, 8, 9,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0,
|
6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0,
|
||||||
0, 0, 0, 8, 9, 8,
|
0, 0, 0, 8, 9, 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook17[] = {
|
static const uint8_t codebook17[] = {
|
||||||
2, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0,
|
2, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0,
|
||||||
0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0,
|
0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0,
|
||||||
0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 10, 10, 0, 0,
|
0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 10, 10, 0, 0,
|
||||||
0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 7, 7, 0, 0,
|
0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 7, 7, 0, 0,
|
||||||
0, 7, 7, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0,
|
0, 7, 7, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
5, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0,
|
5, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0,
|
||||||
0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0,
|
0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0,
|
||||||
0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0,
|
0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0,
|
0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0,
|
||||||
0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0,
|
0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0,
|
||||||
5, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0,
|
5, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0,
|
||||||
0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 10, 10, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 10, 10, 0, 0,
|
||||||
0, 9, 9, 0, 0, 0, 9, 9, 0, 0, 0, 10, 10, 0, 0,
|
0, 9, 9, 0, 0, 0, 9, 9, 0, 0, 0, 10, 10, 0, 0,
|
||||||
0, 0, 0, 0, 0, 8, 10, 10, 0, 0, 0, 9, 9, 0, 0,
|
0, 0, 0, 0, 0, 8, 10, 10, 0, 0, 0, 9, 9, 0, 0,
|
||||||
0, 9, 9, 0, 0, 0, 10, 10,
|
0, 9, 9, 0, 0, 0, 10, 10,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook18[] = {
|
static const uint8_t codebook18[] = {
|
||||||
2, 4, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
2, 4, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
6, 6, 6, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
6, 6, 6, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 7, 9, 9,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 7, 9, 9,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook19[] = {
|
static const uint8_t codebook19[] = {
|
||||||
2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0,
|
2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0,
|
||||||
0, 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5,
|
0, 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5,
|
||||||
6, 6, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0,
|
6, 6, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0,
|
||||||
0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0,
|
0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0,
|
||||||
0, 0, 0, 0, 0, 0, 9, 9,
|
0, 0, 0, 0, 0, 0, 9, 9,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook20[] = {
|
static const uint8_t codebook20[] = {
|
||||||
1, 3, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 7,
|
1, 3, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 7,
|
||||||
8, 9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7,
|
8, 9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7,
|
||||||
8, 8, 8, 8, 10, 10, 0, 0, 0, 8, 8, 8, 8, 10, 10,
|
8, 8, 8, 8, 10, 10, 0, 0, 0, 8, 8, 8, 8, 10, 10,
|
||||||
0, 0, 0, 9, 9, 9, 9, 10, 10, 0, 0, 0, 9, 9, 9,
|
0, 0, 0, 9, 9, 9, 9, 10, 10, 0, 0, 0, 9, 9, 9,
|
||||||
9, 10, 10, 0, 0, 0, 10, 10, 10, 10, 11, 11, 0, 0, 0,
|
9, 10, 10, 0, 0, 0, 10, 10, 10, 10, 11, 11, 0, 0, 0,
|
||||||
0, 0, 10, 10, 11, 11,
|
0, 0, 10, 10, 11, 11,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook21[] = {
|
static const uint8_t codebook21[] = {
|
||||||
2, 3, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 10, 10,
|
2, 3, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 10, 10,
|
||||||
11, 10, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10,
|
11, 10, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10,
|
||||||
10, 10, 11, 11, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,
|
10, 10, 11, 11, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,
|
||||||
10, 10, 10, 10, 11, 11, 0, 6, 6, 7, 7, 8, 8, 9, 9,
|
10, 10, 10, 10, 11, 11, 0, 6, 6, 7, 7, 8, 8, 9, 9,
|
||||||
9, 9, 10, 10, 11, 11, 11, 11, 0, 0, 0, 7, 7, 8, 8,
|
9, 9, 10, 10, 11, 11, 11, 11, 0, 0, 0, 7, 7, 8, 8,
|
||||||
9, 9, 9, 9, 10, 10, 11, 11, 11, 12, 0, 0, 0, 8, 8,
|
9, 9, 9, 9, 10, 10, 11, 11, 11, 12, 0, 0, 0, 8, 8,
|
||||||
8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 12, 12, 0, 0, 0,
|
8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 12, 12, 0, 0, 0,
|
||||||
8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 12, 12, 0,
|
8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 12, 12, 0,
|
||||||
0, 0, 9, 9, 9, 9, 10, 10, 10, 10, 11, 10, 11, 11, 12,
|
0, 0, 9, 9, 9, 9, 10, 10, 10, 10, 11, 10, 11, 11, 12,
|
||||||
12, 0, 0, 0, 0, 0, 9, 9, 10, 10, 10, 10, 11, 11, 11,
|
12, 0, 0, 0, 0, 0, 9, 9, 10, 10, 10, 10, 11, 11, 11,
|
||||||
11, 12, 12, 0, 0, 0, 0, 0, 9, 8, 9, 9, 10, 10, 11,
|
11, 12, 12, 0, 0, 0, 0, 0, 9, 8, 9, 9, 10, 10, 11,
|
||||||
11, 12, 12, 12, 12, 0, 0, 0, 0, 0, 8, 8, 9, 9, 10,
|
11, 12, 12, 12, 12, 0, 0, 0, 0, 0, 8, 8, 9, 9, 10,
|
||||||
10, 11, 11, 12, 11, 12, 12, 0, 0, 0, 0, 0, 9, 10, 10,
|
10, 11, 11, 12, 11, 12, 12, 0, 0, 0, 0, 0, 9, 10, 10,
|
||||||
10, 11, 11, 11, 11, 12, 12, 13, 13, 0, 0, 0, 0, 0, 0,
|
10, 11, 11, 11, 11, 12, 12, 13, 13, 0, 0, 0, 0, 0, 0,
|
||||||
0, 10, 10, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0, 0, 0,
|
0, 10, 10, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0, 0, 0,
|
||||||
0, 0, 0, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 0, 0,
|
0, 0, 0, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 0, 0,
|
||||||
0, 0, 0, 0, 0, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13,
|
0, 0, 0, 0, 0, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13,
|
||||||
0, 0, 0, 0, 0, 0, 0, 11, 11, 12, 12, 12, 12, 13, 13,
|
0, 0, 0, 0, 0, 0, 0, 11, 11, 12, 12, 12, 12, 13, 13,
|
||||||
13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12,
|
13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12,
|
||||||
13, 13, 13, 13,
|
13, 13, 13, 13,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook22[] = {
|
static const uint8_t codebook22[] = {
|
||||||
1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7, 10, 9, 9,
|
1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7, 10, 9, 9,
|
||||||
11, 9, 9, 4, 7, 7, 10, 9, 9, 11, 9, 9, 7, 10, 10,
|
11, 9, 9, 4, 7, 7, 10, 9, 9, 11, 9, 9, 7, 10, 10,
|
||||||
11, 11, 10, 12, 11, 11, 6, 9, 9, 11, 10, 10, 11, 10, 10,
|
11, 11, 10, 12, 11, 11, 6, 9, 9, 11, 10, 10, 11, 10, 10,
|
||||||
6, 9, 9, 11, 10, 10, 11, 10, 10, 7, 11, 11, 11, 11, 11,
|
6, 9, 9, 11, 10, 10, 11, 10, 10, 7, 11, 11, 11, 11, 11,
|
||||||
12, 11, 11, 6, 9, 9, 11, 10, 10, 11, 10, 10, 6, 9, 9,
|
12, 11, 11, 6, 9, 9, 11, 10, 10, 11, 10, 10, 6, 9, 9,
|
||||||
11, 10, 10, 11, 10, 10,
|
11, 10, 10, 11, 10, 10,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook23[] = {
|
static const uint8_t codebook23[] = {
|
||||||
2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 10, 5, 5, 6,
|
2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 10, 5, 5, 6,
|
||||||
6, 7, 7, 8, 8, 8, 8, 10, 5, 5, 6, 6, 7, 7, 8,
|
6, 7, 7, 8, 8, 8, 8, 10, 5, 5, 6, 6, 7, 7, 8,
|
||||||
8, 8, 8, 10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 10,
|
8, 8, 8, 10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 10,
|
||||||
10, 10, 7, 7, 8, 7, 8, 8, 8, 8, 10, 10, 10, 8, 8,
|
10, 10, 7, 7, 8, 7, 8, 8, 8, 8, 10, 10, 10, 8, 8,
|
||||||
8, 8, 8, 8, 8, 8, 10, 10, 10, 7, 8, 8, 8, 8, 8,
|
8, 8, 8, 8, 8, 8, 10, 10, 10, 7, 8, 8, 8, 8, 8,
|
||||||
8, 8, 10, 10, 10, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10,
|
8, 8, 10, 10, 10, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10,
|
||||||
10, 10, 10, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 9,
|
10, 10, 10, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 9,
|
||||||
9, 8, 8, 9, 8, 10, 10, 10, 10, 10, 8, 8, 8, 8, 8,
|
9, 8, 8, 9, 8, 10, 10, 10, 10, 10, 8, 8, 8, 8, 8,
|
||||||
8,
|
8,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook24[] = {
|
static const uint8_t codebook24[] = {
|
||||||
1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 6, 5,
|
1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 6, 5,
|
||||||
5, 7, 7, 8, 8, 8, 8, 9, 9, 10, 10, 7, 5, 5, 7,
|
5, 7, 7, 8, 8, 8, 8, 9, 9, 10, 10, 7, 5, 5, 7,
|
||||||
7, 8, 8, 8, 8, 9, 9, 11, 10, 0, 8, 8, 8, 8, 9,
|
7, 8, 8, 8, 8, 9, 9, 11, 10, 0, 8, 8, 8, 8, 9,
|
||||||
9, 9, 9, 10, 10, 11, 11, 0, 8, 8, 8, 8, 9, 9, 9,
|
9, 9, 9, 10, 10, 11, 11, 0, 8, 8, 8, 8, 9, 9, 9,
|
||||||
9, 10, 10, 11, 11, 0, 12, 12, 9, 9, 10, 10, 10, 10, 11,
|
9, 10, 10, 11, 11, 0, 12, 12, 9, 9, 10, 10, 10, 10, 11,
|
||||||
11, 11, 12, 0, 13, 13, 9, 9, 10, 10, 10, 10, 11, 11, 12,
|
11, 11, 12, 0, 13, 13, 9, 9, 10, 10, 10, 10, 11, 11, 12,
|
||||||
12, 0, 0, 0, 10, 10, 10, 10, 11, 11, 12, 12, 12, 12, 0,
|
12, 0, 0, 0, 10, 10, 10, 10, 11, 11, 12, 12, 12, 12, 0,
|
||||||
0, 0, 10, 10, 10, 10, 11, 11, 12, 12, 12, 12, 0, 0, 0,
|
0, 0, 10, 10, 10, 10, 11, 11, 12, 12, 12, 12, 0, 0, 0,
|
||||||
14, 14, 11, 11, 11, 11, 12, 12, 13, 13, 0, 0, 0, 14, 14,
|
14, 14, 11, 11, 11, 11, 12, 12, 13, 13, 0, 0, 0, 14, 14,
|
||||||
11, 11, 11, 11, 12, 12, 13, 13, 0, 0, 0, 0, 0, 12, 12,
|
11, 11, 11, 11, 12, 12, 13, 13, 0, 0, 0, 0, 0, 12, 12,
|
||||||
12, 12, 13, 13, 14, 13, 0, 0, 0, 0, 0, 13, 13, 12, 12,
|
12, 12, 13, 13, 14, 13, 0, 0, 0, 0, 0, 13, 13, 12, 12,
|
||||||
13, 12, 14, 13,
|
13, 12, 14, 13,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook25[] = {
|
static const uint8_t codebook25[] = {
|
||||||
2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5,
|
2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5,
|
||||||
6, 5, 5, 5, 5, 6, 6, 6, 5, 5,
|
6, 5, 5, 5, 5, 6, 6, 6, 5, 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook26[] = {
|
static const uint8_t codebook26[] = {
|
||||||
1, 4, 4, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 4, 9,
|
1, 4, 4, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 4, 9,
|
||||||
8, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 9, 7, 12,
|
8, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 9, 7, 12,
|
||||||
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
||||||
12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12, 12, 12,
|
12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 12, 12, 12,
|
||||||
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
||||||
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
||||||
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
||||||
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
||||||
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
||||||
12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
|
12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
|
||||||
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
|
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
|
||||||
11, 11, 11, 11,
|
11, 11, 11, 11,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook27[] = {
|
static const uint8_t codebook27[] = {
|
||||||
1, 4, 4, 6, 6, 7, 7, 8, 7, 9, 9, 10, 10, 10, 10,
|
1, 4, 4, 6, 6, 7, 7, 8, 7, 9, 9, 10, 10, 10, 10,
|
||||||
6, 5, 5, 7, 7, 8, 8, 10, 8, 11, 10, 12, 12, 13, 13,
|
6, 5, 5, 7, 7, 8, 8, 10, 8, 11, 10, 12, 12, 13, 13,
|
||||||
6, 5, 5, 7, 7, 8, 8, 10, 9, 11, 11, 12, 12, 13, 12,
|
6, 5, 5, 7, 7, 8, 8, 10, 9, 11, 11, 12, 12, 13, 12,
|
||||||
18, 8, 8, 8, 8, 9, 9, 10, 9, 11, 10, 12, 12, 13, 13,
|
18, 8, 8, 8, 8, 9, 9, 10, 9, 11, 10, 12, 12, 13, 13,
|
||||||
18, 8, 8, 8, 8, 9, 9, 10, 10, 11, 11, 13, 12, 14, 13,
|
18, 8, 8, 8, 8, 9, 9, 10, 10, 11, 11, 13, 12, 14, 13,
|
||||||
18, 11, 11, 9, 9, 10, 10, 11, 11, 11, 12, 13, 12, 13, 14,
|
18, 11, 11, 9, 9, 10, 10, 11, 11, 11, 12, 13, 12, 13, 14,
|
||||||
18, 11, 11, 9, 8, 11, 10, 11, 11, 11, 11, 12, 12, 14, 13,
|
18, 11, 11, 9, 8, 11, 10, 11, 11, 11, 11, 12, 12, 14, 13,
|
||||||
18, 18, 18, 10, 11, 10, 11, 12, 12, 12, 12, 13, 12, 14, 13,
|
18, 18, 18, 10, 11, 10, 11, 12, 12, 12, 12, 13, 12, 14, 13,
|
||||||
18, 18, 18, 10, 11, 11, 9, 12, 11, 12, 12, 12, 13, 13, 13,
|
18, 18, 18, 10, 11, 11, 9, 12, 11, 12, 12, 12, 13, 13, 13,
|
||||||
18, 18, 17, 14, 14, 11, 11, 12, 12, 13, 12, 14, 12, 14, 13,
|
18, 18, 17, 14, 14, 11, 11, 12, 12, 13, 12, 14, 12, 14, 13,
|
||||||
18, 18, 18, 14, 14, 11, 10, 12, 9, 12, 13, 13, 13, 13, 13,
|
18, 18, 18, 14, 14, 11, 10, 12, 9, 12, 13, 13, 13, 13, 13,
|
||||||
18, 18, 17, 16, 18, 13, 13, 12, 12, 13, 11, 14, 12, 14, 14,
|
18, 18, 17, 16, 18, 13, 13, 12, 12, 13, 11, 14, 12, 14, 14,
|
||||||
17, 18, 18, 17, 18, 13, 12, 13, 10, 12, 11, 14, 14, 14, 14,
|
17, 18, 18, 17, 18, 13, 12, 13, 10, 12, 11, 14, 14, 14, 14,
|
||||||
17, 18, 18, 18, 18, 15, 16, 12, 12, 13, 10, 14, 12, 14, 15,
|
17, 18, 18, 18, 18, 15, 16, 12, 12, 13, 10, 14, 12, 14, 15,
|
||||||
18, 18, 18, 16, 17, 16, 14, 12, 11, 13, 10, 13, 13, 14, 15,
|
18, 18, 18, 16, 17, 16, 14, 12, 11, 13, 10, 13, 13, 14, 15,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t codebook28[] = {
|
static const uint8_t codebook28[] = {
|
||||||
2, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
|
2, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
|
||||||
8, 8, 10, 6, 6, 7, 7, 8, 7, 8, 8, 8, 8, 8, 9,
|
8, 8, 10, 6, 6, 7, 7, 8, 7, 8, 8, 8, 8, 8, 9,
|
||||||
9, 9, 9, 9, 10, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
|
9, 9, 9, 9, 10, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
|
||||||
9, 9, 9, 9, 9, 9, 10, 7, 7, 7, 7, 8, 8, 8, 8,
|
9, 9, 9, 9, 9, 9, 10, 7, 7, 7, 7, 8, 8, 8, 8,
|
||||||
9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 7, 7, 8, 8,
|
9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 7, 7, 8, 8,
|
||||||
8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 8, 8,
|
8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 8, 8,
|
||||||
8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10,
|
8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10,
|
||||||
8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10,
|
8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10,
|
||||||
10, 10, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10,
|
10, 10, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10,
|
||||||
9, 10, 10, 10, 11, 11, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
9, 10, 10, 10, 11, 11, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||||
9, 9, 9, 11, 10, 11, 11, 11, 9, 9, 9, 9, 9, 9, 10,
|
9, 9, 9, 11, 10, 11, 11, 11, 9, 9, 9, 9, 9, 9, 10,
|
||||||
10, 9, 9, 10, 9, 11, 10, 11, 11, 11, 9, 9, 9, 9, 9,
|
10, 9, 9, 10, 9, 11, 10, 11, 11, 11, 9, 9, 9, 9, 9,
|
||||||
9, 9, 9, 10, 10, 10, 9, 11, 11, 11, 11, 11, 9, 9, 9,
|
9, 9, 9, 10, 10, 10, 9, 11, 11, 11, 11, 11, 9, 9, 9,
|
||||||
9, 10, 10, 9, 9, 9, 9, 10, 9, 11, 11, 11, 11, 11, 11,
|
9, 10, 10, 9, 9, 9, 9, 10, 9, 11, 11, 11, 11, 11, 11,
|
||||||
11, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
|
11, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
|
||||||
11, 11, 11, 10, 9, 10, 10, 9, 10, 9, 9, 10, 9, 11, 10,
|
11, 11, 11, 10, 9, 10, 10, 9, 10, 9, 9, 10, 9, 11, 10,
|
||||||
10, 11, 11, 11, 11, 9, 10, 9, 9, 9, 9, 10, 10, 10, 10,
|
10, 11, 11, 11, 11, 9, 10, 9, 9, 9, 9, 10, 10, 10, 10,
|
||||||
11, 11, 11, 11, 11, 11, 10, 10, 10, 9, 9, 10, 9, 10, 9,
|
11, 11, 11, 11, 11, 11, 10, 10, 10, 9, 9, 10, 9, 10, 9,
|
||||||
10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 9, 9, 9, 9,
|
10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 9, 9, 9, 9,
|
||||||
9, 10, 10, 10,
|
9, 10, 10, 10,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
int dim;
|
int dim;
|
||||||
int len;
|
int len;
|
||||||
int real_len;
|
int real_len;
|
||||||
const uint8_t * clens;
|
const uint8_t *clens;
|
||||||
int lookup;
|
int lookup;
|
||||||
float min;
|
float min;
|
||||||
float delta;
|
float delta;
|
||||||
const uint8_t * quant;
|
const uint8_t *quant;
|
||||||
} cvectors[] = {
|
} cvectors[] = {
|
||||||
{ 2, 16, 16, codebook0, 0 },
|
{ 2, 16, 16, codebook0, 0 },
|
||||||
{ 2, 8, 8, codebook1, 0 },
|
{ 2, 8, 8, codebook1, 0 },
|
||||||
@ -493,7 +492,7 @@ static const struct {
|
|||||||
int dim;
|
int dim;
|
||||||
int subclass;
|
int subclass;
|
||||||
int masterbook;
|
int masterbook;
|
||||||
const int * nbooks;
|
const int *nbooks;
|
||||||
} floor_classes[] = {
|
} floor_classes[] = {
|
||||||
{ 3, 0, 0, (const int[]){ 4 } },
|
{ 3, 0, 0, (const int[]){ 4 } },
|
||||||
{ 4, 1, 0, (const int[]){ 5, 6 } },
|
{ 4, 1, 0, (const int[]){ 5, 6 } },
|
||||||
|
Loading…
Reference in New Issue
Block a user