[Scummvm-cvs-logs] SF.net SVN: scummvm: [24587] tools/trunk

kirben at users.sourceforge.net kirben at users.sourceforge.net
Thu Nov 2 11:54:54 CET 2006


Revision: 24587
          http://svn.sourceforge.net/scummvm/?rev=24587&view=rev
Author:   kirben
Date:     2006-11-02 02:54:48 -0800 (Thu, 02 Nov 2006)

Log Message:
-----------
Add support for conversion of Bink video files.  Use full filename of video file, since file extension is different in several HE games

Modified Paths:
--------------
    tools/trunk/README
    tools/trunk/encode_dxa.cpp

Modified: tools/trunk/README
===================================================================
--- tools/trunk/README	2006-11-02 10:01:32 UTC (rev 24586)
+++ tools/trunk/README	2006-11-02 10:54:48 UTC (rev 24587)
@@ -123,7 +123,7 @@
                 Basic script disassembler for Legend of Kyrandia games
 
 Encoder Tools:
-        encode_dxa <prefix>
+        encode_dxa <filename>
 
                 Creates DXA file out of extracted Smacker video.
 

Modified: tools/trunk/encode_dxa.cpp
===================================================================
--- tools/trunk/encode_dxa.cpp	2006-11-02 10:01:32 UTC (rev 24586)
+++ tools/trunk/encode_dxa.cpp	2006-11-02 10:54:48 UTC (rev 24587)
@@ -469,32 +469,46 @@
 	return 0;
 }
 
-void readSmackerInfo(char *filename, int &width, int &height, int &framerate, int &frames) {
+void readVideoInfo(char *filename, int &width, int &height, int &framerate, int &frames) {
 	FILE *smk = fopen(filename, "rb");
 	if (!smk) {
-		printf("readSmackerInfo: Can't open file: %s\n", filename);
+		printf("readVideoInfo: Can't open file: %s\n", filename);
 		exit(-1);
 	}
 
-	uint32 flags;
+	char buf[4];
+	fread(buf, 1, 4, smk);
+	if (!memcmp(buf, "BIK", 3)) {
+		// Skip file size
+		readUint32LE(smk);
 
-	// Skip the signature. We could use it to verify that it's a SMK file,
-	// but if it wasn't, how did we ever extract the PNG frames from it?
+		frames = readUint32LE(smk);
 
-	readUint32LE(smk);
+		// Skip unknown
+		readUint32LE(smk);
+		readUint32LE(smk);
 
-	width = readUint32LE(smk);
-	height = readUint32LE(smk);
-	frames = readUint32LE(smk);
-	framerate = readUint32LE(smk);
-	flags = readUint32LE(smk);
+		width = readUint32LE(smk);
+		height = readUint32LE(smk);
+		framerate = readUint32LE(smk);
+	} else if (!memcmp(buf, "SMK2", 4)) {
+		uint32 flags;
 
-	// If the Y-interlaced or Y-doubled flag is set, the RAD Video Tools
-	// will have scaled the frames to twice their original height.
+		width = readUint32LE(smk);
+		height = readUint32LE(smk);
+		frames = readUint32LE(smk);
+		framerate = readUint32LE(smk);
+		flags = readUint32LE(smk);
 
-	if ((flags & 0x02) || (flags & 0x04))
-		height *= 2;
+		// If the Y-interlaced or Y-doubled flag is set, the RAD Video Tools
+		// will have scaled the frames to twice their original height.
 
+		if ((flags & 0x02) || (flags & 0x04))
+			height *= 2;
+	} else {
+		error("readVideoInfo: Unknown type");
+	}
+
 	fclose(smk);
 }
 
@@ -594,8 +608,24 @@
 	}
 
 	i = argc - 1;
-	char *prefix = argv[i++];
 
+	// get filename prefix
+	char prefix[256];
+	char *filename = argv[i++];
+
+	char *p = strrchr(filename, '/');
+	if (!p) {
+		p = strrchr(filename, '\\');
+		if (!p) {
+			p = filename - 1;
+		}
+	}
+	strcpy(prefix, p + 1);
+	p = strrchr(prefix, '.');
+	if (p) {
+		*p = '\0';
+	}
+
 	// check if the wav file exists.
 	sprintf(strbuf, "%s.wav", prefix);
 	struct stat statinfo;
@@ -603,9 +633,8 @@
 		convertWAV(strbuf, prefix);
 	}
 
-	// read some data from the Smacker file.
-	sprintf(strbuf, "%s.smk", prefix);
-	readSmackerInfo(strbuf, width, height, framerate, frames);
+	// read some data from the Bink or Smacker file.
+	readVideoInfo(filename, width, height, framerate, frames);
 
 	printf("Width = %d, Height = %d, Framerate = %d, Frames = %d\n",
 		   width, height, framerate, frames);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list