Commit a7be8a33 authored by nanahira's avatar nanahira

Merge branch 'master' of github.com:mercury233/irrlicht into develop

parents 9144cc0b 368b43c8
.DS_Store .DS_Store
/source/Irrlicht/MacOSX/build /source/Irrlicht/MacOSX/build
/source/Irrlicht/MacOSX/MacOSX.xcodeproj/project.xcworkspace /source/Irrlicht/MacOSX/MacOSX.xcodeproj/project.xcworkspace
/source/Irrlicht/MacOSX/MacOSX.xcodeproj/xcuserdata /source/Irrlicht/MacOSX/MacOSX.xcodeproj/xcuserdata
/source/Irrlicht/libpng/ci
/source/Irrlicht/libpng/contrib
/source/Irrlicht/libpng/projects
/source/Irrlicht/libpng/scripts
/source/Irrlicht/libpng/tests
/source/Irrlicht/libpng/loongarch
/source/Irrlicht/libpng/mips
/source/Irrlicht/libpng/powerpc
/source/Irrlicht/libpng/riscv
/source/Irrlicht/libpng/.appveyor.yml
/source/Irrlicht/libpng/.cmake-format.yaml
/source/Irrlicht/libpng/.editorconfig
/source/Irrlicht/libpng/.editorconfig-checker.json
/source/Irrlicht/libpng/.gitignore
/source/Irrlicht/libpng/.markdownlint.yml
/source/Irrlicht/libpng/.yamllint.yml
/source/Irrlicht/libpng/.github
/source/Irrlicht/libpng/aclocal.m4
/source/Irrlicht/libpng/autogen.sh
/source/Irrlicht/libpng/compile
/source/Irrlicht/libpng/config.guess
/source/Irrlicht/libpng/config.h.in
/source/Irrlicht/libpng/config.sub
/source/Irrlicht/libpng/configure
/source/Irrlicht/libpng/configure.ac
/source/Irrlicht/libpng/depcomp
/source/Irrlicht/libpng/INSTALL
/source/Irrlicht/libpng/install-sh
/source/Irrlicht/libpng/libpng-config.in
/source/Irrlicht/libpng/libpng.pc.in
/source/Irrlicht/libpng/ltmain.sh
/source/Irrlicht/libpng/Makefile.am
/source/Irrlicht/libpng/Makefile.in
/source/Irrlicht/libpng/missing
/source/Irrlicht/libpng/test-driver
/source/Irrlicht/zlib/make_vms.com
/bin/MacOSX /bin/MacOSX
/irrlicht.patch /irrlicht.patch
/premake*.lua /premake*.lua
...@@ -325,9 +325,9 @@ HRESULT CD3D9ShaderMaterialRenderer::stubD3DXAssembleShader(LPCSTR pSrcData, ...@@ -325,9 +325,9 @@ HRESULT CD3D9ShaderMaterialRenderer::stubD3DXAssembleShader(LPCSTR pSrcData,
if (!pFn && !LoadFailed) if (!pFn && !LoadFailed)
{ {
// try to load dll // try to load dll
io::path strDllName = "d3dx9_"; irr::core::string<TCHAR> strDllName = __TEXT("d3dx9_");
strDllName += (int)D3DX_SDK_VERSION; strDllName += (int)D3DX_SDK_VERSION;
strDllName += ".dll"; strDllName += __TEXT(".dll");
HMODULE hMod = LoadLibrary(strDllName.c_str()); HMODULE hMod = LoadLibrary(strDllName.c_str());
if (hMod) if (hMod)
...@@ -385,9 +385,9 @@ HRESULT CD3D9ShaderMaterialRenderer::stubD3DXAssembleShaderFromFile(LPCSTR pSrcF ...@@ -385,9 +385,9 @@ HRESULT CD3D9ShaderMaterialRenderer::stubD3DXAssembleShaderFromFile(LPCSTR pSrcF
if (!pFn && !LoadFailed) if (!pFn && !LoadFailed)
{ {
// try to load dll // try to load dll
io::path strDllName = "d3dx9_"; irr::core::string<TCHAR> strDllName = __TEXT("d3dx9_");
strDllName += (int)D3DX_SDK_VERSION; strDllName += (int)D3DX_SDK_VERSION;
strDllName += ".dll"; strDllName += __TEXT(".dll");
HMODULE hMod = LoadLibrary(strDllName.c_str()); HMODULE hMod = LoadLibrary(strDllName.c_str());
if (hMod) if (hMod)
...@@ -446,9 +446,9 @@ HRESULT CD3D9ShaderMaterialRenderer::stubD3DXCompileShader(LPCSTR pSrcData, UINT ...@@ -446,9 +446,9 @@ HRESULT CD3D9ShaderMaterialRenderer::stubD3DXCompileShader(LPCSTR pSrcData, UINT
if (!pFn && !LoadFailed) if (!pFn && !LoadFailed)
{ {
// try to load dll // try to load dll
io::path strDllName = "d3dx9_"; irr::core::string<TCHAR> strDllName = __TEXT("d3dx9_");
strDllName += (int)D3DX_SDK_VERSION; strDllName += (int)D3DX_SDK_VERSION;
strDllName += ".dll"; strDllName += __TEXT(".dll");
HMODULE hMod = LoadLibrary(strDllName.c_str()); HMODULE hMod = LoadLibrary(strDllName.c_str());
if (hMod) if (hMod)
...@@ -506,9 +506,9 @@ HRESULT CD3D9ShaderMaterialRenderer::stubD3DXCompileShaderFromFile(LPCSTR pSrcFi ...@@ -506,9 +506,9 @@ HRESULT CD3D9ShaderMaterialRenderer::stubD3DXCompileShaderFromFile(LPCSTR pSrcFi
if (!pFn && !LoadFailed) if (!pFn && !LoadFailed)
{ {
// try to load dll // try to load dll
io::path strDllName = "d3dx9_"; irr::core::string<TCHAR> strDllName = __TEXT("d3dx9_");
strDllName += (int)D3DX_SDK_VERSION; strDllName += (int)D3DX_SDK_VERSION;
strDllName += ".dll"; strDllName += __TEXT(".dll");
HMODULE hMod = LoadLibrary(strDllName.c_str()); HMODULE hMod = LoadLibrary(strDllName.c_str());
if (hMod) if (hMod)
......
...@@ -325,7 +325,7 @@ bool CGUIListBox::OnEvent(const SEvent& event) ...@@ -325,7 +325,7 @@ bool CGUIListBox::OnEvent(const SEvent& event)
LastKeyTime = now; LastKeyTime = now;
// find the selected item, starting at the current selection // find the selected item, starting at the current selection
s32 start = Selected; const s32 start = Selected;
// dont change selection if the key buffer matches the current item // dont change selection if the key buffer matches the current item
if (Selected > -1 && KeyBuffer.size() > 1) if (Selected > -1 && KeyBuffer.size() > 1)
{ {
...@@ -341,7 +341,8 @@ bool CGUIListBox::OnEvent(const SEvent& event) ...@@ -341,7 +341,8 @@ bool CGUIListBox::OnEvent(const SEvent& event)
{ {
if (KeyBuffer.equals_ignore_case(Items[current].text.subString(0,KeyBuffer.size()))) if (KeyBuffer.equals_ignore_case(Items[current].text.subString(0,KeyBuffer.size())))
{ {
if (Parent && Selected != current && !Selecting && !MoveOverSelect) setSelected(current);
if (Parent && start != current && !Selecting && !MoveOverSelect)
{ {
SEvent e; SEvent e;
e.EventType = EET_GUI_EVENT; e.EventType = EET_GUI_EVENT;
...@@ -350,7 +351,6 @@ bool CGUIListBox::OnEvent(const SEvent& event) ...@@ -350,7 +351,6 @@ bool CGUIListBox::OnEvent(const SEvent& event)
e.GUIEvent.EventType = EGET_LISTBOX_CHANGED; e.GUIEvent.EventType = EGET_LISTBOX_CHANGED;
Parent->OnEvent(e); Parent->OnEvent(e);
} }
setSelected(current);
return true; return true;
} }
} }
...@@ -361,9 +361,9 @@ bool CGUIListBox::OnEvent(const SEvent& event) ...@@ -361,9 +361,9 @@ bool CGUIListBox::OnEvent(const SEvent& event)
{ {
if (KeyBuffer.equals_ignore_case(Items[current].text.subString(0,KeyBuffer.size()))) if (KeyBuffer.equals_ignore_case(Items[current].text.subString(0,KeyBuffer.size())))
{ {
if (Parent && Selected != current && !Selecting && !MoveOverSelect) setSelected(current);
if (Parent && start != current && !Selecting && !MoveOverSelect)
{ {
Selected = current;
SEvent e; SEvent e;
e.EventType = EET_GUI_EVENT; e.EventType = EET_GUI_EVENT;
e.GUIEvent.Caller = this; e.GUIEvent.Caller = this;
...@@ -371,7 +371,6 @@ bool CGUIListBox::OnEvent(const SEvent& event) ...@@ -371,7 +371,6 @@ bool CGUIListBox::OnEvent(const SEvent& event)
e.GUIEvent.EventType = EGET_LISTBOX_CHANGED; e.GUIEvent.EventType = EGET_LISTBOX_CHANGED;
Parent->OnEvent(e); Parent->OnEvent(e);
} }
setSelected(current);
return true; return true;
} }
} }
......
...@@ -141,7 +141,7 @@ IImage* CImageLoaderJPG::loadImage(io::IReadFile* file) const ...@@ -141,7 +141,7 @@ IImage* CImageLoaderJPG::loadImage(io::IReadFile* file) const
return 0; return 0;
#else #else
if (!file) if (!(file && file->seek(0)))
return 0; return 0;
Filename = file->getFileName(); Filename = file->getFileName();
......
...@@ -69,7 +69,7 @@ bool CImageLoaderPng::isALoadableFileExtension(const io::path& filename) const ...@@ -69,7 +69,7 @@ bool CImageLoaderPng::isALoadableFileExtension(const io::path& filename) const
bool CImageLoaderPng::isALoadableFileFormat(io::IReadFile* file) const bool CImageLoaderPng::isALoadableFileFormat(io::IReadFile* file) const
{ {
#ifdef _IRR_COMPILE_WITH_LIBPNG_ #ifdef _IRR_COMPILE_WITH_LIBPNG_
if (!file) if (!(file && file->seek(0)))
return false; return false;
png_byte buffer[8]; png_byte buffer[8];
...@@ -89,7 +89,7 @@ bool CImageLoaderPng::isALoadableFileFormat(io::IReadFile* file) const ...@@ -89,7 +89,7 @@ bool CImageLoaderPng::isALoadableFileFormat(io::IReadFile* file) const
IImage* CImageLoaderPng::loadImage(io::IReadFile* file) const IImage* CImageLoaderPng::loadImage(io::IReadFile* file) const
{ {
#ifdef _IRR_COMPILE_WITH_LIBPNG_ #ifdef _IRR_COMPILE_WITH_LIBPNG_
if (!file) if (!(file && file->seek(0)))
return 0; return 0;
video::IImage* image = 0; video::IImage* image = 0;
......
...@@ -1101,7 +1101,7 @@ CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params) ...@@ -1101,7 +1101,7 @@ CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)
// create the window if we need to and we do not use the null device // create the window if we need to and we do not use the null device
if (!CreationParams.WindowId && CreationParams.DriverType != video::EDT_NULL) if (!CreationParams.WindowId && CreationParams.DriverType != video::EDT_NULL)
{ {
const fschar_t* ClassName = __TEXT("CIrrDeviceWin32"); const TCHAR* ClassName = __TEXT("CIrrDeviceWin32");
// Register Class // Register Class
WNDCLASSEX wcex; WNDCLASSEX wcex;
...@@ -1472,7 +1472,7 @@ void CIrrDeviceWin32::closeDevice() ...@@ -1472,7 +1472,7 @@ void CIrrDeviceWin32::closeDevice()
if (!ExternalWindow) if (!ExternalWindow)
{ {
DestroyWindow(HWnd); DestroyWindow(HWnd);
const fschar_t* ClassName = __TEXT("CIrrDeviceWin32"); const TCHAR* ClassName = __TEXT("CIrrDeviceWin32");
HINSTANCE hInstance = GetModuleHandle(0); HINSTANCE hInstance = GetModuleHandle(0);
UnregisterClass(ClassName, hInstance); UnregisterClass(ClassName, hInstance);
} }
......
...@@ -89,7 +89,7 @@ bool COpenGLDriver::changeRenderContext(const SExposedVideoData& videoData, CIrr ...@@ -89,7 +89,7 @@ bool COpenGLDriver::changeRenderContext(const SExposedVideoData& videoData, CIrr
bool COpenGLDriver::initDriver(CIrrDeviceWin32* device) bool COpenGLDriver::initDriver(CIrrDeviceWin32* device)
{ {
// Create a window to test antialiasing support // Create a window to test antialiasing support
const fschar_t* ClassName = __TEXT("GLCIrrDeviceWin32"); const TCHAR* ClassName = __TEXT("GLCIrrDeviceWin32");
HINSTANCE lhInstance = GetModuleHandle(0); HINSTANCE lhInstance = GetModuleHandle(0);
// Register Class // Register Class
......
...@@ -521,7 +521,6 @@ IReadFile* CZipReader::createAndOpenFile(u32 index) ...@@ -521,7 +521,6 @@ IReadFile* CZipReader::createAndOpenFile(u32 index)
//99 - AES encryption, WinZip 9 //99 - AES encryption, WinZip 9
const SZipFileEntry &e = FileInfo[Files[index].ID]; const SZipFileEntry &e = FileInfo[Files[index].ID];
wchar_t buf[64];
s16 actualCompressionMethod=e.header.CompressionMethod; s16 actualCompressionMethod=e.header.CompressionMethod;
IReadFile* decrypted=0; IReadFile* decrypted=0;
u8* decryptedBuf=0; u8* decryptedBuf=0;
...@@ -620,8 +619,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index) ...@@ -620,8 +619,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index)
c8* pBuf = new c8[ uncompressedSize ]; c8* pBuf = new c8[ uncompressedSize ];
if (!pBuf) if (!pBuf)
{ {
swprintf ( buf, 64, L"Not enough memory for decompressing %s", Files[index].FullName.c_str() ); os::Printer::log("Not enough memory for decompressing", Files[index].FullName, ELL_ERROR);
os::Printer::log( buf, ELL_ERROR);
if (decrypted) if (decrypted)
decrypted->drop(); decrypted->drop();
return 0; return 0;
...@@ -633,8 +631,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index) ...@@ -633,8 +631,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index)
pcData = new u8[decryptedSize]; pcData = new u8[decryptedSize];
if (!pcData) if (!pcData)
{ {
swprintf ( buf, 64, L"Not enough memory for decompressing %s", Files[index].FullName.c_str() ); os::Printer::log("Not enough memory for decompressing", Files[index].FullName, ELL_ERROR);
os::Printer::log( buf, ELL_ERROR);
delete [] pBuf; delete [] pBuf;
return 0; return 0;
} }
...@@ -674,8 +671,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index) ...@@ -674,8 +671,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index)
if (err != Z_OK) if (err != Z_OK)
{ {
swprintf ( buf, 64, L"Error decompressing %s", Files[index].FullName.c_str() ); os::Printer::log("Error decompressing", Files[index].FullName, ELL_ERROR);
os::Printer::log( buf, ELL_ERROR);
delete [] pBuf; delete [] pBuf;
return 0; return 0;
} }
...@@ -694,8 +690,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index) ...@@ -694,8 +690,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index)
c8* pBuf = new c8[ uncompressedSize ]; c8* pBuf = new c8[ uncompressedSize ];
if (!pBuf) if (!pBuf)
{ {
swprintf ( buf, 64, L"Not enough memory for decompressing %s", Files[index].FullName.c_str() ); os::Printer::log("Not enough memory for decompressing", Files[index].FullName, ELL_ERROR);
os::Printer::log( buf, ELL_ERROR);
if (decrypted) if (decrypted)
decrypted->drop(); decrypted->drop();
return 0; return 0;
...@@ -707,8 +702,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index) ...@@ -707,8 +702,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index)
pcData = new u8[decryptedSize]; pcData = new u8[decryptedSize];
if (!pcData) if (!pcData)
{ {
swprintf ( buf, 64, L"Not enough memory for decompressing %s", Files[index].FullName.c_str() ); os::Printer::log("Not enough memory for decompressing", Files[index].FullName, ELL_ERROR);
os::Printer::log( buf, ELL_ERROR);
delete [] pBuf; delete [] pBuf;
return 0; return 0;
} }
...@@ -745,8 +739,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index) ...@@ -745,8 +739,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index)
if (err != BZ_OK) if (err != BZ_OK)
{ {
swprintf ( buf, 64, L"Error decompressing %s", Files[index].FullName.c_str() ); os::Printer::log("Error decompressing", Files[index].FullName, ELL_ERROR);
os::Printer::log( buf, ELL_ERROR);
delete [] pBuf; delete [] pBuf;
return 0; return 0;
} }
...@@ -766,8 +759,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index) ...@@ -766,8 +759,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index)
c8* pBuf = new c8[ uncompressedSize ]; c8* pBuf = new c8[ uncompressedSize ];
if (!pBuf) if (!pBuf)
{ {
swprintf ( buf, 64, L"Not enough memory for decompressing %s", Files[index].FullName.c_str() ); os::Printer::log("Not enough memory for decompressing", Files[index].FullName, ELL_ERROR);
os::Printer::log( buf, ELL_ERROR);
if (decrypted) if (decrypted)
decrypted->drop(); decrypted->drop();
return 0; return 0;
...@@ -779,8 +771,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index) ...@@ -779,8 +771,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index)
pcData = new u8[decryptedSize]; pcData = new u8[decryptedSize];
if (!pcData) if (!pcData)
{ {
swprintf ( buf, 64, L"Not enough memory for decompressing %s", Files[index].FullName.c_str() ); os::Printer::log("Not enough memory for decompressing", Files[index].FullName, ELL_ERROR);
os::Printer::log( buf, ELL_ERROR);
delete [] pBuf; delete [] pBuf;
return 0; return 0;
} }
...@@ -826,8 +817,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index) ...@@ -826,8 +817,7 @@ IReadFile* CZipReader::createAndOpenFile(u32 index)
os::Printer::log("Decryption support not enabled. File cannot be read.", ELL_ERROR); os::Printer::log("Decryption support not enabled. File cannot be read.", ELL_ERROR);
return 0; return 0;
default: default:
swprintf ( buf, 64, L"file has unsupported compression method. %s", Files[index].FullName.c_str() ); os::Printer::log("file has unsupported compression method.", Files[index].FullName, ELL_ERROR);
os::Printer::log( buf, ELL_ERROR);
return 0; return 0;
}; };
......
...@@ -1265,6 +1265,7 @@ ...@@ -1265,6 +1265,7 @@
<Unit filename="libpng/pngset.c"> <Unit filename="libpng/pngset.c">
<Option compilerVar="CC" /> <Option compilerVar="CC" />
</Unit> </Unit>
<Unit filename="libpng/pngstruct.h" />
<Unit filename="libpng/pngtrans.c"> <Unit filename="libpng/pngtrans.c">
<Option compilerVar="CC" /> <Option compilerVar="CC" />
</Unit> </Unit>
......
...@@ -494,6 +494,7 @@ CIrrDeviceMacOSX::CIrrDeviceMacOSX(const SIrrlichtCreationParameters& param) ...@@ -494,6 +494,7 @@ CIrrDeviceMacOSX::CIrrDeviceMacOSX(const SIrrlichtCreationParameters& param)
if(!CreationParams.WindowId) //load menus if standalone application if(!CreationParams.WindowId) //load menus if standalone application
{ {
[[NSAutoreleasePool alloc] init]; [[NSAutoreleasePool alloc] init];
[[NSApplication sharedApplication] setActivationPolicy:NSApplicationActivationPolicyRegular];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; [[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
[NSApp setDelegate:(id<NSApplicationDelegate>)[[[AppDelegate alloc] initWithDevice:this] autorelease]]; [NSApp setDelegate:(id<NSApplicationDelegate>)[[[AppDelegate alloc] initWithDevice:this] autorelease]];
[NSBundle loadNibNamed:@"MainMenu" owner:[NSApp delegate]]; [NSBundle loadNibNamed:@"MainMenu" owner:[NSApp delegate]];
......
libpng 1.6.47 - February 18, 2025 libpng 1.6.55 - February 9, 2026
================================= ================================
This is a public release of libpng, intended for use in production code. This is a public release of libpng, intended for use in production code.
Files available for download Files available for download
---------------------------- ----------------------------
Source files with LF line endings (for Unix/Linux): Source files:
* libpng-1.6.47.tar.xz (LZMA-compressed, recommended) * libpng-1.6.55.tar.xz (LZMA-compressed, recommended)
* libpng-1.6.47.tar.gz (deflate-compressed) * libpng-1.6.55.tar.gz (deflate-compressed)
* lpng1655.7z (LZMA-compressed)
Source files with CRLF line endings (for Windows): * lpng1655.zip (deflate-compressed)
* lpng1647.7z (LZMA-compressed, recommended) Other information:
* lpng1647.zip (deflate-compressed)
* README.md
Other information: * LICENSE.md
* AUTHORS.md
* README.md * TRADEMARK.md
* LICENSE.md
* AUTHORS.md
* TRADEMARK.md Changes from version 1.6.54 to version 1.6.55
---------------------------------------------
Changes from version 1.6.46 to version 1.6.47 * Fixed CVE-2026-25646 (high severity):
--------------------------------------------- Heap buffer overflow in `png_set_quantize`.
(Reported and fixed by Joshua Inscoe.)
* Modified the behaviour of colorspace chunks in order to adhere * Resolved an oss-fuzz build issue involving nalloc.
to the new precedence rules formulated in the latest draft of (Contributed by Philippe Antoine.)
the PNG Specification.
(Contributed by John Bowler) Send comments/corrections/commendations to png-mng-implement at lists.sf.net.
* Fixed a latent bug in `png_write_iCCP`. Subscription is required; visit
This would have been a read-beyond-end-of-malloc vulnerability, <https://lists.sourceforge.net/lists/listinfo/png-mng-implement>
introduced early in the libpng-1.6.0 development, yet (fortunately!) to subscribe.
it was inaccessible before the above-mentioned modification of the
colorspace precedence rules, due to pre-existing colorspace checks.
(Reported by Bob Friesenhahn; fixed by John Bowler)
Send comments/corrections/commendations to png-mng-implement at lists.sf.net.
Subscription is required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
to subscribe.
PNG REFERENCE LIBRARY AUTHORS PNG REFERENCE LIBRARY AUTHORS
============================= =============================
This is the list of PNG Reference Library ("libpng") Contributing This is the list of PNG Reference Library ("libpng") Contributing
Authors, for copyright and licensing purposes. Authors, for copyright and licensing purposes.
* Adam Richter * Adam Richter
* Andreas Dilger * Alexander Smorkalov
* Chris Blume * Andreas Dilger
* Cosmin Truta * Chris Blume
* Dave Martindale * Cosmin Truta
* Eric S. Raymond * Dave Martindale
* Gilles Vollant * Eric S. Raymond
* Glenn Randers-Pehrson * Gilles Vollant
* Greg Roelofs * Glenn Randers-Pehrson
* Guy Eric Schalnat * Greg Roelofs
* James Yu * Guy Eric Schalnat
* John Bowler * James Yu
* Kevin Bracey * John Bowler
* Lucas Chollet * Joshua Inscoe
* Magnus Holmgren * Kevin Bracey
* Mandar Sahastrabuddhe * Lucas Chollet
* Mans Rullgard * Magnus Holmgren
* Matt Sarett * Mandar Sahastrabuddhe
* Mike Klein * Manfred Schlaegl
* Pascal Massimino * Mans Rullgard
* Paul Schmidt * Matt Sarett
* Philippe Antoine * Mike Klein
* Qiang Zhou * Pascal Massimino
* Sam Bushell * Paul Schmidt
* Samuel Williams * Petr Simecek
* Simon-Pierre Cadieux * Philippe Antoine
* Tim Wegner * Qiang Zhou
* Tom Lane * Sam Bushell
* Tom Tanner * Samuel Williams
* Vadim Barkov * Simon-Pierre Cadieux
* Willem van Schaik * Tim Wegner
* Zhijie Liang * Tobias Stoeckmann
* Apple Inc. * Tom Lane
- Zixu Wang (王子旭) * Tom Tanner
* Arm Holdings * Vadim Barkov
- Richard Townsend * Willem van Schaik
* Google Inc. * Zhijie Liang
- Dan Field * Apple Inc.
- Leon Scroggins III - Zixu Wang (王子旭)
- Matt Sarett * Arm Holdings
- Mike Klein - Richard Townsend
- Sami Boukortt * Google LLC
- Wan-Teh Chang - Dan Field
* Loongson Technology Corporation Ltd. - Dragoș Tiselice
- GuXiWei (顾希伟) - Leon Scroggins III
- JinBo (金波) - Matt Sarett
- ZhangLixia (张利霞) - Mike Klein
- Sami Boukortt
The build projects, the build scripts, the test scripts, and other - Wan-Teh Chang
files in the "projects", "scripts" and "tests" directories, have * Loongson Technology Corporation Ltd.
other copyright owners, but are released under the libpng license. - GuXiWei (顾希伟)
- JinBo (金波)
Some files in the "ci" and "contrib" directories, as well as some - ZhangLixia (张利霞)
of the tools-generated files that are distributed with libpng, have * Samsung Group
other copyright owners, and are released under other open source - Filip Wasil
licenses. * SpacemiT Hangzhou Technology, Co.
- Liang Junzhao (梁俊钊)
The build projects, the build scripts, the test scripts, and other
files in the "projects", "scripts" and "tests" directories, have
other copyright owners, but are released under the libpng license.
Some files in the "ci" and "contrib" directories, as well as some
of the tools-generated files that are distributed with libpng, have
other copyright owners, and are released under other open source
licenses.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
TODO list for libpng TODO list for libpng
-------------------- ====================
* Fix all defects (duh!) * Fix all defects (duh!)
* cHRM transformation. * cHRM transformation.
* Palette creation. * Palette creation.
* "grayscale->palette" transformation and "palette->grayscale" detection. * "grayscale->palette" transformation and "palette->grayscale" detection.
* Improved dithering. * Improved dithering.
* Multi-lingual error and warning message support. * Multi-lingual error and warning message support.
* Complete sRGB transformation. (Currently it simply uses gamma=0.45455.) * Complete sRGB transformation. (Currently it simply uses gamma=0.45455.)
* Man pages for function calls. * Man pages for function calls.
* Better documentation. * Better documentation.
* Better filter selection * Better filter selection
(e.g., counting huffman bits/precompression; filter inertia; filter costs). (e.g., counting huffman bits/precompression; filter inertia; filter costs).
* Histogram creation. * Histogram creation.
* Text conversion between different code pages (e.g., Latin-1 to Mac). * Text conversion between different code pages (e.g., Latin-1 to Mac).
* Avoid building gamma tables whenever possible. * Avoid building gamma tables whenever possible.
* Greater precision in changing to linear gamma for compositing against * Greater precision in changing to linear gamma for compositing against
background, and in doing rgb-to-gray transformations. background, and in doing rgb-to-gray transformations.
* Investigate pre-incremented loop counters and other loop constructions. * Investigate pre-incremented loop counters and other loop constructions.
* Interpolated method of handling interlacing. * Interpolated method of handling interlacing.
* More validations for libpng transformations. * More validations for libpng transformations.
TRADEMARK TRADEMARK
========= =========
The name "libpng" has not been registered by the Copyright owners The name "libpng" has not been registered by the Copyright owners
as a trademark in any jurisdiction. However, because libpng has as a trademark in any jurisdiction. However, because libpng has
been distributed and maintained world-wide, continually since 1995, been distributed and maintained world-wide, continually since 1995,
the Copyright owners claim "common-law trademark protection" in any the Copyright owners claim "common-law trademark protection" in any
jurisdiction where common-law trademark is recognized. jurisdiction where common-law trademark is recognized.
This diff is collapsed.
/* arm_init.c - NEON optimised filter functions
*
* Copyright (c) 2018-2022 Cosmin Truta
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
* Written by Mans Rullgard, 2011.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*/
/* This module requires POSIX 1003.1 functions. */
#define _POSIX_SOURCE 1
#include "../pngpriv.h"
#ifdef PNG_READ_SUPPORTED
#if PNG_ARM_NEON_OPT > 0
#ifdef PNG_ARM_NEON_CHECK_SUPPORTED /* Do run-time checks */
/* WARNING: it is strongly recommended that you do not build libpng with
* run-time checks for CPU features if at all possible. In the case of the ARM
* NEON instructions there is no processor-specific way of detecting the
* presence of the required support, therefore run-time detection is extremely
* OS specific.
*
* You may set the macro PNG_ARM_NEON_FILE to the file name of file containing
* a fragment of C source code which defines the png_have_neon function. There
* are a number of implementations in contrib/arm-neon, but the only one that
* has partial support is contrib/arm-neon/linux.c - a generic Linux
* implementation which reads /proc/cpufino.
*/
#include <signal.h> /* for sig_atomic_t */
#ifndef PNG_ARM_NEON_FILE
# if defined(__aarch64__) || defined(_M_ARM64)
/* ARM Neon is expected to be unconditionally available on ARM64. */
# error PNG_ARM_NEON_CHECK_SUPPORTED must not be defined on ARM64
# elif defined(__ARM_NEON__) || defined(__ARM_NEON)
/* ARM Neon is expected to be available on the target CPU architecture. */
# error PNG_ARM_NEON_CHECK_SUPPORTED must not be defined on this CPU arch
# elif defined(__linux__)
# define PNG_ARM_NEON_FILE "contrib/arm-neon/linux.c"
# else
# error No support for run-time ARM Neon checking; use compile-time options
# endif
#endif
static int png_have_neon(png_structp png_ptr);
#ifdef PNG_ARM_NEON_FILE
# include PNG_ARM_NEON_FILE
#endif
#endif /* PNG_ARM_NEON_CHECK_SUPPORTED */
#ifndef PNG_ALIGNED_MEMORY_SUPPORTED
# error ALIGNED_MEMORY is required; please define PNG_ALIGNED_MEMORY_SUPPORTED
#endif
void
png_init_filter_functions_neon(png_structp pp, unsigned int bpp)
{
/* The switch statement is compiled in for ARM_NEON_API, the call to
* png_have_neon is compiled in for ARM_NEON_CHECK. If both are defined
* the check is only performed if the API has not set the NEON option on
* or off explicitly. In this case the check controls what happens.
*
* If the CHECK is not compiled in and the option is UNSET the behavior prior
* to 1.6.7 was to use the NEON code - this was a bug caused by having the
* wrong order of the 'ON' and 'default' cases. UNSET now defaults to OFF,
* as documented in png.h
*/
png_debug(1, "in png_init_filter_functions_neon");
#ifdef PNG_ARM_NEON_API_SUPPORTED
switch ((pp->options >> PNG_ARM_NEON) & 3)
{
case PNG_OPTION_UNSET:
/* Allow the run-time check to execute if it has been enabled -
* thus both API and CHECK can be turned on. If it isn't supported
* this case will fall through to the 'default' below, which just
* returns.
*/
#endif /* PNG_ARM_NEON_API_SUPPORTED */
#ifdef PNG_ARM_NEON_CHECK_SUPPORTED
{
static volatile sig_atomic_t no_neon = -1; /* not checked */
if (no_neon < 0)
no_neon = !png_have_neon(pp);
if (no_neon)
return;
}
#ifdef PNG_ARM_NEON_API_SUPPORTED
break;
#endif
#endif /* PNG_ARM_NEON_CHECK_SUPPORTED */
#ifdef PNG_ARM_NEON_API_SUPPORTED
default: /* OFF or INVALID */
return;
case PNG_OPTION_ON:
/* Option turned on */
break;
}
#endif
/* IMPORTANT: any new external functions used here must be declared using
* PNG_INTERNAL_FUNCTION in ../pngpriv.h. This is required so that the
* 'prefix' option to configure works:
*
* ./configure --with-libpng-prefix=foobar_
*
* Verify you have got this right by running the above command, doing a build
* and examining pngprefix.h; it must contain a #define for every external
* function you add. (Notice that this happens automatically for the
* initialization function.)
*/
pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up_neon;
if (bpp == 3)
{
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_neon;
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_neon;
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
png_read_filter_row_paeth3_neon;
}
else if (bpp == 4)
{
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_neon;
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_neon;
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
png_read_filter_row_paeth4_neon;
}
}
#endif /* PNG_ARM_NEON_OPT > 0 */
#endif /* READ */
/* filter_neon.S - placeholder file
*
* Copyright (c) 2024 Cosmin Truta
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*/
/* IMPORTANT NOTE:
*
* Historically, the hand-coded assembler implementation of Neon optimizations
* in this module had not been in sync with the intrinsics-based implementation
* in filter_neon_intrinsics.c and palette_neon_intrinsics.c, at least since
* the introduction of riffled palette optimizations. Moreover, the assembler
* code used to work on 32-bit ARM only, and it caused problems, even if empty,
* on 64-bit ARM.
*
* All references to this module from our internal build scripts and projects
* have been removed.
*
* For the external projects that might still expect this module to be present,
* we leave this stub in place, for the remaining lifetime of libpng-1.6.x.
* Everything should continue to function normally, as long as there are no
* deliberate attempts to use the old hand-made assembler code. A build error
* will be raised otherwise.
*/
/* This is required to get the symbol renames, which are #defines, and the
* definitions (or not) of PNG_ARM_NEON_OPT and PNG_ARM_NEON_IMPLEMENTATION.
*/
#define PNG_VERSION_INFO_ONLY
#include "../pngpriv.h"
#ifdef PNG_READ_SUPPORTED
#if PNG_ARM_NEON_IMPLEMENTATION == 2 /* hand-coded assembler */
#if PNG_ARM_NEON_OPT > 0
#if defined(__clang__)
#define GNUC_VERSION 0 /* not gcc, although it might pretend to be */
#elif defined(__GNUC__)
#define GNUC_MAJOR (__GNUC__ + 0)
#define GNUC_MINOR (__GNUC_MINOR__ + 0)
#define GNUC_PATCHLEVEL (__GNUC_PATCHLEVEL__ + 0)
#define GNUC_VERSION (GNUC_MAJOR * 10000 + GNUC_MINOR * 100 + GNUC_PATCHLEVEL)
#else
#define GNUC_VERSION 0 /* not gcc */
#endif
#if (GNUC_VERSION > 0) && (GNUC_VERSION < 40300)
#error "PNG_ARM_NEON is not supported with gcc versions earlier than 4.3.0"
#elif GNUC_VERSION == 40504
#error "PNG_ARM_NEON is not supported with gcc version 4.5.4"
#else
#error "Please use 'arm/*_neon_intrinsics.c' for PNG_ARM_NEON support"
#endif
#endif /* PNG_ARM_NEON_OPT > 0 */
#endif /* PNG_ARM_NEON_IMPLEMENTATION == 2 */
#endif /* READ */
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/* intel_init.c - SSE2 optimized filter functions /* intel_init.c - SSE2 optimized filter functions
* *
* Copyright (c) 2018 Cosmin Truta * Copyright (c) 2018 Cosmin Truta
* Copyright (c) 2016-2017 Glenn Randers-Pehrson * Copyright (c) 2016-2017 Glenn Randers-Pehrson
* Written by Mike Klein and Matt Sarett, Google, Inc. * Written by Mike Klein and Matt Sarett, Google, Inc.
* Derived from arm/arm_init.c * Derived from arm/arm_init.c
* *
* This code is released under the libpng license. * This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer * For conditions of distribution and use, see the disclaimer
* and license in png.h * and license in png.h
*/ */
#include "../pngpriv.h" #include "../pngpriv.h"
#ifdef PNG_READ_SUPPORTED #ifdef PNG_READ_SUPPORTED
#if PNG_INTEL_SSE_IMPLEMENTATION > 0 #if PNG_INTEL_SSE_IMPLEMENTATION > 0
void void
png_init_filter_functions_sse2(png_structp pp, unsigned int bpp) png_init_filter_functions_sse2(png_structp pp, unsigned int bpp)
{ {
/* The techniques used to implement each of these filters in SSE operate on /* The techniques used to implement each of these filters in SSE operate on
* one pixel at a time. * one pixel at a time.
* So they generally speed up 3bpp images about 3x, 4bpp images about 4x. * So they generally speed up 3bpp images about 3x, 4bpp images about 4x.
* They can scale up to 6 and 8 bpp images and down to 2 bpp images, * They can scale up to 6 and 8 bpp images and down to 2 bpp images,
* but they'd not likely have any benefit for 1bpp images. * but they'd not likely have any benefit for 1bpp images.
* Most of these can be implemented using only MMX and 64-bit registers, * Most of these can be implemented using only MMX and 64-bit registers,
* but they end up a bit slower than using the equally-ubiquitous SSE2. * but they end up a bit slower than using the equally-ubiquitous SSE2.
*/ */
png_debug(1, "in png_init_filter_functions_sse2"); png_debug(1, "in png_init_filter_functions_sse2");
if (bpp == 3) if (bpp == 3)
{ {
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_sse2; pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_sse2;
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_sse2; pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_sse2;
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
png_read_filter_row_paeth3_sse2; png_read_filter_row_paeth3_sse2;
} }
else if (bpp == 4) else if (bpp == 4)
{ {
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_sse2; pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_sse2;
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_sse2; pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_sse2;
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
png_read_filter_row_paeth4_sse2; png_read_filter_row_paeth4_sse2;
} }
/* No need optimize PNG_FILTER_VALUE_UP. The compiler should /* No need optimize PNG_FILTER_VALUE_UP. The compiler should
* autovectorize. * autovectorize.
*/ */
} }
#endif /* PNG_INTEL_SSE_IMPLEMENTATION > 0 */ #endif /* PNG_INTEL_SSE_IMPLEMENTATION > 0 */
#endif /* PNG_READ_SUPPORTED */ #endif /* PNG_READ_SUPPORTED */
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment