[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