mirror of https://github.com/mgba-emu/mgba.git
GBA: Better memory handling with PNG savestates
This commit is contained in:
parent
34fd6769e6
commit
a8192f47e2
1
CHANGES
1
CHANGES
|
@ -14,6 +14,7 @@ Misc:
|
||||||
- ARM7: Combine shifter-immediate and shifter-register functions to reduce binary size
|
- ARM7: Combine shifter-immediate and shifter-register functions to reduce binary size
|
||||||
- SDL: Support fullscreen in SDL 1.2
|
- SDL: Support fullscreen in SDL 1.2
|
||||||
- GBA: Attempting to save a screenshot-style savestate should be allowed without libpng
|
- GBA: Attempting to save a screenshot-style savestate should be allowed without libpng
|
||||||
|
- GBA: Better memory handling with PNG savestates
|
||||||
|
|
||||||
0.3.0: (2015-08-16)
|
0.3.0: (2015-08-16)
|
||||||
Features:
|
Features:
|
||||||
|
|
|
@ -234,12 +234,14 @@ static int _loadPNGChunkHandler(png_structp png, png_unknown_chunkp chunk) {
|
||||||
if (strcmp((const char*) chunk->name, "gbAs") != 0) {
|
if (strcmp((const char*) chunk->name, "gbAs") != 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
struct GBASerializedState state;
|
struct GBASerializedState* state = malloc(sizeof(*state));
|
||||||
uLongf len = sizeof(state);
|
uLongf len = sizeof(*state);
|
||||||
uncompress((Bytef*) &state, &len, chunk->data, chunk->size);
|
uncompress((Bytef*) state, &len, chunk->data, chunk->size);
|
||||||
if (!GBADeserialize(png_get_user_chunk_ptr(png), &state)) {
|
if (!GBADeserialize(png_get_user_chunk_ptr(png), state)) {
|
||||||
|
free(state);
|
||||||
longjmp(png_jmpbuf(png), 1);
|
longjmp(png_jmpbuf(png), 1);
|
||||||
}
|
}
|
||||||
|
free(state);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,6 +254,10 @@ static bool _loadPNGState(struct GBA* gba, struct VFile* vf) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
uint32_t* pixels = malloc(VIDEO_HORIZONTAL_PIXELS * VIDEO_VERTICAL_PIXELS * 4);
|
uint32_t* pixels = malloc(VIDEO_HORIZONTAL_PIXELS * VIDEO_VERTICAL_PIXELS * 4);
|
||||||
|
if (!pixels) {
|
||||||
|
PNGReadClose(png, info, end);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
PNGInstallChunkHandler(png, gba, _loadPNGChunkHandler, "gbAs");
|
PNGInstallChunkHandler(png, gba, _loadPNGChunkHandler, "gbAs");
|
||||||
bool success = PNGReadHeader(png, info);
|
bool success = PNGReadHeader(png, info);
|
||||||
|
|
Loading…
Reference in New Issue