summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMonty <xiphmont@xiph.org>2000-01-28 14:31:29 +0000
committerMonty <xiphmont@xiph.org>2000-01-28 14:31:29 +0000
commita6194cddc845cb9fdda6497ff1c515cb9237a02c (patch)
treefb4302435f559024adaa56ed4825453b9b29abc2 /lib
parent5365ea64b6b252a9902a5f9d4b141ad14884510a (diff)
downloadlibvorbis-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.c12
-rw-r--r--lib/info.c60
-rw-r--r--lib/mapping0.c20
-rw-r--r--lib/res0.c10
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;
diff --git a/lib/info.c b/lib/info.c
index cf0eb7b1..1bc27631 100644
--- a/lib/info.c
+++ b/lib/info.c
@@ -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);
diff --git a/lib/res0.c b/lib/res0.c
index 4e430f86..f61ac894 100644
--- a/lib/res0.c
+++ b/lib/res0.c
@@ -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);
}
}