X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswfsound.c;h=10a737aec269cf55b9b31a92398f6c7a913d5e05;hb=4a80dbd0b6295f958f7408df06d8801327a6a675;hp=428faec304c4c3aaa42436bbc5a485da1565ecb7;hpb=aee9de2c6eb23628e54b6896f5b441d9b39317c1;p=swftools.git diff --git a/lib/modules/swfsound.c b/lib/modules/swfsound.c index 428faec..10a737a 100644 --- a/lib/modules/swfsound.c +++ b/lib/modules/swfsound.c @@ -21,12 +21,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef RFXSWF_DISABLESOUND +#ifndef NO_MP3 #include "../rfxswf.h" #ifdef BLADEENC -fjokjklj +#define HAVE_SOUND + CodecInitOut * init = 0; void swf_SetSoundStreamHead(TAG*tag, U16 avgnumsamples) { @@ -59,7 +60,7 @@ void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int numsamples, char first) char*buf; int len = 0; - buf = malloc(init->bufferSize); + buf = rfx_alloc(init->bufferSize); if(!buf) return; @@ -72,23 +73,29 @@ void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int numsamples, char first) swf_SetU16(tag, 0); // seek } swf_SetBlock(tag, buf, len); - free(buf); + rfx_free(buf); } #endif +/* TODO: find a better way to set these from the outside */ -#ifdef LAME - -#include "../lame/lame.h" - -/* TODO: find a way to set these from the outside */ int swf_mp3_in_samplerate = 44100; int swf_mp3_out_samplerate = 11025; int swf_mp3_channels = 1; int swf_mp3_bitrate = 32; +#ifdef HAVE_LAME +#define HAVE_SOUND + +#include +#include + static lame_global_flags*lame_flags; +void null_errorf(const char *format, va_list ap) +{ +} + static void initlame() { unsigned char buf[4096]; @@ -114,12 +121,14 @@ static void initlame() lame_init_params(lame_flags); lame_init_bitstream(lame_flags); + lame_set_errorf(lame_flags, null_errorf); /* The first two flush calls to lame always fail, for some reason. Do them here where they cause no damage. */ lame_encode_flush_nogap(lame_flags, buf, bufsize); //printf("init:flush_nogap():%d\n", len); lame_encode_flush(lame_flags, buf, bufsize); //printf("init:flush():%d\n", len); + lame_set_errorf(lame_flags, 0); } void swf_SetSoundStreamHead(TAG*tag, int avgnumsamples) @@ -152,10 +161,10 @@ void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int seek, char first) char*buf; int len = 0; int bufsize = 16384; - int numsamples = 576*(swf_mp3_in_samplerate/swf_mp3_out_samplerate); + int numsamples = (int)(((swf_mp3_out_samplerate > 22050) ? 1152 : 576) * ((double)swf_mp3_in_samplerate/swf_mp3_out_samplerate)); int fs = 0; - buf = malloc(bufsize); + buf = rfx_alloc(bufsize); if(!buf) return; @@ -175,7 +184,7 @@ void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int seek, char first) fprintf(stderr, "ok: mp3 nonempty block, %d samples, first:%d, framesize:%d\n", numsamples, first, fs); }*/ - free(buf); + rfx_free(buf); } void swf_SetSoundStreamEnd(TAG*tag) @@ -194,7 +203,7 @@ void swf_SetSoundDefine(TAG*tag, S16*samples, int num) char*buf; int oldlen=0,len = 0; int bufsize = 16384; - int blocksize = 576*(swf_mp3_in_samplerate/swf_mp3_out_samplerate); + int blocksize = (int)(((swf_mp3_out_samplerate > 22050) ? 1152 : 576) * ((double)swf_mp3_in_samplerate/swf_mp3_out_samplerate)); int t; int blocks; @@ -213,11 +222,11 @@ void swf_SetSoundDefine(TAG*tag, S16*samples, int num) swf_SetU8(tag,(compression<<4)|(rate<<2)|(size<<1)|type); - swf_SetU32(tag,blocks*blocksize / - (swf_mp3_in_samplerate/swf_mp3_out_samplerate) // account for resampling + swf_SetU32(tag, (int)(tag,blocks*blocksize / + ((double)swf_mp3_in_samplerate/swf_mp3_out_samplerate)) // account for resampling ); - buf = malloc(bufsize); + buf = rfx_alloc(bufsize); if(!buf) return; @@ -234,9 +243,40 @@ void swf_SetSoundDefine(TAG*tag, S16*samples, int num) len = 0; } - free(buf); + rfx_free(buf); +} + +#endif + +#endif + +#ifndef HAVE_SOUND + +// supply stubs + +void swf_SetSoundStreamHead(TAG*tag, int avgnumsamples) +{ + fprintf(stderr, "Error: no sound support compiled in.\n");exit(1); +} +void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int seek, char first) +{ + fprintf(stderr, "Error: no sound support compiled in.\n");exit(1); +} +void swf_SetSoundStreamEnd(TAG*tag) +{ + fprintf(stderr, "Error: no sound support compiled in.\n");exit(1); +} +void swf_SetSoundDefineRaw(TAG*tag, S16*samples, int num, int samplerate) +{ + fprintf(stderr, "Error: no sound support compiled in.\n");exit(1); +} +void swf_SetSoundDefine(TAG*tag, S16*samples, int num) +{ + fprintf(stderr, "Error: no sound support compiled in.\n");exit(1); } +#endif + #define SOUNDINFO_STOP 32 #define SOUNDINFO_NOMULTIPLE 16 #define SOUNDINFO_HASENVELOPE 8 @@ -244,6 +284,7 @@ void swf_SetSoundDefine(TAG*tag, S16*samples, int num) #define SOUNDINFO_HASOUTPOINT 2 #define SOUNDINFO_HASINPOINT 1 + void swf_SetSoundInfo(TAG*tag, SOUNDINFO*info) { U8 flags = (info->stop?SOUNDINFO_STOP:0) @@ -270,6 +311,4 @@ void swf_SetSoundInfo(TAG*tag, SOUNDINFO*info) } } -#endif -#endif // RFXSWF_DISABLESOUND