[Scummvm-git-logs] scummvm-tools master -> c233e99658176abd9d195c19884de36401f2fb86
sev-
noreply at scummvm.org
Mon May 18 15:53:58 UTC 2026
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm-tools' repo located at https://api.github.com/repos/scummvm/scummvm-tools .
Summary:
7fa0ecd7d7 TOOLS: Allow selecting the compression type in encode_dxa
c233e99658 TOOLS: Restore support for DXA compression type 3
Commit: 7fa0ecd7d72f81d081f36816f93009ff954130bc
https://github.com/scummvm/scummvm-tools/commit/7fa0ecd7d72f81d081f36816f93009ff954130bc
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2026-05-18T17:53:54+02:00
Commit Message:
TOOLS: Allow selecting the compression type in encode_dxa
Changed paths:
encode_dxa.cpp
encode_dxa.h
diff --git a/encode_dxa.cpp b/encode_dxa.cpp
index f3e4bfcf..6a10a90e 100644
--- a/encode_dxa.cpp
+++ b/encode_dxa.cpp
@@ -51,6 +51,7 @@ private:
int _width, _height, _framerate, _framecount, _workheight;
uint8 *_prevframe, *_prevpalette;
ScaleMode _scaleMode;
+ byte _compType;
byte *_codeBuf, *_dataBuf, *_motBuf, *_maskBuf;
void grabBlock(byte *frame, int x, int y, int blockw, int blockh, byte *block);
@@ -62,14 +63,14 @@ private:
uLong m13encode(byte *frame, byte *outbuf);
public:
- DxaEncoder(Tool &tool, Common::Filename filename, int width, int height, int framerate, ScaleMode scaleMode);
+ DxaEncoder(Tool &tool, Common::Filename filename, int width, int height, int framerate, ScaleMode scaleMode, byte compType);
~DxaEncoder();
void writeHeader();
void writeNULL();
void writeFrame(uint8 *frame, uint8 *palette);
};
-DxaEncoder::DxaEncoder(Tool &tool, Common::Filename filename, int width, int height, int framerate, ScaleMode scaleMode) {
+DxaEncoder::DxaEncoder(Tool &tool, Common::Filename filename, int width, int height, int framerate, ScaleMode scaleMode, byte compType) {
_dxa.open(filename, "wb");
_width = width;
_height = height;
@@ -79,6 +80,7 @@ DxaEncoder::DxaEncoder(Tool &tool, Common::Filename filename, int width, int hei
_prevpalette = new uint8[768];
_scaleMode = scaleMode;
_workheight = _scaleMode == S_NONE ? _height : _height / 2;
+ _compType = compType;
_codeBuf = new byte[_width * _height / 16];
_dataBuf = new byte[_width * _height];
@@ -145,7 +147,7 @@ void DxaEncoder::writeFrame(byte *frame, byte *palette) {
if (_framecount == 0)
compType = 2;
else
- compType = 13;
+ compType = _compType;
switch (compType) {
@@ -536,7 +538,7 @@ uLong DxaEncoder::m13encode(byte *frame, byte *outbuf) {
return outb - outbuf;
}
-EncodeDXA::EncodeDXA(const std::string &name) : CompressionTool(name, TOOLTYPE_COMPRESSION) {
+EncodeDXA::EncodeDXA(const std::string &name) : CompressionTool(name, TOOLTYPE_COMPRESSION), _compType(13) {
ToolInput input;
input.format = "*.*";
@@ -548,6 +550,16 @@ EncodeDXA::EncodeDXA(const std::string &name) : CompressionTool(name, TOOLTYPE_C
"Output will be two files, one with .dxa extension and the other depending on the used audio codec.";
}
+void EncodeDXA::parseExtraArguments() {
+ if (!_arguments.empty()) {
+ if (_arguments.front() == "-c") {
+ _arguments.pop_front();
+ _compType = atoi(_arguments.front().c_str());
+ _arguments.pop_front();
+ }
+ }
+}
+
void EncodeDXA::execute() {
int width, height, framerate, frames;
ScaleMode scaleMode;
@@ -570,12 +582,12 @@ void EncodeDXA::execute() {
// read some data from the Bink or Smacker file.
readVideoInfo(&inpath, width, height, framerate, frames, scaleMode);
- print("Width = %d, Height = %d, Framerate = %d, Frames = %d",
- width, height, framerate, frames);
+ print("Width = %d, Height = %d, Framerate = %d, Frames = %d, Compression type = %d",
+ width, height, framerate, frames, _compType);
// create the encoder object
outpath.setExtension(".dxa");
- DxaEncoder dxe(*this, outpath, width, height, framerate, scaleMode);
+ DxaEncoder dxe(*this, outpath, width, height, framerate, scaleMode, _compType);
// No sound block
dxe.writeNULL();
diff --git a/encode_dxa.h b/encode_dxa.h
index 41955487..ae8dd25c 100644
--- a/encode_dxa.h
+++ b/encode_dxa.h
@@ -35,10 +35,12 @@ class EncodeDXA : public CompressionTool {
public:
EncodeDXA(const std::string &name = "encode_dxa");
+ virtual void parseExtraArguments();
virtual void execute();
protected:
+ byte _compType;
void convertWAV(const Common::Filename *inpath, const Common::Filename* outpath);
void readVideoInfo(Common::Filename *filename, int &width, int &height, int &framerate, int &frames, ScaleMode &scaleMode);
Commit: c233e99658176abd9d195c19884de36401f2fb86
https://github.com/scummvm/scummvm-tools/commit/c233e99658176abd9d195c19884de36401f2fb86
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2026-05-18T17:53:54+02:00
Commit Message:
TOOLS: Restore support for DXA compression type 3
Changed paths:
encode_dxa.cpp
diff --git a/encode_dxa.cpp b/encode_dxa.cpp
index 6a10a90e..e0ed2bb9 100644
--- a/encode_dxa.cpp
+++ b/encode_dxa.cpp
@@ -162,7 +162,42 @@ void DxaEncoder::writeFrame(byte *frame, byte *palette) {
delete[] outbuf;
break;
}
+ case 3:
+ {
+ uLong outsize;
+ uLong outsize1 = _width * _workheight;
+ uLong outsize2 = outsize1;
+ byte *outbuf;
+ byte *outbuf1 = new byte[outsize1];
+ byte *outbuf2 = new byte[outsize2];
+ byte *xorbuf = new byte[_width * _workheight];
+
+ for (int i = 0; i < _width * _workheight; i++)
+ xorbuf[i] = _prevframe[i] ^ frame[i];
+ compress2(outbuf1, &outsize1, xorbuf, _width * _workheight, 9);
+ compress2(outbuf2, &outsize2, frame, _width * _workheight, 9);
+
+ if (outsize1 < outsize2) {
+ compType = 3;
+ outsize = outsize1;
+ outbuf = outbuf1;
+ } else {
+ compType = 2;
+ outsize = outsize2;
+ outbuf = outbuf2;
+ }
+
+ _dxa.writeByte(compType);
+ _dxa.writeUint32BE(outsize);
+ _dxa.write(outbuf, outsize);
+
+ delete[] outbuf1;
+ delete[] outbuf2;
+ delete[] xorbuf;
+
+ break;
+ }
case 13:
{
int r;
More information about the Scummvm-git-logs
mailing list