From: kramm <kramm>
Date: Sat, 5 Jul 2003 19:45:42 +0000 (+0000)
Subject: added support for --cgi, --samplerate.
X-Git-Tag: release-0-5-0~199
X-Git-Url: http://git.asbjorn.biz/?a=commitdiff_plain;h=a5f50be98c64a4f4cd25758a43386528a6998aad;p=swftools.git

added support for --cgi, --samplerate.
---

diff --git a/src/wav2swf.c b/src/wav2swf.c
index d27f172..89add26 100644
--- a/src/wav2swf.c
+++ b/src/wav2swf.c
@@ -27,7 +27,9 @@ struct options_t options[] =
  {"d","definesound"},
  {"l","loop"},
  {"r","framerate"},
+ {"s","samplerate"},
  {"b","bitrate"},
+ {"C","cgi"},
  {"V","version"},
  {0,0}
 };
@@ -35,7 +37,12 @@ struct options_t options[] =
 static int loop = 0;
 static int definesound = 0;
 static int framerate = 0;
+static int samplerate = 11025;
 static int bitrate = 32;
+static int do_cgi = 0;
+
+static int mp3_bitrates[] =
+{ 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0};
 
 int args_callback_option(char*name,char*val)
 {
@@ -60,23 +67,56 @@ int args_callback_option(char*name,char*val)
 	verbose ++;
 	return 0;
     }
+    else if(!strcmp(name, "C")) {
+	do_cgi = 1;
+	return 0;
+    }
     else if(!strcmp(name, "r")) {
 	float f;
 	sscanf(val, "%f", &f);
 	framerate = f*256;
 	return 1;
     }
