[Scummvm-git-logs] scummvm master -> d3ab3da10414be487ef6c04c4df432c36c387945
rsn8887
noreply at scummvm.org
Sat Dec 21 18:52:09 UTC 2024
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
77bbc3bfd2 PSP: Fix PNG palette loading
a9c42d271a Revert "BUILD: On PSP use -O1 to fix crash on startup"
da305f6779 PSP: Better error handling and reporting for PNG loading
d3ab3da104 PSP: Avoid parsing the PNG headers twice
Commit: 77bbc3bfd26ab759e418cea3ea4b23a69ad7679e
https://github.com/scummvm/scummvm/commit/77bbc3bfd26ab759e418cea3ea4b23a69ad7679e
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2024-12-21T12:52:04-06:00
Commit Message:
PSP: Fix PNG palette loading
libpng never returns the palette size when the palette pointer argument
is nullptr.
If it worked before, it's because paletteSize was uninitialized and luck.
Changed paths:
backends/platform/psp/png_loader.cpp
diff --git a/backends/platform/psp/png_loader.cpp b/backends/platform/psp/png_loader.cpp
index 4cc443028bb..eba6bf43bfc 100644
--- a/backends/platform/psp/png_loader.cpp
+++ b/backends/platform/psp/png_loader.cpp
@@ -129,8 +129,10 @@ bool PngLoader::basicImageLoad() {
_channels = png_get_channels(_pngPtr, _infoPtr);
if (_colorType & PNG_COLOR_MASK_PALETTE) {
- int paletteSize;
- png_get_PLTE(_pngPtr, _infoPtr, nullptr, &paletteSize);
+ int paletteSize = 0;
+ png_colorp palettePtr = nullptr;
+ png_uint_32 ret = png_get_PLTE(_pngPtr, _infoPtr, &palettePtr, &paletteSize);
+ assert(ret == PNG_INFO_PLTE);
_paletteSize = paletteSize;
}
Commit: a9c42d271afcdb936e5de710b31183b2867b4295
https://github.com/scummvm/scummvm/commit/a9c42d271afcdb936e5de710b31183b2867b4295
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2024-12-21T12:52:04-06:00
Commit Message:
Revert "BUILD: On PSP use -O1 to fix crash on startup"
This reverts commit 0318b6b7ba863c7f5ee3a68b08d5a8251a9ce5b3.
The root cause is now fixed.
Changed paths:
configure
diff --git a/configure b/configure
index 7dfc2eaa886..b490265b5b9 100755
--- a/configure
+++ b/configure
@@ -3377,7 +3377,7 @@ EOF
add_line_to_config_h "#define PREFIX \"${prefix}\""
;;
psp)
- _optimization_level=-O1
+ _optimization_level=-O2
_freetypepath="$PSPDEV/psp/bin"
append_var CXXFLAGS "-I$PSPSDK/include"
# FIXME: Why is the following in CXXFLAGS and not in DEFINES? Change or document this.
Commit: da305f677991ae4a8d9e6d63694beef971b72465
https://github.com/scummvm/scummvm/commit/da305f677991ae4a8d9e6d63694beef971b72465
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2024-12-21T12:52:04-06:00
Commit Message:
PSP: Better error handling and reporting for PNG loading
Changed paths:
backends/platform/psp/png_loader.cpp
backends/platform/psp/png_loader.h
diff --git a/backends/platform/psp/png_loader.cpp b/backends/platform/psp/png_loader.cpp
index eba6bf43bfc..b383a7f0acb 100644
--- a/backends/platform/psp/png_loader.cpp
+++ b/backends/platform/psp/png_loader.cpp
@@ -93,6 +93,13 @@ bool PngLoader::load() {
void PngLoader::warningFn(png_structp png_ptr, png_const_charp warning_msg) {
// ignore PNG warnings
+ PSP_ERROR("Got PNG warning: %s\n", warning_msg);
+}
+
+void PngLoader::errorFn(png_structp png_ptr, png_const_charp error_msg) {
+ // ignore PNG warnings
+ PSP_ERROR("Got PNG error: %s\n", error_msg);
+ abort();
}
// Read function for png library to be able to read from our SeekableReadStream
@@ -100,7 +107,8 @@ void PngLoader::warningFn(png_structp png_ptr, png_const_charp warning_msg) {
void PngLoader::libReadFunc(png_structp pngPtr, png_bytep data, png_size_t length) {
Common::SeekableReadStream &file = *(Common::SeekableReadStream *)png_get_io_ptr(pngPtr);
- file.read(data, length);
+ uint32 ret = file.read(data, length);
+ assert(ret == length);
}
bool PngLoader::basicImageLoad() {
@@ -109,7 +117,7 @@ bool PngLoader::basicImageLoad() {
if (!_pngPtr)
return false;
- png_set_error_fn(_pngPtr, (png_voidp) nullptr, (png_error_ptr) nullptr, warningFn);
+ png_set_error_fn(_pngPtr, (png_voidp) nullptr, (png_error_ptr) errorFn, warningFn);
_infoPtr = png_create_info_struct(_pngPtr);
if (!_infoPtr) {
diff --git a/backends/platform/psp/png_loader.h b/backends/platform/psp/png_loader.h
index 7212292c318..80a18c9edcb 100644
--- a/backends/platform/psp/png_loader.h
+++ b/backends/platform/psp/png_loader.h
@@ -31,6 +31,7 @@ private:
bool loadImageIntoBuffer();
static void warningFn(png_structp png_ptr, png_const_charp warning_msg);
+ static void errorFn(png_structp png_ptr, png_const_charp warning_msg);
static void libReadFunc(png_structp pngPtr, png_bytep data, png_size_t length);
Common::SeekableReadStream &_file;
Commit: d3ab3da10414be487ef6c04c4df432c36c387945
https://github.com/scummvm/scummvm/commit/d3ab3da10414be487ef6c04c4df432c36c387945
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2024-12-21T12:52:04-06:00
Commit Message:
PSP: Avoid parsing the PNG headers twice
This avoids rewinding the stream which is always bad when loading the
PNG from a Zip archive.
Changed paths:
backends/platform/psp/png_loader.cpp
backends/platform/psp/png_loader.h
diff --git a/backends/platform/psp/png_loader.cpp b/backends/platform/psp/png_loader.cpp
index b383a7f0acb..77e9c170db2 100644
--- a/backends/platform/psp/png_loader.cpp
+++ b/backends/platform/psp/png_loader.cpp
@@ -33,6 +33,13 @@
#include "backends/platform/psp/trace.h"
+PngLoader::~PngLoader() {
+ if (!_pngPtr) {
+ return;
+ }
+ png_destroy_read_struct(&_pngPtr, &_infoPtr, nullptr);
+}
+
PngLoader::Status PngLoader::allocate() {
DEBUG_ENTER_FUNC();
@@ -76,9 +83,8 @@ PngLoader::Status PngLoader::allocate() {
bool PngLoader::load() {
DEBUG_ENTER_FUNC();
- // Try to load the image
- _file.seek(0); // Go back to start
+ // Try to really load the image
if (!loadImageIntoBuffer()) {
PSP_DEBUG_PRINT("failed to load image\n");
return false;
@@ -121,15 +127,11 @@ bool PngLoader::basicImageLoad() {
_infoPtr = png_create_info_struct(_pngPtr);
if (!_infoPtr) {
- png_destroy_read_struct(&_pngPtr, nullptr, nullptr);
return false;
}
// Set the png lib to use our read function
png_set_read_fn(_pngPtr, &_file, libReadFunc);
- unsigned int sig_read = 0;
-
- png_set_sig_bytes(_pngPtr, sig_read);
png_read_info(_pngPtr, _infoPtr);
int interlaceType;
png_get_IHDR(_pngPtr, _infoPtr, (png_uint_32 *)&_width, (png_uint_32 *)&_height, &_bitDepth,
@@ -154,7 +156,6 @@ bool PngLoader::findImageDimensions() {
bool status = basicImageLoad();
PSP_DEBUG_PRINT("width[%d], height[%d], paletteSize[%d], bitDepth[%d], channels[%d], rowBytes[%d]\n", _width, _height, _paletteSize, _bitDepth, _channels, png_get_rowbytes(_pngPtr, _infoPtr));
- png_destroy_read_struct(&_pngPtr, &_infoPtr, nullptr);
return status;
}
@@ -164,10 +165,9 @@ bool PngLoader::findImageDimensions() {
bool PngLoader::loadImageIntoBuffer() {
DEBUG_ENTER_FUNC();
- if (!basicImageLoad()) {
- png_destroy_read_struct(&_pngPtr, &_infoPtr, nullptr);
- return false;
- }
+ // Everything has already been set up in allocate
+ assert(_pngPtr);
+
png_set_strip_16(_pngPtr); // Strip off 16 bit channels in case they occur
if (_paletteSize) {
@@ -206,7 +206,6 @@ bool PngLoader::loadImageIntoBuffer() {
unsigned char *line = (unsigned char*) malloc(rowBytes);
if (!line) {
- png_destroy_read_struct(&_pngPtr, nullptr, nullptr);
PSP_ERROR("Couldn't allocate line\n");
return false;
}
@@ -217,7 +216,6 @@ bool PngLoader::loadImageIntoBuffer() {
}
free(line);
png_read_end(_pngPtr, _infoPtr);
- png_destroy_read_struct(&_pngPtr, &_infoPtr, nullptr);
return true;
}
diff --git a/backends/platform/psp/png_loader.h b/backends/platform/psp/png_loader.h
index 80a18c9edcb..975678045aa 100644
--- a/backends/platform/psp/png_loader.h
+++ b/backends/platform/psp/png_loader.h
@@ -63,6 +63,7 @@ public:
_width(0), _height(0), _paletteSize(0),
_bitDepth(0), _sizeBy(sizeBy), _pngPtr(0),
_infoPtr(0), _colorType(0), _channels(0) {}
+ ~PngLoader();
PngLoader::Status allocate();
bool load();
More information about the Scummvm-git-logs
mailing list