#endif
} while (!Config.quitting);
- // Deinitialization
+ // Prepare for pause
S9xAudioOutputEnable(false);
S9xDeinitInputDevices();
- S9xDeinitAudioOutput();
- S9xDeinitDisplay();
// Save state
Memory.SaveSRAM(S9xGetFilename(FILE_SRAM));
pauseGame();
- // Late deinitialization
+ // Deinitialization
+ S9xDeinitAudioOutput();
+ S9xDeinitDisplay();
S9xGraphicsDeinit();
Memory.Deinit();
S9xUnloadConfig();
png_size_t new_size = p->size + length;
if (!p->buffer) {
- p->buffer = (png_bytep) malloc(p->buf_size);
p->buf_size = new_size + 256;
- p->size = new_size;
+ p->size = 0;
+ p->buffer = (png_bytep) malloc(p->buf_size);
if (!p->buffer) {
png_error(png_ptr, "Out of memory");
return;
}
png_write_row(png_ptr, row_data);
}
- delete row_data;
+ delete [] row_data;
png_write_end(png_ptr, info_ptr);
}
-void * S9xScreenshot(size_t *size, bool compression)
+void * S9xScreenshot(size_t *size)
{
ScreenshotPriv priv = { 0 };
}
png_set_write_fn(png_ptr, &priv, write_data, flush_data);
- png_set_compression_level(png_ptr, Z_NO_COMPRESSION);
+ png_set_compression_level(png_ptr, Z_BEST_SPEED);
write_png(png_ptr, info_ptr);
#ifndef SCREENSHOT_H
#define SCREENSHOT_H
-void * S9xScreenshot(size_t *size, bool compression);
+void * S9xScreenshot(size_t *size);
bool S9xSaveScreenshot(const char * file);
#endif
#endif
#include "srtc.h"
#include "sdd1.h"
+#include "screenshot.h"
#define dprintf(...) /* disabled */
static void Freeze ();
static int Unfreeze ();
-static void FreezeSnapshot (const char *name);
static void FreezeStruct (const char *name, void *base, FreezeData *fields,
int num_fields);
static void FreezeBlock (const char *name, uint8 *block, int size);
if (Settings.SuperFX)
S9xSuperFXPostSaveState ();
#endif
+#ifdef CONF_PNG
+ /* Save a PNG screenshot for convenience. */
+ size_t png_size;
+ uint8 *png = (uint8*) S9xScreenshot(&png_size);
+ if (png) {
+ FreezeBlock("PNG", png, png_size);
+ free(png);
+ }
+#endif
}
static int Unfreeze()
FreezeBlock (name, block, len);
- delete block;
+ delete[] block;
}
void FreezeBlock (const char *name, uint8 *block, int size)
if ((result = UnfreezeBlock (name, block, len)) != SUCCESS)
{
- free(block);
+ delete[] block;
return (result);
}
}
}
- delete block;
+ delete[] block;
return (result);
}
if (rem)
{
- char *junk = (char*)malloc(rem);
+ char *junk = new char [rem];
READ_STREAM(junk, rem, ss_st);
- free(junk);
+ delete[] junk;
}
return SUCCESS;