+    else if(!strcmp(name, "s")) {
+	samplerate = atoi(val);
+	if(samplerate > 5000 && samplerate < 6000)
+	    samplerate = 5512;
+	else if(samplerate > 11000 && samplerate < 12000)
+	    samplerate = 11025;
+	else if(samplerate > 22000 && samplerate < 23000)
+	    samplerate = 22050;
+	else if(samplerate > 44000 && samplerate < 45000)
+	    samplerate = 44100;
+	else {
+	    fprintf(stderr, "Invalid samplerate: %d\n", samplerate);
+	    fprintf(stderr, "Allowed values: 11025, 22050\n", samplerate);
+	    exit(1);
+	}
+	return 1;
+    }
     else if(!strcmp(name, "b")) {
-	bitrate = atoi(val);
-	if(bitrate<=0) {
+	int t;
+	int b = atoi(val);
+	if(b<=0) {
 	    fprintf(stderr, "Not a valid bitrate: %s\n", val);
 	    exit(1);
 	}
-	if(bitrate>144) {
+	if(b>160) {
 	    fprintf(stderr, "Bitrate must be <144. (%s)\n", val);
 	    exit(1);
 	}
-	return 1;
+	for(t=0;mp3_bitrates[t];t++) {
+	    if(b== mp3_bitrates[t]) {
+		bitrate = b;
+		return 1;
+	    }
+	}
+	fprintf(stderr, "Invalid bitrate. Allowed bitrates are:\n");
+	for(t=0;mp3_bitrates[t];t++) {
+	    printf("%d ", mp3_bitrates[t]);
+	}
+	printf("\n");
+	exit(1);
     }
     else {
         printf("Unknown option: -%s\n", name);
@@ -94,9 +134,11 @@ void args_callback_usage(char*name)
     printf("\t-v , --verbose\t\t\t Be more verbose\n");
     printf("\t-d , --definesound\t\t Generate a DefineSound tag instead of streaming sound\n");
     printf("\t-l , --loop n\t\t\t Loop sound n times (implies -d)\n");
-    printf("\t-r , --framerate fps\t\t Set framerate to fps frames per seond\n");
+    printf("\t-r , --framerate fps\t\t Set framerate to fps frames per second\n");
+    printf("\t-s , --samplerate sps\t\t Set samplerate to sps frames per second (default: 11025)\n");
     printf("\t-b , --bitrate bps\t\t Set mp3 bitrate (default: 32)\n");
     printf("\t-o , --output filename\t\t set output filename (default: output.swf)\n");
+    printf("\t-C , --cgi\t\t\t For use as CGI- prepend http header, write to stdout\n");
     printf("\t-V , --version\t\t\t Print program version and exit\n");
 }
 int args_callback_command(char*name,char*val)
@@ -110,6 +152,8 @@ int args_callback_command(char*name,char*val)
 }
 
 extern int swf_mp3_bitrate;
+extern int swf_mp3_out_samplerate;
+extern int swf_mp3_in_samplerate;
 
 int main (int argc,char ** argv)
 { 
@@ -135,7 +179,7 @@ int main (int argc,char ** argv)
     processargs(argc, argv);
 
     blocksize = 576;
-    blockspersecond = 11025.0/blocksize;
+    blockspersecond = (float)samplerate/blocksize;
 
     framespersecond = blockspersecond;
     if(framerate)
@@ -147,12 +191,17 @@ int main (int argc,char ** argv)
     
     initLog(0,-1,0,0,-1,verbose);
 
+    if(!filename) {
+	msg("<fatal> You must supply a filename");
+	exit(1);
+    }
+
     if(!readWAV(filename, &wav))
     {
-	logf("<fatal> Error reading %s", filename);
+	msg("<fatal> Error reading %s", filename);
 	exit(1);
     }
-    convertWAV2mono(&wav,&wav2, 44100);
+    convertWAV2mono(&wav,&wav2, samplerate);
     //printWAVInfo(&wav);
     //printWAVInfo(&wav2);
     samples = (U16*)wav2.data;
@@ -174,6 +223,8 @@ int main (int argc,char ** argv)
     swf_SetRGB(tag,&rgb);
 	
     swf_mp3_bitrate = bitrate;
+    swf_mp3_out_samplerate = samplerate;
+    swf_mp3_in_samplerate = samplerate;
 
     if(!definesound)
     {
@@ -181,25 +232,25 @@ int main (int argc,char ** argv)
 	float framesamplepos = 0;
 	float framepos = 0;
 	float samplepos = 0;
+	ActionTAG* a = 0;
 	U16 v1=0,v2=0;
 	tag = swf_InsertTag(tag, ST_SOUNDSTREAMHEAD);
 	swf_SetSoundStreamHead(tag, samplesperframe);
-
-	logf("<notice> %d blocks", numsamples/(blocksize*4));
-	for(t=0;t<numsamples/(blocksize*4);t++) {
+	msg("<notice> %d blocks", numsamples/blocksize);
+	for(t=0;t<numsamples/blocksize;t++) {
 	    int s;
 	    U16*block1;
 	    int seek = blocksize - ((int)samplepos - (int)framesamplepos);
 
 	    if(newframepos!=oldframepos) {
 		tag = swf_InsertTag(tag, ST_SOUNDSTREAMBLOCK);
-		logf("<notice> Starting block %d %d+%d", t, (int)samplepos, (int)blocksize);
-		block1 = &samples[t*blocksize*4];
+		msg("<notice> Starting block %d %d+%d", t, (int)samplepos, (int)blocksize);
+		block1 = &samples[t*blocksize];
 		swf_SetSoundStreamBlock(tag, block1, seek, 1);
 		v1 = v2 = GET16(tag->data);
 	    } else {
-		logf("<notice> Adding data...", t);
-		block1 = &samples[t*blocksize*4];
+		msg("<notice> Adding data...", t);
+		block1 = &samples[t*blocksize];
 		swf_SetSoundStreamBlock(tag, block1, seek, 0);
 		v1+=v2;
 		PUT16(tag->data, v1);
@@ -221,13 +272,14 @@ int main (int argc,char ** argv)
 	tag = swf_InsertTag(tag, ST_DEFINESOUND);
 	swf_SetU16(tag, 24); //id
 #ifdef DEFINESOUND_MP3
-	swf_SetSoundDefine(tag, samples, numsamples);
+        swf_SetSoundDefine(tag, samples, numsamples);
 #else
-	swf_SetU8(tag,(/*compression*/0<<4)|(/*rate*/3<<2)|(/*size*/1<<1)|/*mono*/0);
-	swf_SetU32(tag, numsamples); // 44100 -> 11025
-	swf_SetBlock(tag, wav2.data, numsamples*2);
+        swf_SetU8(tag,(/*compression*/0<<4)|(/*rate*/3<<2)|(/*size*/1<<1)|/*mono*/0);
+        swf_SetU32(tag, numsamples); // 44100 -> 11025
+        swf_SetBlock(tag, wav2.data, numsamples*2);
 #endif
 
+
 	tag = swf_InsertTag(tag, ST_STARTSOUND);
 	swf_SetU16(tag, 24); //id
 	memset(&info, 0, sizeof(info));
@@ -237,9 +289,13 @@ int main (int argc,char ** argv)
 	tag = swf_InsertTag(tag, ST_END);
     }
 
-    f = open(outputname,O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644);
-    if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n");
-    close(f);
+    if(do_cgi) {
+	if FAILED(swf_WriteCGI(&swf)) fprintf(stderr,"WriteCGI() failed.\n");
+    } else {
+	f = open(outputname,O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644);
+	if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n");
+	close(f);
+    }
 
     swf_FreeTags(&swf);
     return 0;