[Scummvm-cvs-logs] CVS: tools extract.c,1.25,1.26
Max Horn
fingolfin at users.sourceforge.net
Mon Sep 15 11:25:04 CEST 2003
Update of /cvsroot/scummvm/tools
In directory sc8-pr-cvs1:/tmp/cvs-serv26764
Modified Files:
extract.c
Log Message:
cleanup; don't convert input data to 16 bit, rather just tell oggenc/lame that the raw input uses 8bit/sample
Index: extract.c
===================================================================
RCS file: /cvsroot/scummvm/tools/extract.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- extract.c 15 Sep 2003 14:31:20 -0000 1.25
+++ extract.c 15 Sep 2003 18:24:18 -0000 1.26
@@ -28,6 +28,9 @@
#include <unistd.h>
#endif
+typedef unsigned int uint32;
+typedef unsigned char byte;
+
/* These are the defaults parameters for the Lame invocation */
#define minBitrDef 24
#define maxBitrDef 64
@@ -41,14 +44,11 @@
FILE *input, *output_idx, *output_snd;
-char fbuf_temp[1024];
-char buf[256];
-
char f_hdr[] = {
'S', 'O', 'U', ' ', 0, 0, 0, 0, 0
};
-char v_hdr[] = {
+byte v_hdr[] = {
'V', 'C', 'T', 'L', 0, 0, 0, 0xA, 0xF, 0xFF
};
@@ -58,13 +58,13 @@
};
struct lameparams {
- unsigned int minBitr;
- unsigned int maxBitr;
- unsigned int abr;
- unsigned int vbr;
- unsigned int algqual;
- unsigned int vbrqual;
- unsigned int silent;
+ uint32 minBitr;
+ uint32 maxBitr;
+ uint32 abr;
+ uint32 vbr;
+ uint32 algqual;
+ uint32 vbrqual;
+ uint32 silent;
} encparms = { minBitrDef, maxBitrDef, abrDef, vbrDef, algqualDef, vbrqualDef, 0 };
struct oggencparams {
@@ -77,7 +77,7 @@
int oggmode = 0;
-void put_int(unsigned int val);
+void put_int(uint32 val);
#define OUTPUT_MP3 "monster.so3"
#define OUTPUT_OGG "monster.sog"
@@ -92,14 +92,14 @@
{
FILE *in;
int idx_size = ftell(output_idx);
- int size;
+ size_t size;
char buf[2048];
fclose(output_snd);
fclose(output_idx);
output_idx = fopen(oggmode ? OUTPUT_OGG : OUTPUT_MP3, "wb");
- put_int(idx_size);
+ put_int((uint32)idx_size);
in = fopen(TEMP_IDX, "rb");
while ((size = fread(buf, 1, 2048, in)) > 0) {
@@ -123,9 +123,9 @@
exit(-1);
}
-void get_string(int size)
+void get_string(uint32 size, char buf[])
{
- int i = 0;
+ uint32 i = 0;
while (i < size) {
int c = fgetc(input);
if (c == EOF)
@@ -148,7 +148,7 @@
}
return ret;
}
-void append_byte(int size)
+void append_byte(int size, char buf[])
{
int i;
int c;
@@ -160,45 +160,46 @@
buf[i] = c;
}
-void put_int(unsigned int val)
+void put_int(uint32 val)
{
- int i;
- for (i = 0; i < 4; i++) {
- fputc(val >> 24, output_idx);
- val <<= 8;
- }
+ byte b;
+ b = (byte)(val >> 24); fputc((char)b, output_idx);
+ b = (byte)(val >> 16); fputc((char)b, output_idx);
+ b = (byte)(val >> 8); fputc((char)b, output_idx);
+ b = (byte)(val >> 0); fputc((char)b, output_idx);
}
void get_part(void)
{
+ char buf[2048];
int id;
int pos = ftell(input);
- int tags;
+ uint32 tags;
/* The VCTL header */
- get_string(4);
+ get_string(4, buf);
while (strncmp(buf, "VCTL", 4)) {
pos++;
- append_byte(4);
+ append_byte(4, buf);
}
tags = get_int(4);
+ if (tags < 8)
+ exit(-1);
tags -= 8;
- put_int(pos);
- put_int(ftell(output_snd));
- if (tags < 0)
- exit(-1);
+ put_int((uint32)pos);
+ put_int((uint32)ftell(output_snd));
put_int(tags);
while (tags > 0) {
fputc(fgetc(input), output_snd);
tags--;
}
- get_string(8);
+ get_string(8, buf);
if (!strncmp(buf, "Creative", 8)) {
- get_string(18);
+ get_string(18, buf);
} else if (!strncmp(buf, "VTLK", 4)) {
- get_string(26);
+ get_string(26, buf);
} else {
exit(-1);
}
@@ -213,11 +214,11 @@
int comp;
FILE *f;
char fbuf[2048];
- char fbuf_o[4096];
- int size;
- int tot_size;
+ char *tmp;
+ size_t size;
+ uint32 tot_size;
char rawname[256];
- char mp3name[256];
+ char outname[256];
int real_samplerate;
/* Sound Data */
@@ -247,62 +248,57 @@
exit(-1);
}
sprintf(rawname, TEMP_RAW);
- sprintf(mp3name, oggmode ? TEMP_OGG : TEMP_MP3);
+ sprintf(outname, oggmode ? TEMP_OGG : TEMP_MP3);
f = fopen(rawname, "wb");
length -= 2;
while (length > 0) {
- size = fread(fbuf, 1, length > 2048 ? 2048 : length, input);
+ size = fread(fbuf, 1, length > 2048 ? 2048 : (uint32)length, input);
if (size <= 0)
break;
length -= size;
- for (i = 0; i < size; i++) {
- fbuf_o[2 * i] = fbuf[i] ^ 0x80;
- fbuf_o[2 * i + 1] = 0;
- }
- fwrite(fbuf_o, 1, 2 * size, f);
+ fwrite(fbuf, 1, size, f);
}
fclose(f);
+ tmp = fbuf;
if (oggmode) {
- sprintf(fbuf, "oggenc ");
- if (oggparms.nominalBitr != -1) {
- sprintf(fbuf_temp, "-b %i ", oggparms.nominalBitr);
- strcat(fbuf, fbuf_temp);
- }
- if (oggparms.minBitr != -1) {
- sprintf(fbuf_temp, "-m %i ", oggparms.minBitr);
- strcat(fbuf, fbuf_temp);
- }
- if (oggparms.maxBitr != -1) {
- sprintf(fbuf_temp, "-M %i ", oggparms.maxBitr);
- strcat(fbuf, fbuf_temp);
- }
- if (oggparms.silent) {
- strcat(fbuf, "--quiet ");
- }
+ tmp += sprintf(tmp, "oggenc --raw --raw-chan=1 --raw-bits=8 ");
+ if (oggparms.nominalBitr != -1)
+ tmp += sprintf(tmp, "--bitrate=%i ", oggparms.nominalBitr);
+ if (oggparms.minBitr != -1)
+ tmp += sprintf(tmp, "--min-bitrate=%i ", oggparms.minBitr);
+ if (oggparms.maxBitr != -1)
+ tmp += sprintf(tmp, "--max-bitrate=%i ", oggparms.maxBitr);
+ if (oggparms.silent)
+ tmp += sprintf(tmp, "--quiet ");
- sprintf(fbuf_temp, "-q %i -r -C 1 --raw-endianness=1 -R %i %s -o %s",
- oggparms.quality, real_samplerate,
- rawname, mp3name);
- strcat(fbuf, fbuf_temp);
+ tmp += sprintf(tmp, "--quality=%i ", oggparms.quality);
+ tmp += sprintf(tmp, "--raw-rate=%i ", real_samplerate);
+ tmp += sprintf(tmp, "--output=%s ", outname);
+ tmp += sprintf(tmp, "%s ", rawname);
+printf("Assembled command: '%s'\n", fbuf);
system(fbuf);
}
else {
+ tmp += sprintf(tmp, "lame -t -m m -r --bitwidth 8 ");
if (encparms.abr == 1)
- sprintf(fbuf_temp,"--abr %i",encparms.minBitr);
+ tmp += sprintf(tmp, "--abr %i ", encparms.minBitr);
else
- sprintf(fbuf_temp,"--vbr-new -b %i",encparms.minBitr);
+ tmp += sprintf(tmp, "--vbr-new -b %i ", encparms.minBitr);
if (encparms.silent == 1)
- strcat(fbuf_temp," --silent");
- sprintf(fbuf,
- "lame -t -q %i %s -V %i -B %i -m m -r -s %d %s %s",
- encparms.algqual, fbuf_temp, encparms.vbrqual,
- encparms.maxBitr, real_samplerate, rawname, mp3name);
+ tmp += sprintf(tmp, " --silent ");
+
+ tmp += sprintf(tmp, "-q %i ", encparms.algqual);
+ tmp += sprintf(tmp, "-V %i ", encparms.vbrqual);
+ tmp += sprintf(tmp, "-B %i ", encparms.maxBitr);
+ tmp += sprintf(tmp, "-s %d ", real_samplerate);
+ tmp += sprintf(tmp, "%s %s ", rawname, outname);
+printf("Assembled command: '%s'\n", fbuf);
system(fbuf);
}
- f = fopen(mp3name, "rb");
+ f = fopen(outname, "rb");
tot_size = 0;
while ((size = fread(fbuf, 1, 2048, f)) > 0) {
tot_size += size;
@@ -323,24 +319,24 @@
{
printf("\nUsage: %s <params> monster.sou\n", exename);
printf("\nParams:\n");
- printf("--mp3 encode to MP3 format (default)\n");
- printf("--vorbis encode to Vorbis format\n");
+ printf(" --mp3 encode to MP3 format (default)\n");
+ printf(" --vorbis encode to Vorbis format\n");
printf("(If one of these is specified, it must be the first parameter.)\n");
printf("\nMP3 mode params:\n");
- printf("-b <rate> <rate> is the target bitrate(ABR)/minimal bitrate(VBR) (default:%i)\n", minBitrDef);
- printf("-B <rate> <rate> is the maximum VBR/ABR bitrate (default:%i)\n", maxBitrDef);
- printf("--vbr LAME uses the VBR mode (default)\n");
- printf("--abr LAME uses the ABR mode\n");
- printf("-V <value> specifies the value (0 - 9) of VBR quality (0=best) (default:%i)\n", vbrqualDef);
- printf("-q <value> specifies the MPEG algorithm quality (0-9; 0=best) (default:%i)\n", algqualDef);
- printf("--silent the output of LAME is hidden (default:disabled)\n");
+ printf(" -b <rate> <rate> is the target bitrate(ABR)/minimal bitrate(VBR) (default:%i)\n", minBitrDef);
+ printf(" -B <rate> <rate> is the maximum VBR/ABR bitrate (default:%i)\n", maxBitrDef);
+ printf(" --vbr LAME uses the VBR mode (default)\n");
+ printf(" --abr LAME uses the ABR mode\n");
+ printf(" -V <value> specifies the value (0 - 9) of VBR quality (0=best) (default:%i)\n", vbrqualDef);
+ printf(" -q <value> specifies the MPEG algorithm quality (0-9; 0=best) (default:%i)\n", algqualDef);
+ printf(" --silent the output of LAME is hidden (default:disabled)\n");
printf("\nVorbis mode params:\n");
- printf("-b <rate> <rate> is the nominal bitrate (default:unset)\n");
- printf("-m <rate> <rate> is the minimum bitrate (default:unset)\n");
- printf("-M <rate> <rate> is the maximum bitrate (default:unset)\n");
- printf("-q <value> specifies the value (0 - 10) of VBR quality (10=best) (default:%i)\n", oggqualDef);
- printf("--silent the output of oggenc is hidden (default:disabled)\n");
- printf("\n--help this help message\n");
+ printf(" -b <rate> <rate> is the nominal bitrate (default:unset)\n");
+ printf(" -m <rate> <rate> is the minimum bitrate (default:unset)\n");
+ printf(" -M <rate> <rate> is the maximum bitrate (default:unset)\n");
+ printf(" -q <value> specifies the value (0 - 10) of VBR quality (10=best) (default:%i)\n", oggqualDef);
+ printf(" --silent the output of oggenc is hidden (default:disabled)\n");
+ printf("\n --help this help message\n");
printf("\n\nIf a parameter is not given the default value is used\n");
printf("If using VBR mode for MP3 -b and -B must be multiples of 8; the maximum is 160!\n");
exit(2);
@@ -437,6 +433,7 @@
int main(int argc, char *argv[])
{
+ char buf[2048];
int i;
if (argc < 2)
showhelp(argv[0]);
@@ -474,7 +471,7 @@
}
/* Get the 'SOU ....' header */
- get_string(8);
+ get_string(8, buf);
if (strncmp(buf, f_hdr, 8)) {
printf("Bad SOU\n");
exit(-1);
More information about the Scummvm-git-logs
mailing list