ref: f5516e57ec8a9eb3ccf0f526c8b1b3a612a5f86a
dir: /opus-tools/
diff b982c4c784095dccb77f57169416e02a0cd9c81d uncommitted --- /tmp/diff100000244624 +++ b/mkfile @@ -0,0 +1,51 @@ +APE=/sys/src/ape +<$APE/config + +TARG=opusdec opusenc opusinfo +BIN=/$objtype/bin/audio + +CFLAGS=$CFLAGS -c \ + -Iinclude \ + -I/sys/src/cmd/audio/libogg \ + -I/sys/include/ape/opus \ + -D_POSIX_SOURCE \ + -D__GNU_LIBRARY__ \ + -D_C99_SNPRINTF_EXTENSION \ + -DSPX_RESAMPLE_EXPORT= \ + -DRANDOM_PREFIX=opustools \ + -DOUTSIDE_SPEEX \ + -DRESAMPLE_FULL_SINC_TABLE \ + -DOPUSTOOLS \ + -DPACKAGE_NAME="opus-tools" \ + -DPACKAGE_VERSION="fuckoff" + +LIB=\ + /$objtype/lib/ape/libopusfile.a \ + /$objtype/lib/ape/libopusenc.a \ + /$objtype/lib/ape/libopus.a \ + /sys/src/cmd/audio/libogg/libogg.a$O \ + +</sys/src/cmd/mkmany + +%.$O: src/%.c + $CC $CFLAGS $prereq + +%.$O: share/%.c + $CC $CFLAGS $prereq + +%.$O: /sys/src/cmd/audio/libogg/%.c + $CC $CFLAGS $prereq + +OGG=`{cd /sys/src/cmd/audio/libogg; echo *.c} +OGG=${OGG:%.c=%.$O} + +/sys/src/cmd/audio/libogg/libogg.a$O: $OGG + ar vu $target $OGG + +COMMON=opus_header.$O resample.$O getopt.$O getopt1.$O + +$O.opusdec: opusdec.$O wav_io.$O wave_out.$O diag_range.$O $COMMON +$O.opusenc: opusenc.$O audio-in.$O diag_range.$O flac.$O picture.$O $COMMON +$O.opusinfo: opusinfo.$O info_opus.$O picture.$O tagcompare.$O $COMMON + +CLEANFILES=`{$CLEANFILES echo /sys/src/cmd/audio/libogg/libogg.a[$OS]} --- a/src/audio-in.c +++ b/src/audio-in.c @@ -721,7 +721,11 @@ int sampbyte = f->samplesize / 8; int realsamples = f->totalsamples > 0 && samples > (f->totalsamples - f->samplesread) ? (int)(f->totalsamples - f->samplesread) : samples; - signed char *buf = alloca(realsamples*sampbyte*f->channels); + signed char *buf = malloc(realsamples*sampbyte*f->channels); + if(buf == NULL){ + fprintf(stderr, "allocation failure\n"); + return 0; + } int i,j; int *ch_permute = f->channel_permute; @@ -809,9 +813,11 @@ else { fprintf(stderr, _("Internal error: attempt to read unsupported " "bitdepth %d\n"), f->samplesize); + free(buf); return 0; } + free(buf); return realsamples; } @@ -820,9 +826,14 @@ wavfile *f = (wavfile *)in; int realsamples = f->totalsamples > 0 && samples > (f->totalsamples - f->samplesread) ? (int)(f->totalsamples - f->samplesread) : samples; - float *buf = alloca(realsamples*4*f->channels); /* de-interleave buffer */ + float *buf = malloc(realsamples*4*f->channels); /* de-interleave buffer */ int i,j; + if(buf == NULL){ + fprintf(stderr, "allocation failure\n"); + return 0; + } + realsamples = (int)fread(buf, 4*f->channels, realsamples, f->f); f->samplesread += realsamples; @@ -839,6 +850,7 @@ get_be_float(buf + i*f->channels + f->channel_permute[j]); } + free(buf); return realsamples; } --- a/src/opusdec.c +++ b/src/opusdec.c @@ -503,8 +503,12 @@ short *out; float *buf; float *output; - out=alloca(sizeof(short)*MAX_FRAME_SIZE*channels); - buf=alloca(sizeof(float)*MAX_FRAME_SIZE*channels); + out=malloc(sizeof(short)*MAX_FRAME_SIZE*channels); + buf=malloc(sizeof(float)*MAX_FRAME_SIZE*channels); + if(out == NULL || buf == NULL){ + fprintf(stderr, "allocation failure\n"); + return 0; + } maxout=((link_read/48000)*rate + (link_read%48000)*rate/48000) - link_out; maxout=maxout<0?0:maxout; do { @@ -570,6 +574,8 @@ maxout-=ret; } } while (frame_size>0 && maxout>0); + free(buf); + free(out); return sampout; } @@ -857,8 +863,8 @@ } else { - st=op_open_url(inFile,NULL,NULL); - if (st==NULL) + //st=op_open_url(inFile,NULL,NULL); + //if (st==NULL) { st=op_open_file(inFile,NULL); } @@ -1066,7 +1072,8 @@ resampler=NULL; } /*We've encountered a new link.*/ - link_read=link_out=0; + link_read=0; + link_out=0; head=op_head(st, li); if (!force_stereo && channels!=head->channel_count) {