37 #if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
57 #if defined(TRAIN_RES) || defined(TRAIN_RESAUX)
59 long *training_data[8][64];
60 float training_max[8][64];
61 float training_min[8][64];
67 } vorbis_look_residue0;
72 memset(info,0,
sizeof(*info));
81 vorbis_look_residue0 *look=(vorbis_look_residue0 *)i;
86 for(j=0;j<look->parts;j++){
89 if(look->training_data[k][j]){
95 sprintf(buffer,
"res_sub%d_part%d_pass%d.vqd",look->submap,j,k);
98 for(l=0;l<statebook->
entries;l++)
99 fprintf(of,
"%d:%ld\n",l,look->training_data[k][j][l]);
107 look->training_data[
k][
j]=
NULL;
112 fprintf(stderr,
"min/max residue: %g::%g\n",look->tmin,look->tmax);
143 for(j=0;j<look->parts;j++)
144 if(look->partbooks[j])
_ogg_free(look->partbooks[j]);
146 for(j=0;j<look->partvals;j++)
150 memset(look,0,
sizeof(*look));
221 if(cflag<0)
goto errout;
233 if(book<0)
goto errout;
253 if (dim<1)
goto errout;
256 if(partvals > entries)
goto errout;
271 vorbis_look_residue0 *look=
_ogg_calloc(1,
sizeof(*look));
282 dim=look->phrasebook->dim;
284 look->partbooks=
_ogg_calloc(look->parts,
sizeof(*look->partbooks));
286 for(j=0;j<look->parts;j++){
289 if(stages>maxstage)maxstage=
stages;
290 look->partbooks[
j]=
_ogg_calloc(stages,
sizeof(*look->partbooks[j]));
295 look->training_data[
k][
j]=
_ogg_calloc(look->partbooks[j][k]->entries,
296 sizeof(***look->training_data));
304 look->partvals*=look->parts;
306 look->stages=maxstage;
307 look->decodemap=
_ogg_malloc(look->partvals*
sizeof(*look->decodemap));
308 for(j=0;j<look->partvals;j++){
310 long mult=look->partvals/look->parts;
311 look->decodemap[
j]=
_ogg_malloc(dim*
sizeof(*look->decodemap[j]));
316 look->decodemap[
j][
k]=deco;
319 #if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
321 static int train_seq=0;
322 look->train_seq=train_seq++;
338 int p[8]={0,0,0,0,0,0,0,0};
341 for(i=0,o=dim;i<dim;i++){
342 int v = (a[--o]-minval+(del>>1))/del;
343 int m = (v<ze ? ((ze-
v)<<1)-1 : ((v-ze)<<1));
348 for(i=0,o=dim;i<dim;i++){
349 int v = a[--o]-minval;
350 int m = (v<ze ? ((ze-
v)<<1)-1 : ((v-ze)<<1));
360 int e[8]={0,0,0,0,0,0,0,0};
369 if(best==-1 ||
this<best){
417 vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
421 int samples_per_partition=info->
grouping;
425 int partvals=n/samples_per_partition;
427 float scale=100./samples_per_partition;
435 memset(partword[i],0,n/samples_per_partition*
sizeof(*partword[i]));
438 for(i=0;i<partvals;i++){
443 for(k=0;k<samples_per_partition;k++){
444 if(abs(in[j][offset+k])>max)max=abs(in[j][offset+k]);
445 ent+=abs(in[j][offset+k]);
449 for(k=0;k<possible_partitions-1;k++)
450 if(max<=info->classmetric1[k] &&
464 sprintf(buffer,
"resaux_%d.vqd",look->train_seq);
465 of=fopen(buffer,
"a");
466 for(j=0;j<partvals;j++)
467 fprintf(of,
"%ld, ",partword[i][j]);
484 vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
488 int samples_per_partition=info->
grouping;
492 int partvals=n/samples_per_partition;
495 #if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
501 memset(partword[0],0,partvals*
sizeof(*partword[0]));
503 for(i=0,l=info->
begin/ch;i<partvals;i++){
506 for(j=0;j<samples_per_partition;j+=ch){
507 if(abs(in[0][l])>magmax)magmax=abs(in[0][l]);
509 if(abs(in[k][l])>angmax)angmax=abs(in[k][l]);
513 for(j=0;j<possible_partitions-1;j++)
514 if(magmax<=info->classmetric1[j] &&
515 angmax<=info->classmetric2[j])
523 sprintf(buffer,
"resaux_%d.vqd",look->train_seq);
524 of=fopen(buffer,
"a");
525 for(i=0;i<partvals;i++)
526 fprintf(of,
"%ld, ",partword[0][i]);
544 vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
552 int samples_per_partition=info->
grouping;
554 int partitions_per_word=look->phrasebook->dim;
557 int partvals=n/samples_per_partition;
564 if(in[i][j]>look->tmax)look->tmax=in[
i][
j];
565 if(in[i][j]<look->tmin)look->tmin=in[
i][
j];
569 memset(resbits,0,
sizeof(resbits));
570 memset(resvals,0,
sizeof(resvals));
577 for(s=0;s<look->stages;s++){
579 for(i=0;i<partvals;){
584 long val=partword[
j][
i];
585 for(k=1;k<partitions_per_word;k++){
586 val*=possible_partitions;
588 val+=partword[
j][i+
k];
603 for(k=0;k<partitions_per_word && i<partvals;k++,i++){
607 if(s==0)resvals[partword[
j][
i]]+=samples_per_partition;
609 codebook *statebook=look->partbooks[partword[
j][
i]][
s];
612 long *accumulator=
NULL;
615 accumulator=look->training_data[
s][partword[
j][
i]];
619 for(l=0;l<samples_per_partition;l++){
620 if(samples[l]<look->training_min[s][partword[j][i]])
621 look->training_min[
s][partword[
j][
i]]=samples[
l];
622 if(samples[l]>look->training_max[s][partword[j][i]])
623 look->training_max[
s][partword[
j][
i]]=samples[
l];
628 ret=encode(opb,in[j]+offset,samples_per_partition,
629 statebook,accumulator);
632 resbits[partword[
j][
i]]+=
ret;
659 long (*decodepart)(
codebook *,
float *,
663 vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
667 int samples_per_partition=info->
grouping;
668 int partitions_per_word=look->phrasebook->dim;
674 int partvals=n/samples_per_partition;
675 int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
676 int ***partword=alloca(ch*
sizeof(*partword));
681 for(s=0;s<look->stages;s++){
685 for(i=0,l=0;i<partvals;l++){
691 if(temp==-1 || temp>=info->
partvals)
goto eopbreak;
692 partword[
j][
l]=look->decodemap[temp];
693 if(partword[j][l]==
NULL)
goto errout;
698 for(k=0;k<partitions_per_word && i<partvals;k++,i++)
702 codebook *stagebook=look->partbooks[partword[
j][
l][
k]][
s];
704 if(decodepart(stagebook,in[j]+offset,&vb->
opb,
705 samples_per_partition)==-1)
goto eopbreak;
718 float **in,
int *nonzero,
int ch){
730 int **in,
int *nonzero,
int ch,
long **partword,
int submap){
744 int **in,
int *nonzero,
int ch){
756 float **in,
int *nonzero,
int ch){
768 int **in,
int *nonzero,
int ch){
771 if(nonzero[i])used++;
783 int **in,
int *nonzero,
int ch,
long **partword,
int submap){
792 if(nonzero[i])used++;
793 for(j=0,k=i;j<
n;j++,k+=ch)
806 float **in,
int *nonzero,
int ch){
808 vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
812 int samples_per_partition=info->
grouping;
813 int partitions_per_word=look->phrasebook->dim;
819 int partvals=n/samples_per_partition;
820 int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
823 for(i=0;i<ch;i++)
if(nonzero[i])
break;
826 for(s=0;s<look->stages;s++){
827 for(i=0,l=0;i<partvals;l++){
832 if(temp==-1 || temp>=info->
partvals)
goto eopbreak;
833 partword[
l]=look->decodemap[temp];
834 if(partword[l]==
NULL)
goto errout;
838 for(k=0;k<partitions_per_word && i<partvals;k++,i++)
840 codebook *stagebook=look->partbooks[partword[
l][
k]][
s];
844 i*samples_per_partition+info->
begin,ch,
845 &vb->
opb,samples_per_partition)==-1)
int res2_forward(oggpack_buffer *opb, vorbis_block *vb, vorbis_look_residue *vl, int **in, int *nonzero, int ch, long **partword, int submap)
static long ** _2class(vorbis_block *vb, vorbis_look_residue *vl, int **in, int ch)
GLuint const GLfloat * val
int res1_forward(oggpack_buffer *opb, vorbis_block *vb, vorbis_look_residue *vl, int **in, int *nonzero, int ch, long **partword, int submap)
long vorbis_book_decodevs_add(codebook *book, float *a, oggpack_buffer *b, int n)
const static_codebook * c
static_codebook * book_param[256]
int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b)
const vorbis_func_residue residue1_exportbundle
int res2_inverse(vorbis_block *vb, vorbis_look_residue *vl, float **in, int *nonzero, int ch)
return Display return Display Bool Bool int int e
int res0_inverse(vorbis_block *vb, vorbis_look_residue *vl, float **in, int *nonzero, int ch)
void oggpack_write(oggpack_buffer *b, unsigned long value, int bits)
GLboolean GLboolean GLboolean GLboolean a
void res0_pack(vorbis_info_residue *vr, oggpack_buffer *opb)
static long ** _01class(vorbis_block *vb, vorbis_look_residue *vl, int **in, int ch)
long ** res2_class(vorbis_block *vb, vorbis_look_residue *vl, int **in, int *nonzero, int ch)
const vorbis_func_residue residue2_exportbundle
const int classmetric2[64]
long vorbis_book_decode(codebook *book, oggpack_buffer *b)
EGLContext EGLenum EGLClientBuffer buffer
static int _encodepart(oggpack_buffer *opb, int *vec, int n, codebook *book, long *acc)
static int icount(unsigned int v)
const vorbis_func_residue residue0_exportbundle
void res0_free_look(vorbis_look_residue *i)
long vorbis_book_decodev_add(codebook *book, float *a, oggpack_buffer *b, int n)
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
int res1_inverse(vorbis_block *vb, vorbis_look_residue *vl, float **in, int *nonzero, int ch)
long ** res1_class(vorbis_block *vb, vorbis_look_residue *vl, int **in, int *nonzero, int ch)
GLenum GLenum GLenum GLenum GLenum scale
vorbis_look_residue * res0_look(vorbis_dsp_state *vd, vorbis_info_residue *vr)
static int ilog(unsigned int v)
static int _01inverse(vorbis_block *vb, vorbis_look_residue *vl, float **in, int ch, long(*decodepart)(codebook *, float *, oggpack_buffer *, int))
static int _01forward(oggpack_buffer *opb, vorbis_block *vb, vorbis_look_residue *vl, int **in, int ch, long **partword, int(*encode)(oggpack_buffer *, int *, int, codebook *, long *), int submap)
vorbis_info_residue * res0_unpack(vorbis_info *vi, oggpack_buffer *opb)
void res0_free_info(vorbis_info_residue *i)
long vorbis_book_decodevv_add(codebook *book, float **a, long offset, int ch, oggpack_buffer *b, int n)
long oggpack_read(oggpack_buffer *b, int bits)
void * _vorbis_block_alloc(vorbis_block *vb, long bytes)
static int local_book_besterror(codebook *book, int *a)