diff options
| author | Monty <xiphmont@xiph.org> | 2000-01-28 14:31:29 +0000 |
|---|---|---|
| committer | Monty <xiphmont@xiph.org> | 2000-01-28 14:31:29 +0000 |
| commit | a6194cddc845cb9fdda6497ff1c515cb9237a02c (patch) | |
| tree | fb4302435f559024adaa56ed4825453b9b29abc2 /lib | |
| parent | 5365ea64b6b252a9902a5f9d4b141ad14884510a (diff) | |
| download | libvorbis-git-a6194cddc845cb9fdda6497ff1c515cb9237a02c.tar.gz | |
Incremental update. Reduced maximum codebook/mapping/mode/backend
limits. Went to static storage in structures (equal to the limits) to
ease mode construction
Monty
svn path=/trunk/vorbis/; revision=245
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/floor0.c | 12 | ||||
| -rw-r--r-- | lib/info.c | 60 | ||||
| -rw-r--r-- | lib/mapping0.c | 20 | ||||
| -rw-r--r-- | lib/res0.c | 10 |
4 files changed, 43 insertions, 59 deletions
diff --git a/lib/floor0.c b/lib/floor0.c index ef36f4a3..51d5cec3 100644 --- a/lib/floor0.c +++ b/lib/floor0.c @@ -12,7 +12,7 @@ ******************************************************************** function: floor backend 0 implementation - last mod: $Id: floor0.c,v 1.3 2000/01/28 09:05:09 xiphmont Exp $ + last mod: $Id: floor0.c,v 1.4 2000/01/28 14:31:25 xiphmont Exp $ ********************************************************************/ @@ -23,10 +23,9 @@ #include "registry.h" static void free_info(vorbis_info_floor *i){ - vorbis_info_floor0 *d=(vorbis_info_floor0 *)i; - if(d){ - if(d->books)free(d->books); + if(i){ memset(i,0,sizeof(vorbis_info_floor0)); + free(i); } } static void free_look(vorbis_look_floor *i){ @@ -38,7 +37,7 @@ static void pack (vorbis_info_floor *i,oggpack_buffer *opb){ _oggpack_write(opb,d->order,8); _oggpack_write(opb,d->rate,16); _oggpack_write(opb,d->barkmap,16); - _oggpack_write(opb,d->stages,8); + _oggpack_write(opb,d->stages,4); for(j=0;j<d->stages;j++) _oggpack_write(opb,d->books[j],8); } @@ -49,14 +48,13 @@ static vorbis_info_floor *unpack (vorbis_info *vi,oggpack_buffer *opb){ d->order=_oggpack_read(opb,8); d->rate=_oggpack_read(opb,16); d->barkmap=_oggpack_read(opb,16); - d->stages=_oggpack_read(opb,8); + d->stages=_oggpack_read(opb,4); if(d->order<1)goto err_out; if(d->rate<1)goto err_out; if(d->barkmap<1)goto err_out; if(d->stages<1)goto err_out; - d->books=alloca(sizeof(int)*d->stages); for(j=0;j<d->stages;j++){ d->books[j]=_oggpack_read(opb,8); if(d->books[j]<0 || d->books[j]>=vi->books)goto err_out; @@ -12,7 +12,7 @@ ******************************************************************** function: maintain the info structure, info <-> header packets - last mod: $Id: info.c,v 1.18 2000/01/28 09:05:10 xiphmont Exp $ + last mod: $Id: info.c,v 1.19 2000/01/28 14:31:26 xiphmont Exp $ ********************************************************************/ @@ -84,23 +84,23 @@ void vorbis_info_clear(vorbis_info *vi){ for(i=0;i<vi->modes;i++) if(vi->mode_param[i])free(vi->mode_param[i]); - if(vi->mode_param)free(vi->mode_param); + /*if(vi->mode_param)free(vi->mode_param);*/ for(i=0;i<vi->maps;i++) /* unpack does the range checking */ _mapping_P[i]->free_info(vi->map_param[i]); - if(vi->map_param)free(vi->map_param); + /*if(vi->map_param)free(vi->map_param);*/ for(i=0;i<vi->times;i++) /* unpack does the range checking */ _time_P[i]->free_info(vi->time_param[i]); - if(vi->time_param)free(vi->time_param); + /*if(vi->time_param)free(vi->time_param);*/ for(i=0;i<vi->floors;i++) /* unpack does the range checking */ _floor_P[i]->free_info(vi->floor_param[i]); - if(vi->floor_param)free(vi->floor_param); + /*if(vi->floor_param)free(vi->floor_param);*/ for(i=0;i<vi->residues;i++) /* unpack does the range checking */ _residue_P[i]->free_info(vi->residue_param[i]); - if(vi->residue_param)free(vi->residue_param); + /*if(vi->residue_param)free(vi->residue_param);*/ /* the static codebooks *are* freed if you call info_clear, because decode side does alloc a 'static' codebook. Calling clear on the @@ -113,11 +113,11 @@ void vorbis_info_clear(vorbis_info *vi){ free(vi->book_param[i]); } } - if(vi->book_param)free(vi->book_param); + /*if(vi->book_param)free(vi->book_param);*/ for(i=0;i<vi->psys;i++) _vi_psy_free(vi->psy_param[i]); - if(vi->psy_param)free(vi->psy_param); + /*if(vi->psy_param)free(vi->psy_param);*/ memset(vi,0,sizeof(vorbis_info)); } @@ -181,17 +181,17 @@ static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){ int i; /* codebooks */ - vi->books=_oggpack_read(opb,16); - vi->book_param=calloc(vi->books,sizeof(static_codebook *)); + vi->books=_oggpack_read(opb,8)+1; + /*vi->book_param=calloc(vi->books,sizeof(static_codebook *));*/ for(i=0;i<vi->books;i++){ vi->book_param[i]=calloc(1,sizeof(static_codebook)); if(vorbis_staticbook_unpack(opb,vi->book_param[i]))goto err_out; } /* time backend settings */ - vi->times=_oggpack_read(opb,8); - vi->time_type=malloc(vi->times*sizeof(int)); - vi->time_param=calloc(vi->times,sizeof(void *)); + vi->times=_oggpack_read(opb,6)+1; + /*vi->time_type=malloc(vi->times*sizeof(int));*/ + /*vi->time_param=calloc(vi->times,sizeof(void *));*/ for(i=0;i<vi->times;i++){ vi->time_type[i]=_oggpack_read(opb,16); if(vi->time_type[i]<0 || vi->time_type[i]>=VI_TIMEB)goto err_out; @@ -200,9 +200,9 @@ static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){ } /* floor backend settings */ - vi->floors=_oggpack_read(opb,8); - vi->floor_type=malloc(vi->floors*sizeof(int)); - vi->floor_param=calloc(vi->floors,sizeof(void *)); + vi->floors=_oggpack_read(opb,6)+1; + /*vi->floor_type=malloc(vi->floors*sizeof(int));*/ + /*vi->floor_param=calloc(vi->floors,sizeof(void *));*/ for(i=0;i<vi->floors;i++){ vi->floor_type[i]=_oggpack_read(opb,16); if(vi->floor_type[i]<0 || vi->floor_type[i]>=VI_FLOORB)goto err_out; @@ -211,9 +211,9 @@ static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){ } /* residue backend settings */ - vi->residues=_oggpack_read(opb,8); - vi->residue_type=malloc(vi->residues*sizeof(int)); - vi->residue_param=calloc(vi->residues,sizeof(void *)); + vi->residues=_oggpack_read(opb,6)+1; + /*vi->residue_type=malloc(vi->residues*sizeof(int));*/ + /*vi->residue_param=calloc(vi->residues,sizeof(void *));*/ for(i=0;i<vi->residues;i++){ vi->residue_type[i]=_oggpack_read(opb,16); if(vi->residue_type[i]<0 || vi->residue_type[i]>=VI_RESB)goto err_out; @@ -222,9 +222,9 @@ static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){ } /* map backend settings */ - vi->maps=_oggpack_read(opb,8); - vi->map_type=malloc(vi->maps*sizeof(int)); - vi->map_param=calloc(vi->maps,sizeof(void *)); + vi->maps=_oggpack_read(opb,6)+1; + /*vi->map_type=malloc(vi->maps*sizeof(int));*/ + /*vi->map_param=calloc(vi->maps,sizeof(void *));*/ for(i=0;i<vi->maps;i++){ vi->map_type[i]=_oggpack_read(opb,16); if(vi->map_type[i]<0 || vi->map_type[i]>=VI_MAPB)goto err_out; @@ -233,8 +233,8 @@ static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){ } /* mode settings */ - vi->modes=_oggpack_read(opb,8); - vi->mode_param=calloc(vi->modes,sizeof(void *)); + vi->modes=_oggpack_read(opb,6)+1; + /*vi->mode_param=calloc(vi->modes,sizeof(void *));*/ for(i=0;i<vi->modes;i++){ vi->mode_param[i]=calloc(1,sizeof(vorbis_info_mode)); vi->mode_param[i]->blockflag=_oggpack_read(opb,1); @@ -374,40 +374,40 @@ static int _vorbis_pack_books(oggpack_buffer *opb,vorbis_info *vi){ _oggpack_write(opb,0x82,8); /* books */ - _oggpack_write(opb,vi->books,16); + _oggpack_write(opb,vi->books-1,8); for(i=0;i<vi->books;i++) if(vorbis_staticbook_pack(vi->book_param[i],opb))goto err_out; /* times */ - _oggpack_write(opb,vi->times,8); + _oggpack_write(opb,vi->times-1,6); for(i=0;i<vi->times;i++){ _oggpack_write(opb,vi->time_type[i],16); _time_P[vi->time_type[i]]->pack(vi->time_param[i],opb); } /* floors */ - _oggpack_write(opb,vi->floors,8); + _oggpack_write(opb,vi->floors-1,6); for(i=0;i<vi->floors;i++){ _oggpack_write(opb,vi->floor_type[i],16); _floor_P[vi->floor_type[i]]->pack(vi->floor_param[i],opb); } /* residues */ - _oggpack_write(opb,vi->residues,8); + _oggpack_write(opb,vi->residues-1,6); for(i=0;i<vi->residues;i++){ _oggpack_write(opb,vi->residue_type[i],16); _residue_P[vi->residue_type[i]]->pack(vi->residue_param[i],opb); } /* maps */ - _oggpack_write(opb,vi->maps,8); + _oggpack_write(opb,vi->maps-1,6); for(i=0;i<vi->maps;i++){ _oggpack_write(opb,vi->map_type[i],16); _mapping_P[vi->map_type[i]]->pack(vi,vi->map_param[i],opb); } /* modes */ - _oggpack_write(opb,vi->modes,8); + _oggpack_write(opb,vi->modes-1,6); for(i=0;i<vi->modes;i++){ _oggpack_write(opb,vi->mode_param[i]->blockflag,1); _oggpack_write(opb,vi->mode_param[i]->windowtype,16); diff --git a/lib/mapping0.c b/lib/mapping0.c index 0ac237fb..371be7e2 100644 --- a/lib/mapping0.c +++ b/lib/mapping0.c @@ -12,7 +12,7 @@ ******************************************************************** function: channel mapping 0 implementation - last mod: $Id: mapping0.c,v 1.3 2000/01/28 09:05:13 xiphmont Exp $ + last mod: $Id: mapping0.c,v 1.4 2000/01/28 14:31:27 xiphmont Exp $ ********************************************************************/ @@ -52,16 +52,9 @@ typedef struct { } vorbis_look_mapping0; void free_info(vorbis_info_mapping *i){ - vorbis_info_mapping0 *d=(vorbis_info_mapping0 *)i; - - if(d){ - if(d->chmuxlist)free(d->chmuxlist); - if(d->timesubmap)free(d->timesubmap); - if(d->floorsubmap)free(d->floorsubmap); - if(d->residuesubmap)free(d->residuesubmap); - if(d->psysubmap)free(d->psysubmap); - memset(d,0,sizeof(vorbis_info_mapping0)); - free(d); + if(i){ + memset(i,0,sizeof(vorbis_info_mapping0)); + free(i); } } @@ -153,11 +146,6 @@ vorbis_info_mapping *unpack(vorbis_info *vi,oggpack_buffer *opb){ d->submaps=_oggpack_read(opb,4); - d->chmuxlist=calloc(vi->channels,sizeof(int)); - d->timesubmap=malloc(sizeof(int)*d->submaps); - d->floorsubmap=malloc(sizeof(int)*d->submaps); - d->residuesubmap=malloc(sizeof(int)*d->submaps); - if(d->submaps>1){ for(i=0;i<vi->channels;i++){ d->chmuxlist[i]=_oggpack_read(opb,4); @@ -12,7 +12,7 @@ ******************************************************************** function: residue backend 0 implementation - last mod: $Id: res0.c,v 1.2 2000/01/28 09:05:16 xiphmont Exp $ + last mod: $Id: res0.c,v 1.3 2000/01/28 14:31:28 xiphmont Exp $ ********************************************************************/ @@ -25,11 +25,9 @@ /* unfinished as of 20000118 */ void free_info(vorbis_info_residue *i){ - vorbis_info_residue0 *d=(vorbis_info_residue0 *)i; - if(d){ - if(d->books)free(d->books); - memset(d,0,sizeof(vorbis_info_residue0)); - free(d); + if(i){ + memset(i,0,sizeof(vorbis_info_residue0)); + free(i); } } |
