From 8c121ae1d30d29cfd2eeb6cde41fb01ad0043d65 Mon Sep 17 00:00:00 2001 From: Wolfvak Date: Fri, 30 Mar 2018 11:47:32 -0300 Subject: [PATCH] Faster PNG compression, enabled separate data and function sections. --- Makefile | 2 +- arm9/source/common/screenshot.c | 22 +++++++++++----------- arm9/source/lodepng/lodepng.c | 14 +++++++++----- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 44e2a08..150adbb 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ export ASFLAGS := -g -x assembler-with-cpp $(INCLUDE) export CFLAGS := -DDBUILTS="\"$(DBUILTS)\"" -DDBUILTL="\"$(DBUILTL)\"" -DVERSION="\"$(VERSION)\"" -DFLAVOR="\"$(FLAVOR)\"" \ -g -O2 -Wall -Wextra -Wpedantic -Wcast-align -Wno-main \ -fomit-frame-pointer -ffast-math -std=gnu11 \ - -Wno-unused-function $(INCLUDE) + -Wno-unused-function $(INCLUDE) -ffunction-sections -fdata-sections export LDFLAGS := -Tlink.ld -nostartfiles -Wl,--gc-sections,-z,max-page-size=512 ELF := arm9/arm9.elf arm11/arm11.elf diff --git a/arm9/source/common/screenshot.c b/arm9/source/common/screenshot.c index 6838639..b5393d3 100644 --- a/arm9/source/common/screenshot.c +++ b/arm9/source/common/screenshot.c @@ -12,7 +12,7 @@ void CreateScreenshot() { char filename[64]; DsTime dstime; - + fvx_rmkdir(OUTPUT_PATH); get_dstime(&dstime); snprintf(filename, 64, OUTPUT_PATH "/snap_%02X%02X%02X%02X%02X%02X.png", @@ -45,18 +45,18 @@ void CreateScreenshot() { png_data = PNG_Compress(buffer, snap_width, snap_height, &png_size); - if (png_data && png_size) + if (png_data && png_size) { fvx_qwrite(filename, png_data, 0, png_size, NULL); - else - ShowPrompt(false, "Failed to write screenshot!"); - // "snap effect" - memcpy(buffer_b, BOT_SCREEN, SCREEN_SIZE_BOT); - memcpy(buffer_t, TOP_SCREEN, SCREEN_SIZE_TOP); - memset(BOT_SCREEN, 0, SCREEN_SIZE_BOT); - memset(TOP_SCREEN, 0, SCREEN_SIZE_TOP); - memcpy(BOT_SCREEN, buffer_b, SCREEN_SIZE_BOT); - memcpy(TOP_SCREEN, buffer_t, SCREEN_SIZE_TOP); + // "snap effect" + memcpy(buffer_b, BOT_SCREEN, SCREEN_SIZE_BOT); + memcpy(buffer_t, TOP_SCREEN, SCREEN_SIZE_TOP); + memset(BOT_SCREEN, 0, SCREEN_SIZE_BOT); + memset(TOP_SCREEN, 0, SCREEN_SIZE_TOP); + memcpy(BOT_SCREEN, buffer_b, SCREEN_SIZE_BOT); + memcpy(TOP_SCREEN, buffer_t, SCREEN_SIZE_TOP); + } + // what to do on error...? free(buffer); if (png_data) free(png_data); diff --git a/arm9/source/lodepng/lodepng.c b/arm9/source/lodepng/lodepng.c index 1854b4f..598354a 100644 --- a/arm9/source/lodepng/lodepng.c +++ b/arm9/source/lodepng/lodepng.c @@ -23,6 +23,10 @@ freely, subject to the following restrictions: distribution. */ +/** + Modified version by Wolfvak for github.com/d0k3/GodMode9 (changed encoder default settings) +*/ + /* The manual and changelog are in the header file "lodepng.h" Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C. @@ -2268,7 +2272,7 @@ static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsign #ifdef LODEPNG_COMPILE_ENCODER /*this is a good tradeoff between speed and compression ratio*/ -#define DEFAULT_WINDOWSIZE 2048 +#define DEFAULT_WINDOWSIZE 64 void lodepng_compress_settings_init(LodePNGCompressSettings* settings) { @@ -2276,16 +2280,16 @@ void lodepng_compress_settings_init(LodePNGCompressSettings* settings) settings->btype = 2; settings->use_lz77 = 1; settings->windowsize = DEFAULT_WINDOWSIZE; - settings->minmatch = 3; - settings->nicematch = 128; - settings->lazymatching = 1; + settings->minmatch = 6; + settings->nicematch = 32; + settings->lazymatching = 0; settings->custom_zlib = 0; settings->custom_deflate = 0; settings->custom_context = 0; } -const LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0}; +const LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 6, 32, 0, 0, 0, 0}; #endif /*LODEPNG_COMPILE_ENCODER*/