[Scummvm-git-logs] scummvm master -> 4ec6fc5d2f92e7cc3b48008ee70463c1344e5b8e
bluegr
noreply at scummvm.org
Sun Jul 13 17:01:34 UTC 2025
This automated email contains information about 9 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
eefb88b492 GRAPHICS: Make endian-aware Graphics::PixelFormat functions constexpr
1c7e5a75c2 IMAGE: Unify the default pixel format for YUV codecs
7192271ac0 IMAGE: Simplify mapping pixel formats to JPEG colour spaces
136e5e7168 IMAGE: Remove filler alpha channel from 24bpp PNG images
e16e0d55c7 IMAGE: Use endian-aware pixel formats for TGA images
b93a5e68dc IMAGE: Use a 24bpp pixel format for true colour PCX images
751167c988 IMAGE: Use a 24bpp pixel format for true colour PICT images
db4fb8dc9e IMAGE: Use endian-aware pixel formats for QuickTime RLE frames
4ec6fc5d2f TESTBED: Add more TGA and PNG example images
Commit: eefb88b492161c18c92e3ba61ec44231c6e234d3
https://github.com/scummvm/scummvm/commit/eefb88b492161c18c92e3ba61ec44231c6e234d3
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2025-07-13T20:01:28+03:00
Commit Message:
GRAPHICS: Make endian-aware Graphics::PixelFormat functions constexpr
Changed paths:
graphics/pixelformat.h
diff --git a/graphics/pixelformat.h b/graphics/pixelformat.h
index 6b1b12fe040..c7a213ea2cb 100644
--- a/graphics/pixelformat.h
+++ b/graphics/pixelformat.h
@@ -186,7 +186,7 @@ struct PixelFormat {
}
/** Define an endian-aware RGB24 pixel format. */
- static inline PixelFormat createFormatRGB24() {
+ static constexpr inline PixelFormat createFormatRGB24() {
#ifdef SCUMM_BIG_ENDIAN
return Graphics::PixelFormat(3, 8, 8, 8, 0, 16, 8, 0, 0);
#else
@@ -195,7 +195,7 @@ struct PixelFormat {
}
/** Define an endian-aware BGR24 pixel format. */
- static inline PixelFormat createFormatBGR24() {
+ static constexpr inline PixelFormat createFormatBGR24() {
#ifdef SCUMM_BIG_ENDIAN
return Graphics::PixelFormat(3, 8, 8, 8, 0, 0, 8, 16, 0);
#else
@@ -204,7 +204,7 @@ struct PixelFormat {
}
/** Define an endian-aware RGBA32 pixel format. */
- static inline PixelFormat createFormatRGBA32(bool alpha = true) {
+ static constexpr inline PixelFormat createFormatRGBA32(bool alpha = true) {
#ifdef SCUMM_BIG_ENDIAN
return Graphics::PixelFormat(4, 8, 8, 8, alpha ? 8 : 0, 24, 16, 8, 0);
#else
@@ -213,7 +213,7 @@ struct PixelFormat {
}
/** Define an endian-aware BGRA32 pixel format. */
- static inline PixelFormat createFormatBGRA32(bool alpha = true) {
+ static constexpr inline PixelFormat createFormatBGRA32(bool alpha = true) {
#ifdef SCUMM_BIG_ENDIAN
return Graphics::PixelFormat(4, 8, 8, 8, alpha ? 8 : 0, 8, 16, 24, 0);
#else
@@ -222,7 +222,7 @@ struct PixelFormat {
}
/** Define an endian-aware ABGR32 pixel format. */
- static inline PixelFormat createFormatABGR32(bool alpha = true) {
+ static constexpr inline PixelFormat createFormatABGR32(bool alpha = true) {
#ifdef SCUMM_BIG_ENDIAN
return Graphics::PixelFormat(4, 8, 8, 8, alpha ? 8 : 0, 0, 8, 16, 24);
#else
@@ -231,7 +231,7 @@ struct PixelFormat {
}
/** Define an endian-aware ARGB32 pixel format. */
- static inline PixelFormat createFormatARGB32(bool alpha = true) {
+ static constexpr inline PixelFormat createFormatARGB32(bool alpha = true) {
#ifdef SCUMM_BIG_ENDIAN
return Graphics::PixelFormat(4, 8, 8, 8, alpha ? 8 : 0, 16, 8, 0, 24);
#else
Commit: 1c7e5a75c2779ac0cd8523189e14f7d7b21e1105
https://github.com/scummvm/scummvm/commit/1c7e5a75c2779ac0cd8523189e14f7d7b21e1105
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2025-07-13T20:01:28+03:00
Commit Message:
IMAGE: Unify the default pixel format for YUV codecs
Changed paths:
image/codecs/cinepak.cpp
image/codecs/codec.cpp
image/codecs/codec.h
image/codecs/indeo/indeo.cpp
image/codecs/indeo3.cpp
image/codecs/indeo4.cpp
image/codecs/mjpeg.cpp
image/codecs/mpeg.cpp
image/codecs/svq1.cpp
image/codecs/xan.cpp
video/bink_decoder.cpp
video/mkv_decoder.cpp
video/mpegps_decoder.cpp
video/psx_decoder.cpp
video/theora_decoder.cpp
diff --git a/image/codecs/cinepak.cpp b/image/codecs/cinepak.cpp
index e3cf84537d9..1d429cae59c 100644
--- a/image/codecs/cinepak.cpp
+++ b/image/codecs/cinepak.cpp
@@ -289,11 +289,7 @@ CinepakDecoder::CinepakDecoder(int bitsPerPixel) : Codec(), _bitsPerPixel(bitsPe
if (bitsPerPixel == 8) {
_pixelFormat = Graphics::PixelFormat::createFormatCLUT8();
} else {
- _pixelFormat = g_system->getScreenFormat();
-
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = getDefaultYUVFormat();
}
// Create a lookup for the clip function
diff --git a/image/codecs/codec.cpp b/image/codecs/codec.cpp
index be7858183e1..cf0280edc79 100644
--- a/image/codecs/codec.cpp
+++ b/image/codecs/codec.cpp
@@ -48,10 +48,21 @@
#include "image/codecs/xan.h"
#include "common/endian.h"
+#include "common/system.h"
#include "common/textconsole.h"
namespace Image {
+Graphics::PixelFormat Codec::getDefaultYUVFormat() {
+ Graphics::PixelFormat format = g_system->getScreenFormat();
+
+ // Default to a 32bpp format, if in 8bpp mode
+ if (format.isCLUT8())
+ return Graphics::PixelFormat::createFormatRGBA32();
+ else
+ return format;
+}
+
Codec *createBitmapCodec(uint32 tag, uint32 streamTag, int width, int height, int bitsPerPixel) {
// Crusader videos are special cased here because the frame type is not in the "compression"
// tag but in the "stream handler" tag for these files
diff --git a/image/codecs/codec.h b/image/codecs/codec.h
index 50916aaebc0..dc6aed3d25e 100644
--- a/image/codecs/codec.h
+++ b/image/codecs/codec.h
@@ -122,6 +122,11 @@ public:
* Set the decoding accuracy of the codec, if supported
*/
virtual void setCodecAccuracy(CodecAccuracy accuracy) {}
+
+ /**
+ * Get the preferred default pixel format for use with YUV codecs
+ */
+ static Graphics::PixelFormat getDefaultYUVFormat();
};
/**
diff --git a/image/codecs/indeo/indeo.cpp b/image/codecs/indeo/indeo.cpp
index aa307906fa7..06c097e2106 100644
--- a/image/codecs/indeo/indeo.cpp
+++ b/image/codecs/indeo/indeo.cpp
@@ -467,11 +467,7 @@ IndeoDecoderBase::IndeoDecoderBase(uint16 width, uint16 height, uint bitsPerPixe
_width = width;
_height = height;
_bitsPerPixel = bitsPerPixel;
- _pixelFormat = g_system->getScreenFormat();
-
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = getDefaultYUVFormat();
_ctx._bRefBuf = 3; // buffer 2 is used for scalability mode
}
diff --git a/image/codecs/indeo3.cpp b/image/codecs/indeo3.cpp
index dead6b528f4..7ecda3d74cb 100644
--- a/image/codecs/indeo3.cpp
+++ b/image/codecs/indeo3.cpp
@@ -45,11 +45,7 @@ Indeo3Decoder::Indeo3Decoder(uint16 width, uint16 height, uint bitsPerPixel) : _
_width = width;
_height = height;
- _pixelFormat = g_system->getScreenFormat();
-
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = getDefaultYUVFormat();
buildModPred();
allocFrames();
diff --git a/image/codecs/indeo4.cpp b/image/codecs/indeo4.cpp
index 37d24106ab9..a79f4c7db9f 100644
--- a/image/codecs/indeo4.cpp
+++ b/image/codecs/indeo4.cpp
@@ -114,7 +114,8 @@ int Indeo4Decoder::decodePictureHeader() {
if (_ctx._hasTransp && _surface->format.aBits() == 0) {
// Surface is 4 bytes per pixel, but only RGB. So promote the
// surface to full RGBA, and convert all the existing pixels
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0);
+ // TODO: Use a mask instead?
+ _pixelFormat = Graphics::PixelFormat::createFormatRGBA32();
_surface->convertToInPlace(_pixelFormat);
}
diff --git a/image/codecs/mjpeg.cpp b/image/codecs/mjpeg.cpp
index 51d42731a15..4813828a828 100644
--- a/image/codecs/mjpeg.cpp
+++ b/image/codecs/mjpeg.cpp
@@ -39,11 +39,7 @@ class SeekableReadStream;
namespace Image {
MJPEGDecoder::MJPEGDecoder() : Codec() {
- _pixelFormat = g_system->getScreenFormat();
-
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = getDefaultYUVFormat();
_surface = 0;
_accuracy = CodecAccuracy::Default;
diff --git a/image/codecs/mpeg.cpp b/image/codecs/mpeg.cpp
index 34314be3b01..8f2de31b254 100644
--- a/image/codecs/mpeg.cpp
+++ b/image/codecs/mpeg.cpp
@@ -36,11 +36,7 @@ extern "C" {
namespace Image {
MPEGDecoder::MPEGDecoder() : Codec() {
- _pixelFormat = g_system->getScreenFormat();
-
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = getDefaultYUVFormat();
_surface = 0;
diff --git a/image/codecs/svq1.cpp b/image/codecs/svq1.cpp
index 30b4f2a4000..72b993bbe20 100644
--- a/image/codecs/svq1.cpp
+++ b/image/codecs/svq1.cpp
@@ -51,11 +51,7 @@ SVQ1Decoder::SVQ1Decoder(uint16 width, uint16 height) {
debug(1, "SVQ1Decoder::SVQ1Decoder(width:%d, height:%d)", width, height);
_width = width;
_height = height;
- _pixelFormat = g_system->getScreenFormat();
-
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = getDefaultYUVFormat();
_frameWidth = _frameHeight = 0;
_surface = 0;
diff --git a/image/codecs/xan.cpp b/image/codecs/xan.cpp
index 653fd31459e..fd5bca65a1c 100644
--- a/image/codecs/xan.cpp
+++ b/image/codecs/xan.cpp
@@ -63,11 +63,7 @@ XanDecoder::XanDecoder(int width, int height, int bitsPerPixel) : Codec(),
_ubuf = new uint8[_width * _height / 2]();
_vbuf = new uint8[_width * _height / 2]();
- _pixelFormat = g_system->getScreenFormat();
-
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = getDefaultYUVFormat();
}
XanDecoder::~XanDecoder() {
diff --git a/video/bink_decoder.cpp b/video/bink_decoder.cpp
index 2b426a4e810..ef4d1a13f2b 100644
--- a/video/bink_decoder.cpp
+++ b/video/bink_decoder.cpp
@@ -40,6 +40,8 @@
#include "graphics/yuv_to_rgb.h"
#include "graphics/surface.h"
+#include "image/codecs/codec.h"
+
#include "math/rdft.h"
#include "math/dct.h"
@@ -279,11 +281,7 @@ BinkDecoder::BinkVideoTrack::BinkVideoTrack(uint32 width, uint32 height, uint32
_surfaceWidth++;
}
- _pixelFormat = g_system->getScreenFormat();
-
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = Image::Codec::getDefaultYUVFormat();
// Compute the video dimensions in blocks
_yBlockWidth = (width + 7) >> 3;
diff --git a/video/mkv_decoder.cpp b/video/mkv_decoder.cpp
index 606ab19f182..b939dfc1eea 100644
--- a/video/mkv_decoder.cpp
+++ b/video/mkv_decoder.cpp
@@ -30,6 +30,7 @@
#include "common/util.h"
#include "graphics/pixelformat.h"
#include "graphics/yuv_to_rgb.h"
+#include "image/codecs/codec.h"
#include "video/mkv/mkvparser.h"
@@ -315,11 +316,7 @@ MKVDecoder::VPXVideoTrack::VPXVideoTrack(const mkvparser::Track *const pTrack) {
_width = pVideoTrack->GetWidth();
_height = pVideoTrack->GetHeight();
- _pixelFormat = g_system->getScreenFormat();
-
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = Image::Codec::getDefaultYUVFormat();
debugC(1, kDebugLevelGVideo, "VideoTrack: %d x %d", _width, _height);
diff --git a/video/mpegps_decoder.cpp b/video/mpegps_decoder.cpp
index 03b57d6bfbe..a0fc2a73142 100644
--- a/video/mpegps_decoder.cpp
+++ b/video/mpegps_decoder.cpp
@@ -737,9 +737,7 @@ void MPEGPSDecoder::MPEGVideoTrack::findDimensions(Common::SeekableReadStream *f
_height = firstPacket->readByte();
_width |= (_height & 0xF0) >> 4;
_height = ((_height & 0x0F) << 8) | firstPacket->readByte();
- _pixelFormat = g_system->getScreenFormat();
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = Image::Codec::getDefaultYUVFormat();
debugC(3, kDebugLevelGVideo, "MPEG dimensions: %dx%d", _width, _height);
diff --git a/video/psx_decoder.cpp b/video/psx_decoder.cpp
index bb6d2b5c519..5eb7f741da2 100644
--- a/video/psx_decoder.cpp
+++ b/video/psx_decoder.cpp
@@ -30,6 +30,7 @@
#include "common/system.h"
#include "common/textconsole.h"
#include "graphics/yuv_to_rgb.h"
+#include "image/codecs/codec.h"
#include "video/psx_decoder.h"
@@ -353,12 +354,7 @@ PSXStreamDecoder::PSXVideoTrack::PSXVideoTrack(Common::SeekableReadStream *first
firstSector->seek(40);
_width = firstSector->readUint16LE();
_height = firstSector->readUint16LE();
-
- _pixelFormat = g_system->getScreenFormat();
-
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
+ _pixelFormat = Image::Codec::getDefaultYUVFormat();
_macroBlocksW = (_width + 15) / 16;
_macroBlocksH = (_height + 15) / 16;
diff --git a/video/theora_decoder.cpp b/video/theora_decoder.cpp
index d42b483d3b5..3d40a0be435 100644
--- a/video/theora_decoder.cpp
+++ b/video/theora_decoder.cpp
@@ -43,6 +43,7 @@
#include "common/util.h"
#include "graphics/pixelformat.h"
#include "graphics/yuv_to_rgb.h"
+#include "image/codecs/codec.h"
namespace Video {
@@ -272,13 +273,9 @@ TheoraDecoder::TheoraVideoTrack::TheoraVideoTrack(th_info &theoraInfo, th_setup_
_surfaceWidth = theoraInfo.frame_width;
_surfaceHeight = theoraInfo.frame_height;
- _pixelFormat = g_system->getScreenFormat();
+ _pixelFormat = Image::Codec::getDefaultYUVFormat();
_theoraPixelFormat = theoraInfo.pixel_fmt;
- // Default to a 32bpp format, if in 8bpp mode
- if (_pixelFormat.bytesPerPixel == 1)
- _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0);
-
// Set the frame rate
_frameRate = Common::Rational(theoraInfo.fps_numerator, theoraInfo.fps_denominator);
Commit: 7192271ac06b475f662813d1727b0ddc983450a7
https://github.com/scummvm/scummvm/commit/7192271ac06b475f662813d1727b0ddc983450a7
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2025-07-13T20:01:28+03:00
Commit Message:
IMAGE: Simplify mapping pixel formats to JPEG colour spaces
Changed paths:
image/jpeg.cpp
diff --git a/image/jpeg.cpp b/image/jpeg.cpp
index 4122dc03ec4..eaf4f4f9c60 100644
--- a/image/jpeg.cpp
+++ b/image/jpeg.cpp
@@ -190,37 +190,32 @@ J_COLOR_SPACE fromScummvmPixelFormat(const Graphics::PixelFormat &format) {
#if defined(JCS_EXTENSIONS) || defined(JCS_ALPHA_EXTENSIONS)
struct PixelFormatMapping {
Graphics::PixelFormat pixelFormat;
- J_COLOR_SPACE bigEndianColorSpace;
- J_COLOR_SPACE littleEndianColorSpace;
+ J_COLOR_SPACE colorSpace;
};
static const PixelFormatMapping mappings[] = {
-#ifdef JCS_EXTENSIONS
- { Graphics::PixelFormat(4, 8, 8, 8, 0, 24, 16, 8, 0), JCS_EXT_RGBX, JCS_EXT_XBGR },
- { Graphics::PixelFormat(4, 8, 8, 8, 0, 0, 8, 16, 24), JCS_EXT_XBGR, JCS_EXT_RGBX },
- { Graphics::PixelFormat(4, 8, 8, 8, 0, 16, 8, 0, 24), JCS_EXT_XRGB, JCS_EXT_BGRX },
- { Graphics::PixelFormat(4, 8, 8, 8, 0, 8, 16, 24, 0), JCS_EXT_BGRX, JCS_EXT_XRGB },
- { Graphics::PixelFormat(3, 8, 8, 8, 0, 16, 8, 0, 0), JCS_EXT_RGB, JCS_EXT_BGR },
- { Graphics::PixelFormat(3, 8, 8, 8, 0, 0, 8, 16, 0), JCS_EXT_BGR, JCS_EXT_RGB }
+#ifdef JCS_ALPHA_EXTENSIONS
+ { Graphics::PixelFormat::createFormatRGBA32(true), JCS_EXT_RGBA },
+ { Graphics::PixelFormat::createFormatBGRA32(true), JCS_EXT_BGRA },
+ { Graphics::PixelFormat::createFormatARGB32(true), JCS_EXT_ARGB },
+ { Graphics::PixelFormat::createFormatABGR32(true), JCS_EXT_ABGR }
#endif
#if defined(JCS_EXTENSIONS) && defined(JCS_ALPHA_EXTENSIONS)
,
#endif
-#ifdef JCS_ALPHA_EXTENSIONS
- { Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0), JCS_EXT_RGBA, JCS_EXT_ABGR },
- { Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24), JCS_EXT_ABGR, JCS_EXT_RGBA },
- { Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24), JCS_EXT_ARGB, JCS_EXT_BGRA },
- { Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0), JCS_EXT_BGRA, JCS_EXT_ARGB }
+#ifdef JCS_EXTENSIONS
+ { Graphics::PixelFormat::createFormatRGB24(), JCS_EXT_RGB },
+ { Graphics::PixelFormat::createFormatBGR24(), JCS_EXT_BGR },
+ { Graphics::PixelFormat::createFormatRGBA32(false), JCS_EXT_RGBX },
+ { Graphics::PixelFormat::createFormatBGRA32(false), JCS_EXT_BGRX },
+ { Graphics::PixelFormat::createFormatARGB32(false), JCS_EXT_XRGB },
+ { Graphics::PixelFormat::createFormatABGR32(false), JCS_EXT_XBGR }
#endif
};
for (uint i = 0; i < ARRAYSIZE(mappings); i++) {
if (mappings[i].pixelFormat == format) {
-#ifdef SCUMM_BIG_ENDIAN
- return mappings[i].bigEndianColorSpace;
-#else
- return mappings[i].littleEndianColorSpace;
-#endif
+ return mappings[i].colorSpace;
}
}
#endif
Commit: 136e5e7168fd517fdd9b74d5ed05af5df4a7213d
https://github.com/scummvm/scummvm/commit/136e5e7168fd517fdd9b74d5ed05af5df4a7213d
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2025-07-13T20:01:28+03:00
Commit Message:
IMAGE: Remove filler alpha channel from 24bpp PNG images
Changed paths:
image/png.cpp
diff --git a/image/png.cpp b/image/png.cpp
index a48afbf763b..2e4b0e88a32 100644
--- a/image/png.cpp
+++ b/image/png.cpp
@@ -63,7 +63,10 @@ void PNGDecoder::destroy() {
}
Graphics::PixelFormat PNGDecoder::getByteOrderRgbaPixelFormat(bool isAlpha) const {
- return Graphics::PixelFormat::createFormatRGBA32(isAlpha);
+ if (isAlpha)
+ return Graphics::PixelFormat::createFormatRGBA32();
+ else
+ return Graphics::PixelFormat::createFormatRGB24();
}
#ifdef USE_PNG
@@ -228,9 +231,6 @@ bool PNGDecoder::loadStream(Common::SeekableReadStream &stream) {
if (colorType == PNG_COLOR_TYPE_GRAY ||
colorType == PNG_COLOR_TYPE_GRAY_ALPHA)
png_set_gray_to_rgb(pngPtr);
-
- if (colorType != PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_filler(pngPtr, 0xff, PNG_FILLER_AFTER);
}
// After the transformations have been registered, the image data is read again.
Commit: e16e0d55c72a77c3e44a3ce579bab03355ce0662
https://github.com/scummvm/scummvm/commit/e16e0d55c72a77c3e44a3ce579bab03355ce0662
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2025-07-13T20:01:28+03:00
Commit Message:
IMAGE: Use endian-aware pixel formats for TGA images
Changed paths:
image/tga.cpp
diff --git a/image/tga.cpp b/image/tga.cpp
index 9331de790b1..e48b12cba25 100644
--- a/image/tga.cpp
+++ b/image/tga.cpp
@@ -145,12 +145,12 @@ bool TGADecoder::readHeader(Common::SeekableReadStream &tga, byte &imageType, by
}
} else if (imageType == TYPE_TRUECOLOR || imageType == TYPE_RLE_TRUECOLOR) {
if (pixelDepth == 24) {
- _format = Graphics::PixelFormat(3, 8, 8, 8, 0, 16, 8, 0, 0);
+ _format = Graphics::PixelFormat::createFormatBGR24();
} else if (pixelDepth == 32) {
// HACK: According to the spec, attributeBits should determine the amount
// of alpha-bits, however, as the game files that use this decoder seems
// to ignore that fact, we force the amount to 8 for 32bpp files for now.
- _format = Graphics::PixelFormat(4, 8, 8, 8, /* attributeBits */ 8, 16, 8, 0, 24);
+ _format = Graphics::PixelFormat::createFormatBGRA32(/* attributeBits */);
} else if (pixelDepth == 16) {
// 16bpp TGA is ARGB1555
_format = Graphics::PixelFormat(2, 5, 5, 5, attributeBits, 10, 5, 0, 15);
@@ -160,7 +160,7 @@ bool TGADecoder::readHeader(Common::SeekableReadStream &tga, byte &imageType, by
}
} else if (imageType == TYPE_BW || imageType == TYPE_RLE_BW) {
if (pixelDepth == 8) {
- _format = Graphics::PixelFormat(4, 8, 8, 8, 0, 16, 8, 0, 0);
+ _format = Graphics::PixelFormat::createFormatBGR24();
} else {
warning("Unsupported pixel depth: %d, %d", imageType, pixelDepth);
return false;
@@ -194,10 +194,9 @@ bool TGADecoder::readColorMap(Common::SeekableReadStream &tga, byte imageType, b
g = tga.readByte();
r = tga.readByte();
} else if (_colorMapEntryLength == 16) {
- byte a;
- static const Graphics::PixelFormat format(2, 5, 5, 5, 0, 10, 5, 0, 15);
+ static const Graphics::PixelFormat format(2, 5, 5, 5, 0, 10, 5, 0, 0);
uint16 color = tga.readUint16LE();
- format.colorToARGB(color, a, r, g, b);
+ format.colorToRGB(color, r, g, b);
} else {
warning("Unsupported image type: %d", imageType);
r = g = b = 0;
@@ -234,9 +233,7 @@ bool TGADecoder::readData(Common::SeekableReadStream &tga, byte imageType, byte
} else {
dst = (uint32 *)_surface.getBasePtr(0, i);
}
- for (int j = 0; j < _surface.w; j++) {
- *dst++ = tga.readUint32LE();
- }
+ tga.read(dst, _surface.w * 4);
}
} else if (pixelDepth == 24) {
for (int i = 0; i < _surface.h; i++) {
@@ -246,20 +243,7 @@ bool TGADecoder::readData(Common::SeekableReadStream &tga, byte imageType, byte
} else {
dst = (byte *)_surface.getBasePtr(0, i);
}
- for (int j = 0; j < _surface.w; j++) {
- byte r = tga.readByte();
- byte g = tga.readByte();
- byte b = tga.readByte();
-#ifdef SCUMM_LITTLE_ENDIAN
- *dst++ = r;
- *dst++ = g;
- *dst++ = b;
-#else
- *dst++ = b;
- *dst++ = g;
- *dst++ = r;
-#endif
- }
+ tga.read(dst, _surface.w * 3);
}
}
// Black/White
@@ -274,7 +258,6 @@ bool TGADecoder::readData(Common::SeekableReadStream &tga, byte imageType, byte
*data++ = g;
*data++ = g;
*data++ = g;
- *data++ = g;
}
}
return true;
@@ -292,10 +275,7 @@ bool TGADecoder::readDataColorMapped(Common::SeekableReadStream &tga, byte image
} else {
dst = (byte *)_surface.getBasePtr(0, i);
}
- for (int j = 0; j < _surface.w; j++) {
- byte index = tga.readByte();
- *dst++ = index;
- }
+ tga.read(dst, _surface.w);
}
} else if (indexDepth == 16) {
warning("16 bit indexes not supported");
@@ -322,26 +302,25 @@ bool TGADecoder::readDataRLE(Common::SeekableReadStream &tga, byte imageType, by
// RLE-packet
if (type == 1) {
if (pixelDepth == 32 && imageType == TYPE_RLE_TRUECOLOR) {
- uint32 color = tga.readUint32LE();
+ byte b = tga.readByte();
+ byte g = tga.readByte();
+ byte r = tga.readByte();
+ byte a = tga.readByte();
while (rleCount-- > 0) {
- *((uint32 *)data) = color;
- data += 4;
+ *data++ = b;
+ *data++ = g;
+ *data++ = r;
+ *data++ = a;
count--;
}
} else if (pixelDepth == 24 && imageType == TYPE_RLE_TRUECOLOR) {
- byte r = tga.readByte();
- byte g = tga.readByte();
byte b = tga.readByte();
+ byte g = tga.readByte();
+ byte r = tga.readByte();
while (rleCount-- > 0) {
-#ifdef SCUMM_LITTLE_ENDIAN
- *data++ = r;
- *data++ = g;
- *data++ = b;
-#else
*data++ = b;
*data++ = g;
*data++ = r;
-#endif
count--;
}
} else if (pixelDepth == 16 && imageType == TYPE_RLE_TRUECOLOR) {
@@ -357,7 +336,6 @@ bool TGADecoder::readDataRLE(Common::SeekableReadStream &tga, byte imageType, by
*data++ = color;
*data++ = color;
*data++ = color;
- *data++ = color;
count--;
}
} else if (pixelDepth == 8 && imageType == TYPE_RLE_CMAP) {
@@ -373,28 +351,13 @@ bool TGADecoder::readDataRLE(Common::SeekableReadStream &tga, byte imageType, by
// Raw-packet
} else if (type == 0) {
if (pixelDepth == 32 && imageType == TYPE_RLE_TRUECOLOR) {
- while (rleCount-- > 0) {
- uint32 color = tga.readUint32LE();
- *((uint32 *)data) = color;
- data += 4;
- count--;
- }
+ tga.read(data, rleCount * 4);
+ data += rleCount * 4;
+ count -= rleCount;
} else if (pixelDepth == 24 && imageType == TYPE_RLE_TRUECOLOR) {
- while (rleCount-- > 0) {
- byte r = tga.readByte();
- byte g = tga.readByte();
- byte b = tga.readByte();
-#ifdef SCUMM_LITTLE_ENDIAN
- *data++ = r;
- *data++ = g;
- *data++ = b;
-#else
- *data++ = b;
- *data++ = g;
- *data++ = r;
-#endif
- count--;
- }
+ tga.read(data, rleCount * 3);
+ data += rleCount * 3;
+ count -= rleCount;
} else if (pixelDepth == 16 && imageType == TYPE_RLE_TRUECOLOR) {
while (rleCount-- > 0) {
*((uint16 *)data) = tga.readUint16LE();
@@ -407,15 +370,12 @@ bool TGADecoder::readDataRLE(Common::SeekableReadStream &tga, byte imageType, by
*data++ = color;
*data++ = color;
*data++ = color;
- *data++ = color;
count--;
}
} else if (pixelDepth == 8 && imageType == TYPE_RLE_CMAP) {
- while (rleCount-- > 0) {
- byte index = tga.readByte();
- *data++ = index;
- count--;
- }
+ tga.read(data, rleCount);
+ data += rleCount;
+ count -= rleCount;
} else {
warning("Unhandled pixel-depth for image-type 10");
return false;
Commit: b93a5e68dc1120d4a5288a9e7454560d7847ebe3
https://github.com/scummvm/scummvm/commit/b93a5e68dc1120d4a5288a9e7454560d7847ebe3
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2025-07-13T20:01:28+03:00
Commit Message:
IMAGE: Use a 24bpp pixel format for true colour PCX images
Changed paths:
image/pcx.cpp
diff --git a/image/pcx.cpp b/image/pcx.cpp
index 7d466715a63..7bd5eda07e1 100644
--- a/image/pcx.cpp
+++ b/image/pcx.cpp
@@ -111,8 +111,7 @@ bool PCXDecoder::loadStream(Common::SeekableReadStream &stream) {
int x, y;
if (nPlanes == 3 && bitsPerPixel == 8) { // 24bpp
- Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0);
- _surface->create(width, height, format);
+ _surface->create(width, height, Graphics::PixelFormat::createFormatRGB24());
dst = (byte *)_surface->getPixels();
_palette.clear();
@@ -120,13 +119,9 @@ bool PCXDecoder::loadStream(Common::SeekableReadStream &stream) {
decodeRLE(stream, scanLine, bytesPerscanLine, compressed);
for (x = 0; x < width; x++) {
- byte r = scanLine[x];
- byte g = scanLine[x + bytesPerLine];
- byte b = scanLine[x + (bytesPerLine << 1)];
- uint32 color = format.RGBToColor(r, g, b);
-
- *((uint32 *)dst) = color;
- dst += format.bytesPerPixel;
+ *dst++ = scanLine[x];
+ *dst++ = scanLine[x + bytesPerLine];
+ *dst++ = scanLine[x + (bytesPerLine << 1)];
}
}
} else if (nPlanes == 1 && bitsPerPixel == 8) { // 8bpp indexed
Commit: 751167c98851a33cfc409f42d9132f7ebbde3442
https://github.com/scummvm/scummvm/commit/751167c98851a33cfc409f42d9132f7ebbde3442
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2025-07-13T20:01:28+03:00
Commit Message:
IMAGE: Use a 24bpp pixel format for true colour PICT images
Changed paths:
image/pict.cpp
diff --git a/image/pict.cpp b/image/pict.cpp
index 63890564ca3..078c30a4576 100644
--- a/image/pict.cpp
+++ b/image/pict.cpp
@@ -517,13 +517,13 @@ void PICTDecoder::unpackBitsRect(Common::SeekableReadStream &stream, bool withPa
break;
case 3:
// We have a planar 24-bit surface
- _outputSurface->create(width, height, Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0));
+ _outputSurface->create(width, height, Graphics::PixelFormat::createFormatRGB24());
for (uint16 y = 0; y < _outputSurface->h; y++) {
+ byte *dst = (byte *)_outputSurface->getBasePtr(0, y);
for (uint16 x = 0; x < _outputSurface->w; x++) {
- byte r = *(buffer + y * _outputSurface->w * 3 + x);
- byte g = *(buffer + y * _outputSurface->w * 3 + _outputSurface->w + x);
- byte b = *(buffer + y * _outputSurface->w * 3 + _outputSurface->w * 2 + x);
- *((uint32 *)_outputSurface->getBasePtr(x, y)) = _outputSurface->format.RGBToColor(r, g, b);
+ *dst++ = *(buffer + y * _outputSurface->w * 3 + _outputSurface->w * 0 + x);
+ *dst++ = *(buffer + y * _outputSurface->w * 3 + _outputSurface->w * 1 + x);
+ *dst++ = *(buffer + y * _outputSurface->w * 3 + _outputSurface->w * 2 + x);
}
}
break;
@@ -532,14 +532,14 @@ void PICTDecoder::unpackBitsRect(Common::SeekableReadStream &stream, bool withPa
// Note that we ignore the alpha channel since it seems to not be correct
// macOS does not ignore it, but then displays it incorrectly. Photoshop
// does ignore it and displays it correctly.
- _outputSurface->create(width, height, Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0));
+ _outputSurface->create(width, height, Graphics::PixelFormat::createFormatRGB24());
for (uint16 y = 0; y < _outputSurface->h; y++) {
+ byte *dst = (byte *)_outputSurface->getBasePtr(0, y);
for (uint16 x = 0; x < _outputSurface->w; x++) {
- byte a = 0xFF;
- byte r = *(buffer + y * _outputSurface->w * 4 + _outputSurface->w + x);
- byte g = *(buffer + y * _outputSurface->w * 4 + _outputSurface->w * 2 + x);
- byte b = *(buffer + y * _outputSurface->w * 4 + _outputSurface->w * 3 + x);
- *((uint32 *)_outputSurface->getBasePtr(x, y)) = _outputSurface->format.ARGBToColor(a, r, g, b);
+ // *dst++ = *(buffer + y * _outputSurface->w * 4 + _outputSurface->w * 0 + x);
+ *dst++ = *(buffer + y * _outputSurface->w * 4 + _outputSurface->w * 1 + x);
+ *dst++ = *(buffer + y * _outputSurface->w * 4 + _outputSurface->w * 2 + x);
+ *dst++ = *(buffer + y * _outputSurface->w * 4 + _outputSurface->w * 3 + x);
}
}
break;
Commit: db4fb8dc9e9ba5f73709ddc1ca22c0bfc1795ec5
https://github.com/scummvm/scummvm/commit/db4fb8dc9e9ba5f73709ddc1ca22c0bfc1795ec5
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2025-07-13T20:01:28+03:00
Commit Message:
IMAGE: Use endian-aware pixel formats for QuickTime RLE frames
Changed paths:
image/codecs/qtrle.cpp
diff --git a/image/codecs/qtrle.cpp b/image/codecs/qtrle.cpp
index c780bcb7021..3da9d78aa19 100644
--- a/image/codecs/qtrle.cpp
+++ b/image/codecs/qtrle.cpp
@@ -325,7 +325,7 @@ void QTRLEDecoder::dither16(Common::SeekableReadStream &stream, uint32 rowPtr, u
void QTRLEDecoder::decode24(Common::SeekableReadStream &stream, uint32 rowPtr, uint32 linesToChange) {
uint32 pixelPtr = 0;
- uint32 *rgb = (uint32 *)_surface->getPixels();
+ uint8 *rgb = (uint8 *)_surface->getPixels();
while (linesToChange--) {
CHECK_STREAM_PTR(2);
@@ -345,23 +345,22 @@ void QTRLEDecoder::decode24(Common::SeekableReadStream &stream, uint32 rowPtr, u
byte r = stream.readByte();
byte g = stream.readByte();
byte b = stream.readByte();
- uint32 color = _surface->format.RGBToColor(r, g, b);
CHECK_PIXEL_PTR(rleCode);
- while (rleCode--)
- rgb[pixelPtr++] = color;
+ while (rleCode--) {
+ rgb[(pixelPtr * 3) + 0] = r;
+ rgb[(pixelPtr * 3) + 1] = g;
+ rgb[(pixelPtr * 3) + 2] = b;
+ pixelPtr++;
+ }
} else {
CHECK_STREAM_PTR(rleCode * 3);
CHECK_PIXEL_PTR(rleCode);
// copy pixels directly to output
- while (rleCode--) {
- byte r = stream.readByte();
- byte g = stream.readByte();
- byte b = stream.readByte();
- rgb[pixelPtr++] = _surface->format.RGBToColor(r, g, b);
- }
+ stream.read(&rgb[pixelPtr * 3], rleCode * 3);
+ pixelPtr += rleCode;
}
}
@@ -439,7 +438,7 @@ void QTRLEDecoder::dither24(Common::SeekableReadStream &stream, uint32 rowPtr, u
void QTRLEDecoder::decode32(Common::SeekableReadStream &stream, uint32 rowPtr, uint32 linesToChange) {
uint32 pixelPtr = 0;
- uint32 *rgb = (uint32 *)_surface->getPixels();
+ uint8 *rgb = (uint8 *)_surface->getPixels();
while (linesToChange--) {
CHECK_STREAM_PTR(2);
@@ -460,24 +459,23 @@ void QTRLEDecoder::decode32(Common::SeekableReadStream &stream, uint32 rowPtr, u
byte r = stream.readByte();
byte g = stream.readByte();
byte b = stream.readByte();
- uint32 color = _surface->format.ARGBToColor(a, r, g, b);
CHECK_PIXEL_PTR(rleCode);
- while (rleCode--)
- rgb[pixelPtr++] = color;
+ while (rleCode--) {
+ rgb[(pixelPtr * 4) + 0] = a;
+ rgb[(pixelPtr * 4) + 1] = r;
+ rgb[(pixelPtr * 4) + 2] = g;
+ rgb[(pixelPtr * 4) + 3] = b;
+ pixelPtr++;
+ }
} else {
CHECK_STREAM_PTR(rleCode * 4);
CHECK_PIXEL_PTR(rleCode);
// copy pixels directly to output
- while (rleCode--) {
- byte a = stream.readByte();
- byte r = stream.readByte();
- byte g = stream.readByte();
- byte b = stream.readByte();
- rgb[pixelPtr++] = _surface->format.ARGBToColor(a, r, g, b);
- }
+ stream.read(&rgb[pixelPtr * 4], rleCode * 4);
+ pixelPtr += rleCode;
}
}
@@ -642,8 +640,9 @@ Graphics::PixelFormat QTRLEDecoder::getPixelFormat() const {
case 16:
return Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0);
case 24:
+ return Graphics::PixelFormat::createFormatRGB24();
case 32:
- return Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24);
+ return Graphics::PixelFormat::createFormatARGB32();
default:
error("Unsupported QTRLE bits per pixel %d", _bitsPerPixel);
}
Commit: 4ec6fc5d2f92e7cc3b48008ee70463c1344e5b8e
https://github.com/scummvm/scummvm/commit/4ec6fc5d2f92e7cc3b48008ee70463c1344e5b8e
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2025-07-13T20:01:28+03:00
Commit Message:
TESTBED: Add more TGA and PNG example images
Changed paths:
A dists/engine-data/testbed-audiocd-files/image/pm5544-24bpp-rle.tga
A dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey-rle.tga
A dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey.png
A dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey.tga
A dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-rle.tga
dists/engine-data/testbed-audiocd-files/image/image-gen.sh
engines/testbed/image.cpp
diff --git a/dists/engine-data/testbed-audiocd-files/image/image-gen.sh b/dists/engine-data/testbed-audiocd-files/image/image-gen.sh
old mode 100644
new mode 100755
index da098a86cba..9b72f92f07e
--- a/dists/engine-data/testbed-audiocd-files/image/image-gen.sh
+++ b/dists/engine-data/testbed-audiocd-files/image/image-gen.sh
@@ -13,11 +13,16 @@ magick $1 -depth 24 -type TrueColor $base-24bpp.pcx
magick $1 -depth 24 -type TrueColor $base-24bpp.pict
magick $1 -depth 24 -type TrueColor $base-24bpp.png
magick $1 -depth 24 -type TrueColor $base-24bpp.tga
+magick $1 -depth 24 -type TrueColor -compress RLE $base-24bpp-rle.tga
magick $1 -depth 8 -type Palette $base-8bpp.bmp
magick $1 -depth 8 -type Palette $base-8bpp.gif
magick $1 -depth 8 -type Palette $base-8bpp.pcx
magick $1 -depth 8 -type Palette $base-8bpp.pict
magick $1 -depth 8 -type Palette $base-8bpp.png
magick $1 -depth 8 -type Palette $base-8bpp.tga
-magick $1 -depth 1 -type Palette $base-1bpp.xbm
+magick $1 -depth 8 -type Palette -compress RLE $base-8bpp-rle.tga
+magick $1 -depth 8 -type Grayscale $base-8bpp-grey.png
+magick $1 -depth 8 -type Grayscale $base-8bpp-grey.tga
+magick $1 -depth 8 -type Grayscale -compress RLE $base-8bpp-grey-rle.tga
+magick $1 -depth 1 -type Grayscale $base-1bpp.xbm
diff --git a/dists/engine-data/testbed-audiocd-files/image/pm5544-24bpp-rle.tga b/dists/engine-data/testbed-audiocd-files/image/pm5544-24bpp-rle.tga
new file mode 100644
index 00000000000..a3383491f07
Binary files /dev/null and b/dists/engine-data/testbed-audiocd-files/image/pm5544-24bpp-rle.tga differ
diff --git a/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey-rle.tga b/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey-rle.tga
new file mode 100644
index 00000000000..ec0c6dd0d7d
Binary files /dev/null and b/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey-rle.tga differ
diff --git a/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey.png b/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey.png
new file mode 100644
index 00000000000..e08b9de7201
Binary files /dev/null and b/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey.png differ
diff --git a/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey.tga b/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey.tga
new file mode 100644
index 00000000000..c24a2cddd4d
Binary files /dev/null and b/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-grey.tga differ
diff --git a/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-rle.tga b/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-rle.tga
new file mode 100644
index 00000000000..57701d3530d
Binary files /dev/null and b/dists/engine-data/testbed-audiocd-files/image/pm5544-8bpp-rle.tga differ
diff --git a/engines/testbed/image.cpp b/engines/testbed/image.cpp
index 7a56e0afdfd..848f10bbd6c 100644
--- a/engines/testbed/image.cpp
+++ b/engines/testbed/image.cpp
@@ -248,6 +248,12 @@ TestExitStatus ImageTests::testPNGDecoder() {
return kTestFailed;
}
+ filepath = "image/pm5544-8bpp-grey.png";
+ decoder.reset(new Image::PNGDecoder());
+ if (!testImageDecoder(filepath, *decoder)) {
+ return kTestFailed;
+ }
+
Testsuite::logDetailedPrintf("PNG decoder is OK\n");
return kTestPassed;
}
@@ -267,12 +273,36 @@ TestExitStatus ImageTests::testTGADecoder() {
return kTestFailed;
}
+ filepath = "image/pm5544-24bpp-rle.tga";
+ decoder.reset(new Image::TGADecoder());
+ if (!testImageDecoder(filepath, *decoder)) {
+ return kTestFailed;
+ }
+
filepath = "image/pm5544-8bpp.tga";
decoder.reset(new Image::TGADecoder());
if (!testImageDecoder(filepath, *decoder)) {
return kTestFailed;
}
+ filepath = "image/pm5544-8bpp-rle.tga";
+ decoder.reset(new Image::TGADecoder());
+ if (!testImageDecoder(filepath, *decoder)) {
+ return kTestFailed;
+ }
+
+ filepath = "image/pm5544-8bpp-grey.tga";
+ decoder.reset(new Image::TGADecoder());
+ if (!testImageDecoder(filepath, *decoder)) {
+ return kTestFailed;
+ }
+
+ filepath = "image/pm5544-8bpp-grey-rle.tga";
+ decoder.reset(new Image::TGADecoder());
+ if (!testImageDecoder(filepath, *decoder)) {
+ return kTestFailed;
+ }
+
Testsuite::logDetailedPrintf("TGA decoder is OK\n");
return kTestPassed;
}
More information about the Scummvm-git-logs
mailing list