diff -Naur libpng-1.5.7/config.sub libpng-1.5.7-psp/config.sub --- libpng-1.5.7/config.sub 2011-11-24 13:08:12.000000000 -0500 +++ libpng-1.5.7-psp/config.sub 2014-06-12 01:37:16.021014609 -0400 @@ -250,6 +250,7 @@ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ + | mipsallegrex | mipsallegrexel \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ @@ -322,6 +323,7 @@ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ + | mipsallegrex-* | mipsallegrexel-* \ | msp430-* \ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ @@ -817,6 +819,10 @@ ps2) basic_machine=i386-ibm ;; + psp) + basic_machine=mipsallegrexel-psp + os=-elf + ;; pw32) basic_machine=i586-unknown os=-pw32 diff -Naur libpng-1.5.7/Makefile libpng-1.5.7-psp/Makefile --- libpng-1.5.7/Makefile 1969-12-31 19:00:00.000000000 -0500 +++ libpng-1.5.7-psp/Makefile 2014-06-12 01:36:16.585015775 -0400 @@ -0,0 +1,17 @@ +PSPSDK=$(shell psp-config --pspsdk-path) +PSPDIR=$(shell psp-config --psp-prefix) +TARGET_LIB = libpng.a +OBJS = png.o pngerror.o pngget.o pngmem.o pngpread.o pngread.o pngrio.o \ + pngrtran.o pngrutil.o pngset.o pngtrans.o pngwio.o pngwrite.o pngwtran.o\ + pngwutil.o + +CFLAGS = -O2 -G0 + +include $(PSPSDK)/lib/build.mak + +install: $(TARGET_LIB) + @echo "Installing libpng into $(PSPDIR)" + @mkdir -p $(PSPDIR)/include $(PSPDIR)/lib + @cp png.h pngconf.h pnglibconf.h $(PSPDIR)/include + @cp libpng.a $(PSPDIR)/lib + @echo "Done" diff -Naur libpng-1.5.7/pnglibconf.h libpng-1.5.7-psp/pnglibconf.h --- libpng-1.5.7/pnglibconf.h 1969-12-31 19:00:00.000000000 -0500 +++ libpng-1.5.7-psp/pnglibconf.h 2014-06-12 01:36:16.585015775 -0400 @@ -0,0 +1,189 @@ + +/* libpng STANDARD API DEFINITION */ + +/* pnglibconf.h - library build configuration */ + +/* Libpng 1.5.7 - December 15, 2011 */ + +/* Copyright (c) 1998-2011 Glenn Randers-Pehrson */ + +/* This code is released under the libpng license. */ +/* For conditions of distribution and use, see the disclaimer */ +/* and license in png.h */ + +/* pnglibconf.h */ +/* Derived from: scripts/pnglibconf.dfa */ +/* If you edit this file by hand you must obey the rules expressed in */ +/* pnglibconf.dfa with respect to the dependencies between the following */ +/* symbols. It is much better to generate a new file using */ +/* scripts/libpngconf.mak */ + +#ifndef PNGLCONF_H +#define PNGLCONF_H +/* settings */ +#define PNG_API_RULE 0 +#define PNG_CALLOC_SUPPORTED +#define PNG_COST_SHIFT 3 +#define PNG_DEFAULT_READ_MACROS 1 +#define PNG_GAMMA_THRESHOLD_FIXED 5000 +#define PNG_MAX_GAMMA_8 11 +#define PNG_QUANTIZE_BLUE_BITS 5 +#define PNG_QUANTIZE_GREEN_BITS 5 +#define PNG_QUANTIZE_RED_BITS 5 +#define PNG_sCAL_PRECISION 5 +#define PNG_USER_CHUNK_CACHE_MAX 0 +#define PNG_USER_CHUNK_MALLOC_MAX 0 +#define PNG_USER_HEIGHT_MAX 1000000 +#define PNG_USER_WIDTH_MAX 1000000 +#define PNG_WEIGHT_SHIFT 8 +#define PNG_ZBUF_SIZE 8192 +/* end of settings */ +/* options */ +#define PNG_16BIT_SUPPORTED +#define PNG_ALIGN_MEMORY_SUPPORTED +#define PNG_BENIGN_ERRORS_SUPPORTED +#define PNG_bKGD_SUPPORTED +#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED +#define PNG_CHECK_cHRM_SUPPORTED +#define PNG_cHRM_SUPPORTED +#define PNG_CONSOLE_IO_SUPPORTED +#define PNG_CONVERT_tIME_SUPPORTED +#define PNG_EASY_ACCESS_SUPPORTED +/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/ +#define PNG_ERROR_TEXT_SUPPORTED +#define PNG_FIXED_POINT_SUPPORTED +//#define PNG_FLOATING_ARITHMETIC_SUPPORTED +//#define PNG_FLOATING_POINT_SUPPORTED +#define PNG_FORMAT_AFIRST_SUPPORTED +#define PNG_FORMAT_BGR_SUPPORTED +#define PNG_gAMA_SUPPORTED +#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +#define PNG_hIST_SUPPORTED +#define PNG_iCCP_SUPPORTED +#define PNG_INCH_CONVERSIONS_SUPPORTED +#define PNG_INFO_IMAGE_SUPPORTED +#define PNG_IO_STATE_SUPPORTED +#define PNG_iTXt_SUPPORTED +#define PNG_MNG_FEATURES_SUPPORTED +#define PNG_oFFs_SUPPORTED +#define PNG_pCAL_SUPPORTED +#define PNG_pHYs_SUPPORTED +#define PNG_POINTER_INDEXING_SUPPORTED +#define PNG_PROGRESSIVE_READ_SUPPORTED +#define PNG_READ_16BIT_SUPPORTED +#define PNG_READ_ALPHA_MODE_SUPPORTED +#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED +#define PNG_READ_BACKGROUND_SUPPORTED +#define PNG_READ_BGR_SUPPORTED +#define PNG_READ_bKGD_SUPPORTED +#define PNG_READ_cHRM_SUPPORTED +#define PNG_READ_COMPOSITE_NODIV_SUPPORTED +#define PNG_READ_COMPRESSED_TEXT_SUPPORTED +#define PNG_READ_EXPAND_16_SUPPORTED +#define PNG_READ_EXPAND_SUPPORTED +#define PNG_READ_FILLER_SUPPORTED +#define PNG_READ_gAMA_SUPPORTED +#define PNG_READ_GAMMA_SUPPORTED +#define PNG_READ_GRAY_TO_RGB_SUPPORTED +#define PNG_READ_hIST_SUPPORTED +#define PNG_READ_iCCP_SUPPORTED +#define PNG_READ_INTERLACING_SUPPORTED +#define PNG_READ_INT_FUNCTIONS_SUPPORTED +#define PNG_READ_INVERT_ALPHA_SUPPORTED +#define PNG_READ_INVERT_SUPPORTED +#define PNG_READ_iTXt_SUPPORTED +#define PNG_READ_oFFs_SUPPORTED +#define PNG_READ_OPT_PLTE_SUPPORTED +#define PNG_READ_PACK_SUPPORTED +#define PNG_READ_PACKSWAP_SUPPORTED +#define PNG_READ_pCAL_SUPPORTED +#define PNG_READ_pHYs_SUPPORTED +#define PNG_READ_QUANTIZE_SUPPORTED +#define PNG_READ_RGB_TO_GRAY_SUPPORTED +#define PNG_READ_sBIT_SUPPORTED +#define PNG_READ_SCALE_16_TO_8_SUPPORTED +#define PNG_READ_sCAL_SUPPORTED +#define PNG_READ_SHIFT_SUPPORTED +#define PNG_READ_sPLT_SUPPORTED +#define PNG_READ_sRGB_SUPPORTED +#define PNG_READ_STRIP_16_TO_8_SUPPORTED +#define PNG_READ_STRIP_ALPHA_SUPPORTED +#define PNG_READ_SUPPORTED +#define PNG_READ_SWAP_ALPHA_SUPPORTED +#define PNG_READ_SWAP_SUPPORTED +#define PNG_READ_tEXt_SUPPORTED +#define PNG_READ_TEXT_SUPPORTED +#define PNG_READ_tIME_SUPPORTED +#define PNG_READ_TRANSFORMS_SUPPORTED +#define PNG_READ_tRNS_SUPPORTED +#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_READ_USER_CHUNKS_SUPPORTED +#define PNG_READ_USER_TRANSFORM_SUPPORTED +#define PNG_READ_zTXt_SUPPORTED +#define PNG_SAVE_INT_32_SUPPORTED +#define PNG_sBIT_SUPPORTED +#define PNG_sCAL_SUPPORTED +#define PNG_SEQUENTIAL_READ_SUPPORTED +#define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED +#define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED +#define PNG_SETJMP_SUPPORTED +#define PNG_SET_USER_LIMITS_SUPPORTED +#define PNG_sPLT_SUPPORTED +#define PNG_sRGB_SUPPORTED +#define PNG_STDIO_SUPPORTED +#define PNG_tEXt_SUPPORTED +#define PNG_TEXT_SUPPORTED +#define PNG_TIME_RFC1123_SUPPORTED +#define PNG_tIME_SUPPORTED +#define PNG_tRNS_SUPPORTED +#define PNG_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_USER_CHUNKS_SUPPORTED +#define PNG_USER_LIMITS_SUPPORTED +#define PNG_USER_MEM_SUPPORTED +#define PNG_USER_TRANSFORM_INFO_SUPPORTED +#define PNG_USER_TRANSFORM_PTR_SUPPORTED +#define PNG_WARNINGS_SUPPORTED +#define PNG_WRITE_16BIT_SUPPORTED +#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED +#define PNG_WRITE_BGR_SUPPORTED +#define PNG_WRITE_bKGD_SUPPORTED +#define PNG_WRITE_cHRM_SUPPORTED +#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED +#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED +#define PNG_WRITE_FILLER_SUPPORTED +#define PNG_WRITE_FILTER_SUPPORTED +#define PNG_WRITE_FLUSH_SUPPORTED +#define PNG_WRITE_gAMA_SUPPORTED +#define PNG_WRITE_hIST_SUPPORTED +#define PNG_WRITE_iCCP_SUPPORTED +#define PNG_WRITE_INTERLACING_SUPPORTED +#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED +#define PNG_WRITE_INVERT_ALPHA_SUPPORTED +#define PNG_WRITE_INVERT_SUPPORTED +#define PNG_WRITE_iTXt_SUPPORTED +#define PNG_WRITE_oFFs_SUPPORTED +#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED +#define PNG_WRITE_PACK_SUPPORTED +#define PNG_WRITE_PACKSWAP_SUPPORTED +#define PNG_WRITE_pCAL_SUPPORTED +#define PNG_WRITE_pHYs_SUPPORTED +#define PNG_WRITE_sBIT_SUPPORTED +#define PNG_WRITE_sCAL_SUPPORTED +#define PNG_WRITE_SHIFT_SUPPORTED +#define PNG_WRITE_sPLT_SUPPORTED +#define PNG_WRITE_sRGB_SUPPORTED +#define PNG_WRITE_SUPPORTED +#define PNG_WRITE_SWAP_ALPHA_SUPPORTED +#define PNG_WRITE_SWAP_SUPPORTED +#define PNG_WRITE_tEXt_SUPPORTED +#define PNG_WRITE_TEXT_SUPPORTED +#define PNG_WRITE_tIME_SUPPORTED +#define PNG_WRITE_TRANSFORMS_SUPPORTED +#define PNG_WRITE_tRNS_SUPPORTED +#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_WRITE_USER_TRANSFORM_SUPPORTED +#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED +#define PNG_WRITE_zTXt_SUPPORTED +#define PNG_zTXt_SUPPORTED +/* end of options */ +#endif /* PNGLCONF_H */ diff -Naur libpng-1.5.7/README.PSP libpng-1.5.7-psp/README.PSP --- libpng-1.5.7/README.PSP 1969-12-31 19:00:00.000000000 -0500 +++ libpng-1.5.7-psp/README.PSP 2014-06-12 01:36:16.585015775 -0400 @@ -0,0 +1,11 @@ +Requirements: + + zlib + +To install, run: + + make + make install + +See the "screenshot" directory for an example how to make a screenshot and how +to load a PNG image to screen. diff -Naur libpng-1.5.7/screenshot/main.c libpng-1.5.7-psp/screenshot/main.c --- libpng-1.5.7/screenshot/main.c 1969-12-31 19:00:00.000000000 -0500 +++ libpng-1.5.7-psp/screenshot/main.c 2014-06-12 01:36:16.589015775 -0400 @@ -0,0 +1,245 @@ +/* + * PSP Software Development Kit - http://www.pspdev.org + * ----------------------------------------------------------------------- + * Licensed under the BSD license, see LICENSE in PSPSDK root for details. + * + * main.c - Screenshot and load image sample for PSP. + * + * Copyright (c) 2005 Frank Buss (aka Shine) + */ +#include +#include +#include +#include +#include +#include + +/* Define the module info section */ +PSP_MODULE_INFO("SCREENSHOT", 0, 1, 1); + +/* Define the main thread's attribute value (optional) */ +PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU); + +void fillLine(u32* vram32, int bufferwidth, int y0, u8 r, u8 g, u8 b) +{ + // assume PSP_DISPLAY_PIXEL_FORMAT_8888 + int x, y; + for (x = 0; x < 255; x++) { + u32 color = r * x / 256; + color |= (g * x / 256) << 8; + color |= (b * x / 256) << 16; + for (y = 0; y < 8; y++) vram32[x + 100 + (y + y0) * bufferwidth] = color; + } +} + +#define SCREEN_WIDTH 480 +#define SCREEN_HEIGHT 272 + +/* Save current visible screen as PNG */ +void screenshot(const char* filename) +{ + u32* vram32; + u16* vram16; + int bufferwidth; + int pixelformat; + int i, x, y; + png_structp png_ptr; + png_infop info_ptr; + FILE* fp; + u8* line; + + fp = fopen(filename, "wb"); + if (!fp) return; + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png_ptr) return; + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + fclose(fp); + return; + } + png_init_io(png_ptr, fp); + png_set_IHDR(png_ptr, info_ptr, SCREEN_WIDTH, SCREEN_HEIGHT, + 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + png_write_info(png_ptr, info_ptr); + line = (u8*) malloc(SCREEN_WIDTH * 3); + sceDisplayWaitVblankStart(); // if framebuf was set with PSP_DISPLAY_SETBUF_NEXTFRAME, wait until it is changed + sceDisplayGetFrameBuf((void**)&vram32, &bufferwidth, &pixelformat, 0); + vram16 = (u16*) vram32; + for (y = 0; y < SCREEN_HEIGHT; y++) { + for (i = 0, x = 0; x < SCREEN_WIDTH; x++) { + u32 color = 0; + u8 r = 0, g = 0, b = 0; + switch (pixelformat) { + case PSP_DISPLAY_PIXEL_FORMAT_565: + color = vram16[x + y * bufferwidth]; + r = (color & 0x1f) << 3; + g = ((color >> 5) & 0x3f) << 2 ; + b = ((color >> 11) & 0x1f) << 3 ; + break; + case PSP_DISPLAY_PIXEL_FORMAT_5551: + color = vram16[x + y * bufferwidth]; + r = (color & 0x1f) << 3; + g = ((color >> 5) & 0x1f) << 3 ; + b = ((color >> 10) & 0x1f) << 3 ; + break; + case PSP_DISPLAY_PIXEL_FORMAT_4444: + color = vram16[x + y * bufferwidth]; + r = (color & 0xf) << 4; + g = ((color >> 4) & 0xf) << 4 ; + b = ((color >> 8) & 0xf) << 4 ; + break; + case PSP_DISPLAY_PIXEL_FORMAT_8888: + color = vram32[x + y * bufferwidth]; + r = color & 0xff; + g = (color >> 8) & 0xff; + b = (color >> 16) & 0xff; + break; + } + line[i++] = r; + line[i++] = g; + line[i++] = b; + } + png_write_row(png_ptr, line); + } + free(line); + png_write_end(png_ptr, info_ptr); + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + fclose(fp); +} + +void user_warning_fn(png_structp png_ptr, png_const_charp warning_msg) +{ + // ignore PNG warnings +} + +/* Load an image and show it to screen */ +void showImage(const char* filename) +{ + u32* vram32; + u16* vram16; + int bufferwidth; + int pixelformat; + png_structp png_ptr; + png_infop info_ptr; + unsigned int sig_read = 0; + png_uint_32 width, height; + int bit_depth, color_type, interlace_type, x, y; + u32* line; + FILE *fp; + + if ((fp = fopen(filename, "rb")) == NULL) return; + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (png_ptr == NULL) { + fclose(fp); + return; + } + png_set_error_fn(png_ptr, (png_voidp) NULL, (png_error_ptr) NULL, user_warning_fn); + info_ptr = png_create_info_struct(png_ptr); + if (info_ptr == NULL) { + fclose(fp); + png_destroy_read_struct(&png_ptr, NULL, NULL); + return; + } + png_init_io(png_ptr, fp); + png_set_sig_bytes(png_ptr, sig_read); + png_read_info(png_ptr, info_ptr); + png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); + png_set_strip_16(png_ptr); + png_set_packing(png_ptr); + if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr); + //if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_gray_1_2_4_to_8(png_ptr); + if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr); + png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER); + line = (u32*) malloc(width * 4); + if (!line) { + fclose(fp); + png_destroy_read_struct(&png_ptr, NULL, NULL); + return; + } + sceDisplayWaitVblankStart(); // if framebuf was set with PSP_DISPLAY_SETBUF_NEXTFRAME, wait until it is changed + sceDisplayGetFrameBuf((void**)&vram32, &bufferwidth, &pixelformat, 0); + vram16 = (u16*) vram32; + for (y = 0; y < height; y++) { + png_read_row(png_ptr, (u8*) line, NULL); + for (x = 0; x < width; x++) { + u32 color32 = line[x]; + u16 color16; + int r = color32 & 0xff; + int g = (color32 >> 8) & 0xff; + int b = (color32 >> 16) & 0xff; + switch (pixelformat) { + case PSP_DISPLAY_PIXEL_FORMAT_565: + color16 = (r >> 3) | ((g >> 2) << 5) | ((b >> 3) << 11); + vram16[x + y * bufferwidth] = color16; + break; + case PSP_DISPLAY_PIXEL_FORMAT_5551: + color16 = (r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10); + vram16[x + y * bufferwidth] = color16; + break; + case PSP_DISPLAY_PIXEL_FORMAT_4444: + color16 = (r >> 4) | ((g >> 4) << 4) | ((b >> 4) << 8); + vram16[x + y * bufferwidth] = color16; + break; + case PSP_DISPLAY_PIXEL_FORMAT_8888: + color32 = r | (g << 8) | (b << 16); + vram32[x + y * bufferwidth] = color32; + break; + } + } + } + free(line); + png_read_end(png_ptr, info_ptr); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + fclose(fp); +} + +void waitOneSecond() +{ + int x; + for (x = 0; x < 60; x++) sceDisplayWaitVblankStart(); +} + +int main(void) +{ + u16* vram16; + u32* vram32; + int bufferwidth; + int unusedPixelformat; + + pspDebugScreenInit(); + + /* show some test output */ + pspDebugScreenPrintf("red\n\ngreen\n\nblue\n\nwhite"); + sceDisplayWaitVblankStart(); // if framebuf was set with PSP_DISPLAY_SETBUF_NEXTFRAME, wait until it is changed + sceDisplayGetFrameBuf((void**)&vram32, &bufferwidth, &unusedPixelformat, 0); + vram16 = (u16*) vram32; + fillLine(vram32, bufferwidth, 0, 255, 0, 0); + fillLine(vram32, bufferwidth, 16, 0, 255, 0); + fillLine(vram32, bufferwidth, 32, 0, 0, 255); + fillLine(vram32, bufferwidth, 48, 255, 255, 255); + + /* save current screen */ + screenshot("screenshot8888.png"); + waitOneSecond(); + + /* load for testing it */ + showImage("screenshot8888.png"); + waitOneSecond(); + + /* switch mode, load original and save in new mode */ + #define TEST_FORMAT(pixelformat, screenshotName) \ + sceDisplayWaitVblankStart(); \ + sceDisplaySetFrameBuf(vram32, bufferwidth, pixelformat, 1); \ + sceDisplayWaitVblankStart(); \ + showImage("screenshot8888.png"); \ + screenshot(screenshotName); \ + waitOneSecond(); + TEST_FORMAT(PSP_DISPLAY_PIXEL_FORMAT_565, "screenshot565.png"); + TEST_FORMAT(PSP_DISPLAY_PIXEL_FORMAT_5551, "screenshot5551.png"); + TEST_FORMAT(PSP_DISPLAY_PIXEL_FORMAT_4444, "screenshot4444.png"); + sceKernelExitGame(); + + return 0; +} diff -Naur libpng-1.5.7/screenshot/Makefile libpng-1.5.7-psp/screenshot/Makefile --- libpng-1.5.7/screenshot/Makefile 1969-12-31 19:00:00.000000000 -0500 +++ libpng-1.5.7-psp/screenshot/Makefile 2014-06-12 01:36:16.589015775 -0400 @@ -0,0 +1,17 @@ +TARGET = screenshot +OBJS = main.o + +INCDIR = +CFLAGS = -O2 -G0 -Wall -fno-strict-aliasing +CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti +ASFLAGS = $(CFLAGS) + +LIBDIR = +LDFLAGS = +LIBS = -lpng -lz -lm + +EXTRA_TARGETS = EBOOT.PBP +PSP_EBOOT_TITLE = Screenshot + +PSPSDK=$(shell psp-config --pspsdk-path) +include $(PSPSDK)/lib/build.mak