mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +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
|
||||
* Common code for Vorbis I encoder and decoder
|
||||
* @author Denes Balatoni ( dbalatoni programozo hu )
|
||||
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
@ -35,13 +35,13 @@
|
||||
// x^(1/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 {
|
||||
++ret;
|
||||
for(i=0,j=ret;i<n-1;i++)
|
||||
j*=ret;
|
||||
} while (j<=x);
|
||||
for (i = 0, j = ret; i < n - 1; i++)
|
||||
j *= ret;
|
||||
} while (j <= x);
|
||||
|
||||
return ret - 1;
|
||||
}
|
||||
@ -53,61 +53,62 @@ unsigned int ff_vorbis_nth_root(unsigned int x, unsigned int n)
|
||||
// reasonable to check redundantly.
|
||||
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,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||
uint_fast32_t exit_at_level[33] = {
|
||||
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_fast32_t code,p;
|
||||
uint_fast8_t i, j;
|
||||
uint_fast32_t code, p;
|
||||
|
||||
#ifdef V_DEBUG
|
||||
GetBitContext gb;
|
||||
#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");
|
||||
return 0;
|
||||
}
|
||||
|
||||
codes[p]=0;
|
||||
codes[p] = 0;
|
||||
if (bits[p] > 32)
|
||||
return 1;
|
||||
for(i=0;i<bits[p];++i)
|
||||
exit_at_level[i+1]=1<<i;
|
||||
for (i = 0; i < bits[p]; ++i)
|
||||
exit_at_level[i+1] = 1 << i;
|
||||
|
||||
#ifdef V_DEBUG
|
||||
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]);
|
||||
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, "\n");
|
||||
#endif
|
||||
|
||||
++p;
|
||||
|
||||
for(;p<num;++p) {
|
||||
for (; p < num; ++p) {
|
||||
if (bits[p] > 32)
|
||||
return 1;
|
||||
if (bits[p]==0)
|
||||
if (bits[p] == 0)
|
||||
continue;
|
||||
// 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])
|
||||
break;
|
||||
if (!i) // overspecified tree
|
||||
return 1;
|
||||
code=exit_at_level[i];
|
||||
exit_at_level[i]=0;
|
||||
code = exit_at_level[i];
|
||||
exit_at_level[i] = 0;
|
||||
// construct code (append 0s to end) and introduce new exits
|
||||
for(j=i+1;j<=bits[p];++j)
|
||||
exit_at_level[j]=code+(1<<(j-1));
|
||||
codes[p]=code;
|
||||
for (j = i + 1 ;j <= bits[p]; ++j)
|
||||
exit_at_level[j] = code + (1 << (j - 1));
|
||||
codes[p] = code;
|
||||
|
||||
#ifdef V_DEBUG
|
||||
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]);
|
||||
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, "\n");
|
||||
#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)
|
||||
for (p=1; p<33; p++)
|
||||
for (p = 1; p < 33; p++)
|
||||
if (exit_at_level[p])
|
||||
return 1;
|
||||
|
||||
@ -157,11 +158,11 @@ 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,
|
||||
intptr_t sy, int ady, int adx,
|
||||
float * buf)
|
||||
float *buf)
|
||||
{
|
||||
int err = -adx;
|
||||
x -= x1-1;
|
||||
buf += x1-1;
|
||||
x -= x1 - 1;
|
||||
buf += x1 - 1;
|
||||
while (++x < 0) {
|
||||
err += ady;
|
||||
if (err >= 0) {
|
||||
@ -178,14 +179,14 @@ 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 adx = x1 - x0;
|
||||
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];
|
||||
if(ady*2<=adx) { // optimized common case
|
||||
if (ady*2 <= adx) { // optimized common case
|
||||
render_line_unrolled(x0, y0, x1, sy, ady, adx, buf);
|
||||
} else {
|
||||
int base = dy / adx;
|
||||
@ -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,
|
||||
uint_fast16_t * y_list, int * flag,
|
||||
int multiplier, float * out, int samples)
|
||||
uint_fast16_t *y_list, int *flag,
|
||||
int multiplier, float *out, int samples)
|
||||
{
|
||||
int lx, ly, i;
|
||||
lx = 0;
|
||||
|
@ -2156,4 +2156,3 @@ const float * const ff_vorbis_vwin[8] = {
|
||||
vwin64, vwin128, vwin256, vwin512,
|
||||
vwin1024, vwin2048, vwin4096, vwin8192
|
||||
};
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -38,34 +38,34 @@
|
||||
|
||||
typedef struct {
|
||||
int nentries;
|
||||
uint8_t * lens;
|
||||
uint32_t * codewords;
|
||||
uint8_t *lens;
|
||||
uint32_t *codewords;
|
||||
int ndimentions;
|
||||
float min;
|
||||
float delta;
|
||||
int seq_p;
|
||||
int lookup;
|
||||
int * quantlist;
|
||||
float * dimentions;
|
||||
float * pow2;
|
||||
int *quantlist;
|
||||
float *dimentions;
|
||||
float *pow2;
|
||||
} vorbis_enc_codebook;
|
||||
|
||||
typedef struct {
|
||||
int dim;
|
||||
int subclass;
|
||||
int masterbook;
|
||||
int * books;
|
||||
int *books;
|
||||
} vorbis_enc_floor_class;
|
||||
|
||||
typedef struct {
|
||||
int partitions;
|
||||
int * partition_to_class;
|
||||
int *partition_to_class;
|
||||
int nclasses;
|
||||
vorbis_enc_floor_class * classes;
|
||||
vorbis_enc_floor_class *classes;
|
||||
int multiplier;
|
||||
int rangebits;
|
||||
int values;
|
||||
vorbis_floor1_entry * list;
|
||||
vorbis_floor1_entry *list;
|
||||
} vorbis_enc_floor;
|
||||
|
||||
typedef struct {
|
||||
@ -81,12 +81,12 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
int submaps;
|
||||
int * mux;
|
||||
int * floor;
|
||||
int * residue;
|
||||
int *mux;
|
||||
int *floor;
|
||||
int *residue;
|
||||
int coupling_steps;
|
||||
int * magnitude;
|
||||
int * angle;
|
||||
int *magnitude;
|
||||
int *angle;
|
||||
} vorbis_enc_mapping;
|
||||
|
||||
typedef struct {
|
||||
@ -99,33 +99,33 @@ typedef struct {
|
||||
int sample_rate;
|
||||
int log2_blocksize[2];
|
||||
FFTContext mdct[2];
|
||||
const float * win[2];
|
||||
const float *win[2];
|
||||
int have_saved;
|
||||
float * saved;
|
||||
float * samples;
|
||||
float * floor; // also used for tmp values for mdct
|
||||
float * coeffs; // also used for residue after floor
|
||||
float *saved;
|
||||
float *samples;
|
||||
float *floor; // also used for tmp values for mdct
|
||||
float *coeffs; // also used for residue after floor
|
||||
float quality;
|
||||
|
||||
int ncodebooks;
|
||||
vorbis_enc_codebook * codebooks;
|
||||
vorbis_enc_codebook *codebooks;
|
||||
|
||||
int nfloors;
|
||||
vorbis_enc_floor * floors;
|
||||
vorbis_enc_floor *floors;
|
||||
|
||||
int nresidues;
|
||||
vorbis_enc_residue * residues;
|
||||
vorbis_enc_residue *residues;
|
||||
|
||||
int nmappings;
|
||||
vorbis_enc_mapping * mappings;
|
||||
vorbis_enc_mapping *mappings;
|
||||
|
||||
int nmodes;
|
||||
vorbis_enc_mode * modes;
|
||||
vorbis_enc_mode *modes;
|
||||
|
||||
int64_t sample_count;
|
||||
} 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)
|
||||
{
|
||||
assert(entry >= 0);
|
||||
@ -139,19 +139,19 @@ static int cb_lookup_vals(int lookup, int dimentions, int entries)
|
||||
if (lookup == 1)
|
||||
return ff_vorbis_nth_root(entries, dimentions);
|
||||
else if (lookup == 2)
|
||||
return dimentions * entries;
|
||||
return dimentions *entries;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ready_codebook(vorbis_enc_codebook * cb)
|
||||
static void ready_codebook(vorbis_enc_codebook *cb)
|
||||
{
|
||||
int i;
|
||||
|
||||
ff_vorbis_len2vlc(cb->lens, cb->codewords, cb->nentries);
|
||||
|
||||
if (!cb->lookup)
|
||||
if (!cb->lookup) {
|
||||
cb->pow2 = cb->dimentions = NULL;
|
||||
else {
|
||||
} else {
|
||||
int vals = cb_lookup_vals(cb->lookup, cb->ndimentions, cb->nentries);
|
||||
cb->dimentions = av_malloc(sizeof(float) * cb->nentries * cb->ndimentions);
|
||||
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;
|
||||
if (cb->seq_p)
|
||||
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;
|
||||
}
|
||||
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;
|
||||
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++)
|
||||
if (rc->books[i][j] != -1)
|
||||
break;
|
||||
if (j == 8)
|
||||
continue; // zero
|
||||
if (j == 8) // zero
|
||||
continue;
|
||||
cb = &venc->codebooks[rc->books[i][j]];
|
||||
assert(cb->ndimentions >= 2);
|
||||
assert(cb->lookup);
|
||||
@ -213,12 +213,12 @@ static void ready_residue(vorbis_enc_residue * rc, vorbis_enc_context * venc)
|
||||
}
|
||||
}
|
||||
|
||||
static void create_vorbis_context(vorbis_enc_context * venc,
|
||||
AVCodecContext * avccontext)
|
||||
static void create_vorbis_context(vorbis_enc_context *venc,
|
||||
AVCodecContext *avccontext)
|
||||
{
|
||||
vorbis_enc_floor * fc;
|
||||
vorbis_enc_residue * rc;
|
||||
vorbis_enc_mapping * mc;
|
||||
vorbis_enc_floor *fc;
|
||||
vorbis_enc_residue *rc;
|
||||
vorbis_enc_mapping *mc;
|
||||
int i, book;
|
||||
|
||||
venc->channels = avccontext->channels;
|
||||
@ -232,7 +232,7 @@ static void create_vorbis_context(vorbis_enc_context * venc,
|
||||
// codebook 15 residue masterbook
|
||||
// codebook 16..29 residue
|
||||
for (book = 0; book < venc->ncodebooks; book++) {
|
||||
vorbis_enc_codebook * cb = &venc->codebooks[book];
|
||||
vorbis_enc_codebook *cb = &venc->codebooks[book];
|
||||
int vals;
|
||||
cb->ndimentions = cvectors[book].dim;
|
||||
cb->nentries = cvectors[book].real_len;
|
||||
@ -266,7 +266,7 @@ static void create_vorbis_context(vorbis_enc_context * venc,
|
||||
fc->partition_to_class = av_malloc(sizeof(int) * fc->partitions);
|
||||
fc->nclasses = 0;
|
||||
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->nclasses = FFMAX(fc->nclasses, fc->partition_to_class[i]);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
static void put_float(PutBitContext * pb, float f)
|
||||
static void put_float(PutBitContext *pb, float f)
|
||||
{
|
||||
int exp, mant;
|
||||
uint32_t res = 0;
|
||||
@ -389,7 +389,7 @@ static void put_float(PutBitContext * pb, float f)
|
||||
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 ordered = 0;
|
||||
@ -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;
|
||||
|
||||
@ -487,7 +487,7 @@ static void put_floor_header(PutBitContext * pb, vorbis_enc_floor * fc)
|
||||
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;
|
||||
|
||||
@ -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;
|
||||
PutBitContext pb;
|
||||
uint8_t buffer[50000] = {0}, * p = buffer;
|
||||
uint8_t buffer[50000] = {0}, *p = buffer;
|
||||
int buffer_len = sizeof buffer;
|
||||
int len, hlens[3];
|
||||
|
||||
@ -589,7 +589,7 @@ static int put_main_header(vorbis_enc_context * venc, uint8_t ** out)
|
||||
// mappings
|
||||
put_bits(&pb, 6, venc->nmappings - 1);
|
||||
for (i = 0; i < venc->nmappings; i++) {
|
||||
vorbis_enc_mapping * mc = &venc->mappings[i];
|
||||
vorbis_enc_mapping *mc = &venc->mappings[i];
|
||||
int j;
|
||||
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;
|
||||
}
|
||||
|
||||
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 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);
|
||||
}
|
||||
|
||||
static void floor_fit(vorbis_enc_context * venc, vorbis_enc_floor * fc,
|
||||
float * coeffs, uint_fast16_t * posts, int samples)
|
||||
static void floor_fit(vorbis_enc_context *venc, vorbis_enc_floor *fc,
|
||||
float *coeffs, uint_fast16_t *posts, int samples)
|
||||
{
|
||||
int range = 255 / fc->multiplier + 1;
|
||||
int i;
|
||||
float tot_average = 0.;
|
||||
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);
|
||||
tot_average += averages[i];
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
static void floor_encode(vorbis_enc_context * venc, vorbis_enc_floor * fc,
|
||||
PutBitContext * pb, uint_fast16_t * posts,
|
||||
float * floor, int samples)
|
||||
static void floor_encode(vorbis_enc_context *venc, vorbis_enc_floor *fc,
|
||||
PutBitContext *pb, uint_fast16_t *posts,
|
||||
float *floor, int samples)
|
||||
{
|
||||
int range = 255 / fc->multiplier + 1;
|
||||
int coded[fc->values]; // first 2 values are unused
|
||||
@ -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;
|
||||
float distance = FLT_MAX;
|
||||
@ -796,8 +798,8 @@ static float * put_vector(vorbis_enc_codebook * book, PutBitContext * pb, float
|
||||
return &book->dimentions[entry * book->ndimentions];
|
||||
}
|
||||
|
||||
static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
||||
PutBitContext * pb, float * coeffs, int samples,
|
||||
static void residue_encode(vorbis_enc_context *venc, vorbis_enc_residue *rc,
|
||||
PutBitContext *pb, float *coeffs, int samples,
|
||||
int real_ch)
|
||||
{
|
||||
int pass, i, j, p, k;
|
||||
@ -840,7 +842,7 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
||||
for (j = 0; j < channels; j++) {
|
||||
int nbook = rc->books[classes[j][p]][pass];
|
||||
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)
|
||||
continue;
|
||||
|
||||
@ -849,7 +851,7 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
||||
|
||||
if (rc->type == 0) {
|
||||
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;
|
||||
for (l = 0; l < book->ndimentions; l++)
|
||||
buf[k + l] -= a[l];
|
||||
@ -861,11 +863,11 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
||||
s = real_ch * samples;
|
||||
for (k = 0; k < psize; k += book->ndimentions) {
|
||||
int dim, a2 = a1, b2 = b1;
|
||||
float vec[book->ndimentions], * pv = vec;
|
||||
float vec[book->ndimentions], *pv = vec;
|
||||
for (dim = book->ndimentions; dim--; ) {
|
||||
*pv++ = coeffs[a2 + b2];
|
||||
if ((a2 += samples) == s) {
|
||||
a2=0;
|
||||
a2 = 0;
|
||||
b2++;
|
||||
}
|
||||
}
|
||||
@ -873,7 +875,7 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc,
|
||||
for (dim = book->ndimentions; dim--; ) {
|
||||
coeffs[a1 + b1] -= *pv++;
|
||||
if ((a1 += samples) == s) {
|
||||
a1=0;
|
||||
a1 = 0;
|
||||
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,
|
||||
signed short * audio, int samples)
|
||||
static int apply_window_and_mdct(vorbis_enc_context *venc, signed short *audio,
|
||||
int samples)
|
||||
{
|
||||
int i, j, channel;
|
||||
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)
|
||||
return 0;
|
||||
|
||||
if (venc->have_saved)
|
||||
if (venc->have_saved) {
|
||||
for (channel = 0; channel < venc->channels; channel++)
|
||||
memcpy(venc->samples + channel*window_len*2, venc->saved + channel*window_len, sizeof(float)*window_len);
|
||||
else
|
||||
memcpy(venc->samples + channel * window_len * 2,
|
||||
venc->saved + channel * window_len, sizeof(float) * window_len);
|
||||
} else {
|
||||
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) {
|
||||
for (channel = 0; channel < venc->channels; channel++) {
|
||||
@ -913,15 +918,17 @@ static int apply_window_and_mdct(vorbis_enc_context * venc,
|
||||
}
|
||||
} else {
|
||||
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++)
|
||||
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) {
|
||||
for (channel = 0; channel < venc->channels; channel++) {
|
||||
float * offset = venc->saved + channel*window_len;
|
||||
float *offset = venc->saved + channel * window_len;
|
||||
j = channel;
|
||||
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
|
||||
@ -933,9 +940,9 @@ static int apply_window_and_mdct(vorbis_enc_context * venc,
|
||||
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) {
|
||||
av_log(avccontext, AV_LOG_ERROR, "Current FFmpeg Vorbis encoder only supports 2 channels.\n");
|
||||
@ -960,13 +967,15 @@ static av_cold int vorbis_encode_init(AVCodecContext * avccontext)
|
||||
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;
|
||||
signed short * audio = data;
|
||||
vorbis_enc_context *venc = avccontext->priv_data;
|
||||
signed short *audio = data;
|
||||
int samples = data ? avccontext->frame_size : 0;
|
||||
vorbis_enc_mode * mode;
|
||||
vorbis_enc_mapping * mapping;
|
||||
vorbis_enc_mode *mode;
|
||||
vorbis_enc_mapping *mapping;
|
||||
PutBitContext pb;
|
||||
int i;
|
||||
|
||||
@ -988,7 +997,7 @@ static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * pack
|
||||
}
|
||||
|
||||
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];
|
||||
floor_fit(venc, fc, &venc->coeffs[i * samples], posts, 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];
|
||||
|
||||
for (i = 0; i < mapping->coupling_steps; i++) {
|
||||
float * mag = venc->coeffs + mapping->magnitude[i] * samples;
|
||||
float * ang = venc->coeffs + mapping->angle[i] * samples;
|
||||
float *mag = venc->coeffs + mapping->magnitude[i] * samples;
|
||||
float *ang = venc->coeffs + mapping->angle[i] * samples;
|
||||
int j;
|
||||
for (j = 0; j < samples; 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;
|
||||
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;
|
||||
|
||||
if (venc->codebooks)
|
||||
|
@ -24,8 +24,7 @@
|
||||
#include <stdint.h>
|
||||
|
||||
static const uint8_t codebook0[] = {
|
||||
2, 10, 8, 14, 7, 12, 11, 14, 1, 5, 3, 7, 4, 9, 7,
|
||||
13,
|
||||
2, 10, 8, 14, 7, 12, 11, 14, 1, 5, 3, 7, 4, 9, 7, 13,
|
||||
};
|
||||
|
||||
static const uint8_t codebook1[] = {
|
||||
@ -452,11 +451,11 @@ static const struct {
|
||||
int dim;
|
||||
int len;
|
||||
int real_len;
|
||||
const uint8_t * clens;
|
||||
const uint8_t *clens;
|
||||
int lookup;
|
||||
float min;
|
||||
float delta;
|
||||
const uint8_t * quant;
|
||||
const uint8_t *quant;
|
||||
} cvectors[] = {
|
||||
{ 2, 16, 16, codebook0, 0 },
|
||||
{ 2, 8, 8, codebook1, 0 },
|
||||
@ -493,7 +492,7 @@ static const struct {
|
||||
int dim;
|
||||
int subclass;
|
||||
int masterbook;
|
||||
const int * nbooks;
|
||||
const int *nbooks;
|
||||
} floor_classes[] = {
|
||||
{ 3, 0, 0, (const int[]){ 4 } },
|
||||
{ 4, 1, 0, (const int[]){ 5, 6 } },
|
||||
|
Loading…
Reference in New Issue
Block a user