Merge branch 'master' into wii-network
Conflicts: Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp Source/Core/Core/Src/ConfigManager.cpp Source/Core/Core/Src/HLE/HLE_OS.h Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.h Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.h
@ -5,6 +5,8 @@ cmake_minimum_required(VERSION 2.6)
|
|||||||
|
|
||||||
option(ANDROID "Enables a build for Android" OFF)
|
option(ANDROID "Enables a build for Android" OFF)
|
||||||
option(USE_EGL "Enables EGL OpenGL Interface" OFF)
|
option(USE_EGL "Enables EGL OpenGL Interface" OFF)
|
||||||
|
option(USE_X11 "Enables X11 Support" ON)
|
||||||
|
option(USE_WAYLAND "Enables Wayland Support" OFF)
|
||||||
option(USE_GLES "Enables GLES And EGL, disables OGL" OFF)
|
option(USE_GLES "Enables GLES And EGL, disables OGL" OFF)
|
||||||
option(DISABLE_WX "Disable wxWidgets (use CLI interface)" OFF)
|
option(DISABLE_WX "Disable wxWidgets (use CLI interface)" OFF)
|
||||||
|
|
||||||
@ -278,16 +280,28 @@ if(USE_GLES)
|
|||||||
add_definitions(-DUSE_EGL=1)
|
add_definitions(-DUSE_EGL=1)
|
||||||
set(USE_EGL True)
|
set(USE_EGL True)
|
||||||
endif()
|
endif()
|
||||||
|
# For now Wayland and EGL are tied to each other.
|
||||||
|
# The alternative would be an shm path
|
||||||
|
if(USE_WAYLAND)
|
||||||
|
add_definitions(-DUSE_EGL)
|
||||||
|
set(USE_EGL 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(USE_EGL)
|
if(USE_EGL)
|
||||||
message("EGL OpenGL interface enabled")
|
message("EGL OpenGL interface enabled")
|
||||||
add_definitions(-DUSE_EGL=1)
|
add_definitions(-DUSE_EGL=1)
|
||||||
|
else()
|
||||||
|
# Using GLX
|
||||||
|
set(USE_X11 1)
|
||||||
|
set(USE_WAYLAND 0)
|
||||||
endif()
|
endif()
|
||||||
add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE)
|
add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE)
|
||||||
|
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
message("Building for Android")
|
message("Building for Android")
|
||||||
add_definitions(-DANDROID)
|
add_definitions(-DANDROID)
|
||||||
|
set(USE_X11 0)
|
||||||
|
set(USE_WAYLAND 0)
|
||||||
endif()
|
endif()
|
||||||
########################################
|
########################################
|
||||||
# Dependency checking
|
# Dependency checking
|
||||||
@ -363,29 +377,53 @@ if(NOT ANDROID)
|
|||||||
message("OpenAL NOT found, disabling OpenAL sound backend")
|
message("OpenAL NOT found, disabling OpenAL sound backend")
|
||||||
endif(OPENAL_FOUND)
|
endif(OPENAL_FOUND)
|
||||||
|
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
# Note: The convention is to check USE_X11 or USE_WAYLAND where needed.
|
||||||
|
# This is where we detect platforms and set the variables accordingly.
|
||||||
|
pkg_check_modules(WAYLAND wayland-egl wayland-client wayland-cursor)
|
||||||
|
if(USE_WAYLAND AND WAYLAND_FOUND)
|
||||||
|
pkg_check_modules(XKBCOMMON xkbcommon)
|
||||||
|
if(XKBCOMMON_FOUND)
|
||||||
|
set(USE_WAYLAND 1)
|
||||||
|
add_definitions(-DHAVE_WAYLAND)
|
||||||
|
include_directories(${WAYLAND_INCLUDE_DIR})
|
||||||
|
message("Wayland support enabled")
|
||||||
|
endif(XKBCOMMON_FOUND)
|
||||||
|
else()
|
||||||
|
set(USE_WAYLAND 0)
|
||||||
|
message("Wayland support disabled")
|
||||||
|
add_definitions(-DHAVE_WAYLAND=0)
|
||||||
|
endif(USE_WAYLAND AND WAYLAND_FOUND)
|
||||||
|
|
||||||
# Note: We do not need to explicitly check for X11 as it is done in the cmake
|
# Note: We do not need to explicitly check for X11 as it is done in the cmake
|
||||||
# FindOpenGL module on linux.
|
# FindOpenGL module on linux.
|
||||||
if(UNIX AND NOT APPLE)
|
if(USE_X11 AND X11_FOUND)
|
||||||
if(X11_FOUND)
|
set(USE_X11 1)
|
||||||
add_definitions(-DHAVE_X11=1)
|
add_definitions(-DHAVE_X11=1)
|
||||||
include_directories(${X11_INCLUDE_DIR})
|
include_directories(${X11_INCLUDE_DIR})
|
||||||
message("X11 found")
|
message("X11 support enabled")
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "X11 is required but not found")
|
set(USE_X11 0)
|
||||||
endif(X11_FOUND)
|
SET(X11_FOUND "")
|
||||||
else()
|
message("X11 support disabled")
|
||||||
add_definitions(-DHAVE_X11=0)
|
add_definitions(-DHAVE_X11=0)
|
||||||
|
endif(USE_X11 AND X11_FOUND)
|
||||||
|
|
||||||
|
if (NOT USE_WAYLAND AND NOT USE_X11)
|
||||||
|
message(FATAL_ERROR "\n"
|
||||||
|
"No suitable display platform found\n"
|
||||||
|
"Requires wayland or x11 to run")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(X11_FOUND)
|
if(USE_X11)
|
||||||
check_lib(XRANDR Xrandr)
|
check_lib(XRANDR Xrandr)
|
||||||
|
if(XRANDR_FOUND)
|
||||||
|
add_definitions(-DHAVE_XRANDR=1)
|
||||||
|
else()
|
||||||
|
add_definitions(-DHAVE_XRANDR=0)
|
||||||
|
endif(XRANDR_FOUND)
|
||||||
endif()
|
endif()
|
||||||
if(XRANDR_FOUND)
|
|
||||||
add_definitions(-DHAVE_XRANDR=1)
|
|
||||||
else()
|
|
||||||
add_definitions(-DHAVE_XRANDR=0)
|
|
||||||
endif(XRANDR_FOUND)
|
|
||||||
|
|
||||||
if(ENCODE_FRAMEDUMPS)
|
if(ENCODE_FRAMEDUMPS)
|
||||||
check_libav()
|
check_libav()
|
||||||
endif()
|
endif()
|
||||||
@ -458,6 +496,13 @@ else()
|
|||||||
set(LZO lzo2)
|
set(LZO lzo2)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(ANDROID)
|
||||||
|
message("Using static libpng from Externals")
|
||||||
|
add_subdirectory(Externals/libpng)
|
||||||
|
include_directories(Externals/libpng)
|
||||||
|
set(PNG libpng)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(OPENAL_FOUND)
|
if(OPENAL_FOUND)
|
||||||
if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||||
check_lib(SOUNDTOUCH SoundTouch soundtouch/soundtouch.h QUIET)
|
check_lib(SOUNDTOUCH SoundTouch soundtouch/soundtouch.h QUIET)
|
||||||
|
36
Externals/libpng/CMakeLists.txt
vendored
@ -1,19 +1,21 @@
|
|||||||
|
# OUR SOURCES
|
||||||
set(SRCS
|
set(SRCS
|
||||||
"png.c"
|
png.h
|
||||||
"pngerror.c"
|
pngconf.h
|
||||||
"pngget.c"
|
png.c
|
||||||
"pngmem.c"
|
pngerror.c
|
||||||
"pngpread.c"
|
pngget.c
|
||||||
"pngread.c"
|
pngmem.c
|
||||||
"pngrio.c"
|
pngpread.c
|
||||||
"pngrtran.c"
|
pngread.c
|
||||||
"pngrutil.c"
|
pngrio.c
|
||||||
"pngset.c"
|
pngrtran.c
|
||||||
"pngtrans.c"
|
pngrutil.c
|
||||||
"pngwio.c"
|
pngset.c
|
||||||
"pngwrite.c"
|
pngtrans.c
|
||||||
"pngwtran.c"
|
pngwio.c
|
||||||
"pngwutil.c"
|
pngwrite.c
|
||||||
)
|
pngwtran.c
|
||||||
|
pngwutil.c
|
||||||
|
)
|
||||||
add_library(png STATIC ${SRCS})
|
add_library(png STATIC ${SRCS})
|
||||||
|
1912
Externals/libpng/png.c
vendored
3562
Externals/libpng/png.h
vendored
1963
Externals/libpng/pngconf.h
vendored
333
Externals/libpng/pngerror.c
vendored
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngerror.c - stub functions for i/o and memory allocation
|
/* pngerror.c - stub functions for i/o and memory allocation
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.5.1 [February 3, 2011]
|
* Last changed in libpng 1.2.45 [July 7, 2011]
|
||||||
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@ -16,17 +16,18 @@
|
|||||||
* at each function.
|
* at each function.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pngpriv.h"
|
#define PNG_INTERNAL
|
||||||
|
#define PNG_NO_PEDANTIC_WARNINGS
|
||||||
|
#include "png.h"
|
||||||
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
|
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
|
||||||
|
|
||||||
static PNG_FUNCTION(void, png_default_error,PNGARG((png_structp png_ptr,
|
static void /* PRIVATE */
|
||||||
png_const_charp error_message)),PNG_NORETURN);
|
png_default_error PNGARG((png_structp png_ptr,
|
||||||
|
png_const_charp error_message)) PNG_NORETURN;
|
||||||
#ifdef PNG_WARNINGS_SUPPORTED
|
#ifdef PNG_WARNINGS_SUPPORTED
|
||||||
static void /* PRIVATE */
|
static void /* PRIVATE */
|
||||||
png_default_warning PNGARG((png_structp png_ptr,
|
png_default_warning PNGARG((png_structp png_ptr,
|
||||||
png_const_charp warning_message));
|
png_const_charp warning_message));
|
||||||
#endif /* PNG_WARNINGS_SUPPORTED */
|
#endif /* PNG_WARNINGS_SUPPORTED */
|
||||||
|
|
||||||
/* This function is called whenever there is a fatal error. This function
|
/* This function is called whenever there is a fatal error. This function
|
||||||
@ -35,45 +36,42 @@ png_default_warning PNGARG((png_structp png_ptr,
|
|||||||
* to replace the error function at run-time.
|
* to replace the error function at run-time.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_ERROR_TEXT_SUPPORTED
|
#ifdef PNG_ERROR_TEXT_SUPPORTED
|
||||||
PNG_FUNCTION(void,PNGAPI
|
void PNGAPI
|
||||||
png_error,(png_structp png_ptr, png_const_charp error_message),PNG_NORETURN)
|
png_error(png_structp png_ptr, png_const_charp error_message)
|
||||||
{
|
{
|
||||||
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
||||||
char msg[16];
|
char msg[16];
|
||||||
if (png_ptr != NULL)
|
if (png_ptr != NULL)
|
||||||
{
|
{
|
||||||
if (png_ptr->flags&
|
if (png_ptr->flags&
|
||||||
(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))
|
(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))
|
||||||
{
|
{
|
||||||
if (*error_message == PNG_LITERAL_SHARP)
|
if (*error_message == PNG_LITERAL_SHARP)
|
||||||
{
|
{
|
||||||
/* Strip "#nnnn " from beginning of error message. */
|
/* Strip "#nnnn " from beginning of error message. */
|
||||||
int offset;
|
int offset;
|
||||||
for (offset = 1; offset<15; offset++)
|
for (offset = 1; offset<15; offset++)
|
||||||
if (error_message[offset] == ' ')
|
if (error_message[offset] == ' ')
|
||||||
break;
|
break;
|
||||||
|
if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT)
|
||||||
if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT)
|
{
|
||||||
{
|
int i;
|
||||||
int i;
|
for (i = 0; i < offset - 1; i++)
|
||||||
for (i = 0; i < offset - 1; i++)
|
msg[i] = error_message[i + 1];
|
||||||
msg[i] = error_message[i + 1];
|
msg[i - 1] = '\0';
|
||||||
msg[i - 1] = '\0';
|
error_message = msg;
|
||||||
error_message = msg;
|
}
|
||||||
}
|
else
|
||||||
|
error_message += offset;
|
||||||
else
|
}
|
||||||
error_message += offset;
|
else
|
||||||
}
|
{
|
||||||
|
if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT)
|
||||||
else
|
{
|
||||||
{
|
msg[0] = '0';
|
||||||
if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT)
|
msg[1] = '\0';
|
||||||
{
|
error_message = msg;
|
||||||
msg[0] = '0';
|
}
|
||||||
msg[1] = '\0';
|
|
||||||
error_message = msg;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -86,15 +84,20 @@ png_error,(png_structp png_ptr, png_const_charp error_message),PNG_NORETURN)
|
|||||||
png_default_error(png_ptr, error_message);
|
png_default_error(png_ptr, error_message);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
PNG_FUNCTION(void,PNGAPI
|
void PNGAPI
|
||||||
png_err,(png_structp png_ptr),PNG_NORETURN)
|
png_err(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
|
/* Prior to 1.2.45 the error_fn received a NULL pointer, expressed
|
||||||
|
* erroneously as '\0', instead of the empty string "". This was
|
||||||
|
* apparently an error, introduced in libpng-1.2.20, and png_default_error
|
||||||
|
* will crash in this case.
|
||||||
|
*/
|
||||||
if (png_ptr != NULL && png_ptr->error_fn != NULL)
|
if (png_ptr != NULL && png_ptr->error_fn != NULL)
|
||||||
(*(png_ptr->error_fn))(png_ptr, '\0');
|
(*(png_ptr->error_fn))(png_ptr, "");
|
||||||
|
|
||||||
/* If the custom handler doesn't exist, or if it returns,
|
/* If the custom handler doesn't exist, or if it returns,
|
||||||
use the default handler, which will not return. */
|
use the default handler, which will not return. */
|
||||||
png_default_error(png_ptr, '\0');
|
png_default_error(png_ptr, "");
|
||||||
}
|
}
|
||||||
#endif /* PNG_ERROR_TEXT_SUPPORTED */
|
#endif /* PNG_ERROR_TEXT_SUPPORTED */
|
||||||
|
|
||||||
@ -112,16 +115,16 @@ png_warning(png_structp png_ptr, png_const_charp warning_message)
|
|||||||
{
|
{
|
||||||
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
||||||
if (png_ptr->flags&
|
if (png_ptr->flags&
|
||||||
(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))
|
(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (*warning_message == PNG_LITERAL_SHARP)
|
if (*warning_message == PNG_LITERAL_SHARP)
|
||||||
{
|
{
|
||||||
for (offset = 1; offset < 15; offset++)
|
for (offset = 1; offset < 15; offset++)
|
||||||
if (warning_message[offset] == ' ')
|
if (warning_message[offset] == ' ')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (png_ptr != NULL && png_ptr->warning_fn != NULL)
|
if (png_ptr != NULL && png_ptr->warning_fn != NULL)
|
||||||
(*(png_ptr->warning_fn))(png_ptr, warning_message + offset);
|
(*(png_ptr->warning_fn))(png_ptr, warning_message + offset);
|
||||||
@ -135,9 +138,9 @@ void PNGAPI
|
|||||||
png_benign_error(png_structp png_ptr, png_const_charp error_message)
|
png_benign_error(png_structp png_ptr, png_const_charp error_message)
|
||||||
{
|
{
|
||||||
if (png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN)
|
if (png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN)
|
||||||
png_warning(png_ptr, error_message);
|
png_warning(png_ptr, error_message);
|
||||||
else
|
else
|
||||||
png_error(png_ptr, error_message);
|
png_error(png_ptr, error_message);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -157,7 +160,7 @@ static PNG_CONST char png_digit[16] = {
|
|||||||
#if defined(PNG_WARNINGS_SUPPORTED) || defined(PNG_ERROR_TEXT_SUPPORTED)
|
#if defined(PNG_WARNINGS_SUPPORTED) || defined(PNG_ERROR_TEXT_SUPPORTED)
|
||||||
static void /* PRIVATE */
|
static void /* PRIVATE */
|
||||||
png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp
|
png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp
|
||||||
error_message)
|
error_message)
|
||||||
{
|
{
|
||||||
int iout = 0, iin = 0;
|
int iout = 0, iin = 0;
|
||||||
|
|
||||||
@ -171,7 +174,6 @@ png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp
|
|||||||
buffer[iout++] = png_digit[c & 0x0f];
|
buffer[iout++] = png_digit[c & 0x0f];
|
||||||
buffer[iout++] = PNG_LITERAL_RIGHT_SQUARE_BRACKET;
|
buffer[iout++] = PNG_LITERAL_RIGHT_SQUARE_BRACKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buffer[iout++] = (png_byte)c;
|
buffer[iout++] = (png_byte)c;
|
||||||
@ -180,33 +182,35 @@ png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp
|
|||||||
|
|
||||||
if (error_message == NULL)
|
if (error_message == NULL)
|
||||||
buffer[iout] = '\0';
|
buffer[iout] = '\0';
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buffer[iout++] = ':';
|
buffer[iout++] = ':';
|
||||||
buffer[iout++] = ' ';
|
buffer[iout++] = ' ';
|
||||||
png_memcpy(buffer + iout, error_message, PNG_MAX_ERROR_TEXT);
|
|
||||||
buffer[iout + PNG_MAX_ERROR_TEXT - 1] = '\0';
|
iin = 0;
|
||||||
|
while (iin < PNG_MAX_ERROR_TEXT-1 && error_message[iin] != '\0')
|
||||||
|
buffer[iout++] = error_message[iin++];
|
||||||
|
|
||||||
|
/* iin < PNG_MAX_ERROR_TEXT, so the following is safe: */
|
||||||
|
buffer[iout] = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PNG_WARNINGS_SUPPORTED || PNG_ERROR_TEXT_SUPPORTED */
|
|
||||||
|
|
||||||
#if defined(PNG_READ_SUPPORTED) && defined(PNG_ERROR_TEXT_SUPPORTED)
|
#ifdef PNG_READ_SUPPORTED
|
||||||
PNG_FUNCTION(void,PNGAPI
|
void PNGAPI
|
||||||
png_chunk_error,(png_structp png_ptr, png_const_charp error_message),
|
png_chunk_error(png_structp png_ptr, png_const_charp error_message)
|
||||||
PNG_NORETURN)
|
|
||||||
{
|
{
|
||||||
char msg[18+PNG_MAX_ERROR_TEXT];
|
char msg[18+PNG_MAX_ERROR_TEXT];
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
png_error(png_ptr, error_message);
|
png_error(png_ptr, error_message);
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_format_buffer(png_ptr, msg, error_message);
|
png_format_buffer(png_ptr, msg, error_message);
|
||||||
png_error(png_ptr, msg);
|
png_error(png_ptr, msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PNG_READ_SUPPORTED && PNG_ERROR_TEXT_SUPPORTED */
|
#endif /* PNG_READ_SUPPORTED */
|
||||||
|
#endif /* PNG_WARNINGS_SUPPORTED || PNG_ERROR_TEXT_SUPPORTED */
|
||||||
|
|
||||||
#ifdef PNG_WARNINGS_SUPPORTED
|
#ifdef PNG_WARNINGS_SUPPORTED
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
@ -214,12 +218,11 @@ png_chunk_warning(png_structp png_ptr, png_const_charp warning_message)
|
|||||||
{
|
{
|
||||||
char msg[18+PNG_MAX_ERROR_TEXT];
|
char msg[18+PNG_MAX_ERROR_TEXT];
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
png_warning(png_ptr, warning_message);
|
png_warning(png_ptr, warning_message);
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_format_buffer(png_ptr, msg, warning_message);
|
png_format_buffer(png_ptr, msg, warning_message);
|
||||||
png_warning(png_ptr, msg);
|
png_warning(png_ptr, msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PNG_WARNINGS_SUPPORTED */
|
#endif /* PNG_WARNINGS_SUPPORTED */
|
||||||
@ -229,90 +232,48 @@ png_chunk_warning(png_structp png_ptr, png_const_charp warning_message)
|
|||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_chunk_benign_error(png_structp png_ptr, png_const_charp error_message)
|
png_chunk_benign_error(png_structp png_ptr, png_const_charp error_message)
|
||||||
{
|
{
|
||||||
if (png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN)
|
if (png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN)
|
||||||
png_chunk_warning(png_ptr, error_message);
|
png_chunk_warning(png_ptr, error_message);
|
||||||
|
else
|
||||||
else
|
png_chunk_error(png_ptr, error_message);
|
||||||
png_chunk_error(png_ptr, error_message);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* PNG_READ_SUPPORTED */
|
#endif /* PNG_READ_SUPPORTED */
|
||||||
|
|
||||||
#ifdef PNG_ERROR_TEXT_SUPPORTED
|
|
||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
|
||||||
PNG_FUNCTION(void,
|
|
||||||
png_fixed_error,(png_structp png_ptr, png_const_charp name),PNG_NORETURN)
|
|
||||||
{
|
|
||||||
# define fixed_message "fixed point overflow in "
|
|
||||||
# define fixed_message_ln ((sizeof fixed_message)-1)
|
|
||||||
int iin;
|
|
||||||
char msg[fixed_message_ln+PNG_MAX_ERROR_TEXT];
|
|
||||||
png_memcpy(msg, fixed_message, fixed_message_ln);
|
|
||||||
iin = 0;
|
|
||||||
if (name != NULL) while (iin < (PNG_MAX_ERROR_TEXT-1) && name[iin] != 0)
|
|
||||||
{
|
|
||||||
msg[fixed_message_ln + iin] = name[iin];
|
|
||||||
++iin;
|
|
||||||
}
|
|
||||||
msg[fixed_message_ln + iin] = 0;
|
|
||||||
png_error(png_ptr, msg);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PNG_SETJMP_SUPPORTED
|
|
||||||
/* This API only exists if ANSI-C style error handling is used,
|
|
||||||
* otherwise it is necessary for png_default_error to be overridden.
|
|
||||||
*/
|
|
||||||
jmp_buf* PNGAPI
|
|
||||||
png_set_longjmp_fn(png_structp png_ptr, png_longjmp_ptr longjmp_fn,
|
|
||||||
size_t jmp_buf_size)
|
|
||||||
{
|
|
||||||
if (png_ptr == NULL || jmp_buf_size != png_sizeof(jmp_buf))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
png_ptr->longjmp_fn = longjmp_fn;
|
|
||||||
return &png_ptr->png_jmpbuf;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This is the default error handling function. Note that replacements for
|
/* This is the default error handling function. Note that replacements for
|
||||||
* this function MUST NOT RETURN, or the program will likely crash. This
|
* this function MUST NOT RETURN, or the program will likely crash. This
|
||||||
* function is used by default, or if the program supplies NULL for the
|
* function is used by default, or if the program supplies NULL for the
|
||||||
* error function pointer in png_set_error_fn().
|
* error function pointer in png_set_error_fn().
|
||||||
*/
|
*/
|
||||||
static PNG_FUNCTION(void /* PRIVATE */,
|
static void /* PRIVATE */
|
||||||
png_default_error,(png_structp png_ptr, png_const_charp error_message),
|
png_default_error(png_structp png_ptr, png_const_charp error_message)
|
||||||
PNG_NORETURN)
|
|
||||||
{
|
{
|
||||||
#ifdef PNG_CONSOLE_IO_SUPPORTED
|
#ifdef PNG_CONSOLE_IO_SUPPORTED
|
||||||
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
||||||
if (*error_message == PNG_LITERAL_SHARP)
|
if (*error_message == PNG_LITERAL_SHARP)
|
||||||
{
|
{
|
||||||
/* Strip "#nnnn " from beginning of error message. */
|
/* Strip "#nnnn " from beginning of error message. */
|
||||||
int offset;
|
int offset;
|
||||||
char error_number[16];
|
char error_number[16];
|
||||||
for (offset = 0; offset<15; offset++)
|
for (offset = 0; offset<15; offset++)
|
||||||
{
|
{
|
||||||
error_number[offset] = error_message[offset + 1];
|
error_number[offset] = error_message[offset + 1];
|
||||||
if (error_message[offset] == ' ')
|
if (error_message[offset] == ' ')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if ((offset > 1) && (offset < 15))
|
||||||
if ((offset > 1) && (offset < 15))
|
{
|
||||||
{
|
error_number[offset - 1] = '\0';
|
||||||
error_number[offset - 1] = '\0';
|
fprintf(stderr, "libpng error no. %s: %s",
|
||||||
fprintf(stderr, "libpng error no. %s: %s",
|
error_number, error_message + offset + 1);
|
||||||
error_number, error_message + offset + 1);
|
fprintf(stderr, PNG_STRING_NEWLINE);
|
||||||
fprintf(stderr, PNG_STRING_NEWLINE);
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
else
|
fprintf(stderr, "libpng error: %s, offset=%d",
|
||||||
{
|
error_message, offset);
|
||||||
fprintf(stderr, "libpng error: %s, offset=%d",
|
fprintf(stderr, PNG_STRING_NEWLINE);
|
||||||
error_message, offset);
|
}
|
||||||
fprintf(stderr, PNG_STRING_NEWLINE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -321,32 +282,26 @@ png_default_error,(png_structp png_ptr, png_const_charp error_message),
|
|||||||
fprintf(stderr, PNG_STRING_NEWLINE);
|
fprintf(stderr, PNG_STRING_NEWLINE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_CONSOLE_IO_SUPPORTED
|
|
||||||
PNG_UNUSED(error_message) /* Make compiler happy */
|
|
||||||
#endif
|
|
||||||
png_longjmp(png_ptr, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
PNG_FUNCTION(void,PNGAPI
|
|
||||||
png_longjmp,(png_structp png_ptr, int val),PNG_NORETURN)
|
|
||||||
{
|
|
||||||
#ifdef PNG_SETJMP_SUPPORTED
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
if (png_ptr && png_ptr->longjmp_fn)
|
if (png_ptr)
|
||||||
{
|
{
|
||||||
# ifdef USE_FAR_KEYWORD
|
# ifdef USE_FAR_KEYWORD
|
||||||
{
|
{
|
||||||
jmp_buf png_jmpbuf;
|
jmp_buf jmpbuf;
|
||||||
png_memcpy(png_jmpbuf, png_ptr->png_jmpbuf, png_sizeof(jmp_buf));
|
png_memcpy(jmpbuf, png_ptr->jmpbuf, png_sizeof(jmp_buf));
|
||||||
png_ptr->longjmp_fn(png_jmpbuf, val);
|
longjmp(jmpbuf,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
png_ptr->longjmp_fn(png_ptr->png_jmpbuf, val);
|
longjmp(png_ptr->jmpbuf, 1);
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* Here if not setjmp support or if png_ptr is null. */
|
/* Here if not setjmp support or if png_ptr is null. */
|
||||||
PNG_ABORT();
|
PNG_ABORT();
|
||||||
|
#ifndef PNG_CONSOLE_IO_SUPPORTED
|
||||||
|
error_message = error_message; /* Make compiler happy */
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WARNINGS_SUPPORTED
|
#ifdef PNG_WARNINGS_SUPPORTED
|
||||||
@ -362,56 +317,52 @@ png_default_warning(png_structp png_ptr, png_const_charp warning_message)
|
|||||||
# ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
# ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
||||||
if (*warning_message == PNG_LITERAL_SHARP)
|
if (*warning_message == PNG_LITERAL_SHARP)
|
||||||
{
|
{
|
||||||
int offset;
|
int offset;
|
||||||
char warning_number[16];
|
char warning_number[16];
|
||||||
for (offset = 0; offset < 15; offset++)
|
for (offset = 0; offset < 15; offset++)
|
||||||
{
|
{
|
||||||
warning_number[offset] = warning_message[offset + 1];
|
warning_number[offset] = warning_message[offset + 1];
|
||||||
if (warning_message[offset] == ' ')
|
if (warning_message[offset] == ' ')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if ((offset > 1) && (offset < 15))
|
||||||
if ((offset > 1) && (offset < 15))
|
{
|
||||||
{
|
warning_number[offset + 1] = '\0';
|
||||||
warning_number[offset + 1] = '\0';
|
fprintf(stderr, "libpng warning no. %s: %s",
|
||||||
fprintf(stderr, "libpng warning no. %s: %s",
|
warning_number, warning_message + offset);
|
||||||
warning_number, warning_message + offset);
|
fprintf(stderr, PNG_STRING_NEWLINE);
|
||||||
fprintf(stderr, PNG_STRING_NEWLINE);
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
else
|
fprintf(stderr, "libpng warning: %s",
|
||||||
{
|
warning_message);
|
||||||
fprintf(stderr, "libpng warning: %s",
|
fprintf(stderr, PNG_STRING_NEWLINE);
|
||||||
warning_message);
|
}
|
||||||
fprintf(stderr, PNG_STRING_NEWLINE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
{
|
{
|
||||||
fprintf(stderr, "libpng warning: %s", warning_message);
|
fprintf(stderr, "libpng warning: %s", warning_message);
|
||||||
fprintf(stderr, PNG_STRING_NEWLINE);
|
fprintf(stderr, PNG_STRING_NEWLINE);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
PNG_UNUSED(warning_message) /* Make compiler happy */
|
warning_message = warning_message; /* Make compiler happy */
|
||||||
#endif
|
#endif
|
||||||
PNG_UNUSED(png_ptr) /* Make compiler happy */
|
png_ptr = png_ptr; /* Make compiler happy */
|
||||||
}
|
}
|
||||||
#endif /* PNG_WARNINGS_SUPPORTED */
|
#endif /* PNG_WARNINGS_SUPPORTED */
|
||||||
|
|
||||||
/* This function is called when the application wants to use another method
|
/* This function is called when the application wants to use another method
|
||||||
* of handling errors and warnings. Note that the error function MUST NOT
|
* of handling errors and warnings. Note that the error function MUST NOT
|
||||||
* return to the calling routine or serious problems will occur. The return
|
* return to the calling routine or serious problems will occur. The return
|
||||||
* method used in the default routine calls longjmp(png_ptr->png_jmpbuf, 1)
|
* method used in the default routine calls longjmp(png_ptr->jmpbuf, 1)
|
||||||
*/
|
*/
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_error_fn(png_structp png_ptr, png_voidp error_ptr,
|
png_set_error_fn(png_structp png_ptr, png_voidp error_ptr,
|
||||||
png_error_ptr error_fn, png_error_ptr warning_fn)
|
png_error_ptr error_fn, png_error_ptr warning_fn)
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
png_ptr->error_ptr = error_ptr;
|
png_ptr->error_ptr = error_ptr;
|
||||||
png_ptr->error_fn = error_fn;
|
png_ptr->error_fn = error_fn;
|
||||||
png_ptr->warning_fn = warning_fn;
|
png_ptr->warning_fn = warning_fn;
|
||||||
@ -423,11 +374,10 @@ png_set_error_fn(png_structp png_ptr, png_voidp error_ptr,
|
|||||||
* pointer before png_write_destroy and png_read_destroy are called.
|
* pointer before png_write_destroy and png_read_destroy are called.
|
||||||
*/
|
*/
|
||||||
png_voidp PNGAPI
|
png_voidp PNGAPI
|
||||||
png_get_error_ptr(png_const_structp png_ptr)
|
png_get_error_ptr(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return ((png_voidp)png_ptr->error_ptr);
|
return ((png_voidp)png_ptr->error_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,9 +388,8 @@ png_set_strip_error_numbers(png_structp png_ptr, png_uint_32 strip_mode)
|
|||||||
{
|
{
|
||||||
if (png_ptr != NULL)
|
if (png_ptr != NULL)
|
||||||
{
|
{
|
||||||
png_ptr->flags &=
|
png_ptr->flags &=
|
||||||
((~(PNG_FLAG_STRIP_ERROR_NUMBERS |
|
((~(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode);
|
||||||
PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
26
Externals/libpng/pnggccrd.c
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* pnggccrd.c
|
||||||
|
*
|
||||||
|
* Last changed in libpng 1.2.48 [March 8, 2012]
|
||||||
|
* Copyright (c) 1998-2012 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
|
||||||
|
*
|
||||||
|
* This code snippet is for use by configure's compilation test. Most of the
|
||||||
|
* remainder of the file was removed from libpng-1.2.20, and all of the
|
||||||
|
* assembler code was removed from libpng-1.2.48.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if (!defined _MSC_VER) && \
|
||||||
|
defined(PNG_ASSEMBLER_CODE_SUPPORTED) && \
|
||||||
|
defined(PNG_MMX_CODE_SUPPORTED)
|
||||||
|
|
||||||
|
int PNGAPI png_dummy_mmx_support(void);
|
||||||
|
|
||||||
|
int PNGAPI png_dummy_mmx_support(void)
|
||||||
|
{
|
||||||
|
/* 0: no MMX; 1: MMX supported; 2: not tested */
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
#endif
|
826
Externals/libpng/pngget.c
vendored
299
Externals/libpng/pngmem.c
vendored
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngmem.c - stub functions for memory allocation
|
/* pngmem.c - stub functions for memory allocation
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.5.1 [February 3, 2011]
|
* Last changed in libpng 1.2.41 [February 25, 2010]
|
||||||
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2010 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -17,8 +17,9 @@
|
|||||||
* identify the replacement functions.
|
* identify the replacement functions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pngpriv.h"
|
#define PNG_INTERNAL
|
||||||
|
#define PNG_NO_PEDANTIC_WARNINGS
|
||||||
|
#include "png.h"
|
||||||
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
|
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
|
||||||
|
|
||||||
/* Borland DOS special memory handler */
|
/* Borland DOS special memory handler */
|
||||||
@ -27,32 +28,29 @@
|
|||||||
|
|
||||||
/* Allocate memory for a png_struct. The malloc and memset can be replaced
|
/* Allocate memory for a png_struct. The malloc and memset can be replaced
|
||||||
by a single call to calloc() if this is thought to improve performance. */
|
by a single call to calloc() if this is thought to improve performance. */
|
||||||
PNG_FUNCTION(png_voidp /* PRIVATE */,
|
png_voidp /* PRIVATE */
|
||||||
png_create_struct,(int type),PNG_ALLOCATED)
|
png_create_struct(int type)
|
||||||
{
|
{
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
return (png_create_struct_2(type, NULL, NULL));
|
return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Alternate version of png_create_struct, for use with user-defined malloc. */
|
/* Alternate version of png_create_struct, for use with user-defined malloc. */
|
||||||
PNG_FUNCTION(png_voidp /* PRIVATE */,
|
png_voidp /* PRIVATE */
|
||||||
png_create_struct_2,(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr),
|
png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr)
|
||||||
PNG_ALLOCATED)
|
|
||||||
{
|
{
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
png_size_t size;
|
png_size_t size;
|
||||||
png_voidp struct_ptr;
|
png_voidp struct_ptr;
|
||||||
|
|
||||||
if (type == PNG_STRUCT_INFO)
|
if (type == PNG_STRUCT_INFO)
|
||||||
size = png_sizeof(png_info);
|
size = png_sizeof(png_info);
|
||||||
|
|
||||||
else if (type == PNG_STRUCT_PNG)
|
else if (type == PNG_STRUCT_PNG)
|
||||||
size = png_sizeof(png_struct);
|
size = png_sizeof(png_struct);
|
||||||
|
|
||||||
else
|
else
|
||||||
return (png_get_copyright(NULL));
|
return (png_get_copyright(NULL));
|
||||||
|
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
if (malloc_fn != NULL)
|
if (malloc_fn != NULL)
|
||||||
{
|
{
|
||||||
png_struct dummy_struct;
|
png_struct dummy_struct;
|
||||||
@ -60,13 +58,11 @@ png_create_struct_2,(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr),
|
|||||||
png_ptr->mem_ptr=mem_ptr;
|
png_ptr->mem_ptr=mem_ptr;
|
||||||
struct_ptr = (*(malloc_fn))(png_ptr, (png_uint_32)size);
|
struct_ptr = (*(malloc_fn))(png_ptr, (png_uint_32)size);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
struct_ptr = (png_voidp)farmalloc(size);
|
struct_ptr = (png_voidp)farmalloc(size);
|
||||||
if (struct_ptr != NULL)
|
if (struct_ptr != NULL)
|
||||||
png_memset(struct_ptr, 0, size);
|
png_memset(struct_ptr, 0, size);
|
||||||
|
|
||||||
return (struct_ptr);
|
return (struct_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,8 +70,8 @@ png_create_struct_2,(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr),
|
|||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_destroy_struct(png_voidp struct_ptr)
|
png_destroy_struct(png_voidp struct_ptr)
|
||||||
{
|
{
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
png_destroy_struct_2(struct_ptr, NULL, NULL);
|
png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free memory allocated by a png_create_struct() call */
|
/* Free memory allocated by a png_create_struct() call */
|
||||||
@ -83,10 +79,10 @@ void /* PRIVATE */
|
|||||||
png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
|
png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
|
||||||
png_voidp mem_ptr)
|
png_voidp mem_ptr)
|
||||||
{
|
{
|
||||||
# endif
|
#endif
|
||||||
if (struct_ptr != NULL)
|
if (struct_ptr != NULL)
|
||||||
{
|
{
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
if (free_fn != NULL)
|
if (free_fn != NULL)
|
||||||
{
|
{
|
||||||
png_struct dummy_struct;
|
png_struct dummy_struct;
|
||||||
@ -95,8 +91,7 @@ png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
|
|||||||
(*(free_fn))(png_ptr, struct_ptr);
|
(*(free_fn))(png_ptr, struct_ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
|
||||||
farfree (struct_ptr);
|
farfree (struct_ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,62 +115,55 @@ png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
|
|||||||
* result, we would be truncating potentially larger memory requests
|
* result, we would be truncating potentially larger memory requests
|
||||||
* (which should cause a fatal error) and introducing major problems.
|
* (which should cause a fatal error) and introducing major problems.
|
||||||
*/
|
*/
|
||||||
PNG_FUNCTION(png_voidp,PNGAPI
|
png_voidp /* PRIVATE */
|
||||||
png_calloc,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
png_calloc(png_structp png_ptr, png_uint_32 size)
|
||||||
{
|
{
|
||||||
png_voidp ret;
|
png_voidp ret;
|
||||||
|
|
||||||
ret = (png_malloc(png_ptr, size));
|
ret = (png_malloc(png_ptr, size));
|
||||||
|
|
||||||
if (ret != NULL)
|
if (ret != NULL)
|
||||||
png_memset(ret,0,(png_size_t)size);
|
png_memset(ret,0,(png_size_t)size);
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
PNG_FUNCTION(png_voidp,PNGAPI
|
png_voidp PNGAPI
|
||||||
png_malloc,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
png_malloc(png_structp png_ptr, png_uint_32 size)
|
||||||
{
|
{
|
||||||
png_voidp ret;
|
png_voidp ret;
|
||||||
|
|
||||||
if (png_ptr == NULL || size == 0)
|
if (png_ptr == NULL || size == 0)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
if (png_ptr->malloc_fn != NULL)
|
if (png_ptr->malloc_fn != NULL)
|
||||||
ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size));
|
ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size));
|
||||||
|
|
||||||
else
|
else
|
||||||
ret = (png_malloc_default(png_ptr, size));
|
ret = (png_malloc_default(png_ptr, size));
|
||||||
|
|
||||||
if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
||||||
png_error(png_ptr, "Out of memory");
|
png_error(png_ptr, "Out of memory!");
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
PNG_FUNCTION(png_voidp,PNGAPI
|
png_voidp PNGAPI
|
||||||
png_malloc_default,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
png_malloc_default(png_structp png_ptr, png_uint_32 size)
|
||||||
{
|
{
|
||||||
png_voidp ret;
|
png_voidp ret;
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
|
|
||||||
if (png_ptr == NULL || size == 0)
|
if (png_ptr == NULL || size == 0)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
# ifdef PNG_MAX_MALLOC_64K
|
#ifdef PNG_MAX_MALLOC_64K
|
||||||
if (size > (png_uint_32)65536L)
|
if (size > (png_uint_32)65536L)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "Cannot Allocate > 64K");
|
png_warning(png_ptr, "Cannot Allocate > 64K");
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
if (size != (size_t)size)
|
if (size != (size_t)size)
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
|
|
||||||
else if (size == (png_uint_32)65536L)
|
else if (size == (png_uint_32)65536L)
|
||||||
{
|
{
|
||||||
if (png_ptr->offset_table == NULL)
|
if (png_ptr->offset_table == NULL)
|
||||||
@ -198,13 +186,10 @@ png_malloc_default,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
|||||||
|
|
||||||
if (png_ptr->zlib_window_bits > 14)
|
if (png_ptr->zlib_window_bits > 14)
|
||||||
num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14));
|
num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14));
|
||||||
|
|
||||||
else
|
else
|
||||||
num_blocks = 1;
|
num_blocks = 1;
|
||||||
|
|
||||||
if (png_ptr->zlib_mem_level >= 7)
|
if (png_ptr->zlib_mem_level >= 7)
|
||||||
num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7));
|
num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7));
|
||||||
|
|
||||||
else
|
else
|
||||||
num_blocks++;
|
num_blocks++;
|
||||||
|
|
||||||
@ -214,27 +199,25 @@ png_malloc_default,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
|||||||
|
|
||||||
if (table == NULL)
|
if (table == NULL)
|
||||||
{
|
{
|
||||||
# ifndef PNG_USER_MEM_SUPPORTED
|
#ifndef PNG_USER_MEM_SUPPORTED
|
||||||
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
||||||
png_error(png_ptr, "Out Of Memory"); /* Note "O", "M" */
|
png_error(png_ptr, "Out Of Memory."); /* Note "O", "M" */
|
||||||
|
|
||||||
else
|
else
|
||||||
png_warning(png_ptr, "Out Of Memory");
|
png_warning(png_ptr, "Out Of Memory.");
|
||||||
# endif
|
#endif
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((png_size_t)table & 0xfff0)
|
if ((png_size_t)table & 0xfff0)
|
||||||
{
|
{
|
||||||
# ifndef PNG_USER_MEM_SUPPORTED
|
#ifndef PNG_USER_MEM_SUPPORTED
|
||||||
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
||||||
png_error(png_ptr,
|
png_error(png_ptr,
|
||||||
"Farmalloc didn't return normalized pointer");
|
"Farmalloc didn't return normalized pointer");
|
||||||
|
|
||||||
else
|
else
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"Farmalloc didn't return normalized pointer");
|
"Farmalloc didn't return normalized pointer");
|
||||||
# endif
|
#endif
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,13 +227,12 @@ png_malloc_default,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
|||||||
|
|
||||||
if (png_ptr->offset_table_ptr == NULL)
|
if (png_ptr->offset_table_ptr == NULL)
|
||||||
{
|
{
|
||||||
# ifndef PNG_USER_MEM_SUPPORTED
|
#ifndef PNG_USER_MEM_SUPPORTED
|
||||||
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
||||||
png_error(png_ptr, "Out Of memory"); /* Note "O", "m" */
|
png_error(png_ptr, "Out Of memory."); /* Note "O", "m" */
|
||||||
|
|
||||||
else
|
else
|
||||||
png_warning(png_ptr, "Out Of memory");
|
png_warning(png_ptr, "Out Of memory.");
|
||||||
# endif
|
#endif
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,7 +242,6 @@ png_malloc_default,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
|||||||
hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
|
hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
|
||||||
hptr = hptr + 16L; /* "hptr += 16L" fails on Turbo C++ 3.0 */
|
hptr = hptr + 16L; /* "hptr += 16L" fails on Turbo C++ 3.0 */
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < num_blocks; i++)
|
for (i = 0; i < num_blocks; i++)
|
||||||
{
|
{
|
||||||
png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
|
png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
|
||||||
@ -275,32 +256,29 @@ png_malloc_default,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
|||||||
|
|
||||||
if (png_ptr->offset_table_count >= png_ptr->offset_table_number)
|
if (png_ptr->offset_table_count >= png_ptr->offset_table_number)
|
||||||
{
|
{
|
||||||
# ifndef PNG_USER_MEM_SUPPORTED
|
#ifndef PNG_USER_MEM_SUPPORTED
|
||||||
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
||||||
png_error(png_ptr, "Out of Memory"); /* Note "o" and "M" */
|
png_error(png_ptr, "Out of Memory."); /* Note "o" and "M" */
|
||||||
|
|
||||||
else
|
else
|
||||||
png_warning(png_ptr, "Out of Memory");
|
png_warning(png_ptr, "Out of Memory.");
|
||||||
# endif
|
#endif
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = png_ptr->offset_table_ptr[png_ptr->offset_table_count++];
|
ret = png_ptr->offset_table_ptr[png_ptr->offset_table_count++];
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
ret = farmalloc(size);
|
ret = farmalloc(size);
|
||||||
|
|
||||||
# ifndef PNG_USER_MEM_SUPPORTED
|
#ifndef PNG_USER_MEM_SUPPORTED
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
{
|
{
|
||||||
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
||||||
png_error(png_ptr, "Out of memory"); /* Note "o" and "m" */
|
png_error(png_ptr, "Out of memory."); /* Note "o" and "m" */
|
||||||
|
|
||||||
else
|
else
|
||||||
png_warning(png_ptr, "Out of memory"); /* Note "o" and "m" */
|
png_warning(png_ptr, "Out of memory."); /* Note "o" and "m" */
|
||||||
}
|
}
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
@ -315,13 +293,12 @@ png_free(png_structp png_ptr, png_voidp ptr)
|
|||||||
if (png_ptr == NULL || ptr == NULL)
|
if (png_ptr == NULL || ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
if (png_ptr->free_fn != NULL)
|
if (png_ptr->free_fn != NULL)
|
||||||
{
|
{
|
||||||
(*(png_ptr->free_fn))(png_ptr, ptr);
|
(*(png_ptr->free_fn))(png_ptr, ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
png_free_default(png_ptr, ptr);
|
png_free_default(png_ptr, ptr);
|
||||||
}
|
}
|
||||||
@ -329,7 +306,7 @@ png_free(png_structp png_ptr, png_voidp ptr)
|
|||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_free_default(png_structp png_ptr, png_voidp ptr)
|
png_free_default(png_structp png_ptr, png_voidp ptr)
|
||||||
{
|
{
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
|
|
||||||
if (png_ptr == NULL || ptr == NULL)
|
if (png_ptr == NULL || ptr == NULL)
|
||||||
return;
|
return;
|
||||||
@ -357,7 +334,9 @@ png_free_default(png_structp png_ptr, png_voidp ptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ptr != NULL)
|
if (ptr != NULL)
|
||||||
|
{
|
||||||
farfree(ptr);
|
farfree(ptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* Not the Borland DOS special memory handler */
|
#else /* Not the Borland DOS special memory handler */
|
||||||
@ -365,58 +344,52 @@ png_free_default(png_structp png_ptr, png_voidp ptr)
|
|||||||
/* Allocate memory for a png_struct or a png_info. The malloc and
|
/* Allocate memory for a png_struct or a png_info. The malloc and
|
||||||
memset can be replaced by a single call to calloc() if this is thought
|
memset can be replaced by a single call to calloc() if this is thought
|
||||||
to improve performance noticably. */
|
to improve performance noticably. */
|
||||||
PNG_FUNCTION(png_voidp /* PRIVATE */,
|
png_voidp /* PRIVATE */
|
||||||
png_create_struct,(int type),PNG_ALLOCATED)
|
png_create_struct(int type)
|
||||||
{
|
{
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
return (png_create_struct_2(type, NULL, NULL));
|
return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate memory for a png_struct or a png_info. The malloc and
|
/* Allocate memory for a png_struct or a png_info. The malloc and
|
||||||
memset can be replaced by a single call to calloc() if this is thought
|
memset can be replaced by a single call to calloc() if this is thought
|
||||||
to improve performance noticably. */
|
to improve performance noticably. */
|
||||||
PNG_FUNCTION(png_voidp /* PRIVATE */,
|
png_voidp /* PRIVATE */
|
||||||
png_create_struct_2,(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr),
|
png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr)
|
||||||
PNG_ALLOCATED)
|
|
||||||
{
|
{
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
png_size_t size;
|
png_size_t size;
|
||||||
png_voidp struct_ptr;
|
png_voidp struct_ptr;
|
||||||
|
|
||||||
if (type == PNG_STRUCT_INFO)
|
if (type == PNG_STRUCT_INFO)
|
||||||
size = png_sizeof(png_info);
|
size = png_sizeof(png_info);
|
||||||
|
|
||||||
else if (type == PNG_STRUCT_PNG)
|
else if (type == PNG_STRUCT_PNG)
|
||||||
size = png_sizeof(png_struct);
|
size = png_sizeof(png_struct);
|
||||||
|
|
||||||
else
|
else
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
if (malloc_fn != NULL)
|
if (malloc_fn != NULL)
|
||||||
{
|
{
|
||||||
png_struct dummy_struct;
|
png_struct dummy_struct;
|
||||||
png_structp png_ptr = &dummy_struct;
|
png_structp png_ptr = &dummy_struct;
|
||||||
png_ptr->mem_ptr=mem_ptr;
|
png_ptr->mem_ptr=mem_ptr;
|
||||||
struct_ptr = (*(malloc_fn))(png_ptr, size);
|
struct_ptr = (*(malloc_fn))(png_ptr, size);
|
||||||
|
|
||||||
if (struct_ptr != NULL)
|
if (struct_ptr != NULL)
|
||||||
png_memset(struct_ptr, 0, size);
|
png_memset(struct_ptr, 0, size);
|
||||||
|
|
||||||
return (struct_ptr);
|
return (struct_ptr);
|
||||||
}
|
}
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
|
|
||||||
# if defined(__TURBOC__) && !defined(__FLAT__)
|
#if defined(__TURBOC__) && !defined(__FLAT__)
|
||||||
struct_ptr = (png_voidp)farmalloc(size);
|
struct_ptr = (png_voidp)farmalloc(size);
|
||||||
# else
|
#else
|
||||||
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
||||||
struct_ptr = (png_voidp)halloc(size, 1);
|
struct_ptr = (png_voidp)halloc(size, 1);
|
||||||
# else
|
# else
|
||||||
struct_ptr = (png_voidp)malloc(size);
|
struct_ptr = (png_voidp)malloc(size);
|
||||||
# endif
|
# endif
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
if (struct_ptr != NULL)
|
if (struct_ptr != NULL)
|
||||||
png_memset(struct_ptr, 0, size);
|
png_memset(struct_ptr, 0, size);
|
||||||
|
|
||||||
@ -428,8 +401,8 @@ png_create_struct_2,(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr),
|
|||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_destroy_struct(png_voidp struct_ptr)
|
png_destroy_struct(png_voidp struct_ptr)
|
||||||
{
|
{
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
png_destroy_struct_2(struct_ptr, NULL, NULL);
|
png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free memory allocated by a png_create_struct() call */
|
/* Free memory allocated by a png_create_struct() call */
|
||||||
@ -437,10 +410,10 @@ void /* PRIVATE */
|
|||||||
png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
|
png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
|
||||||
png_voidp mem_ptr)
|
png_voidp mem_ptr)
|
||||||
{
|
{
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
if (struct_ptr != NULL)
|
if (struct_ptr != NULL)
|
||||||
{
|
{
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
if (free_fn != NULL)
|
if (free_fn != NULL)
|
||||||
{
|
{
|
||||||
png_struct dummy_struct;
|
png_struct dummy_struct;
|
||||||
@ -449,19 +422,16 @@ png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
|
|||||||
(*(free_fn))(png_ptr, struct_ptr);
|
(*(free_fn))(png_ptr, struct_ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
# if defined(__TURBOC__) && !defined(__FLAT__)
|
#if defined(__TURBOC__) && !defined(__FLAT__)
|
||||||
farfree(struct_ptr);
|
farfree(struct_ptr);
|
||||||
|
#else
|
||||||
# else
|
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
||||||
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
|
||||||
hfree(struct_ptr);
|
hfree(struct_ptr);
|
||||||
|
# else
|
||||||
# else
|
|
||||||
free(struct_ptr);
|
free(struct_ptr);
|
||||||
|
# endif
|
||||||
# endif
|
#endif
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,92 +442,80 @@ png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
|
|||||||
* have the ability to do that.
|
* have the ability to do that.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PNG_FUNCTION(png_voidp,PNGAPI
|
png_voidp /* PRIVATE */
|
||||||
png_calloc,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
png_calloc(png_structp png_ptr, png_uint_32 size)
|
||||||
{
|
{
|
||||||
png_voidp ret;
|
png_voidp ret;
|
||||||
|
|
||||||
ret = (png_malloc(png_ptr, size));
|
ret = (png_malloc(png_ptr, size));
|
||||||
|
|
||||||
if (ret != NULL)
|
if (ret != NULL)
|
||||||
png_memset(ret,0,(png_size_t)size);
|
png_memset(ret,0,(png_size_t)size);
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
PNG_FUNCTION(png_voidp,PNGAPI
|
png_voidp PNGAPI
|
||||||
png_malloc,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
png_malloc(png_structp png_ptr, png_uint_32 size)
|
||||||
{
|
{
|
||||||
png_voidp ret;
|
png_voidp ret;
|
||||||
|
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
if (png_ptr == NULL || size == 0)
|
if (png_ptr == NULL || size == 0)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
if (png_ptr->malloc_fn != NULL)
|
if (png_ptr->malloc_fn != NULL)
|
||||||
ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size));
|
ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size));
|
||||||
|
|
||||||
else
|
else
|
||||||
ret = (png_malloc_default(png_ptr, size));
|
ret = (png_malloc_default(png_ptr, size));
|
||||||
|
|
||||||
if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
||||||
png_error(png_ptr, "Out of Memory");
|
png_error(png_ptr, "Out of Memory!");
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
PNG_FUNCTION(png_voidp,PNGAPI
|
png_voidp PNGAPI
|
||||||
png_malloc_default,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
png_malloc_default(png_structp png_ptr, png_uint_32 size)
|
||||||
{
|
{
|
||||||
png_voidp ret;
|
png_voidp ret;
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
|
|
||||||
if (png_ptr == NULL || size == 0)
|
if (png_ptr == NULL || size == 0)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
# ifdef PNG_MAX_MALLOC_64K
|
#ifdef PNG_MAX_MALLOC_64K
|
||||||
if (size > (png_uint_32)65536L)
|
if (size > (png_uint_32)65536L)
|
||||||
{
|
{
|
||||||
# ifndef PNG_USER_MEM_SUPPORTED
|
#ifndef PNG_USER_MEM_SUPPORTED
|
||||||
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
||||||
png_error(png_ptr, "Cannot Allocate > 64K");
|
png_error(png_ptr, "Cannot Allocate > 64K");
|
||||||
|
|
||||||
else
|
else
|
||||||
# endif
|
#endif
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
/* Check for overflow */
|
/* Check for overflow */
|
||||||
# if defined(__TURBOC__) && !defined(__FLAT__)
|
#if defined(__TURBOC__) && !defined(__FLAT__)
|
||||||
|
|
||||||
if (size != (unsigned long)size)
|
if (size != (unsigned long)size)
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
|
|
||||||
else
|
else
|
||||||
ret = farmalloc(size);
|
ret = farmalloc(size);
|
||||||
|
#else
|
||||||
# else
|
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
||||||
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
|
||||||
if (size != (unsigned long)size)
|
if (size != (unsigned long)size)
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
|
|
||||||
else
|
else
|
||||||
ret = halloc(size, 1);
|
ret = halloc(size, 1);
|
||||||
|
# else
|
||||||
# else
|
|
||||||
if (size != (size_t)size)
|
if (size != (size_t)size)
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
|
|
||||||
else
|
else
|
||||||
ret = malloc((size_t)size);
|
ret = malloc((size_t)size);
|
||||||
# endif
|
# endif
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
# ifndef PNG_USER_MEM_SUPPORTED
|
#ifndef PNG_USER_MEM_SUPPORTED
|
||||||
if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
|
||||||
png_error(png_ptr, "Out of Memory");
|
png_error(png_ptr, "Out of Memory");
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
@ -571,47 +529,46 @@ png_free(png_structp png_ptr, png_voidp ptr)
|
|||||||
if (png_ptr == NULL || ptr == NULL)
|
if (png_ptr == NULL || ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
# ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
if (png_ptr->free_fn != NULL)
|
if (png_ptr->free_fn != NULL)
|
||||||
{
|
{
|
||||||
(*(png_ptr->free_fn))(png_ptr, ptr);
|
(*(png_ptr->free_fn))(png_ptr, ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
png_free_default(png_ptr, ptr);
|
png_free_default(png_ptr, ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_free_default(png_structp png_ptr, png_voidp ptr)
|
png_free_default(png_structp png_ptr, png_voidp ptr)
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL || ptr == NULL)
|
if (png_ptr == NULL || ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
# endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
|
|
||||||
# if defined(__TURBOC__) && !defined(__FLAT__)
|
#if defined(__TURBOC__) && !defined(__FLAT__)
|
||||||
farfree(ptr);
|
farfree(ptr);
|
||||||
|
#else
|
||||||
# else
|
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
||||||
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
|
||||||
hfree(ptr);
|
hfree(ptr);
|
||||||
|
# else
|
||||||
# else
|
|
||||||
free(ptr);
|
free(ptr);
|
||||||
|
# endif
|
||||||
# endif
|
#endif
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* Not Borland DOS special memory handler */
|
#endif /* Not Borland DOS special memory handler */
|
||||||
|
|
||||||
|
#ifdef PNG_1_0_X
|
||||||
|
# define png_malloc_warn png_malloc
|
||||||
|
#else
|
||||||
/* This function was added at libpng version 1.2.3. The png_malloc_warn()
|
/* This function was added at libpng version 1.2.3. The png_malloc_warn()
|
||||||
* function will set up png_malloc() to issue a png_warning and return NULL
|
* function will set up png_malloc() to issue a png_warning and return NULL
|
||||||
* instead of issuing a png_error, if it fails to allocate the requested
|
* instead of issuing a png_error, if it fails to allocate the requested
|
||||||
* memory.
|
* memory.
|
||||||
*/
|
*/
|
||||||
PNG_FUNCTION(png_voidp,PNGAPI
|
png_voidp PNGAPI
|
||||||
png_malloc_warn,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
png_malloc_warn(png_structp png_ptr, png_uint_32 size)
|
||||||
{
|
{
|
||||||
png_voidp ptr;
|
png_voidp ptr;
|
||||||
png_uint_32 save_flags;
|
png_uint_32 save_flags;
|
||||||
@ -624,7 +581,34 @@ png_malloc_warn,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
|||||||
png_ptr->flags=save_flags;
|
png_ptr->flags=save_flags;
|
||||||
return(ptr);
|
return(ptr);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
png_voidp PNGAPI
|
||||||
|
png_memcpy_check (png_structp png_ptr, png_voidp s1, png_voidp s2,
|
||||||
|
png_uint_32 length)
|
||||||
|
{
|
||||||
|
png_size_t size;
|
||||||
|
|
||||||
|
size = (png_size_t)length;
|
||||||
|
if ((png_uint_32)size != length)
|
||||||
|
png_error(png_ptr, "Overflow in png_memcpy_check.");
|
||||||
|
|
||||||
|
return(png_memcpy (s1, s2, size));
|
||||||
|
}
|
||||||
|
|
||||||
|
png_voidp PNGAPI
|
||||||
|
png_memset_check (png_structp png_ptr, png_voidp s1, int value,
|
||||||
|
png_uint_32 length)
|
||||||
|
{
|
||||||
|
png_size_t size;
|
||||||
|
|
||||||
|
size = (png_size_t)length;
|
||||||
|
if ((png_uint_32)size != length)
|
||||||
|
png_error(png_ptr, "Overflow in png_memset_check.");
|
||||||
|
|
||||||
|
return (png_memset (s1, value, size));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
/* This function is called when the application wants to use another method
|
/* This function is called when the application wants to use another method
|
||||||
@ -647,11 +631,10 @@ png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr
|
|||||||
* pointer before png_write_destroy and png_read_destroy are called.
|
* pointer before png_write_destroy and png_read_destroy are called.
|
||||||
*/
|
*/
|
||||||
png_voidp PNGAPI
|
png_voidp PNGAPI
|
||||||
png_get_mem_ptr(png_const_structp png_ptr)
|
png_get_mem_ptr(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
return ((png_voidp)png_ptr->mem_ptr);
|
return ((png_voidp)png_ptr->mem_ptr);
|
||||||
}
|
}
|
||||||
#endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
|
897
Externals/libpng/pngpread.c
vendored
707
Externals/libpng/pngread.c
vendored
62
Externals/libpng/pngrio.c
vendored
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngrio.c - functions for data input
|
/* pngrio.c - functions for data input
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.5.0 [January 6, 2011]
|
* Last changed in libpng 1.2.43 [February 25, 2010]
|
||||||
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2010 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -18,8 +18,9 @@
|
|||||||
* libpng use it at run time with png_set_read_fn(...).
|
* libpng use it at run time with png_set_read_fn(...).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pngpriv.h"
|
#define PNG_INTERNAL
|
||||||
|
#define PNG_NO_PEDANTIC_WARNINGS
|
||||||
|
#include "png.h"
|
||||||
#ifdef PNG_READ_SUPPORTED
|
#ifdef PNG_READ_SUPPORTED
|
||||||
|
|
||||||
/* Read the data from whatever input you are using. The default routine
|
/* Read the data from whatever input you are using. The default routine
|
||||||
@ -35,7 +36,6 @@ png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
|||||||
|
|
||||||
if (png_ptr->read_data_fn != NULL)
|
if (png_ptr->read_data_fn != NULL)
|
||||||
(*(png_ptr->read_data_fn))(png_ptr, data, length);
|
(*(png_ptr->read_data_fn))(png_ptr, data, length);
|
||||||
|
|
||||||
else
|
else
|
||||||
png_error(png_ptr, "Call to NULL read function");
|
png_error(png_ptr, "Call to NULL read function");
|
||||||
}
|
}
|
||||||
@ -46,24 +46,29 @@ png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
|||||||
* read_data function and use it at run time with png_set_read_fn(), rather
|
* read_data function and use it at run time with png_set_read_fn(), rather
|
||||||
* than changing the library.
|
* than changing the library.
|
||||||
*/
|
*/
|
||||||
# ifndef USE_FAR_KEYWORD
|
#ifndef USE_FAR_KEYWORD
|
||||||
void PNGCBAPI
|
void PNGAPI
|
||||||
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
png_size_t check;
|
png_size_t check;
|
||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* fread() returns 0 on error, so it is OK to store this in a png_size_t
|
/* fread() returns 0 on error, so it is OK to store this in a png_size_t
|
||||||
* instead of an int, which is what fread() actually returns.
|
* instead of an int, which is what fread() actually returns.
|
||||||
*/
|
*/
|
||||||
check = fread(data, 1, length, (png_FILE_p)png_ptr->io_ptr);
|
#ifdef _WIN32_WCE
|
||||||
|
if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) )
|
||||||
|
check = 0;
|
||||||
|
#else
|
||||||
|
check = (png_size_t)fread(data, (png_size_t)1, length,
|
||||||
|
(png_FILE_p)png_ptr->io_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (check != length)
|
if (check != length)
|
||||||
png_error(png_ptr, "Read Error");
|
png_error(png_ptr, "Read Error");
|
||||||
}
|
}
|
||||||
# else
|
#else
|
||||||
/* This is the model-independent version. Since the standard I/O library
|
/* This is the model-independent version. Since the standard I/O library
|
||||||
can't handle far buffers in the medium and small models, we have to copy
|
can't handle far buffers in the medium and small models, we have to copy
|
||||||
the data.
|
the data.
|
||||||
@ -72,66 +77,66 @@ png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
|||||||
#define NEAR_BUF_SIZE 1024
|
#define NEAR_BUF_SIZE 1024
|
||||||
#define MIN(a,b) (a <= b ? a : b)
|
#define MIN(a,b) (a <= b ? a : b)
|
||||||
|
|
||||||
static void PNGCBAPI
|
static void PNGAPI
|
||||||
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
png_size_t check;
|
int check;
|
||||||
png_byte *n_data;
|
png_byte *n_data;
|
||||||
png_FILE_p io_ptr;
|
png_FILE_p io_ptr;
|
||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Check if data really is near. If so, use usual code. */
|
/* Check if data really is near. If so, use usual code. */
|
||||||
n_data = (png_byte *)CVT_PTR_NOCHECK(data);
|
n_data = (png_byte *)CVT_PTR_NOCHECK(data);
|
||||||
io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
|
io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
|
||||||
|
|
||||||
if ((png_bytep)n_data == data)
|
if ((png_bytep)n_data == data)
|
||||||
{
|
{
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check,
|
||||||
|
NULL) )
|
||||||
|
check = 0;
|
||||||
|
#else
|
||||||
check = fread(n_data, 1, length, io_ptr);
|
check = fread(n_data, 1, length, io_ptr);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_byte buf[NEAR_BUF_SIZE];
|
png_byte buf[NEAR_BUF_SIZE];
|
||||||
png_size_t read, remaining, err;
|
png_size_t read, remaining, err;
|
||||||
check = 0;
|
check = 0;
|
||||||
remaining = length;
|
remaining = length;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
read = MIN(NEAR_BUF_SIZE, remaining);
|
read = MIN(NEAR_BUF_SIZE, remaining);
|
||||||
err = fread(buf, 1, read, io_ptr);
|
#ifdef _WIN32_WCE
|
||||||
|
if ( !ReadFile((HANDLE)(io_ptr), buf, read, &err, NULL) )
|
||||||
|
err = 0;
|
||||||
|
#else
|
||||||
|
err = fread(buf, (png_size_t)1, read, io_ptr);
|
||||||
|
#endif
|
||||||
png_memcpy(data, buf, read); /* copy far buffer to near buffer */
|
png_memcpy(data, buf, read); /* copy far buffer to near buffer */
|
||||||
|
|
||||||
if (err != read)
|
if (err != read)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
else
|
else
|
||||||
check += err;
|
check += err;
|
||||||
|
|
||||||
data += read;
|
data += read;
|
||||||
remaining -= read;
|
remaining -= read;
|
||||||
}
|
}
|
||||||
while (remaining != 0);
|
while (remaining != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((png_uint_32)check != (png_uint_32)length)
|
if ((png_uint_32)check != (png_uint_32)length)
|
||||||
png_error(png_ptr, "read Error");
|
png_error(png_ptr, "read Error");
|
||||||
}
|
}
|
||||||
# endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This function allows the application to supply a new input function
|
/* This function allows the application to supply a new input function
|
||||||
* for libpng if standard C streams aren't being used.
|
* for libpng if standard C streams aren't being used.
|
||||||
*
|
*
|
||||||
* This function takes as its arguments:
|
* This function takes as its arguments:
|
||||||
*
|
|
||||||
* png_ptr - pointer to a png input data structure
|
* png_ptr - pointer to a png input data structure
|
||||||
*
|
|
||||||
* io_ptr - pointer to user supplied structure containing info about
|
* io_ptr - pointer to user supplied structure containing info about
|
||||||
* the input functions. May be NULL.
|
* the input functions. May be NULL.
|
||||||
*
|
|
||||||
* read_data_fn - pointer to a new input function that takes as its
|
* read_data_fn - pointer to a new input function that takes as its
|
||||||
* arguments a pointer to a png_struct, a pointer to
|
* arguments a pointer to a png_struct, a pointer to
|
||||||
* a location where input data can be stored, and a 32-bit
|
* a location where input data can be stored, and a 32-bit
|
||||||
@ -147,13 +152,11 @@ png_set_read_fn(png_structp png_ptr, png_voidp io_ptr,
|
|||||||
{
|
{
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
png_ptr->io_ptr = io_ptr;
|
png_ptr->io_ptr = io_ptr;
|
||||||
|
|
||||||
#ifdef PNG_STDIO_SUPPORTED
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
if (read_data_fn != NULL)
|
if (read_data_fn != NULL)
|
||||||
png_ptr->read_data_fn = read_data_fn;
|
png_ptr->read_data_fn = read_data_fn;
|
||||||
|
|
||||||
else
|
else
|
||||||
png_ptr->read_data_fn = png_default_read_data;
|
png_ptr->read_data_fn = png_default_read_data;
|
||||||
#else
|
#else
|
||||||
@ -165,8 +168,9 @@ png_set_read_fn(png_structp png_ptr, png_voidp io_ptr,
|
|||||||
{
|
{
|
||||||
png_ptr->write_data_fn = NULL;
|
png_ptr->write_data_fn = NULL;
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"Can't set both read_data_fn and write_data_fn in the"
|
"It's an error to set both read_data_fn and write_data_fn in the ");
|
||||||
" same structure");
|
png_warning(png_ptr,
|
||||||
|
"same structure. Resetting write_data_fn to NULL.");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_FLUSH_SUPPORTED
|
#ifdef PNG_WRITE_FLUSH_SUPPORTED
|
||||||
|
1842
Externals/libpng/pngrtran.c
vendored
1458
Externals/libpng/pngrutil.c
vendored
829
Externals/libpng/pngset.c
vendored
1705
Externals/libpng/pngtest.c
vendored
Normal file
162
Externals/libpng/pngtrans.c
vendored
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.5.1 [February 3, 2011]
|
* Last changed in libpng 1.2.41 [December 3, 2009]
|
||||||
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2009 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -11,8 +11,9 @@
|
|||||||
* and license in png.h
|
* and license in png.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pngpriv.h"
|
#define PNG_INTERNAL
|
||||||
|
#define PNG_NO_PEDANTIC_WARNINGS
|
||||||
|
#include "png.h"
|
||||||
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
|
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
|
||||||
|
|
||||||
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
|
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
|
||||||
@ -24,7 +25,6 @@ png_set_bgr(png_structp png_ptr)
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
png_ptr->transformations |= PNG_BGR;
|
png_ptr->transformations |= PNG_BGR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -38,7 +38,6 @@ png_set_swap(png_structp png_ptr)
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (png_ptr->bit_depth == 16)
|
if (png_ptr->bit_depth == 16)
|
||||||
png_ptr->transformations |= PNG_SWAP_BYTES;
|
png_ptr->transformations |= PNG_SWAP_BYTES;
|
||||||
}
|
}
|
||||||
@ -53,7 +52,6 @@ png_set_packing(png_structp png_ptr)
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (png_ptr->bit_depth < 8)
|
if (png_ptr->bit_depth < 8)
|
||||||
{
|
{
|
||||||
png_ptr->transformations |= PNG_PACK;
|
png_ptr->transformations |= PNG_PACK;
|
||||||
@ -71,7 +69,6 @@ png_set_packswap(png_structp png_ptr)
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (png_ptr->bit_depth < 8)
|
if (png_ptr->bit_depth < 8)
|
||||||
png_ptr->transformations |= PNG_PACKSWAP;
|
png_ptr->transformations |= PNG_PACKSWAP;
|
||||||
}
|
}
|
||||||
@ -79,13 +76,12 @@ png_set_packswap(png_structp png_ptr)
|
|||||||
|
|
||||||
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
|
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_shift(png_structp png_ptr, png_const_color_8p true_bits)
|
png_set_shift(png_structp png_ptr, png_color_8p true_bits)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_set_shift");
|
png_debug(1, "in png_set_shift");
|
||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
png_ptr->transformations |= PNG_SHIFT;
|
png_ptr->transformations |= PNG_SHIFT;
|
||||||
png_ptr->shift = *true_bits;
|
png_ptr->shift = *true_bits;
|
||||||
}
|
}
|
||||||
@ -121,13 +117,14 @@ png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc)
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
png_ptr->transformations |= PNG_FILLER;
|
png_ptr->transformations |= PNG_FILLER;
|
||||||
|
#ifdef PNG_LEGACY_SUPPORTED
|
||||||
|
png_ptr->filler = (png_byte)filler;
|
||||||
|
#else
|
||||||
png_ptr->filler = (png_uint_16)filler;
|
png_ptr->filler = (png_uint_16)filler;
|
||||||
|
#endif
|
||||||
if (filler_loc == PNG_FILLER_AFTER)
|
if (filler_loc == PNG_FILLER_AFTER)
|
||||||
png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
|
png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
|
||||||
|
|
||||||
else
|
else
|
||||||
png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER;
|
png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER;
|
||||||
|
|
||||||
@ -142,7 +139,7 @@ png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Also I added this in libpng-1.0.2a (what happens when we expand
|
/* Also I added this in libpng-1.0.2a (what happens when we expand
|
||||||
* a less-than-8-bit grayscale to GA?) */
|
* a less-than-8-bit grayscale to GA? */
|
||||||
|
|
||||||
if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY && png_ptr->bit_depth >= 8)
|
if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY && png_ptr->bit_depth >= 8)
|
||||||
{
|
{
|
||||||
@ -150,6 +147,7 @@ png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef PNG_1_0_X
|
||||||
/* Added to libpng-1.2.7 */
|
/* Added to libpng-1.2.7 */
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc)
|
png_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc)
|
||||||
@ -158,10 +156,10 @@ png_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc)
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
png_set_filler(png_ptr, filler, filler_loc);
|
png_set_filler(png_ptr, filler, filler_loc);
|
||||||
png_ptr->transformations |= PNG_ADD_ALPHA;
|
png_ptr->transformations |= PNG_ADD_ALPHA;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -174,7 +172,6 @@ png_set_swap_alpha(png_structp png_ptr)
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
png_ptr->transformations |= PNG_SWAP_ALPHA;
|
png_ptr->transformations |= PNG_SWAP_ALPHA;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -188,7 +185,6 @@ png_set_invert_alpha(png_structp png_ptr)
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
png_ptr->transformations |= PNG_INVERT_ALPHA;
|
png_ptr->transformations |= PNG_INVERT_ALPHA;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -201,7 +197,6 @@ png_set_invert_mono(png_structp png_ptr)
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
png_ptr->transformations |= PNG_INVERT_MONO;
|
png_ptr->transformations |= PNG_INVERT_MONO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,11 +209,15 @@ png_do_invert(png_row_infop row_info, png_bytep row)
|
|||||||
/* This test removed from libpng version 1.0.13 and 1.2.0:
|
/* This test removed from libpng version 1.0.13 and 1.2.0:
|
||||||
* if (row_info->bit_depth == 1 &&
|
* if (row_info->bit_depth == 1 &&
|
||||||
*/
|
*/
|
||||||
|
#ifdef PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
if (row == NULL || row_info == NULL)
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
|
if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
|
||||||
{
|
{
|
||||||
png_bytep rp = row;
|
png_bytep rp = row;
|
||||||
png_size_t i;
|
png_uint_32 i;
|
||||||
png_size_t istop = row_info->rowbytes;
|
png_uint_32 istop = row_info->rowbytes;
|
||||||
|
|
||||||
for (i = 0; i < istop; i++)
|
for (i = 0; i < istop; i++)
|
||||||
{
|
{
|
||||||
@ -226,41 +225,36 @@ png_do_invert(png_row_infop row_info, png_bytep row)
|
|||||||
rp++;
|
rp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
|
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
|
||||||
row_info->bit_depth == 8)
|
row_info->bit_depth == 8)
|
||||||
{
|
{
|
||||||
png_bytep rp = row;
|
png_bytep rp = row;
|
||||||
png_size_t i;
|
png_uint_32 i;
|
||||||
png_size_t istop = row_info->rowbytes;
|
png_uint_32 istop = row_info->rowbytes;
|
||||||
|
|
||||||
for (i = 0; i < istop; i += 2)
|
for (i = 0; i < istop; i+=2)
|
||||||
{
|
{
|
||||||
*rp = (png_byte)(~(*rp));
|
*rp = (png_byte)(~(*rp));
|
||||||
rp += 2;
|
rp+=2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_16BIT_SUPPORTED
|
|
||||||
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
|
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
|
||||||
row_info->bit_depth == 16)
|
row_info->bit_depth == 16)
|
||||||
{
|
{
|
||||||
png_bytep rp = row;
|
png_bytep rp = row;
|
||||||
png_size_t i;
|
png_uint_32 i;
|
||||||
png_size_t istop = row_info->rowbytes;
|
png_uint_32 istop = row_info->rowbytes;
|
||||||
|
|
||||||
for (i = 0; i < istop; i += 4)
|
for (i = 0; i < istop; i+=4)
|
||||||
{
|
{
|
||||||
*rp = (png_byte)(~(*rp));
|
*rp = (png_byte)(~(*rp));
|
||||||
*(rp + 1) = (png_byte)(~(*(rp + 1)));
|
*(rp+1) = (png_byte)(~(*(rp+1)));
|
||||||
rp += 4;
|
rp+=4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_16BIT_SUPPORTED
|
|
||||||
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
|
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
|
||||||
/* Swaps byte order on 16 bit depth images */
|
/* Swaps byte order on 16 bit depth images */
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
@ -268,7 +262,11 @@ png_do_swap(png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
png_debug(1, "in png_do_swap");
|
png_debug(1, "in png_do_swap");
|
||||||
|
|
||||||
if (row_info->bit_depth == 16)
|
if (
|
||||||
|
#ifdef PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
row != NULL && row_info != NULL &&
|
||||||
|
#endif
|
||||||
|
row_info->bit_depth == 16)
|
||||||
{
|
{
|
||||||
png_bytep rp = row;
|
png_bytep rp = row;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
@ -283,7 +281,6 @@ png_do_swap(png_row_infop row_info, png_bytep row)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
|
#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
|
||||||
static PNG_CONST png_byte onebppswaptable[256] = {
|
static PNG_CONST png_byte onebppswaptable[256] = {
|
||||||
@ -397,22 +394,22 @@ png_do_packswap(png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
png_debug(1, "in png_do_packswap");
|
png_debug(1, "in png_do_packswap");
|
||||||
|
|
||||||
if (row_info->bit_depth < 8)
|
if (
|
||||||
|
#ifdef PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
row != NULL && row_info != NULL &&
|
||||||
|
#endif
|
||||||
|
row_info->bit_depth < 8)
|
||||||
{
|
{
|
||||||
png_bytep rp;
|
png_bytep rp, end, table;
|
||||||
png_const_bytep end, table;
|
|
||||||
|
|
||||||
end = row + row_info->rowbytes;
|
end = row + row_info->rowbytes;
|
||||||
|
|
||||||
if (row_info->bit_depth == 1)
|
if (row_info->bit_depth == 1)
|
||||||
table = onebppswaptable;
|
table = (png_bytep)onebppswaptable;
|
||||||
|
|
||||||
else if (row_info->bit_depth == 2)
|
else if (row_info->bit_depth == 2)
|
||||||
table = twobppswaptable;
|
table = (png_bytep)twobppswaptable;
|
||||||
|
|
||||||
else if (row_info->bit_depth == 4)
|
else if (row_info->bit_depth == 4)
|
||||||
table = fourbppswaptable;
|
table = (png_bytep)fourbppswaptable;
|
||||||
|
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -430,10 +427,13 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
|||||||
{
|
{
|
||||||
png_debug(1, "in png_do_strip_filler");
|
png_debug(1, "in png_do_strip_filler");
|
||||||
|
|
||||||
|
#ifdef PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
if (row != NULL && row_info != NULL)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
png_bytep sp = row;
|
png_bytep sp=row;
|
||||||
png_bytep dp = row;
|
png_bytep dp=row;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width=row_info->width;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
|
|
||||||
if ((row_info->color_type == PNG_COLOR_TYPE_RGB ||
|
if ((row_info->color_type == PNG_COLOR_TYPE_RGB ||
|
||||||
@ -446,7 +446,7 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
|||||||
/* This converts from RGBX or RGBA to RGB */
|
/* This converts from RGBX or RGBA to RGB */
|
||||||
if (flags & PNG_FLAG_FILLER_AFTER)
|
if (flags & PNG_FLAG_FILLER_AFTER)
|
||||||
{
|
{
|
||||||
dp += 3; sp += 4;
|
dp+=3; sp+=4;
|
||||||
for (i = 1; i < row_width; i++)
|
for (i = 1; i < row_width; i++)
|
||||||
{
|
{
|
||||||
*dp++ = *sp++;
|
*dp++ = *sp++;
|
||||||
@ -455,7 +455,6 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
|||||||
sp++;
|
sp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This converts from XRGB or ARGB to RGB */
|
/* This converts from XRGB or ARGB to RGB */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -470,7 +469,6 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
|||||||
row_info->pixel_depth = 24;
|
row_info->pixel_depth = 24;
|
||||||
row_info->rowbytes = row_width * 3;
|
row_info->rowbytes = row_width * 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
else /* if (row_info->bit_depth == 16) */
|
else /* if (row_info->bit_depth == 16) */
|
||||||
{
|
{
|
||||||
if (flags & PNG_FLAG_FILLER_AFTER)
|
if (flags & PNG_FLAG_FILLER_AFTER)
|
||||||
@ -494,7 +492,6 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
|||||||
sp += 2;
|
sp += 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* This converts from XXRRGGBB or AARRGGBB to RRGGBB */
|
/* This converts from XXRRGGBB or AARRGGBB to RRGGBB */
|
||||||
@ -506,7 +503,7 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
|||||||
dp += 6;
|
dp += 6;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
sp += 2;
|
sp+=2;
|
||||||
*dp++ = *sp++;
|
*dp++ = *sp++;
|
||||||
*dp++ = *sp++;
|
*dp++ = *sp++;
|
||||||
*dp++ = *sp++;
|
*dp++ = *sp++;
|
||||||
@ -515,13 +512,11 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
|||||||
*dp++ = *sp++;
|
*dp++ = *sp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
row_info->pixel_depth = 48;
|
row_info->pixel_depth = 48;
|
||||||
row_info->rowbytes = row_width * 6;
|
row_info->rowbytes = row_width * 6;
|
||||||
}
|
}
|
||||||
row_info->channels = 3;
|
row_info->channels = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ((row_info->color_type == PNG_COLOR_TYPE_GRAY ||
|
else if ((row_info->color_type == PNG_COLOR_TYPE_GRAY ||
|
||||||
(row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
|
(row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
|
||||||
(flags & PNG_FLAG_STRIP_ALPHA))) &&
|
(flags & PNG_FLAG_STRIP_ALPHA))) &&
|
||||||
@ -529,30 +524,27 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
|||||||
{
|
{
|
||||||
if (row_info->bit_depth == 8)
|
if (row_info->bit_depth == 8)
|
||||||
{
|
{
|
||||||
|
/* This converts from GX or GA to G */
|
||||||
if (flags & PNG_FLAG_FILLER_AFTER)
|
if (flags & PNG_FLAG_FILLER_AFTER)
|
||||||
{
|
{
|
||||||
/* This converts from GX or GA to G */
|
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
*dp++ = *sp++;
|
*dp++ = *sp++;
|
||||||
sp++;
|
sp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* This converts from XG or AG to G */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* This converts from XG or AG to G */
|
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
sp++;
|
sp++;
|
||||||
*dp++ = *sp++;
|
*dp++ = *sp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
row_info->pixel_depth = 8;
|
row_info->pixel_depth = 8;
|
||||||
row_info->rowbytes = row_width;
|
row_info->rowbytes = row_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
else /* if (row_info->bit_depth == 16) */
|
else /* if (row_info->bit_depth == 16) */
|
||||||
{
|
{
|
||||||
if (flags & PNG_FLAG_FILLER_AFTER)
|
if (flags & PNG_FLAG_FILLER_AFTER)
|
||||||
@ -566,7 +558,6 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
|||||||
sp += 2;
|
sp += 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* This converts from XXGG or AAGG to GG */
|
/* This converts from XXGG or AAGG to GG */
|
||||||
@ -577,16 +568,13 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
|||||||
*dp++ = *sp++;
|
*dp++ = *sp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
row_info->pixel_depth = 16;
|
row_info->pixel_depth = 16;
|
||||||
row_info->rowbytes = row_width * 2;
|
row_info->rowbytes = row_width * 2;
|
||||||
}
|
}
|
||||||
row_info->channels = 1;
|
row_info->channels = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & PNG_FLAG_STRIP_ALPHA)
|
if (flags & PNG_FLAG_STRIP_ALPHA)
|
||||||
row_info->color_type = (png_byte)(row_info->color_type &
|
row_info->color_type &= ~PNG_COLOR_MASK_ALPHA;
|
||||||
~PNG_COLOR_MASK_ALPHA);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -598,7 +586,11 @@ png_do_bgr(png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
png_debug(1, "in png_do_bgr");
|
png_debug(1, "in png_do_bgr");
|
||||||
|
|
||||||
if ((row_info->color_type & PNG_COLOR_MASK_COLOR))
|
if (
|
||||||
|
#ifdef PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
row != NULL && row_info != NULL &&
|
||||||
|
#endif
|
||||||
|
(row_info->color_type & PNG_COLOR_MASK_COLOR))
|
||||||
{
|
{
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
if (row_info->bit_depth == 8)
|
if (row_info->bit_depth == 8)
|
||||||
@ -615,7 +607,6 @@ png_do_bgr(png_row_infop row_info, png_bytep row)
|
|||||||
*(rp + 2) = save;
|
*(rp + 2) = save;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
{
|
{
|
||||||
png_bytep rp;
|
png_bytep rp;
|
||||||
@ -629,8 +620,6 @@ png_do_bgr(png_row_infop row_info, png_bytep row)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_16BIT_SUPPORTED
|
|
||||||
else if (row_info->bit_depth == 16)
|
else if (row_info->bit_depth == 16)
|
||||||
{
|
{
|
||||||
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
|
||||||
@ -648,7 +637,6 @@ png_do_bgr(png_row_infop row_info, png_bytep row)
|
|||||||
*(rp + 5) = save;
|
*(rp + 5) = save;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
{
|
{
|
||||||
png_bytep rp;
|
png_bytep rp;
|
||||||
@ -665,14 +653,13 @@ png_do_bgr(png_row_infop row_info, png_bytep row)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */
|
#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */
|
||||||
|
|
||||||
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
|
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
|
||||||
|
defined(PNG_LEGACY_SUPPORTED) || \
|
||||||
defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
|
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_user_transform_info(png_structp png_ptr, png_voidp
|
png_set_user_transform_info(png_structp png_ptr, png_voidp
|
||||||
user_transform_ptr, int user_transform_depth, int user_transform_channels)
|
user_transform_ptr, int user_transform_depth, int user_transform_channels)
|
||||||
@ -681,9 +668,15 @@ png_set_user_transform_info(png_structp png_ptr, png_voidp
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
|
||||||
png_ptr->user_transform_ptr = user_transform_ptr;
|
png_ptr->user_transform_ptr = user_transform_ptr;
|
||||||
png_ptr->user_transform_depth = (png_byte)user_transform_depth;
|
png_ptr->user_transform_depth = (png_byte)user_transform_depth;
|
||||||
png_ptr->user_transform_channels = (png_byte)user_transform_channels;
|
png_ptr->user_transform_channels = (png_byte)user_transform_channels;
|
||||||
|
#else
|
||||||
|
if (user_transform_ptr || user_transform_depth || user_transform_channels)
|
||||||
|
png_warning(png_ptr,
|
||||||
|
"This version of libpng does not support user transform info");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -692,32 +685,15 @@ png_set_user_transform_info(png_structp png_ptr, png_voidp
|
|||||||
* associated with this pointer before png_write_destroy and png_read_destroy
|
* associated with this pointer before png_write_destroy and png_read_destroy
|
||||||
* are called.
|
* are called.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
|
|
||||||
png_voidp PNGAPI
|
png_voidp PNGAPI
|
||||||
png_get_user_transform_ptr(png_const_structp png_ptr)
|
png_get_user_transform_ptr(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
|
||||||
return ((png_voidp)png_ptr->user_transform_ptr);
|
return ((png_voidp)png_ptr->user_transform_ptr);
|
||||||
}
|
#else
|
||||||
|
return (NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
png_uint_32 PNGAPI
|
|
||||||
png_get_current_row_number(png_const_structp png_ptr)
|
|
||||||
{
|
|
||||||
if (png_ptr != NULL)
|
|
||||||
return png_ptr->row_number;
|
|
||||||
return PNG_UINT_32_MAX; /* help the app not to fail silently */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
png_byte PNGAPI
|
|
||||||
png_get_current_pass_number(png_const_structp png_ptr)
|
|
||||||
{
|
|
||||||
if (png_ptr != NULL)
|
|
||||||
return png_ptr->pass;
|
|
||||||
return 8; /* invalid */
|
|
||||||
}
|
|
||||||
#endif /* PNG_READ_USER_TRANSFORM_SUPPORTED ||
|
|
||||||
PNG_WRITE_USER_TRANSFORM_SUPPORTED */
|
|
||||||
#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
|
#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
|
||||||
|
12
Externals/libpng/pngvcrd.c
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/* pngvcrd.c
|
||||||
|
*
|
||||||
|
* Last changed in libpng 1.2.48 [March 8, 2012]
|
||||||
|
* Copyright (c) 1998-2012 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
|
||||||
|
*
|
||||||
|
* This nearly empty file is for use by configure's compilation test. The
|
||||||
|
* remainder of the file was removed from libpng-1.2.20.
|
||||||
|
*/
|
78
Externals/libpng/pngwio.c
vendored
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngwio.c - functions for data output
|
/* pngwio.c - functions for data output
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.5.0 [January 6, 2011]
|
* Last changed in libpng 1.2.41 [December 3, 2009]
|
||||||
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2009 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -18,8 +18,9 @@
|
|||||||
* them at run time with png_set_write_fn(...).
|
* them at run time with png_set_write_fn(...).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pngpriv.h"
|
#define PNG_INTERNAL
|
||||||
|
#define PNG_NO_PEDANTIC_WARNINGS
|
||||||
|
#include "png.h"
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_SUPPORTED
|
||||||
|
|
||||||
/* Write the data to whatever output you are using. The default routine
|
/* Write the data to whatever output you are using. The default routine
|
||||||
@ -30,12 +31,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_write_data(png_structp png_ptr, png_const_bytep data, png_size_t length)
|
png_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
/* NOTE: write_data_fn must not change the buffer! */
|
|
||||||
if (png_ptr->write_data_fn != NULL )
|
if (png_ptr->write_data_fn != NULL )
|
||||||
(*(png_ptr->write_data_fn))(png_ptr, (png_bytep)data, length);
|
(*(png_ptr->write_data_fn))(png_ptr, data, length);
|
||||||
|
|
||||||
else
|
else
|
||||||
png_error(png_ptr, "Call to NULL write function");
|
png_error(png_ptr, "Call to NULL write function");
|
||||||
}
|
}
|
||||||
@ -47,16 +46,19 @@ png_write_data(png_structp png_ptr, png_const_bytep data, png_size_t length)
|
|||||||
* than changing the library.
|
* than changing the library.
|
||||||
*/
|
*/
|
||||||
#ifndef USE_FAR_KEYWORD
|
#ifndef USE_FAR_KEYWORD
|
||||||
void PNGCBAPI
|
void PNGAPI
|
||||||
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
png_size_t check;
|
png_uint_32 check;
|
||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
if ( !WriteFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) )
|
||||||
|
check = 0;
|
||||||
|
#else
|
||||||
check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr));
|
check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr));
|
||||||
|
#endif
|
||||||
if (check != length)
|
if (check != length)
|
||||||
png_error(png_ptr, "Write Error");
|
png_error(png_ptr, "Write Error");
|
||||||
}
|
}
|
||||||
@ -69,7 +71,7 @@ png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
|||||||
#define NEAR_BUF_SIZE 1024
|
#define NEAR_BUF_SIZE 1024
|
||||||
#define MIN(a,b) (a <= b ? a : b)
|
#define MIN(a,b) (a <= b ? a : b)
|
||||||
|
|
||||||
void PNGCBAPI
|
void PNGAPI
|
||||||
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
png_uint_32 check;
|
png_uint_32 check;
|
||||||
@ -78,29 +80,34 @@ png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Check if data really is near. If so, use usual code. */
|
/* Check if data really is near. If so, use usual code. */
|
||||||
near_data = (png_byte *)CVT_PTR_NOCHECK(data);
|
near_data = (png_byte *)CVT_PTR_NOCHECK(data);
|
||||||
io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
|
io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
|
||||||
|
|
||||||
if ((png_bytep)near_data == data)
|
if ((png_bytep)near_data == data)
|
||||||
{
|
{
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
if ( !WriteFile(io_ptr, near_data, length, &check, NULL) )
|
||||||
|
check = 0;
|
||||||
|
#else
|
||||||
check = fwrite(near_data, 1, length, io_ptr);
|
check = fwrite(near_data, 1, length, io_ptr);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_byte buf[NEAR_BUF_SIZE];
|
png_byte buf[NEAR_BUF_SIZE];
|
||||||
png_size_t written, remaining, err;
|
png_size_t written, remaining, err;
|
||||||
check = 0;
|
check = 0;
|
||||||
remaining = length;
|
remaining = length;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
written = MIN(NEAR_BUF_SIZE, remaining);
|
written = MIN(NEAR_BUF_SIZE, remaining);
|
||||||
png_memcpy(buf, data, written); /* Copy far buffer to near buffer */
|
png_memcpy(buf, data, written); /* Copy far buffer to near buffer */
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
if ( !WriteFile(io_ptr, buf, written, &err, NULL) )
|
||||||
|
err = 0;
|
||||||
|
#else
|
||||||
err = fwrite(buf, 1, written, io_ptr);
|
err = fwrite(buf, 1, written, io_ptr);
|
||||||
|
#endif
|
||||||
if (err != written)
|
if (err != written)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -112,7 +119,6 @@ png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
|||||||
}
|
}
|
||||||
while (remaining != 0);
|
while (remaining != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (check != length)
|
if (check != length)
|
||||||
png_error(png_ptr, "Write Error");
|
png_error(png_ptr, "Write Error");
|
||||||
}
|
}
|
||||||
@ -132,19 +138,21 @@ png_flush(png_structp png_ptr)
|
|||||||
(*(png_ptr->output_flush_fn))(png_ptr);
|
(*(png_ptr->output_flush_fn))(png_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
# ifdef PNG_STDIO_SUPPORTED
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
void PNGCBAPI
|
void PNGAPI
|
||||||
png_default_flush(png_structp png_ptr)
|
png_default_flush(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
png_FILE_p io_ptr;
|
png_FILE_p io_ptr;
|
||||||
|
#endif
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr));
|
io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr));
|
||||||
fflush(io_ptr);
|
fflush(io_ptr);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
# endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This function allows the application to supply new output functions for
|
/* This function allows the application to supply new output functions for
|
||||||
@ -178,7 +186,7 @@ png_default_flush(png_structp png_ptr)
|
|||||||
*/
|
*/
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_write_fn(png_structp png_ptr, png_voidp io_ptr,
|
png_set_write_fn(png_structp png_ptr, png_voidp io_ptr,
|
||||||
png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)
|
png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
@ -196,32 +204,30 @@ png_set_write_fn(png_structp png_ptr, png_voidp io_ptr,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_FLUSH_SUPPORTED
|
#ifdef PNG_WRITE_FLUSH_SUPPORTED
|
||||||
# ifdef PNG_STDIO_SUPPORTED
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
|
|
||||||
if (output_flush_fn != NULL)
|
if (output_flush_fn != NULL)
|
||||||
png_ptr->output_flush_fn = output_flush_fn;
|
png_ptr->output_flush_fn = output_flush_fn;
|
||||||
|
|
||||||
else
|
else
|
||||||
png_ptr->output_flush_fn = png_default_flush;
|
png_ptr->output_flush_fn = png_default_flush;
|
||||||
|
#else
|
||||||
# else
|
|
||||||
png_ptr->output_flush_fn = output_flush_fn;
|
png_ptr->output_flush_fn = output_flush_fn;
|
||||||
# endif
|
#endif
|
||||||
#endif /* PNG_WRITE_FLUSH_SUPPORTED */
|
#endif /* PNG_WRITE_FLUSH_SUPPORTED */
|
||||||
|
|
||||||
/* It is an error to read while writing a png file */
|
/* It is an error to read while writing a png file */
|
||||||
if (png_ptr->read_data_fn != NULL)
|
if (png_ptr->read_data_fn != NULL)
|
||||||
{
|
{
|
||||||
png_ptr->read_data_fn = NULL;
|
png_ptr->read_data_fn = NULL;
|
||||||
|
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"Can't set both read_data_fn and write_data_fn in the"
|
"Attempted to set both read_data_fn and write_data_fn in");
|
||||||
" same structure");
|
png_warning(png_ptr,
|
||||||
|
"the same structure. Resetting read_data_fn to NULL.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
# ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
void *png_far_to_near(png_structp png_ptr, png_voidp ptr, int check)
|
void *png_far_to_near(png_structp png_ptr, png_voidp ptr, int check)
|
||||||
{
|
{
|
||||||
void *near_ptr;
|
void *near_ptr;
|
||||||
@ -249,6 +255,6 @@ void *png_far_to_near(png_structp png_ptr, png_voidp ptr, int check)
|
|||||||
|
|
||||||
return(near_ptr);
|
return(near_ptr);
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
#endif
|
# endif
|
||||||
#endif /* PNG_WRITE_SUPPORTED */
|
#endif /* PNG_WRITE_SUPPORTED */
|
||||||
|
842
Externals/libpng/pngwrite.c
vendored
167
Externals/libpng/pngwtran.c
vendored
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngwtran.c - transforms the data in a row for PNG writers
|
/* pngwtran.c - transforms the data in a row for PNG writers
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.5.0 [January 6, 2011]
|
* Last changed in libpng 1.2.43 [February 25, 2010]
|
||||||
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2010 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -11,8 +11,9 @@
|
|||||||
* and license in png.h
|
* and license in png.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pngpriv.h"
|
#define PNG_INTERNAL
|
||||||
|
#define PNG_NO_PEDANTIC_WARNINGS
|
||||||
|
#include "png.h"
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_SUPPORTED
|
||||||
|
|
||||||
/* Transform the data according to the user's wishes. The order of
|
/* Transform the data according to the user's wishes. The order of
|
||||||
@ -29,62 +30,53 @@ png_do_write_transformations(png_structp png_ptr)
|
|||||||
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
||||||
if (png_ptr->transformations & PNG_USER_TRANSFORM)
|
if (png_ptr->transformations & PNG_USER_TRANSFORM)
|
||||||
if (png_ptr->write_user_transform_fn != NULL)
|
if (png_ptr->write_user_transform_fn != NULL)
|
||||||
(*(png_ptr->write_user_transform_fn)) /* User write transform
|
(*(png_ptr->write_user_transform_fn)) /* User write transform
|
||||||
function */
|
function */
|
||||||
(png_ptr, /* png_ptr */
|
(png_ptr, /* png_ptr */
|
||||||
&(png_ptr->row_info), /* row_info: */
|
&(png_ptr->row_info), /* row_info: */
|
||||||
/* png_uint_32 width; width of row */
|
/* png_uint_32 width; width of row */
|
||||||
/* png_size_t rowbytes; number of bytes in row */
|
/* png_uint_32 rowbytes; number of bytes in row */
|
||||||
/* png_byte color_type; color type of pixels */
|
/* png_byte color_type; color type of pixels */
|
||||||
/* png_byte bit_depth; bit depth of samples */
|
/* png_byte bit_depth; bit depth of samples */
|
||||||
/* png_byte channels; number of channels (1-4) */
|
/* png_byte channels; number of channels (1-4) */
|
||||||
/* png_byte pixel_depth; bits per pixel (depth*channels) */
|
/* png_byte pixel_depth; bits per pixel (depth*channels) */
|
||||||
png_ptr->row_buf + 1); /* start of pixel data for row */
|
png_ptr->row_buf + 1); /* start of pixel data for row */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_FILLER_SUPPORTED
|
#ifdef PNG_WRITE_FILLER_SUPPORTED
|
||||||
if (png_ptr->transformations & PNG_FILLER)
|
if (png_ptr->transformations & PNG_FILLER)
|
||||||
png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
||||||
png_ptr->flags);
|
png_ptr->flags);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
|
#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
|
||||||
if (png_ptr->transformations & PNG_PACKSWAP)
|
if (png_ptr->transformations & PNG_PACKSWAP)
|
||||||
png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_PACK_SUPPORTED
|
#ifdef PNG_WRITE_PACK_SUPPORTED
|
||||||
if (png_ptr->transformations & PNG_PACK)
|
if (png_ptr->transformations & PNG_PACK)
|
||||||
png_do_pack(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
png_do_pack(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
||||||
(png_uint_32)png_ptr->bit_depth);
|
(png_uint_32)png_ptr->bit_depth);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SWAP_SUPPORTED
|
#ifdef PNG_WRITE_SWAP_SUPPORTED
|
||||||
if (png_ptr->transformations & PNG_SWAP_BYTES)
|
if (png_ptr->transformations & PNG_SWAP_BYTES)
|
||||||
png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SHIFT_SUPPORTED
|
#ifdef PNG_WRITE_SHIFT_SUPPORTED
|
||||||
if (png_ptr->transformations & PNG_SHIFT)
|
if (png_ptr->transformations & PNG_SHIFT)
|
||||||
png_do_shift(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
png_do_shift(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
||||||
&(png_ptr->shift));
|
&(png_ptr->shift));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
|
#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
|
||||||
if (png_ptr->transformations & PNG_SWAP_ALPHA)
|
if (png_ptr->transformations & PNG_SWAP_ALPHA)
|
||||||
png_do_write_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
png_do_write_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
|
#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
|
||||||
if (png_ptr->transformations & PNG_INVERT_ALPHA)
|
if (png_ptr->transformations & PNG_INVERT_ALPHA)
|
||||||
png_do_write_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
png_do_write_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_BGR_SUPPORTED
|
#ifdef PNG_WRITE_BGR_SUPPORTED
|
||||||
if (png_ptr->transformations & PNG_BGR)
|
if (png_ptr->transformations & PNG_BGR)
|
||||||
png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_INVERT_SUPPORTED
|
#ifdef PNG_WRITE_INVERT_SUPPORTED
|
||||||
if (png_ptr->transformations & PNG_INVERT_MONO)
|
if (png_ptr->transformations & PNG_INVERT_MONO)
|
||||||
png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
@ -102,6 +94,9 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
|||||||
png_debug(1, "in png_do_pack");
|
png_debug(1, "in png_do_pack");
|
||||||
|
|
||||||
if (row_info->bit_depth == 8 &&
|
if (row_info->bit_depth == 8 &&
|
||||||
|
#ifdef PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
row != NULL && row_info != NULL &&
|
||||||
|
#endif
|
||||||
row_info->channels == 1)
|
row_info->channels == 1)
|
||||||
{
|
{
|
||||||
switch ((int)bit_depth)
|
switch ((int)bit_depth)
|
||||||
@ -122,12 +117,9 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
|||||||
{
|
{
|
||||||
if (*sp != 0)
|
if (*sp != 0)
|
||||||
v |= mask;
|
v |= mask;
|
||||||
|
|
||||||
sp++;
|
sp++;
|
||||||
|
|
||||||
if (mask > 1)
|
if (mask > 1)
|
||||||
mask >>= 1;
|
mask >>= 1;
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mask = 0x80;
|
mask = 0x80;
|
||||||
@ -136,13 +128,10 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
|||||||
v = 0;
|
v = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask != 0x80)
|
if (mask != 0x80)
|
||||||
*dp = (png_byte)v;
|
*dp = (png_byte)v;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
@ -154,14 +143,12 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
|||||||
dp = row;
|
dp = row;
|
||||||
shift = 6;
|
shift = 6;
|
||||||
v = 0;
|
v = 0;
|
||||||
|
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
png_byte value;
|
png_byte value;
|
||||||
|
|
||||||
value = (png_byte)(*sp & 0x03);
|
value = (png_byte)(*sp & 0x03);
|
||||||
v |= (value << shift);
|
v |= (value << shift);
|
||||||
|
|
||||||
if (shift == 0)
|
if (shift == 0)
|
||||||
{
|
{
|
||||||
shift = 6;
|
shift = 6;
|
||||||
@ -169,19 +156,14 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
|||||||
dp++;
|
dp++;
|
||||||
v = 0;
|
v = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
shift -= 2;
|
shift -= 2;
|
||||||
|
|
||||||
sp++;
|
sp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shift != 6)
|
if (shift != 6)
|
||||||
*dp = (png_byte)v;
|
*dp = (png_byte)v;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
@ -193,7 +175,6 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
|||||||
dp = row;
|
dp = row;
|
||||||
shift = 4;
|
shift = 4;
|
||||||
v = 0;
|
v = 0;
|
||||||
|
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
png_byte value;
|
png_byte value;
|
||||||
@ -208,27 +189,20 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
|||||||
dp++;
|
dp++;
|
||||||
v = 0;
|
v = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
shift -= 4;
|
shift -= 4;
|
||||||
|
|
||||||
sp++;
|
sp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shift != 4)
|
if (shift != 4)
|
||||||
*dp = (png_byte)v;
|
*dp = (png_byte)v;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
row_info->bit_depth = (png_byte)bit_depth;
|
row_info->bit_depth = (png_byte)bit_depth;
|
||||||
row_info->pixel_depth = (png_byte)(bit_depth * row_info->channels);
|
row_info->pixel_depth = (png_byte)(bit_depth * row_info->channels);
|
||||||
row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
|
row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
|
||||||
row_info->width);
|
row_info->width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -242,12 +216,16 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
|||||||
* data to 0 to 15.
|
* data to 0 to 15.
|
||||||
*/
|
*/
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_do_shift(png_row_infop row_info, png_bytep row,
|
png_do_shift(png_row_infop row_info, png_bytep row, png_color_8p bit_depth)
|
||||||
png_const_color_8p bit_depth)
|
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_do_shift");
|
png_debug(1, "in png_do_shift");
|
||||||
|
|
||||||
if (row_info->color_type != PNG_COLOR_TYPE_PALETTE)
|
#ifdef PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
if (row != NULL && row_info != NULL &&
|
||||||
|
#else
|
||||||
|
if (
|
||||||
|
#endif
|
||||||
|
row_info->color_type != PNG_COLOR_TYPE_PALETTE)
|
||||||
{
|
{
|
||||||
int shift_start[4], shift_dec[4];
|
int shift_start[4], shift_dec[4];
|
||||||
int channels = 0;
|
int channels = 0;
|
||||||
@ -257,23 +235,19 @@ png_do_shift(png_row_infop row_info, png_bytep row,
|
|||||||
shift_start[channels] = row_info->bit_depth - bit_depth->red;
|
shift_start[channels] = row_info->bit_depth - bit_depth->red;
|
||||||
shift_dec[channels] = bit_depth->red;
|
shift_dec[channels] = bit_depth->red;
|
||||||
channels++;
|
channels++;
|
||||||
|
|
||||||
shift_start[channels] = row_info->bit_depth - bit_depth->green;
|
shift_start[channels] = row_info->bit_depth - bit_depth->green;
|
||||||
shift_dec[channels] = bit_depth->green;
|
shift_dec[channels] = bit_depth->green;
|
||||||
channels++;
|
channels++;
|
||||||
|
|
||||||
shift_start[channels] = row_info->bit_depth - bit_depth->blue;
|
shift_start[channels] = row_info->bit_depth - bit_depth->blue;
|
||||||
shift_dec[channels] = bit_depth->blue;
|
shift_dec[channels] = bit_depth->blue;
|
||||||
channels++;
|
channels++;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
shift_start[channels] = row_info->bit_depth - bit_depth->gray;
|
shift_start[channels] = row_info->bit_depth - bit_depth->gray;
|
||||||
shift_dec[channels] = bit_depth->gray;
|
shift_dec[channels] = bit_depth->gray;
|
||||||
channels++;
|
channels++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (row_info->color_type & PNG_COLOR_MASK_ALPHA)
|
if (row_info->color_type & PNG_COLOR_MASK_ALPHA)
|
||||||
{
|
{
|
||||||
shift_start[channels] = row_info->bit_depth - bit_depth->alpha;
|
shift_start[channels] = row_info->bit_depth - bit_depth->alpha;
|
||||||
@ -285,16 +259,14 @@ png_do_shift(png_row_infop row_info, png_bytep row,
|
|||||||
if (row_info->bit_depth < 8)
|
if (row_info->bit_depth < 8)
|
||||||
{
|
{
|
||||||
png_bytep bp = row;
|
png_bytep bp = row;
|
||||||
png_size_t i;
|
png_uint_32 i;
|
||||||
png_byte mask;
|
png_byte mask;
|
||||||
png_size_t row_bytes = row_info->rowbytes;
|
png_uint_32 row_bytes = row_info->rowbytes;
|
||||||
|
|
||||||
if (bit_depth->gray == 1 && row_info->bit_depth == 2)
|
if (bit_depth->gray == 1 && row_info->bit_depth == 2)
|
||||||
mask = 0x55;
|
mask = 0x55;
|
||||||
|
|
||||||
else if (row_info->bit_depth == 4 && bit_depth->gray == 3)
|
else if (row_info->bit_depth == 4 && bit_depth->gray == 3)
|
||||||
mask = 0x11;
|
mask = 0x11;
|
||||||
|
|
||||||
else
|
else
|
||||||
mask = 0xff;
|
mask = 0xff;
|
||||||
|
|
||||||
@ -305,18 +277,15 @@ png_do_shift(png_row_infop row_info, png_bytep row,
|
|||||||
|
|
||||||
v = *bp;
|
v = *bp;
|
||||||
*bp = 0;
|
*bp = 0;
|
||||||
|
|
||||||
for (j = shift_start[0]; j > -shift_dec[0]; j -= shift_dec[0])
|
for (j = shift_start[0]; j > -shift_dec[0]; j -= shift_dec[0])
|
||||||
{
|
{
|
||||||
if (j > 0)
|
if (j > 0)
|
||||||
*bp |= (png_byte)((v << j) & 0xff);
|
*bp |= (png_byte)((v << j) & 0xff);
|
||||||
|
|
||||||
else
|
else
|
||||||
*bp |= (png_byte)((v >> (-j)) & mask);
|
*bp |= (png_byte)((v >> (-j)) & mask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (row_info->bit_depth == 8)
|
else if (row_info->bit_depth == 8)
|
||||||
{
|
{
|
||||||
png_bytep bp = row;
|
png_bytep bp = row;
|
||||||
@ -332,18 +301,15 @@ png_do_shift(png_row_infop row_info, png_bytep row,
|
|||||||
|
|
||||||
v = *bp;
|
v = *bp;
|
||||||
*bp = 0;
|
*bp = 0;
|
||||||
|
|
||||||
for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
|
for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
|
||||||
{
|
{
|
||||||
if (j > 0)
|
if (j > 0)
|
||||||
*bp |= (png_byte)((v << j) & 0xff);
|
*bp |= (png_byte)((v << j) & 0xff);
|
||||||
|
|
||||||
else
|
else
|
||||||
*bp |= (png_byte)((v >> (-j)) & 0xff);
|
*bp |= (png_byte)((v >> (-j)) & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_bytep bp;
|
png_bytep bp;
|
||||||
@ -358,12 +324,10 @@ png_do_shift(png_row_infop row_info, png_bytep row,
|
|||||||
|
|
||||||
v = (png_uint_16)(((png_uint_16)(*bp) << 8) + *(bp + 1));
|
v = (png_uint_16)(((png_uint_16)(*bp) << 8) + *(bp + 1));
|
||||||
value = 0;
|
value = 0;
|
||||||
|
|
||||||
for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
|
for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
|
||||||
{
|
{
|
||||||
if (j > 0)
|
if (j > 0)
|
||||||
value |= (png_uint_16)((v << j) & (png_uint_16)0xffff);
|
value |= (png_uint_16)((v << j) & (png_uint_16)0xffff);
|
||||||
|
|
||||||
else
|
else
|
||||||
value |= (png_uint_16)((v >> (-j)) & (png_uint_16)0xffff);
|
value |= (png_uint_16)((v >> (-j)) & (png_uint_16)0xffff);
|
||||||
}
|
}
|
||||||
@ -381,16 +345,18 @@ png_do_write_swap_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
png_debug(1, "in png_do_write_swap_alpha");
|
png_debug(1, "in png_do_write_swap_alpha");
|
||||||
|
|
||||||
|
#ifdef PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
if (row != NULL && row_info != NULL)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
{
|
{
|
||||||
|
/* This converts from ARGB to RGBA */
|
||||||
if (row_info->bit_depth == 8)
|
if (row_info->bit_depth == 8)
|
||||||
{
|
{
|
||||||
/* This converts from ARGB to RGBA */
|
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
|
|
||||||
for (i = 0, sp = dp = row; i < row_width; i++)
|
for (i = 0, sp = dp = row; i < row_width; i++)
|
||||||
{
|
{
|
||||||
png_byte save = *(sp++);
|
png_byte save = *(sp++);
|
||||||
@ -400,11 +366,9 @@ png_do_write_swap_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
*(dp++) = save;
|
*(dp++) = save;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* This converts from AARRGGBB to RRGGBBAA */
|
||||||
#ifdef PNG_WRITE_16BIT_SUPPORTED
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* This converts from AARRGGBB to RRGGBBAA */
|
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
@ -424,14 +388,12 @@ png_do_write_swap_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
*(dp++) = save[1];
|
*(dp++) = save[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PNG_WRITE_16BIT_SUPPORTED */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
||||||
{
|
{
|
||||||
|
/* This converts from AG to GA */
|
||||||
if (row_info->bit_depth == 8)
|
if (row_info->bit_depth == 8)
|
||||||
{
|
{
|
||||||
/* This converts from AG to GA */
|
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
@ -443,11 +405,9 @@ png_do_write_swap_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
*(dp++) = save;
|
*(dp++) = save;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* This converts from AAGG to GGAA */
|
||||||
#ifdef PNG_WRITE_16BIT_SUPPORTED
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* This converts from AAGG to GGAA */
|
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
@ -463,7 +423,6 @@ png_do_write_swap_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
*(dp++) = save[1];
|
*(dp++) = save[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PNG_WRITE_16BIT_SUPPORTED */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -475,16 +434,18 @@ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
png_debug(1, "in png_do_write_invert_alpha");
|
png_debug(1, "in png_do_write_invert_alpha");
|
||||||
|
|
||||||
|
#ifdef PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
if (row != NULL && row_info != NULL)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
{
|
{
|
||||||
|
/* This inverts the alpha channel in RGBA */
|
||||||
if (row_info->bit_depth == 8)
|
if (row_info->bit_depth == 8)
|
||||||
{
|
{
|
||||||
/* This inverts the alpha channel in RGBA */
|
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
|
|
||||||
for (i = 0, sp = dp = row; i < row_width; i++)
|
for (i = 0, sp = dp = row; i < row_width; i++)
|
||||||
{
|
{
|
||||||
/* Does nothing
|
/* Does nothing
|
||||||
@ -496,11 +457,9 @@ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
*(dp++) = (png_byte)(255 - *(sp++));
|
*(dp++) = (png_byte)(255 - *(sp++));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* This inverts the alpha channel in RRGGBBAA */
|
||||||
#ifdef PNG_WRITE_16BIT_SUPPORTED
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* This inverts the alpha channel in RRGGBBAA */
|
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
@ -520,14 +479,12 @@ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
*(dp++) = (png_byte)(255 - *(sp++));
|
*(dp++) = (png_byte)(255 - *(sp++));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PNG_WRITE_16BIT_SUPPORTED */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
||||||
{
|
{
|
||||||
|
/* This inverts the alpha channel in GA */
|
||||||
if (row_info->bit_depth == 8)
|
if (row_info->bit_depth == 8)
|
||||||
{
|
{
|
||||||
/* This inverts the alpha channel in GA */
|
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
@ -538,11 +495,9 @@ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
*(dp++) = (png_byte)(255 - *(sp++));
|
*(dp++) = (png_byte)(255 - *(sp++));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* This inverts the alpha channel in GGAA */
|
||||||
#ifdef PNG_WRITE_16BIT_SUPPORTED
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* This inverts the alpha channel in GGAA */
|
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
@ -558,7 +513,6 @@ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
*(dp++) = (png_byte)(255 - *(sp++));
|
*(dp++) = (png_byte)(255 - *(sp++));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PNG_WRITE_16BIT_SUPPORTED */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -571,7 +525,11 @@ png_do_write_intrapixel(png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
png_debug(1, "in png_do_write_intrapixel");
|
png_debug(1, "in png_do_write_intrapixel");
|
||||||
|
|
||||||
if ((row_info->color_type & PNG_COLOR_MASK_COLOR))
|
if (
|
||||||
|
#ifdef PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
row != NULL && row_info != NULL &&
|
||||||
|
#endif
|
||||||
|
(row_info->color_type & PNG_COLOR_MASK_COLOR))
|
||||||
{
|
{
|
||||||
int bytes_per_pixel;
|
int bytes_per_pixel;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
@ -582,21 +540,17 @@ png_do_write_intrapixel(png_row_infop row_info, png_bytep row)
|
|||||||
|
|
||||||
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
|
||||||
bytes_per_pixel = 3;
|
bytes_per_pixel = 3;
|
||||||
|
|
||||||
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
bytes_per_pixel = 4;
|
bytes_per_pixel = 4;
|
||||||
|
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
|
for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
|
||||||
{
|
{
|
||||||
*(rp) = (png_byte)((*rp - *(rp + 1)) & 0xff);
|
*(rp) = (png_byte)((*rp - *(rp+1))&0xff);
|
||||||
*(rp + 2) = (png_byte)((*(rp + 2) - *(rp + 1)) & 0xff);
|
*(rp+2) = (png_byte)((*(rp+2) - *(rp+1))&0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_16BIT_SUPPORTED
|
|
||||||
else if (row_info->bit_depth == 16)
|
else if (row_info->bit_depth == 16)
|
||||||
{
|
{
|
||||||
png_bytep rp;
|
png_bytep rp;
|
||||||
@ -604,27 +558,24 @@ png_do_write_intrapixel(png_row_infop row_info, png_bytep row)
|
|||||||
|
|
||||||
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
|
||||||
bytes_per_pixel = 6;
|
bytes_per_pixel = 6;
|
||||||
|
|
||||||
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
bytes_per_pixel = 8;
|
bytes_per_pixel = 8;
|
||||||
|
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
|
for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
|
||||||
{
|
{
|
||||||
png_uint_32 s0 = (*(rp ) << 8) | *(rp + 1);
|
png_uint_32 s0 = (*(rp ) << 8) | *(rp+1);
|
||||||
png_uint_32 s1 = (*(rp + 2) << 8) | *(rp + 3);
|
png_uint_32 s1 = (*(rp+2) << 8) | *(rp+3);
|
||||||
png_uint_32 s2 = (*(rp + 4) << 8) | *(rp + 5);
|
png_uint_32 s2 = (*(rp+4) << 8) | *(rp+5);
|
||||||
png_uint_32 red = (png_uint_32)((s0 - s1) & 0xffffL);
|
png_uint_32 red = (png_uint_32)((s0 - s1) & 0xffffL);
|
||||||
png_uint_32 blue = (png_uint_32)((s2 - s1) & 0xffffL);
|
png_uint_32 blue = (png_uint_32)((s2 - s1) & 0xffffL);
|
||||||
*(rp ) = (png_byte)((red >> 8) & 0xff);
|
*(rp ) = (png_byte)((red >> 8) & 0xff);
|
||||||
*(rp + 1) = (png_byte)(red & 0xff);
|
*(rp+1) = (png_byte)(red & 0xff);
|
||||||
*(rp + 4) = (png_byte)((blue >> 8) & 0xff);
|
*(rp+4) = (png_byte)((blue >> 8) & 0xff);
|
||||||
*(rp + 5) = (png_byte)(blue & 0xff);
|
*(rp+5) = (png_byte)(blue & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PNG_WRITE_16BIT_SUPPORTED */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PNG_MNG_FEATURES_SUPPORTED */
|
#endif /* PNG_MNG_FEATURES_SUPPORTED */
|
||||||
|
1086
Externals/libpng/pngwutil.c
vendored
2607
Languages/po/ar.po
2637
Languages/po/ca.po
2656
Languages/po/cs.po
3195
Languages/po/de.po
2668
Languages/po/el.po
2576
Languages/po/en.po
2820
Languages/po/es.po
2630
Languages/po/fa.po
2671
Languages/po/fr.po
2580
Languages/po/he.po
2644
Languages/po/hu.po
3859
Languages/po/it.po
2653
Languages/po/ja.po
2652
Languages/po/ko.po
2689
Languages/po/nb.po
2808
Languages/po/nl.po
2706
Languages/po/pl.po
2622
Languages/po/pt.po
2615
Languages/po/ru.po
2583
Languages/po/sr.po
6060
Languages/po/sv.po
Normal file
2629
Languages/po/tr.po
8
Source/Android/.classpath
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||||
|
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||||
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry kind="src" path="gen"/>
|
||||||
|
<classpathentry kind="output" path="bin/classes"/>
|
||||||
|
</classpath>
|
7
Source/Android/.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
gen
|
||||||
|
obj
|
||||||
|
#ui_atlas.zim
|
||||||
|
ui_atlas.zim.png
|
||||||
|
#assets/ui_atlas.zim
|
||||||
|
#jni/ui_atlas.cpp
|
||||||
|
#jni/ui_atlas.h
|
33
Source/Android/.project
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>ppsspp</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
4
Source/Android/.settings/org.eclipse.jdt.core.prefs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=1.5
|
||||||
|
org.eclipse.jdt.core.compiler.source=1.5
|
36
Source/Android/AndroidManifest.xml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="org.dolphinemu.dolphinemu"
|
||||||
|
android:versionCode="2"
|
||||||
|
android:versionName="0.2" >
|
||||||
|
|
||||||
|
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14"/>
|
||||||
|
|
||||||
|
<uses-feature android:glEsVersion="0x00020000"></uses-feature>
|
||||||
|
<uses-feature android:name="android.hardware.screen.landscape" />
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:icon="@drawable/launcher"
|
||||||
|
android:label="@string/app_name">
|
||||||
|
<activity
|
||||||
|
android:name=".DolphinEmulator"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
||||||
|
android:screenOrientation="landscape"
|
||||||
|
android:configChanges="locale|keyboard|keyboardHidden|navigation|fontScale|uiMode" >
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name=".NativeListView"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:theme="@android:style/Theme"
|
||||||
|
android:configChanges="orientation|locale|keyboard|keyboardHidden|navigation|fontScale|uiMode" >
|
||||||
|
</activity>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
1632
Source/Android/android.toolchain.cmake
Normal file
BIN
Source/Android/assets/ButtonA.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
Source/Android/assets/ButtonB.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
Source/Android/assets/ButtonStart.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
Source/Android/assets/Dolphin.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
29
Source/Android/assets/GCPadNew.ini
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[GCPad1]
|
||||||
|
Device = Android/0/Touchscreen
|
||||||
|
Buttons/A = Button 0
|
||||||
|
Buttons/B = Button 1
|
||||||
|
Buttons/X = C
|
||||||
|
Buttons/Y = S
|
||||||
|
Buttons/Z = D
|
||||||
|
Buttons/Start = Button 2
|
||||||
|
Main Stick/Up = Up
|
||||||
|
Main Stick/Down = Down
|
||||||
|
Main Stick/Left = Left
|
||||||
|
Main Stick/Right = Right
|
||||||
|
Main Stick/Modifier = Shift_L
|
||||||
|
Main Stick/Modifier/Range = 50.000000
|
||||||
|
C-Stick/Up = I
|
||||||
|
C-Stick/Down = K
|
||||||
|
C-Stick/Left = J
|
||||||
|
C-Stick/Right = L
|
||||||
|
C-Stick/Modifier = Control_L
|
||||||
|
C-Stick/Modifier/Range = 50.000000
|
||||||
|
Triggers/L = Q
|
||||||
|
Triggers/R = W
|
||||||
|
D-Pad/Up = T
|
||||||
|
D-Pad/Down = G
|
||||||
|
D-Pad/Left = F
|
||||||
|
D-Pad/Right = H
|
||||||
|
[GCPad2]
|
||||||
|
[GCPad3]
|
||||||
|
[GCPad4]
|
BIN
Source/Android/assets/NoBanner.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
92
Source/Android/build.xml
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project name="Dolphin Emulator" default="help">
|
||||||
|
|
||||||
|
<!-- The local.properties file is created and updated by the 'android' tool.
|
||||||
|
It contains the path to the SDK. It should *NOT* be checked into
|
||||||
|
Version Control Systems. -->
|
||||||
|
<property file="local.properties" />
|
||||||
|
|
||||||
|
<!-- The ant.properties file can be created by you. It is only edited by the
|
||||||
|
'android' tool to add properties to it.
|
||||||
|
This is the place to change some Ant specific build properties.
|
||||||
|
Here are some properties you may want to change/update:
|
||||||
|
|
||||||
|
source.dir
|
||||||
|
The name of the source directory. Default is 'src'.
|
||||||
|
out.dir
|
||||||
|
The name of the output directory. Default is 'bin'.
|
||||||
|
|
||||||
|
For other overridable properties, look at the beginning of the rules
|
||||||
|
files in the SDK, at tools/ant/build.xml
|
||||||
|
|
||||||
|
Properties related to the SDK location or the project target should
|
||||||
|
be updated using the 'android' tool with the 'update' action.
|
||||||
|
|
||||||
|
This file is an integral part of the build system for your
|
||||||
|
application and should be checked into Version Control Systems.
|
||||||
|
|
||||||
|
-->
|
||||||
|
<property file="ant.properties" />
|
||||||
|
|
||||||
|
<!-- if sdk.dir was not set from one of the property file, then
|
||||||
|
get it from the ANDROID_HOME env var.
|
||||||
|
This must be done before we load project.properties since
|
||||||
|
the proguard config can use sdk.dir -->
|
||||||
|
<property environment="env" />
|
||||||
|
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
|
||||||
|
<isset property="env.ANDROID_HOME" />
|
||||||
|
</condition>
|
||||||
|
|
||||||
|
<!-- The project.properties file is created and updated by the 'android'
|
||||||
|
tool, as well as ADT.
|
||||||
|
|
||||||
|
This contains project specific properties such as project target, and library
|
||||||
|
dependencies. Lower level build properties are stored in ant.properties
|
||||||
|
(or in .classpath for Eclipse projects).
|
||||||
|
|
||||||
|
This file is an integral part of the build system for your
|
||||||
|
application and should be checked into Version Control Systems. -->
|
||||||
|
<loadproperties srcFile="project.properties" />
|
||||||
|
|
||||||
|
<!-- quick check on sdk.dir -->
|
||||||
|
<fail
|
||||||
|
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
|
||||||
|
unless="sdk.dir"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Import per project custom build rules if present at the root of the project.
|
||||||
|
This is the place to put custom intermediary targets such as:
|
||||||
|
-pre-build
|
||||||
|
-pre-compile
|
||||||
|
-post-compile (This is typically used for code obfuscation.
|
||||||
|
Compiled code location: ${out.classes.absolute.dir}
|
||||||
|
If this is not done in place, override ${out.dex.input.absolute.dir})
|
||||||
|
-post-package
|
||||||
|
-post-build
|
||||||
|
-pre-clean
|
||||||
|
-->
|
||||||
|
<import file="custom_rules.xml" optional="true" />
|
||||||
|
|
||||||
|
<!-- Import the actual build file.
|
||||||
|
|
||||||
|
To customize existing targets, there are two options:
|
||||||
|
- Customize only one target:
|
||||||
|
- copy/paste the target into this file, *before* the
|
||||||
|
<import> task.
|
||||||
|
- customize it to your needs.
|
||||||
|
- Customize the whole content of build.xml
|
||||||
|
- copy/paste the content of the rules files (minus the top node)
|
||||||
|
into this file, replacing the <import> task.
|
||||||
|
- customize to your needs.
|
||||||
|
|
||||||
|
***********************
|
||||||
|
****** IMPORTANT ******
|
||||||
|
***********************
|
||||||
|
In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
|
||||||
|
in order to avoid having your file be overridden by tools such as "android update project"
|
||||||
|
-->
|
||||||
|
<!-- version-tag: 1 -->
|
||||||
|
<import file="${sdk.dir}/tools/ant/build.xml" />
|
||||||
|
|
||||||
|
</project>
|
19
Source/Android/custom_rules.xml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project name="Dolphin" default="help">
|
||||||
|
<property name="ndkbuildopt" value=""/>
|
||||||
|
<target name="-pre-build">
|
||||||
|
<exec executable="${ndk.dir}/ndk-build" failonerror="true">
|
||||||
|
<arg line="-j4 ${ndkbuildopt}"/>
|
||||||
|
</exec>
|
||||||
|
<copy todir="${jar.libs.dir}/armeabi-v7a">
|
||||||
|
<fileset
|
||||||
|
dir="../../libs/armeabi-v7a"
|
||||||
|
includes="libdolphin-emu-nogui.so" />
|
||||||
|
</copy>
|
||||||
|
</target>
|
||||||
|
<target name="clean" depends="android_rules.clean">
|
||||||
|
<exec executable="${ndk.dir}/ndk-build" failonerror="true">
|
||||||
|
<arg value="clean"/>
|
||||||
|
</exec>
|
||||||
|
</target>
|
||||||
|
</project>
|
0
Source/Android/jni/Android.mk
Normal file
4
Source/Android/jni/Application.mk
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
APP_STL := stlport_static
|
||||||
|
APP_ABI := armeabi-v7a
|
||||||
|
|
||||||
|
#APP_ABI := armeabi-v7a
|
14
Source/Android/project.properties
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# This file is automatically generated by Android Tools.
|
||||||
|
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
||||||
|
#
|
||||||
|
# This file must be checked in Version Control Systems.
|
||||||
|
#
|
||||||
|
# To customize properties used by the Ant build system edit
|
||||||
|
# "ant.properties", and override values to adapt the script to your
|
||||||
|
# project structure.
|
||||||
|
#
|
||||||
|
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
|
||||||
|
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
|
||||||
|
|
||||||
|
# Project target.
|
||||||
|
target=android-17
|
BIN
Source/Android/res/drawable-hdpi/launcher.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
Source/Android/res/drawable-mdpi/launcher.png
Normal file
After Width: | Height: | Size: 8.4 KiB |
BIN
Source/Android/res/drawable-xhdpi/launcher.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
Source/Android/res/drawable-xxhdpi/launcher.png
Normal file
After Width: | Height: | Size: 80 KiB |
26
Source/Android/res/layout/main.xml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical" >
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/TextView01"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="5dip"
|
||||||
|
android:layout_marginTop="5dip"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:text="@+id/TextView01"
|
||||||
|
android:textStyle="bold" >
|
||||||
|
</TextView>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/TextView02"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="10dip"
|
||||||
|
android:text="@+id/TextView02" >
|
||||||
|
</TextView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
6
Source/Android/res/values/strings.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<string name="app_name">Dolphin Emulator</string>
|
||||||
|
|
||||||
|
</resources>
|
@ -0,0 +1,176 @@
|
|||||||
|
package org.dolphinemu.dolphinemu;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Environment;
|
||||||
|
import android.util.DisplayMetrics;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
|
||||||
|
public class DolphinEmulator<MainActivity> extends Activity
|
||||||
|
{
|
||||||
|
static private NativeGLSurfaceView GLview = null;
|
||||||
|
static private boolean Running = false;
|
||||||
|
|
||||||
|
private float screenWidth;
|
||||||
|
private float screenHeight;
|
||||||
|
|
||||||
|
public static native void onTouchEvent(int Action, float X, float Y);
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.loadLibrary("dolphin-emu-nogui");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.w("me", ex.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void CopyAsset(String asset, String output) {
|
||||||
|
InputStream in = null;
|
||||||
|
OutputStream out = null;
|
||||||
|
try {
|
||||||
|
in = getAssets().open(asset);
|
||||||
|
out = new FileOutputStream(output);
|
||||||
|
copyFile(in, out);
|
||||||
|
in.close();
|
||||||
|
in = null;
|
||||||
|
out.flush();
|
||||||
|
out.close();
|
||||||
|
out = null;
|
||||||
|
} catch(IOException e) {
|
||||||
|
Log.e("tag", "Failed to copy asset file: " + asset, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void copyFile(InputStream in, OutputStream out) throws IOException {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int read;
|
||||||
|
while((read = in.read(buffer)) != -1){
|
||||||
|
out.write(buffer, 0, read);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStop()
|
||||||
|
{
|
||||||
|
super.onStop();
|
||||||
|
if (Running)
|
||||||
|
NativeGLSurfaceView.StopEmulation();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onPause()
|
||||||
|
{
|
||||||
|
super.onPause();
|
||||||
|
if (Running)
|
||||||
|
NativeGLSurfaceView.PauseEmulation();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onResume()
|
||||||
|
{
|
||||||
|
super.onResume();
|
||||||
|
if (Running)
|
||||||
|
NativeGLSurfaceView.UnPauseEmulation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Called when the activity is first created. */
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
if (savedInstanceState == null)
|
||||||
|
{
|
||||||
|
Intent ListIntent = new Intent(this, NativeListView.class);
|
||||||
|
startActivityForResult(ListIntent, 1);
|
||||||
|
|
||||||
|
// Make the assets directory
|
||||||
|
String strDir = Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu";
|
||||||
|
File directory = new File(strDir);
|
||||||
|
directory.mkdirs();
|
||||||
|
|
||||||
|
strDir += File.separator+"Config";
|
||||||
|
directory = new File(strDir);
|
||||||
|
directory.mkdirs();
|
||||||
|
|
||||||
|
// Copy assets if needed
|
||||||
|
java.io.File file = new java.io.File(
|
||||||
|
Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu" + File.separator + "NoBanner.png");
|
||||||
|
if(!file.exists())
|
||||||
|
{
|
||||||
|
CopyAsset("ButtonA.png",
|
||||||
|
Environment.getExternalStorageDirectory()+File.separator+
|
||||||
|
"dolphin-emu" + File.separator + "ButtonA.png");
|
||||||
|
CopyAsset("ButtonB.png",
|
||||||
|
Environment.getExternalStorageDirectory()+File.separator+
|
||||||
|
"dolphin-emu" + File.separator + "ButtonB.png");
|
||||||
|
CopyAsset("ButtonStart.png",
|
||||||
|
Environment.getExternalStorageDirectory()+File.separator+
|
||||||
|
"dolphin-emu" + File.separator + "ButtonStart.png");
|
||||||
|
CopyAsset("NoBanner.png",
|
||||||
|
Environment.getExternalStorageDirectory()+File.separator+
|
||||||
|
"dolphin-emu" + File.separator + "NoBanner.png");
|
||||||
|
CopyAsset("Dolphin.png",
|
||||||
|
Environment.getExternalStorageDirectory()+File.separator+
|
||||||
|
"dolphin-emu" + File.separator + "Dolphin.png");
|
||||||
|
CopyAsset("GCPadNew.ini",
|
||||||
|
Environment.getExternalStorageDirectory()+File.separator+
|
||||||
|
"dolphin-emu" + File.separator +"Config"+ File.separator +"GCPadNew.ini");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityResult(int requestCode, int resultCode, Intent data)
|
||||||
|
{
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
|
||||||
|
if (resultCode == Activity.RESULT_OK)
|
||||||
|
{
|
||||||
|
DisplayMetrics displayMetrics = new DisplayMetrics();
|
||||||
|
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(getApplicationContext().WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut
|
||||||
|
wm.getDefaultDisplay().getMetrics(displayMetrics);
|
||||||
|
screenWidth = displayMetrics.widthPixels;
|
||||||
|
screenHeight = displayMetrics.heightPixels;
|
||||||
|
|
||||||
|
String FileName = data.getStringExtra("Select");
|
||||||
|
GLview = new NativeGLSurfaceView(this);
|
||||||
|
//this.getWindow().setUiOptions(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN, View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN);
|
||||||
|
GLview.SetDimensions(screenWidth, screenHeight);
|
||||||
|
GLview.SetFileName(FileName);
|
||||||
|
setContentView(GLview);
|
||||||
|
Running = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onTouchEvent(MotionEvent event)
|
||||||
|
{
|
||||||
|
float X, Y;
|
||||||
|
int Action;
|
||||||
|
X = event.getX();
|
||||||
|
Y = event.getY();
|
||||||
|
Action = event.getActionMasked();
|
||||||
|
|
||||||
|
// Converts button locations 0 - 1 to OGL screen coords -1.0 - 1.0
|
||||||
|
float ScreenX = ((X / screenWidth) * 2.0f) - 1.0f;
|
||||||
|
float ScreenY = ((Y / screenHeight) * -2.0f) + 1.0f;
|
||||||
|
|
||||||
|
onTouchEvent(Action, ScreenX, ScreenY);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean overrideKeys()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package org.dolphinemu.dolphinemu;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
public class FileArrayAdapter extends ArrayAdapter<Option>{
|
||||||
|
|
||||||
|
private Context c;
|
||||||
|
private int id;
|
||||||
|
private List<Option>items;
|
||||||
|
|
||||||
|
public FileArrayAdapter(Context context, int textViewResourceId,
|
||||||
|
List<Option> objects) {
|
||||||
|
super(context, textViewResourceId, objects);
|
||||||
|
c = context;
|
||||||
|
id = textViewResourceId;
|
||||||
|
items = objects;
|
||||||
|
}
|
||||||
|
public Option getItem(int i)
|
||||||
|
{
|
||||||
|
return items.get(i);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
View v = convertView;
|
||||||
|
if (v == null) {
|
||||||
|
LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
v = vi.inflate(id, null);
|
||||||
|
}
|
||||||
|
final Option o = items.get(position);
|
||||||
|
if (o != null) {
|
||||||
|
TextView t1 = (TextView) v.findViewById(R.id.TextView01);
|
||||||
|
TextView t2 = (TextView) v.findViewById(R.id.TextView02);
|
||||||
|
|
||||||
|
if(t1!=null)
|
||||||
|
t1.setText(o.getName());
|
||||||
|
if(t2!=null)
|
||||||
|
t2.setText(o.getData());
|
||||||
|
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,81 @@
|
|||||||
|
package org.dolphinemu.dolphinemu;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.opengl.GLSurfaceView;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.Surface;
|
||||||
|
import android.view.SurfaceHolder;
|
||||||
|
import android.view.SurfaceView;
|
||||||
|
|
||||||
|
public class NativeGLSurfaceView extends SurfaceView {
|
||||||
|
static private String FileName;
|
||||||
|
static private Thread myRun;
|
||||||
|
static private boolean Running = false;
|
||||||
|
static private boolean Created = false;
|
||||||
|
static private float width;
|
||||||
|
static private float height;
|
||||||
|
|
||||||
|
public static native void main(String File, Surface surf, int width, int height);
|
||||||
|
public static native void UnPauseEmulation();
|
||||||
|
public static native void PauseEmulation();
|
||||||
|
public static native void StopEmulation();
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.loadLibrary("dolphin-emu-nogui");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.w("me", ex.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public NativeGLSurfaceView(Context context) {
|
||||||
|
super(context);
|
||||||
|
if (!Created)
|
||||||
|
{
|
||||||
|
myRun = new Thread()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
main(FileName, getHolder().getSurface(), (int)width, (int)height);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
getHolder().addCallback(new SurfaceHolder.Callback() {
|
||||||
|
public void surfaceCreated(SurfaceHolder holder) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
if (!Running)
|
||||||
|
{
|
||||||
|
myRun.start();
|
||||||
|
Running = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void surfaceChanged(SurfaceHolder arg0, int arg1,
|
||||||
|
int arg2, int arg3) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void surfaceDestroyed(SurfaceHolder arg0) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Created = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetFileName(String file)
|
||||||
|
{
|
||||||
|
FileName = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetDimensions(float screenWidth, float screenHeight)
|
||||||
|
{
|
||||||
|
width = screenWidth;
|
||||||
|
height = screenHeight;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,94 @@
|
|||||||
|
package org.dolphinemu.dolphinemu;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.ListActivity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Environment;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ListView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
public class NativeListView extends ListActivity {
|
||||||
|
private FileArrayAdapter adapter;
|
||||||
|
private static File currentDir = null;
|
||||||
|
|
||||||
|
private void Fill(File f)
|
||||||
|
{
|
||||||
|
File[]dirs = f.listFiles();
|
||||||
|
this.setTitle("Current Dir: " + f.getName());
|
||||||
|
List<Option>dir = new ArrayList<Option>();
|
||||||
|
List<Option>fls = new ArrayList<Option>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for(File ff: dirs)
|
||||||
|
{
|
||||||
|
if (ff.getName().charAt(0) != '.')
|
||||||
|
if(ff.isDirectory())
|
||||||
|
dir.add(new Option(ff.getName(),"Folder",ff.getAbsolutePath()));
|
||||||
|
else
|
||||||
|
if (ff.getName().toLowerCase().contains(".gcm") ||
|
||||||
|
ff.getName().toLowerCase().contains(".iso") ||
|
||||||
|
ff.getName().toLowerCase().contains(".wbfs") ||
|
||||||
|
ff.getName().toLowerCase().contains(".gcz") ||
|
||||||
|
ff.getName().toLowerCase().contains(".dol") ||
|
||||||
|
ff.getName().toLowerCase().contains(".elf"))
|
||||||
|
fls.add(new Option(ff.getName(),"File Size: "+ff.length(),ff.getAbsolutePath()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(dir);
|
||||||
|
Collections.sort(fls);
|
||||||
|
dir.addAll(fls);
|
||||||
|
|
||||||
|
if(!f.getName().equalsIgnoreCase("sdcard"))
|
||||||
|
dir.add(0,new Option("..","Parent Directory",f.getParent()));
|
||||||
|
adapter = new FileArrayAdapter(this,R.layout.main,dir);
|
||||||
|
this.setListAdapter(adapter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onListItemClick(ListView l, View v, int position, long id) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
super.onListItemClick(l, v, position, id);
|
||||||
|
Option o = adapter.getItem(position);
|
||||||
|
if(o.getData().equalsIgnoreCase("folder")||o.getData().equalsIgnoreCase("parent directory")){
|
||||||
|
currentDir = new File(o.getPath());
|
||||||
|
Fill(currentDir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
onFileClick(o.getPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onFileClick(String o)
|
||||||
|
{
|
||||||
|
Toast.makeText(this, "File Clicked: " + o, Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.putExtra("Select", o);
|
||||||
|
setResult(Activity.RESULT_OK, intent);
|
||||||
|
|
||||||
|
this.finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
if(currentDir == null)
|
||||||
|
currentDir = new File(Environment.getExternalStorageDirectory().getPath());
|
||||||
|
Fill(currentDir);
|
||||||
|
}
|
||||||
|
}
|
38
Source/Android/src/org/dolphinemu/dolphinemu/Option.java
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package org.dolphinemu.dolphinemu;
|
||||||
|
|
||||||
|
public class Option implements Comparable<Option>{
|
||||||
|
private String name;
|
||||||
|
private String data;
|
||||||
|
private String path;
|
||||||
|
|
||||||
|
public Option(String n,String d,String p)
|
||||||
|
{
|
||||||
|
name = n;
|
||||||
|
data = d;
|
||||||
|
path = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName()
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getData()
|
||||||
|
{
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPath()
|
||||||
|
{
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int compareTo(Option o)
|
||||||
|
{
|
||||||
|
if(this.name != null)
|
||||||
|
return this.name.toLowerCase().compareTo(o.getName().toLowerCase());
|
||||||
|
else
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _AOSOUNDSTREAM_H_
|
#ifndef _AOSOUNDSTREAM_H_
|
||||||
#define _AOSOUNDSTREAM_H_
|
#define _AOSOUNDSTREAM_H_
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#include "AudioCommon.h"
|
#include "AudioCommon.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _AUDIO_COMMON_H_
|
#ifndef _AUDIO_COMMON_H_
|
||||||
#define _AUDIO_COMMON_H_
|
#define _AUDIO_COMMON_H_
|
||||||
|
@ -1,24 +1,11 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
// Dolby Pro Logic 2 decoder from ffdshow-tryout
|
// Dolby Pro Logic 2 decoder from ffdshow-tryout
|
||||||
// * Copyright 2001 Anders Johansson ajh@atri.curtin.edu.au
|
// * Copyright 2001 Anders Johansson ajh@atri.curtin.edu.au
|
||||||
// * Copyright (c) 2004-2006 Milan Cutka
|
// * Copyright (c) 2004-2006 Milan Cutka
|
||||||
// * based on mplayer HRTF plugin by ylai
|
// * based on mplayer HRTF plugin by ylai
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _DPL2DECODER_H_
|
#ifndef _DPL2DECODER_H_
|
||||||
#define _DPL2DECODER_H_
|
#define _DPL2DECODER_H_
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _DSOUNDSTREAM_H_
|
#ifndef _DSOUNDSTREAM_H_
|
||||||
#define _DSOUNDSTREAM_H_
|
#define _DSOUNDSTREAM_H_
|
||||||
|
@ -1,20 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
|
|
||||||
#include "Atomic.h"
|
#include "Atomic.h"
|
||||||
#include "Mixer.h"
|
#include "Mixer.h"
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _MIXER_H_
|
#ifndef _MIXER_H_
|
||||||
#define _MIXER_H_
|
#define _MIXER_H_
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#include "AudioCommon.h"
|
#include "AudioCommon.h"
|
||||||
#include "NullSoundStream.h"
|
#include "NullSoundStream.h"
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _NULLSOUNDSTREAM_H_
|
#ifndef _NULLSOUNDSTREAM_H_
|
||||||
#define _NULLSOUNDSTREAM_H_
|
#define _NULLSOUNDSTREAM_H_
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#include "aldlist.h"
|
#include "aldlist.h"
|
||||||
#include "OpenALStream.h"
|
#include "OpenALStream.h"
|
||||||
@ -72,7 +59,7 @@ bool OpenALStream::Start()
|
|||||||
PanicAlertT("OpenAL: can't find sound devices");
|
PanicAlertT("OpenAL: can't find sound devices");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialise DPL2 parameters
|
// Initialize DPL2 parameters
|
||||||
dpl2reset();
|
dpl2reset();
|
||||||
|
|
||||||
soundTouch.clear();
|
soundTouch.clear();
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _OPENALSTREAM_H_
|
#ifndef _OPENALSTREAM_H_
|
||||||
#define _OPENALSTREAM_H_
|
#define _OPENALSTREAM_H_
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _SOUNDSTREAM_H_
|
#ifndef _SOUNDSTREAM_H_
|
||||||
#define _SOUNDSTREAM_H_
|
#define _SOUNDSTREAM_H_
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "WaveFile.h"
|
#include "WaveFile.h"
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------
|
||||||
// Class: WaveFileWriter
|
// Class: WaveFileWriter
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#include "AudioCommon.h"
|
#include "AudioCommon.h"
|
||||||
#include "XAudio2Stream.h"
|
#include "XAudio2Stream.h"
|
||||||
@ -107,7 +94,7 @@ bool XAudio2::Start()
|
|||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
// callback dosent seem to run on a speecific cpu anyways
|
// callback doesn't seem to run on a specific cpu anyways
|
||||||
IXAudio2* xaudptr;
|
IXAudio2* xaudptr;
|
||||||
if (FAILED(hr = XAudio2Create(&xaudptr, 0, XAUDIO2_DEFAULT_PROCESSOR)))
|
if (FAILED(hr = XAudio2Create(&xaudptr, 0, XAUDIO2_DEFAULT_PROCESSOR)))
|
||||||
{
|
{
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _XAUDIO2STREAM_H_
|
#ifndef _XAUDIO2STREAM_H_
|
||||||
#define _XAUDIO2STREAM_H_
|
#define _XAUDIO2STREAM_H_
|
||||||
|
@ -83,6 +83,40 @@ bool TryMakeOperand2_AllowNegation(s32 imm, Operand2 &op2, bool *negated)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Operand2 AssumeMakeOperand2(u32 imm) {
|
||||||
|
Operand2 op2;
|
||||||
|
bool result = TryMakeOperand2(imm, op2);
|
||||||
|
_dbg_assert_msg_(JIT, result, "Could not make assumed Operand2.");
|
||||||
|
return op2;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ARMXEmitter::TrySetValue_TwoOp(ARMReg reg, u32 val)
|
||||||
|
{
|
||||||
|
int ops = 0;
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
if ((val >> (i*2)) & 0x3)
|
||||||
|
{
|
||||||
|
ops++;
|
||||||
|
i+=3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ops > 2)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool first = true;
|
||||||
|
for (int i = 0; i < 16; i++, val >>=2) {
|
||||||
|
if (val & 0x3) {
|
||||||
|
first ? MOV(reg, Operand2((u8)val, (u8)((16-i) & 0xF)))
|
||||||
|
: ORR(reg, reg, Operand2((u8)val, (u8)((16-i) & 0xF)));
|
||||||
|
first = false;
|
||||||
|
i+=3;
|
||||||
|
val >>= 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void ARMXEmitter::MOVI2F(ARMReg dest, float val, ARMReg tempReg)
|
void ARMXEmitter::MOVI2F(ARMReg dest, float val, ARMReg tempReg)
|
||||||
{
|
{
|
||||||
union {float f; u32 u;} conv;
|
union {float f; u32 u;} conv;
|
||||||
@ -93,6 +127,21 @@ void ARMXEmitter::MOVI2F(ARMReg dest, float val, ARMReg tempReg)
|
|||||||
// Otherwise, use a literal pool and VLDR directly (+- 1020)
|
// Otherwise, use a literal pool and VLDR directly (+- 1020)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ARMXEmitter::ADDI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch)
|
||||||
|
{
|
||||||
|
Operand2 op2;
|
||||||
|
bool negated;
|
||||||
|
if (TryMakeOperand2_AllowNegation(val, op2, &negated)) {
|
||||||
|
if (!negated)
|
||||||
|
ADD(rd, rs, op2);
|
||||||
|
else
|
||||||
|
SUB(rd, rs, op2);
|
||||||
|
} else {
|
||||||
|
MOVI2R(scratch, val);
|
||||||
|
ADD(rd, rs, scratch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ARMXEmitter::ANDI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch)
|
void ARMXEmitter::ANDI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch)
|
||||||
{
|
{
|
||||||
Operand2 op2;
|
Operand2 op2;
|
||||||
@ -109,6 +158,21 @@ void ARMXEmitter::ANDI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ARMXEmitter::CMPI2R(ARMReg rs, u32 val, ARMReg scratch)
|
||||||
|
{
|
||||||
|
Operand2 op2;
|
||||||
|
bool negated;
|
||||||
|
if (TryMakeOperand2_AllowNegation(val, op2, &negated)) {
|
||||||
|
if (!negated)
|
||||||
|
CMP(rs, op2);
|
||||||
|
else
|
||||||
|
CMN(rs, op2);
|
||||||
|
} else {
|
||||||
|
MOVI2R(scratch, val);
|
||||||
|
CMP(rs, scratch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ARMXEmitter::ORI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch)
|
void ARMXEmitter::ORI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch)
|
||||||
{
|
{
|
||||||
Operand2 op2;
|
Operand2 op2;
|
||||||
@ -173,7 +237,7 @@ void ARMXEmitter::MOVI2R(ARMReg reg, u32 val, bool optimize)
|
|||||||
MOVW(reg, val & 0xFFFF);
|
MOVW(reg, val & 0xFFFF);
|
||||||
if(val & 0xFFFF0000)
|
if(val & 0xFFFF0000)
|
||||||
MOVT(reg, val, true);
|
MOVT(reg, val, true);
|
||||||
} else {
|
} else if (!TrySetValue_TwoOp(reg,val)) {
|
||||||
// Use literal pool for ARMv6.
|
// Use literal pool for ARMv6.
|
||||||
AddNewLit(val);
|
AddNewLit(val);
|
||||||
LDR(reg, _PC); // To be backpatched later
|
LDR(reg, _PC); // To be backpatched later
|
||||||
@ -190,9 +254,7 @@ void ARMXEmitter::SetCodePtr(u8 *ptr)
|
|||||||
{
|
{
|
||||||
code = ptr;
|
code = ptr;
|
||||||
startcode = code;
|
startcode = code;
|
||||||
#ifdef IOS
|
|
||||||
lastCacheFlushEnd = ptr;
|
lastCacheFlushEnd = ptr;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const u8 *ARMXEmitter::GetCodePtr() const
|
const u8 *ARMXEmitter::GetCodePtr() const
|
||||||
@ -236,14 +298,15 @@ void ARMXEmitter::FlushIcacheSection(u8 *start, u8 *end)
|
|||||||
#elif defined(BLACKBERRY)
|
#elif defined(BLACKBERRY)
|
||||||
msync(start, end - start, MS_SYNC | MS_INVALIDATE_ICACHE);
|
msync(start, end - start, MS_SYNC | MS_INVALIDATE_ICACHE);
|
||||||
#elif defined(IOS)
|
#elif defined(IOS)
|
||||||
if (start != NULL)
|
// Header file says this is equivalent to: sys_icache_invalidate(start, end - start);
|
||||||
sys_cache_control(kCacheFunctionPrepareForExecution, start, end - start);
|
sys_cache_control(kCacheFunctionPrepareForExecution, start, end - start);
|
||||||
#elif !defined(_WIN32)
|
#elif !defined(_WIN32)
|
||||||
#ifndef ANDROID
|
#ifdef __clang__
|
||||||
start = startcode; // Should be Linux Only
|
__clear_cache(start, end);
|
||||||
#endif
|
#else
|
||||||
__builtin___clear_cache(start, end);
|
__builtin___clear_cache(start, end);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ARMXEmitter::SetCC(CCFlags cond)
|
void ARMXEmitter::SetCC(CCFlags cond)
|
||||||
@ -628,25 +691,27 @@ void ARMXEmitter::SVC(Operand2 op)
|
|||||||
|
|
||||||
// IMM, REG, IMMSREG, RSR
|
// IMM, REG, IMMSREG, RSR
|
||||||
// -1 for invalid if the instruction doesn't support that
|
// -1 for invalid if the instruction doesn't support that
|
||||||
const s32 LoadStoreOps[][4] = { {0x40, 0x60, 0x60, -1}, // STR
|
const s32 LoadStoreOps[][4] = {
|
||||||
{0x41, 0x61, 0x61, -1}, // LDR
|
{0x40, 0x60, 0x60, -1}, // STR
|
||||||
{0x44, 0x64, 0x64, -1}, // STRB
|
{0x41, 0x61, 0x61, -1}, // LDR
|
||||||
{0x45, 0x65, 0x65, -1}, // LDRB
|
{0x44, 0x64, 0x64, -1}, // STRB
|
||||||
// Special encodings
|
{0x45, 0x65, 0x65, -1}, // LDRB
|
||||||
{ 0x4, 0x0, -1, -1}, // STRH
|
// Special encodings
|
||||||
{ 0x5, 0x1, -1, -1}, // LDRH
|
{ 0x4, 0x0, -1, -1}, // STRH
|
||||||
{ 0x5, 0x1, -1, -1}, // LDRSB
|
{ 0x5, 0x1, -1, -1}, // LDRH
|
||||||
{ 0x5, 0x1, -1, -1}, // LDRSH
|
{ 0x5, 0x1, -1, -1}, // LDRSB
|
||||||
};
|
{ 0x5, 0x1, -1, -1}, // LDRSH
|
||||||
const char *LoadStoreNames[] = { "STR",
|
};
|
||||||
"LDR",
|
const char *LoadStoreNames[] = {
|
||||||
"STRB",
|
"STR",
|
||||||
"LDRB",
|
"LDR",
|
||||||
"STRH",
|
"STRB",
|
||||||
"LDRH",
|
"LDRB",
|
||||||
"LDRSB",
|
"STRH",
|
||||||
"LDRSH",
|
"LDRH",
|
||||||
};
|
"LDRSB",
|
||||||
|
"LDRSH",
|
||||||
|
};
|
||||||
|
|
||||||
void ARMXEmitter::WriteStoreOp(u32 Op, ARMReg Rt, ARMReg Rn, Operand2 Rm, bool RegAdd)
|
void ARMXEmitter::WriteStoreOp(u32 Op, ARMReg Rt, ARMReg Rn, Operand2 Rm, bool RegAdd)
|
||||||
{
|
{
|
||||||
@ -659,7 +724,7 @@ void ARMXEmitter::WriteStoreOp(u32 Op, ARMReg Rt, ARMReg Rn, Operand2 Rm, bool R
|
|||||||
bool Index = true;
|
bool Index = true;
|
||||||
bool Add = false;
|
bool Add = false;
|
||||||
|
|
||||||
// Special Encoding
|
// Special Encoding (misc addressing mode)
|
||||||
bool SpecialOp = false;
|
bool SpecialOp = false;
|
||||||
bool Half = false;
|
bool Half = false;
|
||||||
bool SignedLoad = false;
|
bool SignedLoad = false;
|
||||||
@ -703,6 +768,9 @@ void ARMXEmitter::WriteStoreOp(u32 Op, ARMReg Rt, ARMReg Rn, Operand2 Rm, bool R
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TYPE_REG:
|
case TYPE_REG:
|
||||||
|
Data = Rm.GetData();
|
||||||
|
Add = RegAdd;
|
||||||
|
break;
|
||||||
case TYPE_IMMSREG:
|
case TYPE_IMMSREG:
|
||||||
if (!SpecialOp)
|
if (!SpecialOp)
|
||||||
{
|
{
|
||||||
@ -710,6 +778,7 @@ void ARMXEmitter::WriteStoreOp(u32 Op, ARMReg Rt, ARMReg Rn, Operand2 Rm, bool R
|
|||||||
Add = RegAdd;
|
Add = RegAdd;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// Intentional fallthrough: TYPE_IMMSREG not supported for misc addressing.
|
||||||
default:
|
default:
|
||||||
// RSR not supported for any of these
|
// RSR not supported for any of these
|
||||||
// We already have the warning above
|
// We already have the warning above
|
||||||
@ -720,7 +789,7 @@ void ARMXEmitter::WriteStoreOp(u32 Op, ARMReg Rt, ARMReg Rn, Operand2 Rm, bool R
|
|||||||
if (SpecialOp)
|
if (SpecialOp)
|
||||||
{
|
{
|
||||||
// Add SpecialOp things
|
// Add SpecialOp things
|
||||||
Data = (0x5 << 4) | (SignedLoad << 6) | (Half << 5) | Data;
|
Data = (0x9 << 4) | (SignedLoad << 6) | (Half << 5) | Data;
|
||||||
}
|
}
|
||||||
Write32(condition | (op << 20) | (Index << 24) | (Add << 23) | (Rn << 16) | (Rt << 12) | Data);
|
Write32(condition | (op << 20) | (Index << 24) | (Add << 23) | (Rn << 16) | (Rt << 12) | Data);
|
||||||
}
|
}
|
||||||
@ -947,7 +1016,6 @@ void ARMXEmitter::VLDR(ARMReg Dest, ARMReg Base, s16 offset)
|
|||||||
{
|
{
|
||||||
Write32(condition | (0xD << 24) | (Add << 23) | ((Dest & 0x1) << 22) | (1 << 20) | (Base << 16) \
|
Write32(condition | (0xD << 24) | (Add << 23) | ((Dest & 0x1) << 22) | (1 << 20) | (Base << 16) \
|
||||||
| ((Dest & 0x1E) << 11) | (10 << 8) | (imm >> 2));
|
| ((Dest & 0x1E) << 11) | (10 << 8) | (imm >> 2));
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -320,6 +320,9 @@ bool TryMakeOperand2(u32 imm, Operand2 &op2);
|
|||||||
bool TryMakeOperand2_AllowInverse(u32 imm, Operand2 &op2, bool *inverse);
|
bool TryMakeOperand2_AllowInverse(u32 imm, Operand2 &op2, bool *inverse);
|
||||||
bool TryMakeOperand2_AllowNegation(s32 imm, Operand2 &op2, bool *negated);
|
bool TryMakeOperand2_AllowNegation(s32 imm, Operand2 &op2, bool *negated);
|
||||||
|
|
||||||
|
// Use this only when you know imm can be made into an Operand2.
|
||||||
|
Operand2 AssumeMakeOperand2(u32 imm);
|
||||||
|
|
||||||
inline Operand2 R(ARMReg Reg) { return Operand2(Reg, TYPE_REG); }
|
inline Operand2 R(ARMReg Reg) { return Operand2(Reg, TYPE_REG); }
|
||||||
inline Operand2 IMM(u32 Imm) { return Operand2(Imm, TYPE_IMM); }
|
inline Operand2 IMM(u32 Imm) { return Operand2(Imm, TYPE_IMM); }
|
||||||
inline Operand2 Mem(void *ptr) { return Operand2((u32)ptr, TYPE_IMM); }
|
inline Operand2 Mem(void *ptr) { return Operand2((u32)ptr, TYPE_IMM); }
|
||||||
@ -394,6 +397,7 @@ public:
|
|||||||
|
|
||||||
void FlushLitPool();
|
void FlushLitPool();
|
||||||
void AddNewLit(u32 val);
|
void AddNewLit(u32 val);
|
||||||
|
bool TrySetValue_TwoOp(ARMReg reg, u32 val);
|
||||||
|
|
||||||
CCFlags GetCC() { return CCFlags(condition >> 28); }
|
CCFlags GetCC() { return CCFlags(condition >> 28); }
|
||||||
void SetCC(CCFlags cond = CC_AL);
|
void SetCC(CCFlags cond = CC_AL);
|
||||||
@ -562,7 +566,9 @@ public:
|
|||||||
void MOVI2R(ARMReg reg, u32 val, bool optimize = true);
|
void MOVI2R(ARMReg reg, u32 val, bool optimize = true);
|
||||||
void MOVI2F(ARMReg dest, float val, ARMReg tempReg);
|
void MOVI2F(ARMReg dest, float val, ARMReg tempReg);
|
||||||
|
|
||||||
|
void ADDI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch);
|
||||||
void ANDI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch);
|
void ANDI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch);
|
||||||
|
void CMPI2R(ARMReg rs, u32 val, ARMReg scratch);
|
||||||
void ORI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch);
|
void ORI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _ATOMIC_H_
|
#ifndef _ATOMIC_H_
|
||||||
#define _ATOMIC_H_
|
#define _ATOMIC_H_
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _ATOMIC_GCC_H_
|
#ifndef _ATOMIC_GCC_H_
|
||||||
#define _ATOMIC_GCC_H_
|
#define _ATOMIC_GCC_H_
|
||||||
|
@ -1,19 +1,6 @@
|
|||||||
// Copyright (C) 2003 Dolphin Project.
|
// Copyright 2013 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// Refer to the license.txt file included.
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, version 2.0.
|
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License 2.0 for more details.
|
|
||||||
|
|
||||||
// A copy of the GPL 2.0 should have been included with the program.
|
|
||||||
// If not, see http://www.gnu.org/licenses/
|
|
||||||
|
|
||||||
// Official SVN repository and contact information can be found at
|
|
||||||
// http://code.google.com/p/dolphin-emu/
|
|
||||||
|
|
||||||
#ifndef _ATOMIC_WIN32_H_
|
#ifndef _ATOMIC_WIN32_H_
|
||||||
#define _ATOMIC_WIN32_H_
|
#define _ATOMIC_WIN32_H_
|
||||||
|