X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=tones.c;h=fd85529078f93ca4d1bdcc2c7040fec1ba5465e2;hp=0cd4684f14cc58bd4b7c96f46f2f5b181c3fd643;hb=ab4a1270e9c99ab7a21a957759de2a885100afb1;hpb=e9daaa4ef7ee895e6a8610ebb2166cc99c891a4e diff --git a/tones.c b/tones.c index 0cd4684..fd85529 100644 --- a/tones.c +++ b/tones.c @@ -9,15 +9,6 @@ ** ** \*****************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "main.h" /* @@ -38,12 +29,12 @@ the read_tone() will return law or 16bit mono. the read_tone will convert all ot struct fmt { unsigned short stereo; /* 1 = pcm, 2 = adpcm */ unsigned short channels; /* number of channels */ - unsigned long sample_rate; /* sample rate */ - unsigned long data_rate; /* data rate */ + unsigned int sample_rate; /* sample rate */ + unsigned int data_rate; /* data rate */ unsigned short bytes_sample; /* bytes per sample (all channels) */ unsigned short bits_sample; /* bits per sample (one channel) */ }; -int open_tone(char *file, int *codec, signed long *length, signed long *left) +int open_tone(char *file, int *codec, signed int *length, signed int *left) { int fh; char filename[256]; @@ -51,7 +42,7 @@ int open_tone(char *file, int *codec, signed long *length, signed long *left) unsigned char buffer[256]; struct fmt *fmt; int channels, bytes; - unsigned long size, chunk; + unsigned int size, chunk; int gotfmt = 0; struct stat _stat; int linksize; @@ -155,7 +146,7 @@ int open_tone(char *file, int *codec, signed long *length, signed long *left) read(fh, buffer, 8); chunk=(buffer[4]) + (buffer[5]<<8) + (buffer[6]<<16) + (buffer[7]<<24); size -= (8+chunk); -// printf("%c%c%c%c lenght=%d\n",buffer[0],buffer[1],buffer[2],buffer[3],chunk); +// printf("%c%c%c%c length=%d\n",buffer[0],buffer[1],buffer[2],buffer[3],chunk); if (size < 0) { close(fh); @@ -165,7 +156,7 @@ int open_tone(char *file, int *codec, signed long *length, signed long *left) } if (!strncmp((char *)buffer, "fmt ", 4)) { - if (chunk != 16) + if (chunk < 16) { close(fh); errno = 0; @@ -214,27 +205,28 @@ int open_tone(char *file, int *codec, signed long *length, signed long *left) if (codec) *codec = CODEC_MONO; if (length) - *length = ((signed long)chunk)>>1; + *length = ((signed int)chunk)>>1; if (left) - *left = ((signed long)chunk)>>1; + *left = ((signed int)chunk)>>1; +// printf("left=%d\n",*left); } else if (bytes==2 && channels==2) { if (codec) *codec = CODEC_STEREO; if (length) - *length = ((signed long)chunk)>>2; + *length = ((signed int)chunk)>>2; if (left) - *left = ((signed long)chunk)>>2; + *left = ((signed int)chunk)>>2; } else if (bytes==1 && channels==1) { if (codec) *codec = CODEC_8BIT; if (length) - *length = (signed long)chunk; + *length = (signed int)chunk; if (left) - *left = (signed long)chunk; + *left = (signed int)chunk; } else { close(fh); @@ -278,14 +270,14 @@ int open_tone(char *file, int *codec, signed long *length, signed long *left) * the len must be the number of samples, NOT for the bytes to read!! * the data returned is law-code */ -int read_tone(int fh, unsigned char *buffer, int codec, int len, signed long size, signed long *left, int speed) +int read_tone(int fh, unsigned char *buffer, int codec, int len, signed int size, signed int *left, int speed) { int l; int offset; signed short buffer16[len], *buf16 = buffer16; signed short buffer32[len<<1], *buf32 = buffer32; unsigned char buffer8[len], *buf8 = buffer8; - signed long sample; + signed int sample; int i = 0; //printf("left=%ld\n",*left); @@ -377,8 +369,7 @@ int read_tone(int fh, unsigned char *buffer, int codec, int len, signed long siz break; default: - PERROR("codec %d is not supported, exitting...\n", codec); - exit(-1); + FATAL("codec %d is not supported.\n", codec); } if (l>0 && left) @@ -406,12 +397,12 @@ void free_tones(void) { temp = tonesettone_temp; tonesettone_temp = tonesettone_temp->next; - free(temp); + FREE(temp, sizeof(struct tonesettone)); memuse--; } temp = toneset_temp; toneset_temp = toneset_temp->next; - free(temp); + FREE(temp, sizeof(struct toneset)); memuse--; } toneset_first = NULL; @@ -431,8 +422,8 @@ int fetch_tones(void) char filename[256], name[256]; int fh; int tone_codec; - signed long tone_size, tone_left; - unsigned long memory = 0; + signed int tone_size, tone_left; + unsigned int memory = 0; int samples = 0; /* if disabled */ @@ -465,15 +456,9 @@ int fetch_tones(void) printf("PBX: Fetching tones '%s'\n", p); PDEBUG(DEBUG_PORT, "fetching tones directory '%s'\n", p); - *toneset_nextpointer = (struct toneset *)calloc(1, sizeof(struct toneset)); - if (*toneset_nextpointer == NULL) - { - PERROR("No memory for tone set: '%s'\n",p); - return(0); - } + *toneset_nextpointer = (struct toneset *)MALLOC(sizeof(struct toneset)); memuse++; memory += sizeof(struct toneset); - memset(*toneset_nextpointer, 0 , sizeof(struct toneset)); SCPY((*toneset_nextpointer)->directory, p); tonesettone_nextpointer = &(*toneset_nextpointer)->first; @@ -526,18 +511,10 @@ int fetch_tones(void) continue; } - /* allocate tone */ - *tonesettone_nextpointer = (struct tonesettone *)calloc(1, sizeof(struct tonesettone)+tone_size); - if (*toneset_nextpointer == NULL) - { - PERROR("No memory for tone set: '%s'\n",p); - close(fh); - fduse--; - return(0); - } + /* Allocate tone */ + *tonesettone_nextpointer = (struct tonesettone *)MALLOC(sizeof(struct tonesettone)+tone_size); memuse++; //printf("tone:%s, %ld bytes\n", name, tone_size); - memset(*tonesettone_nextpointer, 0 , sizeof(struct tonesettone)+tone_size); memory += sizeof(struct tonesettone)+tone_size; samples ++; @@ -567,7 +544,7 @@ int fetch_tones(void) /* * opens the fetched tone (if available) */ -void *open_tone_fetched(char *dir, char *file, int *codec, signed long *length, signed long *left) +void *open_tone_fetched(char *dir, char *file, int *codec, signed int *length, signed int *left) { struct toneset *toneset; struct tonesettone *tonesettone; @@ -616,7 +593,7 @@ void *open_tone_fetched(char *dir, char *file, int *codec, signed long *length, * read from fetched tone, check size * the len must be the number of samples, NOT for the bytes to read!! */ -int read_tone_fetched(void **fetched, void *buffer, int len, signed long size, signed long *left, int speed) +int read_tone_fetched(void **fetched, void *buffer, int len, signed int size, signed int *left, int speed) { int l; //printf("left=%ld\n",*left);