mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-03-04 21:10:32 +00:00
added libraries: opus flac libsndfile updated: libvorbis libogg openal - Everything works as expected for now. Bare in mind libsndfile needed the check for whether or not it could find the xiph libraries removed in order for this to work.
163 lines
4.1 KiB
C
163 lines
4.1 KiB
C
/********************************************************************
|
|
* *
|
|
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
|
|
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
|
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
|
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
|
* *
|
|
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 *
|
|
* by the Xiph.Org Foundation https://xiph.org/ *
|
|
* *
|
|
********************************************************************
|
|
|
|
function: utility main for setting entropy encoding parameters
|
|
for lattice codebooks
|
|
|
|
********************************************************************/
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <math.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
#include "bookutil.h"
|
|
|
|
static int strrcmp_i(char *s,char *cmp){
|
|
return(strncmp(s+strlen(s)-strlen(cmp),cmp,strlen(cmp)));
|
|
}
|
|
|
|
/* This util takes a training-collected file listing codewords used in
|
|
LSP fitting, then generates new codeword lengths for maximally
|
|
efficient integer-bits entropy encoding.
|
|
|
|
command line:
|
|
latticetune book.vqh input.vqd [unused_entriesp]
|
|
|
|
latticetune produces book.vqh on stdout */
|
|
|
|
int main(int argc,char *argv[]){
|
|
codebook *b;
|
|
static_codebook *c;
|
|
long *lengths;
|
|
long *hits;
|
|
|
|
int entries=-1,dim=-1,guard=1;
|
|
FILE *in=NULL;
|
|
char *line,*name;
|
|
long j;
|
|
|
|
if(argv[1]==NULL){
|
|
fprintf(stderr,"Need a lattice codebook on the command line.\n");
|
|
exit(1);
|
|
}
|
|
if(argv[2]==NULL){
|
|
fprintf(stderr,"Need a codeword data file on the command line.\n");
|
|
exit(1);
|
|
}
|
|
if(argv[3]!=NULL)guard=0;
|
|
|
|
{
|
|
char *ptr;
|
|
char *filename=strdup(argv[1]);
|
|
|
|
b=codebook_load(filename);
|
|
c=(static_codebook *)(b->c);
|
|
|
|
ptr=strrchr(filename,'.');
|
|
if(ptr){
|
|
*ptr='\0';
|
|
name=strdup(filename);
|
|
}else{
|
|
name=strdup(filename);
|
|
}
|
|
}
|
|
|
|
if(c->maptype!=1){
|
|
fprintf(stderr,"Provided book is not a latticebook.\n");
|
|
exit(1);
|
|
}
|
|
|
|
entries=b->entries;
|
|
dim=b->dim;
|
|
|
|
hits=_ogg_malloc(entries*sizeof(long));
|
|
lengths=_ogg_calloc(entries,sizeof(long));
|
|
for(j=0;j<entries;j++)hits[j]=guard;
|
|
|
|
in=fopen(argv[2],"r");
|
|
if(!in){
|
|
fprintf(stderr,"Could not open input file %s\n",argv[2]);
|
|
exit(1);
|
|
}
|
|
|
|
if(!strrcmp_i(argv[0],"latticetune")){
|
|
long lines=0;
|
|
line=setup_line(in);
|
|
while(line){
|
|
long code;
|
|
lines++;
|
|
if(!(lines&0xfff))spinnit("codewords so far...",lines);
|
|
|
|
if(sscanf(line,"%ld",&code)==1)
|
|
hits[code]++;
|
|
|
|
line=setup_line(in);
|
|
}
|
|
}
|
|
|
|
/* now we simply count already collated by-entry data */
|
|
if(!strrcmp_i(argv[0],"res0tune") || !strrcmp_i(argv[0],"res1tune")){
|
|
|
|
line=setup_line(in);
|
|
while(line){
|
|
|
|
/* code:hits\n */
|
|
/* likely to have multiple listing for each code entry; must
|
|
accumulate */
|
|
|
|
char *pos=strchr(line,':');
|
|
if(pos){
|
|
long code=atol(line);
|
|
long val=atol(pos+1);
|
|
hits[code]+=val;
|
|
}
|
|
|
|
line=setup_line(in);
|
|
}
|
|
}
|
|
|
|
fclose(in);
|
|
|
|
/* build the codeword lengths */
|
|
build_tree_from_lengths0(entries,hits,lengths);
|
|
|
|
c->lengthlist=lengths;
|
|
write_codebook(stdout,name,c);
|
|
|
|
{
|
|
long bins=_book_maptype1_quantvals(c);
|
|
long i,k,base=c->lengthlist[0];
|
|
for(i=0;i<entries;i++)
|
|
if(c->lengthlist[i]>base)base=c->lengthlist[i];
|
|
|
|
for(j=0;j<entries;j++){
|
|
if(c->lengthlist[j]){
|
|
int indexdiv=1;
|
|
fprintf(stderr,"%4ld: ",j);
|
|
for(k=0;k<c->dim;k++){
|
|
int index= (j/indexdiv)%bins;
|
|
fprintf(stderr,"%+3.1f,", c->quantlist[index]*_float32_unpack(c->q_delta)+
|
|
_float32_unpack(c->q_min));
|
|
indexdiv*=bins;
|
|
}
|
|
fprintf(stderr,"\t|");
|
|
for(k=0;k<base-c->lengthlist[j];k++)fprintf(stderr,"*");
|
|
fprintf(stderr,"\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
fprintf(stderr,"\r "
|
|
"\nDone.\n");
|
|
exit(0);
|
|
}
|