mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-30 04:20:23 +00:00
Update giflib to a submodule
This commit is contained in:
parent
c3bc7acb4d
commit
6c79855e8c
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -54,3 +54,6 @@
|
||||
[submodule "third_party/mujs"]
|
||||
path = third_party/mujs
|
||||
url = https://github.com/aseprite/mujs.git
|
||||
[submodule "third_party/giflib"]
|
||||
path = third_party/giflib
|
||||
url = https://github.com/aseprite/giflib.git
|
||||
|
1
third_party/CMakeLists.txt
vendored
1
third_party/CMakeLists.txt
vendored
@ -39,6 +39,7 @@ if(WITH_WEBP_SUPPORT)
|
||||
endif()
|
||||
|
||||
if(NOT USE_SHARED_GIFLIB)
|
||||
set(GIFLIB_UTILS OFF CACHE BOOL "Build giflib utils")
|
||||
add_subdirectory(giflib)
|
||||
endif()
|
||||
|
||||
|
1
third_party/giflib
vendored
Submodule
1
third_party/giflib
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 39b32b876e42d627dce4c61c82b639028a8f11e0
|
36
third_party/giflib/AUTHORS
vendored
36
third_party/giflib/AUTHORS
vendored
@ -1,36 +0,0 @@
|
||||
Michael Brown <michael_brown_uk[AT]hotmail.com>
|
||||
callbacks to write data via user defined function
|
||||
|
||||
Daniel Eisenbud <eisenbud[AT]google.com>
|
||||
Fixes for crashes with invalid gif files and double freeing of
|
||||
colormaps
|
||||
|
||||
Gershon Elber <gershon[AT]cs.technion.sc.il>
|
||||
original giflib code
|
||||
|
||||
Marc Ewing <marc[AT]redhat.com>
|
||||
spec file (for rpms) updates
|
||||
|
||||
Toshio Kuratomi <toshio[AT]tiki-lounge.com>
|
||||
uncompressed gif writing code
|
||||
autoconf/automake process
|
||||
former maintainer
|
||||
|
||||
marek <marwaw[AT]users.sourceforge.net>
|
||||
Gif initialization fix
|
||||
windows build code
|
||||
|
||||
Peter Mehlitz <peter[AT]transvirtual.com>
|
||||
callbacks to read data from arbitrary sources (like libjpeg/libpng)
|
||||
|
||||
Dick Porter <dick[AT]cymru.net>
|
||||
int/pointer fixes for Alpha
|
||||
|
||||
Eric Raymond <esr[AT]snark.thyrsus.com>
|
||||
current as well as long time former maintainer of giflib code
|
||||
|
||||
Petter Reinholdtsen <pere[AT]hungry.com>
|
||||
Tru64 build fixs
|
||||
|
||||
Georg Schwarz <geos[AT]epost.de>
|
||||
IRIX fixes
|
2
third_party/giflib/BUGS
vendored
2
third_party/giflib/BUGS
vendored
@ -1,2 +0,0 @@
|
||||
Please report BUGS to the bug tracker on sourceforge:
|
||||
http://sourceforge.net/tracker/?group_id=102202
|
54
third_party/giflib/CMakeLists.txt
vendored
54
third_party/giflib/CMakeLists.txt
vendored
@ -1,54 +0,0 @@
|
||||
# ASEPRITE
|
||||
# Copyright (C) 2001-2015 David Capello
|
||||
|
||||
include(CheckIncludeFiles)
|
||||
|
||||
include_directories(
|
||||
lib
|
||||
${CMAKE_CURRENT_BINARY_DIR} # For config.h
|
||||
)
|
||||
|
||||
check_include_files("dlfcn.h" HAVE_DLFCN_H)
|
||||
check_include_files("fcntl.h" HAVE_FCNTL_H)
|
||||
check_include_files("gl/gl.h" HAVE_GL_GL_H)
|
||||
check_include_files("inttypes.h" HAVE_INTTYPES_H)
|
||||
check_include_files("memory.h" HAVE_MEMORY_H)
|
||||
check_include_files("rle.h" HAVE_RLE_H)
|
||||
check_include_files("stdarg.h" HAVE_STDARG_H)
|
||||
check_include_files("stdint.h" HAVE_STDINT_H)
|
||||
check_include_files("stdlib.h" HAVE_STDLIB_H)
|
||||
check_include_files("strings.h" HAVE_STRINGS_H)
|
||||
check_include_files("string.h" HAVE_STRING_H)
|
||||
check_include_files("sys/stat.h" HAVE_SYS_STAT_H)
|
||||
check_include_files("sys/types.h" HAVE_SYS_TYPES_H)
|
||||
check_include_files("unistd.h" HAVE_UNISTD_H)
|
||||
check_include_files("varargs.h" HAVE_VARARGS_H)
|
||||
check_include_files("X11/Xlib.h" HAVE_X11_XLIB_H)
|
||||
check_include_files("X11/Xutil.h" HAVE_X11_XUTIL_H)
|
||||
|
||||
check_function_exists("vprintf" HAVE_VPRINTF)
|
||||
check_function_exists("_doprnt" HAVE_DOPRNT)
|
||||
check_function_exists("strdup" HAVE_STRDUP)
|
||||
|
||||
if(HAVE_STDINT_H OR HAVE_INTTYPES_H)
|
||||
set("UINT32" "uint32_t")
|
||||
else()
|
||||
set("UINT32" "unsigned int")
|
||||
endif()
|
||||
|
||||
configure_file(config.h.cmake config.h)
|
||||
|
||||
add_definitions(-DHAVE_CONFIG_H=1)
|
||||
|
||||
if(WIN32)
|
||||
add_definitions(-DWINDOWS32=1)
|
||||
endif()
|
||||
|
||||
add_library(giflib
|
||||
lib/dgif_lib.c
|
||||
lib/egif_lib.c
|
||||
lib/gif_err.c
|
||||
lib/gif_font.c
|
||||
lib/gif_hash.c
|
||||
lib/gifalloc.c
|
||||
lib/quantize.c)
|
19
third_party/giflib/COPYING
vendored
19
third_party/giflib/COPYING
vendored
@ -1,19 +0,0 @@
|
||||
The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
666
third_party/giflib/ChangeLog
vendored
666
third_party/giflib/ChangeLog
vendored
@ -1,666 +0,0 @@
|
||||
shipper: ignore this.
|
||||
It's retained for archival purposes only, and because
|
||||
autotools throws a hissy fit if there isn't one. The single point of
|
||||
truth about changes and the reasons for them is the repository.
|
||||
|
||||
2007-11-10 14:50 abadger1999
|
||||
|
||||
* NEWS, configure.ac, lib/Makefile.am, lib/egif_lib.c,
|
||||
lib/gif_hash.c: 4.1.6 update. Errors in including headers could
|
||||
lead to build problems on some platforms.
|
||||
|
||||
2007-11-10 13:16 abadger1999
|
||||
|
||||
* configure.ac: Bump release version in configure.ac.
|
||||
|
||||
2007-11-10 13:15 abadger1999
|
||||
|
||||
* Makefile.am: Remove PATENT_PROBLEMS from build rules as well.
|
||||
|
||||
2007-11-10 13:09 abadger1999
|
||||
|
||||
* NEWS, PATENT_PROBLEMS, lib/Makefile.am: Remove PATENT_PROBLEMS as
|
||||
it's no longer covered. Update NEWS and Makefile.am for the new
|
||||
release.
|
||||
|
||||
2007-11-10 10:46 abadger1999
|
||||
|
||||
* configure.ac, util/gif2epsn.c, util/gif2iris.c, util/gif2ps.c,
|
||||
util/gif2rgb.c, util/gif2rle.c, util/gif2x11.c: Find and fix
|
||||
segfaults in the gif2* programs due to referencing the ColorMap
|
||||
beforefinding out if hte GifFile produced a valid colormap or was
|
||||
corrupt.
|
||||
|
||||
2007-11-10 09:30 abadger1999
|
||||
|
||||
* lib/dgif_lib.c: Add checks to fail gracefully when corrupted
|
||||
images are submitted that have improper LZ codes.
|
||||
|
||||
2007-11-10 09:22 abadger1999
|
||||
|
||||
* lib/: dgif_lib.c, egif_lib.c: Further checks to compile correctly
|
||||
on WIN32.
|
||||
|
||||
2007-11-09 20:28 abadger1999
|
||||
|
||||
* util/giftext.c: Fix a SegFault when a GifFile does not store a
|
||||
global colormap.
|
||||
|
||||
2007-11-09 20:13 abadger1999
|
||||
|
||||
* util/gif2x11.c: Fix gif2x11 to work with modern, 24 bit displays.
|
||||
|
||||
2007-11-09 14:18 abadger1999
|
||||
|
||||
* configure.ac: Check for headers as well as the libraries for rle,
|
||||
X11, and gl_s.
|
||||
|
||||
2007-11-09 13:24 abadger1999
|
||||
|
||||
* configure.ac: Merge better fix for finding an unsignd 32 bit
|
||||
integer type.
|
||||
|
||||
2007-11-09 13:01 abadger1999
|
||||
|
||||
* configure.ac: Add configure comman line switches to turn off X11,
|
||||
rle, and gl support.
|
||||
|
||||
2007-11-09 12:36 abadger1999
|
||||
|
||||
* configure.ac, util/Makefile.am: Fixes to build under cygwin.
|
||||
|
||||
2007-11-09 11:49 abadger1999
|
||||
|
||||
* configure.ac: Make GCC check more robust. Add a needed automake
|
||||
check.
|
||||
|
||||
2007-11-09 11:48 abadger1999
|
||||
|
||||
* lib/dgif_lib.c: Fix closing file handles on failure in
|
||||
DGifOpenFileHandle().
|
||||
|
||||
2007-11-09 11:33 abadger1999
|
||||
|
||||
* lib/egif_lib.c: Save files in binary mode for WIN32 as well as
|
||||
MSDOS.
|
||||
|
||||
2007-11-09 11:25 abadger1999
|
||||
|
||||
* lib/Makefile.ms: * Makefile for building under Visual C++ from
|
||||
Bug #981209.
|
||||
|
||||
2005-11-13 20:14 abadger1999
|
||||
|
||||
* configure.ac, lib/Makefile.am, util/Makefile.am: Changes to
|
||||
conditionalize -Wall upon compiling with gcc.
|
||||
|
||||
2005-11-06 08:45 abadger1999
|
||||
|
||||
* lib/: gif_hash.c, gif_hash.h: Add inttypes.h to the headers we
|
||||
could include to get a 32-it int type.
|
||||
|
||||
2005-11-06 08:34 abadger1999
|
||||
|
||||
* configure.ac: Search for ISO/ANSI definitions of uint32_t in
|
||||
stdint.h _and_ inttypes.h before POSIX u_int32_t in sys/types.h
|
||||
as some systems have sys/types.h without the definition.
|
||||
Eventually we need to code a test that the expected UINT32
|
||||
definition exists in the header we select so order does not
|
||||
matter.
|
||||
|
||||
2005-11-06 08:32 abadger1999
|
||||
|
||||
* AUTHORS, README: Modify so that it no longer appears that esr
|
||||
still maintains this package.
|
||||
|
||||
= giflib-4.1.4 =
|
||||
|
||||
2005-10-09 Toshio Kuratomi <toshio@tiki-lounge.com> - r94
|
||||
* Sync with libungif r93.
|
||||
* ChangeLog: Update to r92.
|
||||
* NEWS: Update with combined libungif/giflib changes.
|
||||
|
||||
2005-10-09 Toshio Kuratomi <toshio@tiki-lounge.com> - r92
|
||||
* lib/gif_lib.h: Change GifPrefixType to unsigned.
|
||||
|
||||
2005-10-09 Toshio Kuratomi <toshio@tiki-lounge.com> - r91
|
||||
* ChangeLog: Update to r90.
|
||||
* NEWS: Update on GBA and Windows fixes.
|
||||
|
||||
2005-10-06 Toshio Kuratomi <toshio@tiki-lounge.com> - r90
|
||||
Changes from Lennie Araki:
|
||||
* gba/giftest.mak: Prefix the names of defines for the GBA build with _GBA.
|
||||
* lib/dgif_lib.c, lib/gif_lib_private.h, lib/gif_err.c:
|
||||
- When Compiling for Game Boy Advance, file functions are not needed so
|
||||
exclude DGifOpenFileName(), DGifOpenFileHandle(), DGifSlurp(), and
|
||||
PrintGifError().
|
||||
- On Game Boy Advance we need to reduce memory usage. Change values to
|
||||
short int where appropriate.
|
||||
* lib/gif_lib.h:
|
||||
- Handle te GBA changes by defining GifPrefixType and GifWord to int
|
||||
unless compiling on GBA. Then use unsigned short and short
|
||||
respectively.
|
||||
- Fix a problem with the API on _WIN32. DrawText conflicts with the
|
||||
Windows API. Call it DrawGifText instead.
|
||||
|
||||
2005-09-27 Toshio Kuratomi <toshio@tiki-lounge.com> - r86
|
||||
* Sync with libungif r85.
|
||||
|
||||
2005-09-27 Toshio Kuratomi <toshio@tiki-lounge.com> - r82
|
||||
* AUTHORS: Add Daniel Eisenbud. Obscure email addresses.
|
||||
* libungif.spec: Bump to version 4.1.4.
|
||||
* configure.ac: Bump to 4.1.4. No longer check for ranlib.
|
||||
* doc/lzgif.txt: Change dos line encoding to UNIX.
|
||||
* lib/dgif_lib.c: (eisenbud)
|
||||
- Set GifFile's ColorMaps to NULL when we free a colormap object.
|
||||
- Detect some cases of corrupted GIFs which were crashing the library.
|
||||
* lib/egif_lib.c: Set ColorMaps to NULL when we free a colormap object.
|
||||
* lib/gifalloc.c: Set ColorMaps to NULL when we free a colormap object.
|
||||
* lib/dev2gif.c: Fix redefinition problem on IRIX.
|
||||
* NEWS: Update to 4.1.4
|
||||
* util/gifcomb.c: Set a olorMap to NULL.
|
||||
|
||||
2004-07-11 Toshio Kuratomi <toshio@tiki-lounge.com> - r79
|
||||
* gif2iris.c: Fixes from Georg Schwarz <geos[AT]epost.de>.
|
||||
- stdlib.h is available and needs to be included on IRIX.
|
||||
- ColorMapSize was being set from non-existent variables.
|
||||
|
||||
2004-05-29 Toshio Kuratomi <toshio@tiki-lounge.com> - r76
|
||||
* Sync with libungif-4.1.3.
|
||||
|
||||
2004-05-29 Toshio Kuratomi <toshio@tiki-lounge.com> - r74
|
||||
* ChangeLog, prop=lastlog: Sync with the subversion logs.
|
||||
|
||||
2004-05-29 Toshio Kuratomi <toshio@tiki-lounge.com> - r73
|
||||
* test-unx: Add a test of extension code.
|
||||
* lib/egif_lib.c: Remove a debugging statement
|
||||
|
||||
2004-05-29 Toshio Kuratomi <toshio@tiki-lounge.com> - r72
|
||||
* Makefile.am, doc/Makefile.am, pic/Makefile.am: Change wildcarded entries
|
||||
into explicit filenames so make distcheck will succeed.
|
||||
|
||||
2004-05-29 Toshio Kuratomi <toshio@tiki-lounge.com> - r71
|
||||
* ChangeLog, prop=lastlog: Sync the ChangeLog for the release.
|
||||
|
||||
2004-05-29 Toshio Kuratomi <toshio@tiki-lounge.com> - r70
|
||||
* AUTHORS: Add Lennie Araki to the list of contributers.
|
||||
* windows: The windows subdirectory and all files under it are contributions
|
||||
from Lennie Araki to provide a nice interface on MS Windows.
|
||||
* README: Redundancy fix.
|
||||
* doc/gif_lib.html: Add EGifPutExtension{First,Next,Last} to the documentation
|
||||
so people know they should use it instead of EGifPutExtension.
|
||||
* Makefile.am: Mark the windows files to be distributed.
|
||||
* NEWS: Complete the NEWS item for 4.1.3.
|
||||
|
||||
2004-05-29 Toshio Kuratomi <toshio@tiki-lounge.com> - r69
|
||||
* libungif.spec: Some updates from the latest RedHat spec.
|
||||
* configure.ac: Bump version to 4.1.3.
|
||||
* lib/gifalloc.c: Add to my comments on ESR's note about Extension blocks.
|
||||
* lib/egif_lib.c:
|
||||
- EGifPutComment(): reimplemented using EGifPutExtensionFirst, Next, and
|
||||
Last so that it won't break on unusually long comments.
|
||||
- EGifPutExtension{First,Next,Last}: Changed fwrites to WRITE so any
|
||||
user defined write function will get called properly.
|
||||
- EGifPutExtensionTerminate: if the Extension block is empty (Zero length)
|
||||
then don't attempt to output a last extension block, just output the
|
||||
block terminator.
|
||||
- EGifPutExtension: Comment that this function does not work when there
|
||||
are multiple subblocks in an Extension block. Use the functions
|
||||
EGifPutExtension{First,Next,Last} instead.
|
||||
- EGifSpew: Reimplement to use EGifPutExtension{First,Next,Last} so we
|
||||
don't output broken GIFs when there are multiple sub-blocks on an
|
||||
extension.
|
||||
* lib/Makefile.am: Bump version to 4.1.3.
|
||||
* NEWS: Begin writing an entry for 4.1.3.
|
||||
* util/icon2gif.c: Few casting fixes to make gcc -Wall happy.
|
||||
* util/gif2ps.c: printf format string corrections.
|
||||
|
||||
2004-05-26 Toshio Kuratomi <toshio@tiki-lounge.com> - r67
|
||||
* Clean up some typos.
|
||||
|
||||
2004-05-25 Toshio Kuratomi <toshio@tiki-lounge.com> - r66
|
||||
* Sync with libungif-4.1.2.
|
||||
|
||||
2004-03-03 Toshio Kuratomi <toshio@tiki-lounge.com> - r64
|
||||
Last minute updates to the release notes in various files.
|
||||
|
||||
2004-03-03 Toshio Kuratomi <toshio@tiki-lounge.com> - r63
|
||||
* Set property lastlog to remind me when I last synced the ChangeLog
|
||||
|
||||
2004-03-03 Toshio Kuratomi <toshio@tiki-lounge.com> - r62
|
||||
* ChangeLog: Update
|
||||
|
||||
2004-03-03 Toshio Kuratomi <toshio@tiki-lounge.com> - r61
|
||||
* configure.ac: Bump version to 4.1.2
|
||||
|
||||
2004-02-22 Toshio Kuratomi <toshio@tiki-lounge.com> - r59
|
||||
* configure.ac, lib/Makefile.am: Bump version. Forgot to do this for 4.1.1...
|
||||
|
||||
2004-02-22 Toshio Kuratomi <toshio@tiki-lounge.com> - r58
|
||||
* TODO: Take out -Wall as that's all ready now.
|
||||
|
||||
2004-02-22 Toshio Kuratomi <toshio@tiki-lounge.com> - r57
|
||||
Merge changes to the code from branch indent-audit r55
|
||||
* README: MakeExtension deprecation note.
|
||||
* TODO: Bunch of things I need to fix or check that I saw while doing the
|
||||
indentation of the code.
|
||||
* lib/getarg.h: indent changes
|
||||
* lib/dgif_lib.c: indent changes
|
||||
- Move stdlib.h out of #ifdef's as it's included on all platforms.
|
||||
- Add checks to be sure malloc and MakeMapObject succeed.
|
||||
* lib/quantize.c: indent changes
|
||||
- Move stdlib.h out of #ifdef's as it's included on all platforms.
|
||||
- _GifError already pulled in through gif_lib_private.h. Remove decl.
|
||||
- Make Count in NewColorMapType be unsigned.
|
||||
- Separated mallocs from conditionals in a few places. Easier reading.
|
||||
* lib/gifalloc.c: indent changes
|
||||
- Added four FIXME's where I think the code might not be doing what we
|
||||
want. Need to do more research to figure out.
|
||||
- Add note to MakeExtension that I think it needs to be deprecated.
|
||||
- Separated mallocs from conditionals in a few places. Easier reading.
|
||||
- FreeLastSavedImage: New private function to free the last image in a
|
||||
GifFile structure. Used to back out when unable to completely
|
||||
allocate a new SavedImage structure.
|
||||
- check for NULL values before deallocating in Free* functions and make
|
||||
sure all Free* functions set the pointer to NULL after they deallocate
|
||||
the memory.
|
||||
* lib/egif_lib.c: indent changes
|
||||
- EGifPutScreenDesc: If we have no colormap, output a default value for
|
||||
its size instead of trying to reference its unallocated BitsPerPixel
|
||||
field. (Fixes bug noted in r46)
|
||||
* lib/gif_lib.h: indent changes
|
||||
- Condense the #else #if VARARGS to #elif VARARGS check.
|
||||
* lib/qprintf.c: indent changes
|
||||
- Condense the #else #if VARARGS to #elif VARARGS check.
|
||||
* lib/dev2gif.c: indent changes
|
||||
* lib/getarg.c: indent changes
|
||||
* lib/gif_lib_private.h: indent changes
|
||||
* lib/gif_font.c: indent changes
|
||||
* lib/gif_err.c: indent changes
|
||||
|
||||
2004-02-22 Toshio Kuratomi <toshio@tiki-lounge.com> - r56
|
||||
* lib/Makefile.am, util/Makefile.am: Add -Wall to the compilation flags so
|
||||
we can keep the code from acquiring too much bad style.
|
||||
|
||||
2004-02-20 Toshio Kuratomi <toshio@tiki-lounge.com> - r46
|
||||
* egif_lib.c: Note for a bug fix (Can wait until after indent because
|
||||
there's no patch.)
|
||||
* gif_lib.h, dev2gif.c: Change int type to explicit long type in
|
||||
DumpScreen2Gif.
|
||||
* util/gifinto.c: Give the fprintf back its %d format.
|
||||
GifFile->ImageCount is used as the Image number.
|
||||
|
||||
2004-02-20 Toshio Kuratomi <toshio@tiki-lounge.com> - r45
|
||||
* README: add varargs to the deprecation list
|
||||
|
||||
2004-02-20 Toshio Kuratomi <toshio@tiki-lounge.com> - r44
|
||||
* test-unx: Quote the program names.
|
||||
* lib/dgif_lib.c:
|
||||
- Make sure memory was allocated for the colormap
|
||||
- Some reformatting of code but no syntactic changes.
|
||||
* lib/gif_lib.h:
|
||||
- C++ extern "C" fix
|
||||
- Fix typo with EGifOpen
|
||||
* lib/qprintf.c, lib/getarg.c: Update the varargs code. Some users reported
|
||||
that not all systems can handle the hybridized varargs parameter lists
|
||||
we had. Need to use old-style declarations instead.
|
||||
|
||||
2004-02-20 Toshio Kuratomi <toshio@tiki-lounge.com> - r43
|
||||
* NEWS: Note bugfixes and deprecations
|
||||
* README: Deprecation list is now being compiled in this file.
|
||||
* TODO: Notes about interlace bug, -Wall status, merging of old bug status
|
||||
|
||||
2004-02-19 Toshio Kuratomi <toshio@tiki-lounge.com> - r42
|
||||
* Makefile.am: Disable testing for now because gif2x11 is broken so none
|
||||
of the tests _appear_ to complete successfully.
|
||||
|
||||
2004-02-19 Toshio Kuratomi <toshio@tiki-lounge.com> - r38
|
||||
Merge -Wall fixes from branches/Wall-audit r29
|
||||
* configure.ac:
|
||||
- Make the stdarg vs varargs check simpler by relying on
|
||||
AC_CHECK_HEADERS() magic.
|
||||
- Check for unistd.h
|
||||
* dgif_lib.c, gif_lib.h, egif_lib.c, gifalloc.c, quantize.c, dev2gif.c,
|
||||
getarg.c, gif_lib_private.h, gif_font.c gif_err.c, gifinto.c, icon2gif.c,
|
||||
raw2gif.c, gifcolor.c, gifasm.c, gif2epsn.c, gif2iris.c, gifrotat.c,
|
||||
gifovly.c, gif2x11.c, rle2gif.c, gif2rle.c, text2gif.c, gifspnge.c,
|
||||
gifclrmp.c, giffiltr.c, giftext.c, gifinfo.c, rgb2gif.c, gif2rgb.c, gif2ps.c
|
||||
- Changes to get rid of -Wall compile warnings.
|
||||
+ Casting of types
|
||||
+ New header includes for unistd.h and fcntl.h
|
||||
+ Explicit declaration of many types to unsigned
|
||||
+ Removed unused variables and functions
|
||||
+ Removed VersionStr from every library file. Instead include it via
|
||||
gif_lib_private.h
|
||||
* gif_lib.h, gif_lib_private.h: Moved the VersionStr into gif_lib_private.h
|
||||
and made it a #define instead of a static char *.
|
||||
|
||||
2004-02-19 Toshio Kuratomi <toshio@tiki-lounge.com> - r37
|
||||
Deprecation notes
|
||||
|
||||
2004-02-19 Toshio Kuratomi <toshio@tiki-lounge.com> - r36
|
||||
Add notes about security things to do and giflib syncing
|
||||
|
||||
2004-02-18 Toshio Kuratomi <toshio@tiki-lounge.com> - r32
|
||||
* TODO: Add notes about how to go about syncing Wall-audit and indent changes
|
||||
into giflib. It won't be pretty.
|
||||
* svn:ignore: Change the tarball names from libungif to giflib
|
||||
|
||||
2004-02-18 Toshio Kuratomi <toshio@tiki-lounge.com> - r31
|
||||
Add config.h include to gif_hash.c
|
||||
|
||||
2004-02-17 Toshio Kuratomi <toshio@tiki-lounge.com> - r30
|
||||
Sync up with libungif 4.1.1
|
||||
|
||||
2004-02-17 Toshio Kuratomi <toshio@tiki-lounge.com> - r26
|
||||
Updated ChangeLog
|
||||
|
||||
2004-02-17 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
* Updated libungif.spec to look more like fedora core spec
|
||||
* Updated version numbers in all files
|
||||
|
||||
2004-02-17 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
* Add the libungif*.tar.bz2 distribution tarball to the ignored files
|
||||
* configure.ac, lib/getarg.c, lib/getarg.h, lib/gif_lib.h, lib/qprintf.c:
|
||||
Prefer stdarg.h over vararg.h
|
||||
* TODO: Add information about functions that will go away in 5.0
|
||||
(In reality, I don't think new software uses libungif, so there may never
|
||||
be a 5.0 release.)
|
||||
* lib/gif_lib.h: Change version from 4.0 to 4.1
|
||||
* NEWS: add deprecation warning for the qprintf stuff: GifQuietPrint var and
|
||||
GifQprintf function.
|
||||
|
||||
2004-02-16 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
* util/gif2iris.c, util/gif2rle.c, util/gifinfo.c: Fix problems with fprintf error statements in the utils
|
||||
|
||||
2004-02-16 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
Add DEVELOPERS file to the distribution.
|
||||
|
||||
2004-02-16 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
* AUTHORS, libungif.spec, libungif.lsm, README, BUGS, NEWS:
|
||||
Lots of changes to my email address and the website/download. (libungif is
|
||||
moving to sourceforge.)
|
||||
* TODO: Few notes on cleanups that need to happen. State what needs to be done
|
||||
for 4.1.1 to be released.
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
Changes imported from last cvs checkout
|
||||
* TODO: note to check return of malloc everywhere
|
||||
* lib/dgif_lib.c, lib/egif_lib.c: Fix some deallocation bugs
|
||||
* lib/gifalloc.c: Fix a colormap allocation problem
|
||||
* lib/gif_font.c: Fix to drawing text
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
Added libgetarg.a to the ignore list.
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
Changes to the build infrastructure to build under current libtool, automake,
|
||||
and libtool.
|
||||
* configure.in: renamed to configure.ac
|
||||
* acconfig.h: deleted. Functionality moved into the configure.ac
|
||||
* autogen.sh: now runs libtoolize --automake
|
||||
* lib/Makefile.am, util/Makefile.am: CFLAGS=>AM_CFLAGS; INCLUDES=>AM_CPPFLAGS
|
||||
* configure.ac:
|
||||
- initialization macros for automake and autoconf have changed
|
||||
- removed checks for C++ compiler and Awk
|
||||
- acconfig.h functionality moved here.
|
||||
- add other X11 libraries to the X11_LIB define
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
* Remove INSTALL file as it's autogenerated.\n* Add stamp-h1 to ignored files
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
Additional adds and deletes to make version 4.1.0b1
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com>
|
||||
Import of version 4.1.0b1
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com> - r10
|
||||
Import giflib 4.1.0
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com> - r9
|
||||
Copy the 4.1.0 libungif release to be the base of the 4.1.0 giflib release.
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com> - r7
|
||||
Release 4.1.0
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com> - r6
|
||||
Import of version 4.1.0
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com> - r5
|
||||
Set ignore patterns on the project directories.
|
||||
|
||||
2004-02-15 Toshio Kuratomi <toshio@tiki-lounge.com> - r3
|
||||
Remove a Makefile.in that was left in in the first commit.
|
||||
|
||||
2004-02-14 Toshio Kuratomi <toshio@tiki-lounge.com> - r2
|
||||
Commit revision 3.1.0 to subversion
|
||||
|
||||
2004-02-14 Toshio Kuratomi <toshio@tiki-lounge.com> - r1
|
||||
Initial SVN Repository Layout
|
||||
|
||||
2000 6 Feb Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* configure.in: Change to using config.h
|
||||
- Every .c file: Change to using config.h.
|
||||
* configure.in: added check for varargs header.
|
||||
* lib/getarg.c: Changed the ifdef USE_VARARGS to ifdef HAVE_VARARGS_H.
|
||||
- lib/getarg.h: Ditto.
|
||||
- lib/gif_lib.h: Ditto.
|
||||
- lib/qprintf.h: Ditto.
|
||||
|
||||
2000 6 Feb Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* lib/getarg.h: Prepend an underscore to the header file define.
|
||||
* lib/gif_lib.h: Ditto
|
||||
* lib/gif_lib_private.h: Ditto
|
||||
* lib/getarg.c: ifdef'd MyMalloc so it actually won't define if it already
|
||||
is.
|
||||
|
||||
2000 3 Feb Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* A new cvs repository based my private tree from home. It now goes back
|
||||
to giflib-3.0.
|
||||
* Updated the cvs repository to make multiple developers possible.
|
||||
* Merge all of Michael's patches into the distribution.
|
||||
* DEVELOPER: Updated to reflect the new versions of
|
||||
autoconf/automake/libtool we're using.
|
||||
* libungif.spec: Updated a few things from the latest redhat spec file.
|
||||
|
||||
1999 5 Dec Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* Update links to the web pages as I have reorganized them somewhat.
|
||||
* Add the welcome2.gif to the pic directory and a test that utilizes
|
||||
it to test-unx.
|
||||
|
||||
1999 17 Nov Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* New cvs Repository. Hopefully I've got everything that was in the
|
||||
old one. This one is available on anonymous cvs.
|
||||
* Update to libtool 1.3.3, automake 1.4, and autoconf 2.13
|
||||
|
||||
1999 23 May Michael R Brown <michael@arrakeen.demon.co.uk>
|
||||
* Lots of 'const' qualifiers added, thanks Alexis
|
||||
Wilke for finding these.
|
||||
|
||||
1999 22 Mar Michael R Brown <michael@arrakeen.demon.co.uk>
|
||||
* util/gif2x11.c: Patch by (who?) to fix lots of memory leeks.
|
||||
* util/*.c:
|
||||
lib/dgif_lib.c:
|
||||
Makefile.in:
|
||||
Patch by David Kaelbling to compile on IRIX 6.x. Basically fixing
|
||||
lots of bad/missing parameter passing to printf, scanf and similar.
|
||||
* Added pics/welcome2.gif, from Peter Merz which provokes a bug prior
|
||||
to patch 19990224 to do with colour map management. There is still
|
||||
a problem with util/gifspnge processing this image, so it will not
|
||||
be added to test-unx yet.
|
||||
|
||||
1999 05 Mar Michael R Brown <michael@arrakeen.demon.co.uk>
|
||||
* lib/getarg.c: Lines 107 and 189
|
||||
Added ifdef's to use stdarg when available. On dec-alpha the
|
||||
default code was causing programs to crash, probably because
|
||||
it assumes a stack that grows-up.
|
||||
|
||||
1999 24 Feb Michael R Brown <michael@arrakeen.demon.co.uk>
|
||||
* lib/dgif_lib.c: Lines 363 and 367
|
||||
Bug reported by Steve Sanders, where &'s where causing the
|
||||
memcpy to overwrite the pointers. Fixed by removing the &'s
|
||||
so that memcpy overwrote the memory pointed to.
|
||||
|
||||
1999 09 Feb Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* Release 4.1.0
|
||||
|
||||
1999 09 Feb Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* Merge libungif changes into the giflib tree:
|
||||
- upgrade to libtool 1.2b
|
||||
- util/Makefile.am: Minor change to allow compilation outside the
|
||||
source_dir.
|
||||
- lib/egif_lib.c: FILE_STATE_WRITE, FILE_STATE_SCREEN,
|
||||
FILE_STATE_IMAGE, IS_WRITEABLE are now in gif_lib_private.h
|
||||
- lib/dgif_lib.c: FILE_STATE_READ and IS_READABLE are now in
|
||||
gif_lib_private.h
|
||||
- lib/gif_lib_private.h: Above mentioned constants and macros are now
|
||||
here. FILE_STATE_READ is now 0x08 instead of 0x00.
|
||||
- configure.in: Update version to 4.1.0
|
||||
- lib/Makefile.am: Update libtool version to 5:0:1 (libtool)
|
||||
- giflib.spec: Update for version 4.1.0 (Add libungif-4.1
|
||||
compatibility stuff and change version.)
|
||||
- giflib.lsm: Update for version 4.1.0
|
||||
- lib/egif_lib.c: (WRITE) change from a function to a macro.
|
||||
- lib/dgif_lib.c: (DGifOpenFileName) close FileHandle on error.
|
||||
- lib/dgif_lib.c: (DGifOpenFileHandle) make sure the FILE stream is
|
||||
closed if we hit an error.
|
||||
- lib/dev2gif.c, lib/quantize.c, lib/gif_err.c, lib/gif_lib_private.h:
|
||||
Reflect Eric's copyright notice rather than Gershon's
|
||||
|
||||
1999 14 Jan Michael R Brown <michael@arrakeen.demon.co.uk>
|
||||
* lib/gif_lib.h: Add OutputFunc type
|
||||
* lib/gif_lib.h: Add EGifOpen for user supplied output function
|
||||
* lib/egif_lib.c: (EGifOpenFileName) Fixed wasted memory when an
|
||||
error occurs in EGifOpenFileHandle
|
||||
* lib/egif_lib.c: Add EGifOpen, WRITE, and lots of changes to
|
||||
support user supplied output function. Basically changing
|
||||
all fwrite's to WRITE, and then all of the knock on effects.
|
||||
|
||||
1998 17 Dec Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* configure.in: Change references to libungif to giflib.
|
||||
* libungif.lsm: Rename to giflib.lsm and change to reflect giflib
|
||||
rather than libungif.
|
||||
* libungif.spec: Rename to giflib.spec and change to reflect giflib
|
||||
rather than libungif.
|
||||
* UNCOMPRESSED_GIF: Removed from this branch.
|
||||
* PATENT_PROBLEMS: Add file explaining Unisys's patent claims.
|
||||
* Makefile.am: Replace libungif with giflib.
|
||||
* README: Adapted language to giflib.
|
||||
* lib/Makefile.am: Changed references to libungif to libgif.
|
||||
* util/Makefile.am: Changed references to libungif to libgif.
|
||||
|
||||
1998 17 Dec Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* lib/egif_lib.c: Merge LZW stuff into this branch of the library.
|
||||
This includes numerous changes to initialize the hash table as well
|
||||
as the code forthe encoder.
|
||||
* lib/gif_hash.c: Functions needed for the LZW encoder.
|
||||
* lib/gif_hash.h: Functions needed for the LZW encoder.
|
||||
* lib/Makefile.am: Add gif_hash.c gif_hash.h to the list of sources.
|
||||
|
||||
1998 15 Dec Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* lib/dgif_lib.c: (DGifSlurp) Fix a Seg Fault when an image contains
|
||||
no extension blocks.
|
||||
|
||||
1998 14 Dec Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* configure.in: Update version to 4.0
|
||||
* lib/Makefile.am: Update libtool version to 4:0:0 (libtool)
|
||||
* libungif.spec: Update for version 4.0 (not binary compatible with
|
||||
giflib, change version.)
|
||||
* lib/gif_lib_private.h: (PrivateType) New header for common stuff
|
||||
private to the library. Currently, this is only the Private struct.
|
||||
* lib/dgif_lib.c: (PrivateType) Extract the Private struct to
|
||||
gif_lib_private.h
|
||||
* lib/egif_lib.c: (PrivateType) Extract the Private struct to
|
||||
gif_lib_private.h
|
||||
* lib/Makefile.am: Add gif_lib_private.h to the list of source files.
|
||||
* lib/gif_lib.h: (ExtensionBlock) Add a Function entry to the
|
||||
ExtensionBlock record. Note that this is not entirely correct:
|
||||
the GifLib ExtensionBlock structure is actually a data sub-block
|
||||
record. By adding the function entry here, we are pushing the
|
||||
ExtensionBlockType in with the DataSubBlock.
|
||||
Sometime in the future, we need to change the API to have true
|
||||
ExtensionBlocks which have DataSubBlocks belonging to them.
|
||||
* lib/gif_lib.h: (ExtensionBlock) Deprecate the use of Function in
|
||||
the SavedImage struct. Use ExtensionBlock's Function instead.
|
||||
* lib/egif_lib.c: (EGifSpew) Changes to use the new Function variable.
|
||||
* lib/dgif_lib.c: (DGifSlurp) Changes to put data into the new
|
||||
Function variable.
|
||||
|
||||
1998 3 Dec Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* lib/dgif_lib.c: (DGifSlurp) Three changes:
|
||||
- No longer allocate SaveImage in this function. All allocations
|
||||
of SaveImage take place in DGifGetImageDesc.
|
||||
- Extension blocks are now associated with the Image Block that is
|
||||
read in subsequent to them, not before. This should now be
|
||||
conformant to the gif89a specification.
|
||||
- Fix an off-by-one error when copying extension data from structure
|
||||
to structure.
|
||||
* lib/dgif_lib.c: (DGifGetImageDesc) Change the function to do its own
|
||||
allocation of space for the SavedImage structure no matter what.
|
||||
* lib/egif_lib.c: (EGifSpew) The function now spits out
|
||||
ExtensionBlocks before the associated Image Block to conform with
|
||||
the gif89a specification.
|
||||
* lib/egif_lib.c: (EGifOpenFileHandle) Move the write of the
|
||||
GifVersion (gif87a or gif89a) from this function into
|
||||
EGifPutScreenDesc so that it can be controlled by EGifSpew. Note
|
||||
that this is still a hack as the GifVersion write doesn't really
|
||||
belong in either of these functions.
|
||||
* lib/egif_lib.c: (EGifPutScreenDesc) Moved writing the version
|
||||
(gif87a or gif89a) into the file into this function from
|
||||
EGifOpenFileHandle.
|
||||
* test-unx: Now test the extension code.
|
||||
* pic/x-trans.gif: New image with Comments and transparency to test
|
||||
the extension code with.
|
||||
|
||||
1998 29 Nov Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* lib/dgif_lib.c: (DGifSlurp) Fix a few of the minor bugs plaguing
|
||||
this function. At this point, the function should no longer cause
|
||||
a Seg Fault. It is now losing all extension data however. I know
|
||||
how to hack a fix in, but I need to commit these changes first.
|
||||
* lib/dgif_lib.c: (DGifGetImageDesc) Fix my bug fix: the colormap is
|
||||
now only copied if it exists :-).
|
||||
|
||||
1998 10 Nov Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* test-unx: Add a test for DGifSlurp and EGifSpew
|
||||
|
||||
1998 14 Oct Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* lib/dgif_lib.c: (DGifGetImageDesc) Fix a bug where the Colormap for
|
||||
the image description and the SaveImage were pointers to the same
|
||||
structure, causing a SegV when DGifClosing the file.
|
||||
|
||||
1998 9 Oct Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* lib/dgif_lib.c: (DGifSlurp) memory for the extensions was not being
|
||||
allocated. Now I call AddExtensionBlock when I add an extension to
|
||||
the structure. Additionally, fix a memory leak here.
|
||||
* configure.in, NEWS, lib/Makefile.am: Update to version 3.1.1
|
||||
* ltmain.sh, ltconfig: removed from the cvs repository
|
||||
* BUGS: add the BUGS file to list unresolved BUGS.
|
||||
|
||||
1998 9 Sep Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* libungif.spec: Fix wrong version in %files and %install section.
|
||||
|
||||
1998 8 Sep Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* lib/gif_hash.c, lib/gif_hash.h: Removed these because a hash table
|
||||
is not needed to create uncompressed gifs.
|
||||
* lib/egif_lib.c: Remove all references to the hash functions.
|
||||
* lib/Makefile.am: Remove gif_hash.c gif_hash.h from the source files.
|
||||
* libungif.lsm: added this file
|
||||
|
||||
1998 7 Sep Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* lib/dgif_lib.c, lib/gif_lib.h: (DGifOpen) Add callback to read gif
|
||||
image through user supplied function (Peter Mehlitz).
|
||||
|
||||
1998 6 Sep Toshio Kuratomi <badger@prtr-13.ucsc.edu>
|
||||
* util/*.{gif.rle}: removed files that were left by my testing
|
||||
process and shouldn't have been in the distribution.
|
||||
* UNCOMPRESSED_GIF: add section on why software that can decode
|
||||
LZW compressed gifs (but not write them) is legal.
|
||||
* .cvsignore: added .cvsignore files to ignore Makefiles and other
|
||||
generated files in my cvs repository.
|
||||
* Makefile.am's: Fixes to allow the dist* family of targets to work
|
||||
correctly. Preliminary support for make check as well.
|
||||
* configure.in: Update version to 3.1.0
|
||||
* lib/Makefile.am: Update libtool version to 4:0:1 libtool)
|
||||
* libungif-3.0.spec: Update from Marc Ewing.
|
||||
* Add int/pointer Alpha fixes from Dick Porter to many source files.
|
591
third_party/giflib/NEWS
vendored
591
third_party/giflib/NEWS
vendored
@ -1,591 +0,0 @@
|
||||
GIFLIB NEWS
|
||||
|
||||
Short summary of recent news:
|
||||
Minor API change to assist library wrappers in dynamic languages.
|
||||
The gif2raw utility has been removed.
|
||||
Various minor fix patches for unusual edge cases.
|
||||
|
||||
Version 5.1.0
|
||||
=============
|
||||
|
||||
Changes to the API require a library major-version bump.
|
||||
|
||||
Code Fixes
|
||||
----------
|
||||
|
||||
* A small change to the API: DGifClose() and EGifClose() now take a
|
||||
pointer-to-int second argument (like the corresponding openers)
|
||||
where a diagnostic code will be deposited when they return
|
||||
GIF_ERROR. This replaces the old behavior in which the GifFile
|
||||
structure was left unfreed so the Error member in it could be filled
|
||||
and remain available. The change was was required because it's
|
||||
not always possible to free the struct afterwards. Case in point is
|
||||
a C# wrapper for giflib (or any language/environment where you can't
|
||||
just free objects allocated in a foreign shared library.)
|
||||
|
||||
* Minor fix for SF bug #56; BitsPerPixel may be left as uninitialized
|
||||
value when reading (truncated) gif.
|
||||
|
||||
* Applied SF patch #17: Use a fallback on Windows where mkstemp is not
|
||||
available.
|
||||
|
||||
* Applied SF patch #15: Code hardening, preventing spurious
|
||||
defective-image messages.
|
||||
|
||||
Retirements
|
||||
-----------
|
||||
|
||||
* Removed gif2raw from utils. Its blithe assumption that the EGA16
|
||||
palette is a reliable default is now about 20 years obsolete. Format
|
||||
conversion is better done with convert(1) from the ImageMagick suite,
|
||||
anyway.
|
||||
|
||||
Version 5.0.6
|
||||
=============
|
||||
|
||||
Minor fix for a rare memory leak (SF bug #55).
|
||||
|
||||
MinGW port fixes.
|
||||
|
||||
Repair the internal quantization function used in gif2rgb so it's
|
||||
less vulnerable to cross-platform skew due to qsort() being unstable.
|
||||
This shouldn't affect production use, it's just a cross-platform
|
||||
issue for regression testing
|
||||
|
||||
Version 5.0.5
|
||||
=============
|
||||
|
||||
Set the error return properly when a screen descriptor read fails.
|
||||
Fixes for some minor API documentation bugs. Some internal manual
|
||||
pages are not to be installed.
|
||||
|
||||
Version 5.0.4
|
||||
=============
|
||||
|
||||
Fix for a rare misrendering bug when a GIF overruns the decompression-code
|
||||
table. The image on which this was spotted was a relatively long-running
|
||||
animated GIF; still images of ordinary size should have been immune.
|
||||
|
||||
Version 5.0.3
|
||||
=============
|
||||
|
||||
Fix a build-system glitch so it will install manpages.
|
||||
|
||||
Version 5.0.2
|
||||
=============
|
||||
|
||||
Documentation and polish
|
||||
------------------------
|
||||
* Partial build is now possible on systems without xmlto.
|
||||
|
||||
Code Fixes
|
||||
----------
|
||||
* Change unused return of EGifSetGifVersion() to void.
|
||||
* Buffer overrun prevention in gifinto.
|
||||
|
||||
Version 5.0.1
|
||||
=============
|
||||
|
||||
Documentation and polish
|
||||
------------------------
|
||||
* There is now an installable manual page for the GIFLIB utility kit.
|
||||
|
||||
Retirements
|
||||
-----------
|
||||
* gifinter is gone. Use convert -interlace from the ImageMagic suite.
|
||||
|
||||
Code Fixes
|
||||
----------
|
||||
* In 5.0.0 the private gif89 bit wasn't being guaranteed cleared at
|
||||
the beginning of EGifGetGifVersion(); this occasionally led to an
|
||||
incorrect version prefix being issued dependent on the state of
|
||||
malloced memory.
|
||||
* An EGifSetGifVersion() function taking a GifFile argument has been
|
||||
added for use with the low-level sequential API. This change requires
|
||||
a bump of the library revision number.
|
||||
|
||||
Version 5.0.0
|
||||
=============
|
||||
|
||||
Changes to the API require a library major-version bump. Certain
|
||||
initialization functions have acquired an integer address argument for
|
||||
passing back an error code, in order to avoid thread-unsafe static
|
||||
storage. Application code using extension blocks will require minor
|
||||
changes. A few functions have been renamed.
|
||||
|
||||
Code Fixes
|
||||
----------
|
||||
* Fixes applied for CVE-2005-2974 and CVE-2005-3350
|
||||
This closes Debian bug #337972.
|
||||
|
||||
New API Features
|
||||
----------------
|
||||
|
||||
Thread Safety
|
||||
~~~~~~~~~~~~~
|
||||
The library is now completely re-entrant and thread-safe.
|
||||
|
||||
* Library error handling no longer uses a static cell to store the last
|
||||
error code registered; that made the library thread-unsafe. For functions
|
||||
other than GIF file openers, the code is now put in an Error member of
|
||||
the GifFileType structure. The GifError() amd GifLastError() functions
|
||||
that referenced that static cell are gone, and the GifErrorString()
|
||||
function introduced in the 4.2 release now takes an explicit error code
|
||||
argument.
|
||||
* GIF file openers - DGifOpenFileName(), DGifOpenFileHandle(), DGifOpen(),
|
||||
EGifOpenFileName(), EGifOpenFileHandle(), and EGifOpen() - all now take
|
||||
a final integer address argument. If non-null, this is used to pass
|
||||
back an error code when the function returns NULL.
|
||||
|
||||
Extensions
|
||||
~~~~~~~~~~
|
||||
The ExtensionBlock API has been repaired, solving some problems with GIF89
|
||||
extension handling in earlier versions.
|
||||
|
||||
* DGifSlurp() and EGifSpew() now preserve trailing extension blocks with
|
||||
no following image file.
|
||||
* Three documented functions - EGifPutExtensionFirst(), EGifPutExtensionNext(),
|
||||
and EGifPutExtensionLast() - have been relaced by new functions
|
||||
EGifPutExtensionLeader(), EGifPutExtensionBlock(), and
|
||||
EGifPutExtensionTrailer(). See the Compatibility section of
|
||||
the library API documentation for details.
|
||||
* New functions DGifSavedExtensionToGCB() and EGifGCBToSavedExtension()
|
||||
make it easy to read and edit GIF89 graphics control blocks in saved images.
|
||||
|
||||
Namespacing
|
||||
~~~~~~~~~~~
|
||||
All functions exported by giflib now have DGif, EGif, or Gif as a name prefix.
|
||||
|
||||
* Three documented functions - MakeMapObject(), FreeMapObject(), and
|
||||
UnionColorMap() - have been renamed to GifMakeMapObject(),
|
||||
GifFreeMapObject(), and GifUnionColorMap() respectively.
|
||||
* The library Draw* functions are now prefixed GifDraw*, and the
|
||||
text-drawing ones are suffixed with "8x8". This fixes a conflict
|
||||
with the Windows API and leaves the door open for more general text-drawing
|
||||
functions with different font sizes.
|
||||
|
||||
Other changes
|
||||
~~~~~~~~~~~~~
|
||||
* DGifSlurp() and EGifSpew() now read and write interlaced images properly.
|
||||
* The amazingly obscure colormap sort flag and pixel aspect ratio
|
||||
features of GIF are now read and preserved, for whatever good that
|
||||
may do.
|
||||
* Six undocumented functions have been renamed; five of these take additional
|
||||
or slightly different argument types. See the Compatibility section of
|
||||
the library API documentation for details.
|
||||
* There's now an EGifGetGifVersion() that computes the version EGifSpew()
|
||||
will write.
|
||||
* QuantizeBuffer() has been returned to the core library as GifQuantizeBuffer()
|
||||
- turns out some important applications (notably mplayer) were using it.
|
||||
* TRUE and FALSE macros are gone, also VoidPtr. No more namespace pollution.
|
||||
* Various arguments have been made const where possible.
|
||||
|
||||
Retirements
|
||||
-----------
|
||||
* The (undocumented) gifinfo utility is gone. Use giftool -f instead.
|
||||
* The gifburst utility is gone. Everybody has image viewers that
|
||||
can pan now, and removing it gets rid of a dependency on Perl.
|
||||
* gifcompose is gone. It was a decent idea when I wrote it in 1989,
|
||||
but I did the same thing better and cleaner a decade later with
|
||||
PILdriver in the PIL package. Removing it gets rid of a dependency
|
||||
on shell.
|
||||
* gif2x11 gifasm, gifcomb, gifflip, gifovly, gifpos, gifresize, and gifrotate
|
||||
are all gone. The ImageMagick display(1)/convert(1) utilities and PILdriver
|
||||
do these things better and in a format-independent way.
|
||||
* Lennie Araki's Windows C++ wrapper is gone. It's eight years old,
|
||||
unmaintained, he has dropped out of sight, and a better one needs to
|
||||
be written to use the high-level GIFLIB API and GIF89 graphics
|
||||
control extension support. We'll carry such a wrapper when we have
|
||||
a maintainer for it.
|
||||
* EGifSetVersion(), introduced in 4.2, is gone. The library always
|
||||
writes GIF87 or GIF89 as required by the data. This change helps
|
||||
with thread safety.
|
||||
|
||||
Utilities
|
||||
---------
|
||||
* Several utilities have been renamed to (a) fix last-century's habit
|
||||
of arbitarily smashing vowels out of names to make them just one or two
|
||||
characters shorter, (b) ensure that every utility in this set has 'gif'
|
||||
as a name prefix. Here's the list:
|
||||
|
||||
giffiltr -> giffilter
|
||||
gifspnge -> gifsponge
|
||||
icon2gif -> gifbuild
|
||||
text2gif -> gifecho
|
||||
raw2gif -> gif2raw
|
||||
|
||||
* To go with its new name, gif2raw now dumps raw pixels from a GIF if the
|
||||
(previously required) size option is missing.
|
||||
* Standalone rgb2gif is gone; the same capability is now a mode of gif2rgb.
|
||||
* giftext displays the parsed contents of GIF89 graphics control blocks.
|
||||
* gifbuild handles GIF89 graphics control blocks and Netscape animation
|
||||
loop blocks; it can can display and update either.
|
||||
* gifrotate and other filter utilities now preserve extension blocks,
|
||||
including the graphics control information for transparency and delay time.
|
||||
* A new utility, giftool, supports a wide variety of filtering operations
|
||||
on GIFs, including: setting background and transparency colors, changing
|
||||
interlacing, setting image delays, setting the user-input flag, and setting
|
||||
the aspect-ratio byte. It can sequence multiple operations.
|
||||
* The test-pattern generators gifbg, gifcolor, gihisto and gifwedge and the
|
||||
code templates giffilter and gifsponge are no longer installed by default.
|
||||
|
||||
Documentation and polish
|
||||
------------------------
|
||||
* The history.txt and build.txt and files from 4.2.0 now have .asc extensions
|
||||
to indicate that they use asciidoc markup, contrasting with the txt
|
||||
standards files from CompuServe.
|
||||
* The documentation now includes "What's In A GIF", a very detailed narrative
|
||||
description of the file format.
|
||||
* The -A option of gifasm (for inserting a loop control block) is documented.
|
||||
* The documentation directory includes a copy of the original GIF87
|
||||
specification as well as GIF89's.
|
||||
* The project now has a logo.
|
||||
|
||||
Version 4.2.0
|
||||
=============
|
||||
|
||||
Now maintained by ESR again after handoff by Toshio Kuratomi.
|
||||
|
||||
Code Fixes
|
||||
----------
|
||||
* Code updated internally to C99 to enable more correctness checks by
|
||||
the compiler. Compiles under GCC 4.6.1 without errors or warnings.
|
||||
* A rare resource leak in the colormap-object maker was found with
|
||||
Coverity and fixed.
|
||||
* The code now audits clean under Coverity and cppcheck.
|
||||
* splint cleanup begun, there's a lot of work still to do on this.
|
||||
|
||||
New API Features
|
||||
----------------
|
||||
* The default GIF version to write is now computed at write time from
|
||||
the types of an image's extension blocks, but can be overridden with
|
||||
EGifSetGifVersion().
|
||||
* EGifSpew() is now thread-safe.
|
||||
* Two new functions, GifError() and GifErrorString(),
|
||||
return the error state in a form that can be used by programs.
|
||||
* Two library functions - EGifOpenFileName() and EGifPutImageDesc() -
|
||||
now have bool rather than int flag arguments. Since bool is a
|
||||
typedef of int and TRUE/FALSE have been redefined to true/false,
|
||||
both source and object compatibility with older library versions
|
||||
should be preserved.
|
||||
* GAGetArgs(), used only in the utilities, now returns bool rather
|
||||
than int.
|
||||
* The undocumented GIF_LIB_VERSION symbol is gone from the library header.
|
||||
It has been replaced with three documented symbols: GIFLIB_MAJOR,
|
||||
GIFLIB_MINOR, and GIFLIB_RELEASE.
|
||||
|
||||
Retirements
|
||||
-----------
|
||||
* The gif2epsn and gif2iris utilities are gone. They were full of
|
||||
platform dependencies for platforms long dead. There are enough
|
||||
platform-independent GIF viewers in the world that these weren't
|
||||
adding any value. Removing these gets rid of a dependency on GL.
|
||||
* The rle2gif, gif2rle, and gif2ps utilities are also gone. There are enough
|
||||
multiformat image converters in the world that these weren't adding
|
||||
any value either. Removing them reduces the codebase's dependencies.
|
||||
* The undocumented DumpScreen2Gif() is gone from the library. The
|
||||
only non-obsolete capture mode it supported was through X, and that
|
||||
probably hasn't been used in years and is replaceable by any number
|
||||
of capture utilities. Dropping this code makes the library's
|
||||
portability issues go away.
|
||||
* QuantizeBuffer(), GifQprintf(), PrintGifError(), GIF_ERROR()
|
||||
and GIF_MESSAGE() have been removed from the core library.
|
||||
They were used only by the utilities. QuantizeBuffer() has been
|
||||
inlined where it was used and the latter three are now part of the
|
||||
utility support library.
|
||||
* The Game Boy Advanced test code is gone. The platform was discontinued
|
||||
in 2008; more to the point, nobody ever documented the code's assumptions
|
||||
or expected results.
|
||||
* The Changelog file is now retained for archival purposes only, and because
|
||||
autotools throws a hissy fit if there isn't one. The single point of
|
||||
truth about changes and the reasons for them is the repository history.
|
||||
|
||||
Behavior changes
|
||||
----------------
|
||||
* The -q option of the utilities is replaced by an opposite -v (verbose)
|
||||
option; the default is now quiet for all platforms. Defaulting to chattiness
|
||||
on MSDOS made sense in a world of slow text consoles, but not today.
|
||||
|
||||
Testing
|
||||
-------
|
||||
* There is now a proper regression-test suite; run 'make' in tests/.
|
||||
The old test-unx script is now tests/visual-check and can be run
|
||||
occasionally for a check with the Mark One Eyeball.
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
* Build instructions now live in build.txt
|
||||
* An overview of the giflib API now lives in api.txt.
|
||||
* Documentation is now in DocBook-XML, so either HTML or man pages can
|
||||
be generated from it.
|
||||
|
||||
Version 4.1.6
|
||||
=============
|
||||
Brown paper bag release. Fix a problem with header inclusion that could
|
||||
prevent the library from building on some platforms.
|
||||
|
||||
Version 4.1.5
|
||||
=============
|
||||
This version has some important fixes for segfaults when working with corrupt
|
||||
files. All users are strongly encouraged to upgrade.
|
||||
|
||||
Code Fixes
|
||||
----------
|
||||
* Fix segfault in utilities due to referencing ColorMaps in GifFiles that had
|
||||
no ColorMap present.
|
||||
* Fix gif2x11 to work on 24 bit displays.
|
||||
* Fix for giftext segfault when the GifFile does not store a global colormap.
|
||||
* Checks to fail gracefully when an image contains improper LZ codes.
|
||||
* Close file handles on failure in DGifOpenFileHandle()
|
||||
* Checks to operate on files in binary mode on WIN32 as well as MSDOS.
|
||||
|
||||
Building
|
||||
--------
|
||||
* Add checks to make building on Win32 easier.
|
||||
* Allow turning off gl_s, rle, and X11 support from the configure command line.
|
||||
* Fix for finding a 32 bit integer type on some platforms.
|
||||
* Only enable -Wall if we're using gcc.
|
||||
|
||||
Version 4.1.4
|
||||
=============
|
||||
This version fixes some bugs with deallocating ColorMaps. Fix building on
|
||||
several platforms. Fix x86_64 builds to not hang the encoder.
|
||||
|
||||
* Fix several areas in decoding where we removed a ColorMap from our GifFile
|
||||
but didn't set the pointer to NULL. This could lead to double free's of
|
||||
the ColorMap.
|
||||
* Fix a bug in dev2gif.c where we redefined some gl types incorrectly.
|
||||
* Fix a bug in the gif LZW encoder that was triggered on modern 64 bit
|
||||
platforms.
|
||||
* Fix building on Windows. Note -- there has been one API changing event for
|
||||
Windows (renaming DrawText to DrawGifText.) This should have conflicted with
|
||||
Windows API and therefore caused the builds to fail previously. If you had
|
||||
it working with DrawText before, apologies, you'll need to change to
|
||||
DrawGifText in your code. This only affects Windows.
|
||||
* Add support for building on The Game Boy Advance. Note: Due to the GBA's
|
||||
limited memory, the API for the GBA uses short's in many places where the
|
||||
other platforms use ints. This shouldn't affect anyone unless you've
|
||||
been able to get an older version of the code to run on GBA and want to
|
||||
start using this version instead. A recompile of your dependent code
|
||||
will be necessary in this case.
|
||||
|
||||
Version 4.1.3
|
||||
=============
|
||||
This version fixes some bugs in the Extension writing code in
|
||||
EGifPutExtensionFirst, Next, and Last. Using these functions, it is possible
|
||||
to output extensions that contain multiple subblocks. Additionally, library
|
||||
code has been updated to use these functions, making it safe to output
|
||||
long Comments, and multi-block extensions read in from another file.
|
||||
|
||||
* giflib is now hosted on sourceforge with libungif:
|
||||
http://sourceforge.net/projects/libungif
|
||||
* Make the EGifPutExtension{First,Next,Last} family of functions use WRITE
|
||||
so user defined WRITE methods will output them correctly.
|
||||
* Modify EGifSpew and EGifPutComment to use EGifPutExtension{First,Next,Last}
|
||||
so we won't output broken GIFs when dealing with GIFs with multiple
|
||||
subblocks.
|
||||
* More -Wall fixes revealed while testing on Solaris and FreeBSD.
|
||||
* Updated the gif_lib.html documentation to not use EGifPutExtension when
|
||||
dealing with multiple subblocks. Use EGifPutExtension{First,Next,Last}
|
||||
instead.
|
||||
* Some Windows code from the old CVS repository now available in the windows
|
||||
subdirectory. I don't have a Windows environment to test and maintain this
|
||||
but maybe someone out there will find it useful. Caveat hacker.
|
||||
|
||||
Version 4.1.2
|
||||
=============
|
||||
* Numerous bug fixes from people on the old libungif mailing list.
|
||||
* GIF_ERROR and GIF_MESSAGE are on the deprecation list as they are also
|
||||
utility helper functions rather than essential to the functioning of the
|
||||
library.
|
||||
* Complete deprecation list is now in the README file
|
||||
* Audited the sources with gcc -Wall. Everything detectable has now been fixed.
|
||||
* Ran the library code through indent.
|
||||
|
||||
Version 4.1.1
|
||||
=============
|
||||
* Merge in many bug fixes that were sent in while I was hiking the
|
||||
Appalachian Trail.
|
||||
* The qprintf methods of the library are now deprecated. Do not use
|
||||
GifQuietPrint or GifQprintf. These should have been pushed out into the
|
||||
utility helper library instead of sitting around in the library proper at
|
||||
the same time as the getarg functions were moved out. Getting rid of these
|
||||
will let us get rid of our dependence on stdarg.h/varargs.h (Which a Gif
|
||||
reading library has no business requiring.)
|
||||
|
||||
Version 4.1.0
|
||||
=============
|
||||
* Several minor memory leaks in error conditions have been plugged.
|
||||
* New Function EGifOpen(void *userData, OutputFunc writeFunc) allows user
|
||||
specified gif writing functions.
|
||||
* Old copyright notices in a few source files have been updated. All library
|
||||
copyrights should now reflect the copyright notice in the COPYING file.
|
||||
|
||||
Version 4.0.0 -- giflib
|
||||
=======================
|
||||
This version of the giflib library merges Eric Raymond's giflib-3.0 release
|
||||
with the libungif-4.0 release to give people a binary compatible choice
|
||||
between the two libraries and gives me the chance to add bugfixes to giflib
|
||||
that have been incorporated in libungif.
|
||||
|
||||
PLEASE READ THE FILE PATENT_PROBLEMS BEFORE USING THIS LIBRARY!
|
||||
|
||||
Version 4.0.0
|
||||
=============
|
||||
Major fixes have been made to the code that handles Extensions.
|
||||
Unfortunately, this causes binary incompatibility with giflib-3.0 and
|
||||
libungif-3.x. However, the API is still intact. I am, however, deprecating
|
||||
the use of saveImage[x].Function. Use
|
||||
saveImage[x].ExtensionBlocks[y].Function instead.
|
||||
|
||||
Version 3.1.1
|
||||
=============
|
||||
The following bugs which caused SegFaults have been fixed:
|
||||
* When reading gif files with extensions, DGifSlurp would violate memory.
|
||||
* When closing a gif that had a local colormap, DGifCloseFile would attempt
|
||||
to free the colormap twice.
|
||||
* Fix a potential memory leak in DGifSlurp.
|
||||
* New function DGifOpen to allow specifying a user definable gif reading
|
||||
function.
|
||||
|
||||
Version 3.1.0
|
||||
=============
|
||||
* Add a new function:
|
||||
GifFileType *DGifOpen(void * userData, InputFunc readFunc)
|
||||
to read the gif image from a user defined input function.
|
||||
* A few bugfixes.
|
||||
|
||||
Version 3.0
|
||||
===========
|
||||
|
||||
Changes from Eric Raymond's libgif
|
||||
----------------------------------
|
||||
* A new gif encoder that makes uncompressed gifs rather than standard,
|
||||
LZW-compressed gifs. This is actually the major motivating factor behind
|
||||
libungif; to provide third-party distributors a means to provide a gif
|
||||
library without the patented LZW encoder.
|
||||
* A new configure script to make compilation of the library on multiple
|
||||
platforms easier. The package should now build shared libraries on all
|
||||
platforms supported by GNU libtool.
|
||||
* Removed the getarg functions from libgif. These were not part of the
|
||||
public API and only used by the tools in the utils directory so I separated
|
||||
them from the rest of the library.
|
||||
* Fixed a few bugs in the tools in the utils directory.
|
||||
|
||||
Version 3.0
|
||||
===========
|
||||
|
||||
New features
|
||||
------------
|
||||
* Incorporated Sirtaj Kang's changes to make both static and shared libs.
|
||||
* All the utility and library docs are HTML now.
|
||||
* The library and relevant utilities are now fully GIF89-aware.
|
||||
* Functions for drawing text and boxes on saved images are documented.
|
||||
* The distribution is now issued under a simple X-Consortium-style license.
|
||||
* Can now generate package RPMs and LSM automatically.
|
||||
* Home page with Web-acessible documentation at http://www.ccil.org/~esr/giflib
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
* Fix giftext to not core dump on a null extension record.
|
||||
* Incorporate Philip VanBaren's change to prevent a core dump in gifasm.
|
||||
|
||||
Version 2.3
|
||||
===========
|
||||
* Fixed a core-dump bug in gifcomb revealed by ELF environment in Linux 1.2.13.
|
||||
|
||||
Version 2.2b
|
||||
============
|
||||
* Added gifburst tool.
|
||||
|
||||
Version 2.2
|
||||
===========
|
||||
* Linux is supported.
|
||||
|
||||
Version 2.1
|
||||
===========
|
||||
* Added the gifovly tool, which supports making a composite from several GIF
|
||||
images.
|
||||
* Used gifovly to implement a full-fledged pasteup program in shell. It's
|
||||
called gifcompose and lives in the util directory.
|
||||
* Added a copy of the GIF89 standard to the doc directory (gif89.txt);
|
||||
also a description of the preferred compression method (lzgif.txt).
|
||||
|
||||
Version 2.0
|
||||
===========
|
||||
With this version, development was taken over from Gershon Elber by Eric
|
||||
S. Raymond <esr@snark.thyrsus.com>. Note that I, esr, have pretty much
|
||||
adhered to Gershon's coding style, even though it's quite baroque and DOS-
|
||||
headed by my standards.
|
||||
|
||||
Library Improvements
|
||||
--------------------
|
||||
* New DGifSlurp() and EGifSpew() library entry points allow all GIF-bashing
|
||||
to be done in core on machines with sufficient memory. Writing code to
|
||||
slice'n'dice multiple GIFs in non-sequential ways is now much easier (send
|
||||
kudos and brickbats to esr, small unmarked bills preferred).
|
||||
* The interface has changed somewhat. Members in the GifFileType structure
|
||||
have been renamed and regrouped. This was required for support of the
|
||||
SavedImages member (which enables the new functions mentioned in 1). Also,
|
||||
there is a new data type for allocated color maps and routines to handle
|
||||
it conveniently.
|
||||
* Some minor bugs have been fixed. Most notably, the DGif code now correctly
|
||||
handles the possibility of more than one code block per extension record,
|
||||
as per the GIF spec. It's not clear, however, that anyone ever has or
|
||||
ever will use this feature for anything...
|
||||
|
||||
New Tools and Options
|
||||
---------------------
|
||||
* A brand new, ultra-spiffy tool `icon2gif' is included. It assembles named
|
||||
GIFs with editable text color map & icon raster representations to produce
|
||||
multi-image GIFs usable as graphical resource files. It can also dump most
|
||||
GIFs in the same text-only form it parses. This makes it easy to edit GIFs
|
||||
even if you don't have a graphics editor.
|
||||
* The gifclip utility supports a new `-c' (complement) option that allows you
|
||||
to perform an `inverse clip', removing horizontal or vertical bands from an
|
||||
image.
|
||||
* The gifclrmp utility supports a new `-t' switch for shuffling color index
|
||||
values.
|
||||
* A new tool `gifcolor' generates test pattern from colormap input.
|
||||
|
||||
New Documentation and Examples
|
||||
------------------------------
|
||||
* The documentation has been overhauled completely and translated out of the
|
||||
dialect spoken by the estimable Mr. Elber into something like standard
|
||||
English :-).
|
||||
* Two source code files gifspnge.c and giffiltr.c have been added to the
|
||||
util directory. These are GIF copiers that exercise the I/O routines,
|
||||
provided as skeletons for your applications. Read the comments in them
|
||||
for more info.
|
||||
* The util Makefile for UNIX has been improved. It now uses the cc/gcc -s
|
||||
option rather than strip(1). There are now separate install productions,
|
||||
so you can test new versions in util before installation for production
|
||||
(the top-level make script still does an install).
|
||||
|
||||
Version 1.2
|
||||
===========
|
||||
* GIFFIX - a new tool to attempt and fix broken GIF images. Currently fix
|
||||
images that has EOF prematurely by padding with the darkest color.
|
||||
* Make GIF2BGI display as much as it can considering the mem. avail.
|
||||
* Add -q flag to all tools for quite running scan line number mode.
|
||||
* Fix a (minor!?) bug in the GIF decoder when encountering code 4095.
|
||||
* New tools (RGB2GIF and GIF2RGB) to convert GIF to/from 24 bits RGB images.
|
||||
* New tool GIFROTAT to rotate a gif image by an arbitrary angle.
|
||||
* GifRSize was updated to resize by an arbitrary factor.
|
||||
|
||||
Version 1.1
|
||||
===========
|
||||
* GIF2BGI - a new utility to display GIF images using Borland's BGI drivers
|
||||
(if you have one...)
|
||||
* TEXT2GIF - Converts plain text into GIF images.
|
||||
* GIF2IRIS - SGI4D display program for GIF images.
|
||||
* GIF_LIB naming convension has been modified to make sure it has unique
|
||||
names (see gif_lib.h).
|
||||
* Support for SGI4D gl and X11 window grabbing has been added to the
|
||||
library. SGI4D input is quantizied into 8 bits.
|
||||
Also support for EGA/VGA devices has been added as well.
|
||||
see Dev2gif.c module.
|
||||
* Support for the new gif89a format has been added.
|
||||
|
||||
|
||||
|
27
third_party/giflib/README
vendored
27
third_party/giflib/README
vendored
@ -1,27 +0,0 @@
|
||||
= GIFLIB =
|
||||
|
||||
This is the README file of GIFLIB, a library for manipulating GIF files.
|
||||
|
||||
Latest versions of GIFLIB are currently hosted at:
|
||||
http://sourceforge.net/projects/giflib
|
||||
|
||||
== Overview ==
|
||||
|
||||
GIF is a legacy format; we recommend against generating new images in
|
||||
it. For a cleaner, more extensible design with better color support
|
||||
and compression, look up PNG.
|
||||
|
||||
giflib provides code for reading GIF files and transforming them into
|
||||
RGB bitmaps, and for writing RGB bitmaps as GIF files.
|
||||
|
||||
The (permissive) open-source license is in the file COPYING.
|
||||
|
||||
You will find build instructions in build.asc
|
||||
|
||||
You will find full documentation of the API in doc/ and on the
|
||||
project website.
|
||||
|
||||
The project has a long and confusing history, described in history.asc
|
||||
|
||||
The project to-do list is in TODO.
|
||||
|
3
third_party/giflib/TODO
vendored
3
third_party/giflib/TODO
vendored
@ -1,3 +0,0 @@
|
||||
= GIFLIB TODO list =
|
||||
|
||||
Currently empty.
|
124
third_party/giflib/config.h.cmake
vendored
124
third_party/giflib/config.h.cmake
vendored
@ -1,124 +0,0 @@
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#cmakedefine HAVE_DLFCN_H ${HAVE_DLFCN_H}
|
||||
|
||||
/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
|
||||
#cmakedefine HAVE_DOPRNT ${HAVE_DOPRNT}
|
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */
|
||||
#cmakedefine HAVE_FCNTL_H ${HAVE_FCNTL_H}
|
||||
|
||||
/* Define to 1 if you have the <gl/gl.h> header file. */
|
||||
#cmakedefine HAVE_GL_GL_H ${HAVE_GL_GL_H}
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#cmakedefine HAVE_INTTYPES_H ${HAVE_INTTYPES_H}
|
||||
|
||||
/* Define if the gl_s library is installed (SGI GL library) */
|
||||
#cmakedefine HAVE_LIBGL_S ${HAVE_LIBGL_S}
|
||||
|
||||
/* Define if the X11 library is installed */
|
||||
#cmakedefine HAVE_LIBX11 ${HAVE_LIBX11}
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#cmakedefine HAVE_MEMORY_H ${HAVE_MEMORY_H}
|
||||
|
||||
/* Define to 1 if you have the <rle.h> header file. */
|
||||
#cmakedefine HAVE_RLE_H ${HAVE_RLE_H}
|
||||
|
||||
/* Define to 1 if you have the <stdarg.h> header file. */
|
||||
#cmakedefine HAVE_STDARG_H ${HAVE_STDARG_H}
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#cmakedefine HAVE_STDINT_H ${HAVE_STDINT_H}
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#cmakedefine HAVE_STDLIB_H ${HAVE_STDLIB_H}
|
||||
|
||||
/* Define to 1 if you have the `strdup' function. */
|
||||
#cmakedefine HAVE_STRDUP ${HAVE_STRDUP}
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#cmakedefine HAVE_STRINGS_H ${HAVE_STRINGS_H}
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#cmakedefine HAVE_STRING_H ${HAVE_STRING_H}
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#cmakedefine HAVE_SYS_STAT_H ${HAVE_SYS_STAT_H}
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#cmakedefine HAVE_SYS_TYPES_H ${HAVE_SYS_TYPES_H}
|
||||
|
||||
/* Define to 1 if the system has the type `uint32_t'. */
|
||||
#cmakedefine HAVE_UINT32_T ${HAVE_UINT32_T}
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H}
|
||||
|
||||
/* Define to 1 if the system has the type `u_int32_t'. */
|
||||
#cmakedefine HAVE_U_INT32_T ${HAVE_U_INT32_T}
|
||||
|
||||
/* Define to 1 if you have the <varargs.h> header file. */
|
||||
#cmakedefine HAVE_VARARGS_H ${HAVE_VARARGS_H}
|
||||
|
||||
/* Define to 1 if you have the `vprintf' function. */
|
||||
#cmakedefine HAVE_VPRINTF ${HAVE_VPRINTF}
|
||||
|
||||
/* Define to 1 if you have the <X11/Xlib.h> header file. */
|
||||
#cmakedefine HAVE_X11_XLIB_H ${HAVE_X11_XLIB_H}
|
||||
|
||||
/* Define to 1 if you have the <X11/Xutil.h> header file. */
|
||||
#cmakedefine HAVE_X11_XUTIL_H ${HAVE_X11_XUTIL_H}
|
||||
|
||||
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
|
||||
#cmakedefine NO_MINUS_C_MINUS_O ${NO_MINUS_C_MINUS_O}
|
||||
|
||||
/* Name of package */
|
||||
#cmakedefine PACKAGE ${PACKAGE}
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#cmakedefine PACKAGE_BUGREPORT ${PACKAGE_BUGREPORT}
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#cmakedefine PACKAGE_NAME ${PACKAGE_NAME}
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#cmakedefine PACKAGE_STRING ${PACKAGE_STRING}
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#cmakedefine PACKAGE_TARNAME ${PACKAGE_TARNAME}
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#cmakedefine PACKAGE_VERSION ${PACKAGE_VERSION}
|
||||
|
||||
/* Define to 1 if the C compiler supports function prototypes. */
|
||||
#cmakedefine PROTOTYPES ${PROTOTYPES}
|
||||
|
||||
/* Define to 1 if the `setvbuf' function takes the buffering type as its
|
||||
second argument and the buffer pointer as the third, as on System V before
|
||||
release 3. */
|
||||
#cmakedefine SETVBUF_REVERSED ${SETVBUF_REVERSED}
|
||||
|
||||
/* The size of `unsigned int', as computed by sizeof. */
|
||||
#cmakedefine SIZEOF_UNSIGNED_INT ${SIZEOF_UNSIGNED_INT}
|
||||
|
||||
/* The size of `unsigned long', as computed by sizeof. */
|
||||
#cmakedefine SIZEOF_UNSIGNED_LONG ${SIZEOF_UNSIGNED_LONG}
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#cmakedefine STDC_HEADERS ${STDC_HEADERS}
|
||||
|
||||
/* Set to an unsigned 32 bit integer available on this system */
|
||||
#cmakedefine UINT32 ${UINT32}
|
||||
|
||||
/* Version number of package */
|
||||
#cmakedefine VERSION ${VERSION}
|
||||
|
||||
/* Define to 1 if the X Window System is missing or not being used. */
|
||||
#cmakedefine X_DISPLAY_MISSING ${X_DISPLAY_MISSING}
|
||||
|
||||
/* Define like PROTOTYPES; this can be used by system headers. */
|
||||
#cmakedefine __PROTOTYPES ${__PROTOTYPES}
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#cmakedefine const ${const}
|
1170
third_party/giflib/lib/dgif_lib.c
vendored
1170
third_party/giflib/lib/dgif_lib.c
vendored
File diff suppressed because it is too large
Load Diff
1157
third_party/giflib/lib/egif_lib.c
vendored
1157
third_party/giflib/lib/egif_lib.c
vendored
File diff suppressed because it is too large
Load Diff
97
third_party/giflib/lib/gif_err.c
vendored
97
third_party/giflib/lib/gif_err.c
vendored
@ -1,97 +0,0 @@
|
||||
/*****************************************************************************
|
||||
|
||||
gif_err.c - handle error reporting for the GIF library.
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "gif_lib.h"
|
||||
#include "gif_lib_private.h"
|
||||
|
||||
/*****************************************************************************
|
||||
Return a string description of the last GIF error
|
||||
*****************************************************************************/
|
||||
const char *
|
||||
GifErrorString(int ErrorCode)
|
||||
{
|
||||
const char *Err;
|
||||
|
||||
switch (ErrorCode) {
|
||||
case E_GIF_ERR_OPEN_FAILED:
|
||||
Err = "Failed to open given file";
|
||||
break;
|
||||
case E_GIF_ERR_WRITE_FAILED:
|
||||
Err = "Failed to write to given file";
|
||||
break;
|
||||
case E_GIF_ERR_HAS_SCRN_DSCR:
|
||||
Err = "Screen descriptor has already been set";
|
||||
break;
|
||||
case E_GIF_ERR_HAS_IMAG_DSCR:
|
||||
Err = "Image descriptor is still active";
|
||||
break;
|
||||
case E_GIF_ERR_NO_COLOR_MAP:
|
||||
Err = "Neither global nor local color map";
|
||||
break;
|
||||
case E_GIF_ERR_DATA_TOO_BIG:
|
||||
Err = "Number of pixels bigger than width * height";
|
||||
break;
|
||||
case E_GIF_ERR_NOT_ENOUGH_MEM:
|
||||
Err = "Failed to allocate required memory";
|
||||
break;
|
||||
case E_GIF_ERR_DISK_IS_FULL:
|
||||
Err = "Write failed (disk full?)";
|
||||
break;
|
||||
case E_GIF_ERR_CLOSE_FAILED:
|
||||
Err = "Failed to close given file";
|
||||
break;
|
||||
case E_GIF_ERR_NOT_WRITEABLE:
|
||||
Err = "Given file was not opened for write";
|
||||
break;
|
||||
case D_GIF_ERR_OPEN_FAILED:
|
||||
Err = "Failed to open given file";
|
||||
break;
|
||||
case D_GIF_ERR_READ_FAILED:
|
||||
Err = "Failed to read from given file";
|
||||
break;
|
||||
case D_GIF_ERR_NOT_GIF_FILE:
|
||||
Err = "Data is not in GIF format";
|
||||
break;
|
||||
case D_GIF_ERR_NO_SCRN_DSCR:
|
||||
Err = "No screen descriptor detected";
|
||||
break;
|
||||
case D_GIF_ERR_NO_IMAG_DSCR:
|
||||
Err = "No Image Descriptor detected";
|
||||
break;
|
||||
case D_GIF_ERR_NO_COLOR_MAP:
|
||||
Err = "Neither global nor local color map";
|
||||
break;
|
||||
case D_GIF_ERR_WRONG_RECORD:
|
||||
Err = "Wrong record type detected";
|
||||
break;
|
||||
case D_GIF_ERR_DATA_TOO_BIG:
|
||||
Err = "Number of pixels bigger than width * height";
|
||||
break;
|
||||
case D_GIF_ERR_NOT_ENOUGH_MEM:
|
||||
Err = "Failed to allocate required memory";
|
||||
break;
|
||||
case D_GIF_ERR_CLOSE_FAILED:
|
||||
Err = "Failed to close given file";
|
||||
break;
|
||||
case D_GIF_ERR_NOT_READABLE:
|
||||
Err = "Given file was not opened for read";
|
||||
break;
|
||||
case D_GIF_ERR_IMAGE_DEFECT:
|
||||
Err = "Image is defective, decoding aborted";
|
||||
break;
|
||||
case D_GIF_ERR_EOF_TOO_SOON:
|
||||
Err = "Image EOF detected before image complete";
|
||||
break;
|
||||
default:
|
||||
Err = NULL;
|
||||
break;
|
||||
}
|
||||
return Err;
|
||||
}
|
||||
|
||||
/* end */
|
252
third_party/giflib/lib/gif_font.c
vendored
252
third_party/giflib/lib/gif_font.c
vendored
@ -1,252 +0,0 @@
|
||||
/*****************************************************************************
|
||||
|
||||
gif_font.c - utility font handling and simple drawing for the GIF library
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "gif_lib.h"
|
||||
|
||||
/*****************************************************************************
|
||||
Ascii 8 by 8 regular font - only first 128 characters are supported.
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* Each array entry holds the bits for 8 horizontal scan lines, topmost
|
||||
* first. The most significant bit of each constant is the leftmost bit of
|
||||
* the scan line.
|
||||
*/
|
||||
/*@+charint@*/
|
||||
const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH] = {
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* Ascii 0 */
|
||||
{0x3c, 0x42, 0xa5, 0x81, 0xbd, 0x42, 0x3c, 0x00}, /* Ascii 1 */
|
||||
{0x3c, 0x7e, 0xdb, 0xff, 0xc3, 0x7e, 0x3c, 0x00}, /* Ascii 2 */
|
||||
{0x00, 0xee, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00}, /* Ascii 3 */
|
||||
{0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00}, /* Ascii 4 */
|
||||
{0x00, 0x3c, 0x18, 0xff, 0xff, 0x08, 0x18, 0x00}, /* Ascii 5 */
|
||||
{0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x10, 0x38, 0x00}, /* Ascii 6 */
|
||||
{0x00, 0x00, 0x18, 0x3c, 0x18, 0x00, 0x00, 0x00}, /* Ascii 7 */
|
||||
{0xff, 0xff, 0xe7, 0xc3, 0xe7, 0xff, 0xff, 0xff}, /* Ascii 8 */
|
||||
{0x00, 0x3c, 0x42, 0x81, 0x81, 0x42, 0x3c, 0x00}, /* Ascii 9 */
|
||||
{0xff, 0xc3, 0xbd, 0x7e, 0x7e, 0xbd, 0xc3, 0xff}, /* Ascii 10 */
|
||||
{0x1f, 0x07, 0x0d, 0x7c, 0xc6, 0xc6, 0x7c, 0x00}, /* Ascii 11 */
|
||||
{0x00, 0x7e, 0xc3, 0xc3, 0x7e, 0x18, 0x7e, 0x18}, /* Ascii 12 */
|
||||
{0x04, 0x06, 0x07, 0x04, 0x04, 0xfc, 0xf8, 0x00}, /* Ascii 13 */
|
||||
{0x0c, 0x0a, 0x0d, 0x0b, 0xf9, 0xf9, 0x1f, 0x1f}, /* Ascii 14 */
|
||||
{0x00, 0x92, 0x7c, 0x44, 0xc6, 0x7c, 0x92, 0x00}, /* Ascii 15 */
|
||||
{0x00, 0x00, 0x60, 0x78, 0x7e, 0x78, 0x60, 0x00}, /* Ascii 16 */
|
||||
{0x00, 0x00, 0x06, 0x1e, 0x7e, 0x1e, 0x06, 0x00}, /* Ascii 17 */
|
||||
{0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x18}, /* Ascii 18 */
|
||||
{0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00}, /* Ascii 19 */
|
||||
{0xff, 0xb6, 0x76, 0x36, 0x36, 0x36, 0x36, 0x00}, /* Ascii 20 */
|
||||
{0x7e, 0xc1, 0xdc, 0x22, 0x22, 0x1f, 0x83, 0x7e}, /* Ascii 21 */
|
||||
{0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00}, /* Ascii 22 */
|
||||
{0x18, 0x7e, 0x18, 0x18, 0x7e, 0x18, 0x00, 0xff}, /* Ascii 23 */
|
||||
{0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, /* Ascii 24 */
|
||||
{0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x00}, /* Ascii 25 */
|
||||
{0x00, 0x04, 0x06, 0xff, 0x06, 0x04, 0x00, 0x00}, /* Ascii 26 */
|
||||
{0x00, 0x20, 0x60, 0xff, 0x60, 0x20, 0x00, 0x00}, /* Ascii 27 */
|
||||
{0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xff, 0x00}, /* Ascii 28 */
|
||||
{0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00}, /* Ascii 29 */
|
||||
{0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x00, 0x00}, /* Ascii 30 */
|
||||
{0x00, 0x00, 0x00, 0xfe, 0x7c, 0x38, 0x10, 0x00}, /* Ascii 31 */
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* */
|
||||
{0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x30, 0x00}, /* ! */
|
||||
{0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* " */
|
||||
{0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00}, /* # */
|
||||
{0x10, 0x7c, 0xd2, 0x7c, 0x86, 0x7c, 0x10, 0x00}, /* $ */
|
||||
{0xf0, 0x96, 0xfc, 0x18, 0x3e, 0x72, 0xde, 0x00}, /* % */
|
||||
{0x30, 0x48, 0x30, 0x78, 0xce, 0xcc, 0x78, 0x00}, /* & */
|
||||
{0x0c, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ' */
|
||||
{0x10, 0x60, 0xc0, 0xc0, 0xc0, 0x60, 0x10, 0x00}, /* ( */
|
||||
{0x10, 0x0c, 0x06, 0x06, 0x06, 0x0c, 0x10, 0x00}, /* ) */
|
||||
{0x00, 0x54, 0x38, 0xfe, 0x38, 0x54, 0x00, 0x00}, /* * */
|
||||
{0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00}, /* + */
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x70}, /* , */
|
||||
{0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00}, /* - */
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00}, /* . */
|
||||
{0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x00}, /* / */
|
||||
{0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00}, /* 0 */
|
||||
{0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x3c, 0x00}, /* 1 */
|
||||
{0x7c, 0xc6, 0x06, 0x0c, 0x30, 0x60, 0xfe, 0x00}, /* 2 */
|
||||
{0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00}, /* 3 */
|
||||
{0x0e, 0x1e, 0x36, 0x66, 0xfe, 0x06, 0x06, 0x00}, /* 4 */
|
||||
{0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0xfc, 0x00}, /* 5 */
|
||||
{0x7c, 0xc6, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00}, /* 6 */
|
||||
{0xfe, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x60, 0x00}, /* 7 */
|
||||
{0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00}, /* 8 */
|
||||
{0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0xc6, 0x7c, 0x00}, /* 9 */
|
||||
{0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00}, /* : */
|
||||
{0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x20, 0x00}, /* }, */
|
||||
{0x00, 0x1c, 0x30, 0x60, 0x30, 0x1c, 0x00, 0x00}, /* < */
|
||||
{0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00, 0x00}, /* = */
|
||||
{0x00, 0x70, 0x18, 0x0c, 0x18, 0x70, 0x00, 0x00}, /* > */
|
||||
{0x7c, 0xc6, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00}, /* ? */
|
||||
{0x7c, 0x82, 0x9a, 0xaa, 0xaa, 0x9e, 0x7c, 0x00}, /* @ */
|
||||
{0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00}, /* A */
|
||||
{0xfc, 0xc6, 0xc6, 0xfc, 0xc6, 0xc6, 0xfc, 0x00}, /* B */
|
||||
{0x7c, 0xc6, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x00}, /* C */
|
||||
{0xf8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0xf8, 0x00}, /* D */
|
||||
{0xfe, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xfe, 0x00}, /* E */
|
||||
{0xfe, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0x00}, /* F */
|
||||
{0x7c, 0xc6, 0xc0, 0xce, 0xc6, 0xc6, 0x7e, 0x00}, /* G */
|
||||
{0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00}, /* H */
|
||||
{0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00}, /* I */
|
||||
{0x1e, 0x06, 0x06, 0x06, 0xc6, 0xc6, 0x7c, 0x00}, /* J */
|
||||
{0xc6, 0xcc, 0xd8, 0xf0, 0xd8, 0xcc, 0xc6, 0x00}, /* K */
|
||||
{0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00}, /* L */
|
||||
{0xc6, 0xee, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0x00}, /* M */
|
||||
{0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00}, /* N */
|
||||
{0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00}, /* O */
|
||||
{0xfc, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0xc0, 0x00}, /* P */
|
||||
{0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x06}, /* Q */
|
||||
{0xfc, 0xc6, 0xc6, 0xfc, 0xc6, 0xc6, 0xc6, 0x00}, /* R */
|
||||
{0x78, 0xcc, 0x60, 0x30, 0x18, 0xcc, 0x78, 0x00}, /* S */
|
||||
{0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00}, /* T */
|
||||
{0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00}, /* U */
|
||||
{0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00}, /* V */
|
||||
{0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00}, /* W */
|
||||
{0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00}, /* X */
|
||||
{0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00}, /* Y */
|
||||
{0xfe, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xfe, 0x00}, /* Z */
|
||||
{0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00}, /* [ */
|
||||
{0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x00}, /* \ */
|
||||
{0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00}, /* ] */
|
||||
{0x00, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, /* ^ */
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff}, /* _ */
|
||||
{0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ` */
|
||||
{0x00, 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0x7e, 0x00}, /* a */
|
||||
{0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xe6, 0xdc, 0x00}, /* b */
|
||||
{0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0x7e, 0x00}, /* c */
|
||||
{0x06, 0x06, 0x7e, 0xc6, 0xc6, 0xce, 0x76, 0x00}, /* d */
|
||||
{0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7e, 0x00}, /* e */
|
||||
{0x1e, 0x30, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x00}, /* f */
|
||||
{0x00, 0x00, 0x7e, 0xc6, 0xce, 0x76, 0x06, 0x7c}, /* g */
|
||||
{0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x00}, /* */
|
||||
{0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00}, /* i */
|
||||
{0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0xf0}, /* j */
|
||||
{0xc0, 0xc0, 0xcc, 0xd8, 0xf0, 0xd8, 0xcc, 0x00}, /* k */
|
||||
{0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00}, /* l */
|
||||
{0x00, 0x00, 0xcc, 0xfe, 0xd6, 0xc6, 0xc6, 0x00}, /* m */
|
||||
{0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x00}, /* n */
|
||||
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00}, /* o */
|
||||
{0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xe6, 0xdc, 0xc0}, /* p */
|
||||
{0x00, 0x00, 0x7e, 0xc6, 0xc6, 0xce, 0x76, 0x06}, /* q */
|
||||
{0x00, 0x00, 0x6e, 0x70, 0x60, 0x60, 0x60, 0x00}, /* r */
|
||||
{0x00, 0x00, 0x7c, 0xc0, 0x7c, 0x06, 0xfc, 0x00}, /* s */
|
||||
{0x30, 0x30, 0x7c, 0x30, 0x30, 0x30, 0x1c, 0x00}, /* t */
|
||||
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x00}, /* u */
|
||||
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00}, /* v */
|
||||
{0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xfe, 0x6c, 0x00}, /* w */
|
||||
{0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00}, /* x */
|
||||
{0x00, 0x00, 0xc6, 0xc6, 0xce, 0x76, 0x06, 0x7c}, /* y */
|
||||
{0x00, 0x00, 0xfc, 0x18, 0x30, 0x60, 0xfc, 0x00}, /* z */
|
||||
{0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00}, /* { */
|
||||
{0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, /* | */
|
||||
{0xe0, 0x30, 0x30, 0x1c, 0x30, 0x30, 0xe0, 0x00}, /* } */
|
||||
{0x00, 0x00, 0x70, 0x9a, 0x0e, 0x00, 0x00, 0x00}, /* ~ */
|
||||
{0x00, 0x00, 0x18, 0x3c, 0x66, 0xff, 0x00, 0x00} /* Ascii 127 */
|
||||
};
|
||||
/*@=charint@*/
|
||||
|
||||
void
|
||||
GifDrawText8x8(SavedImage *Image,
|
||||
const int x, const int y,
|
||||
const char *legend,
|
||||
const int color)
|
||||
{
|
||||
int i, j;
|
||||
int base;
|
||||
const char *cp;
|
||||
|
||||
for (i = 0; i < GIF_FONT_HEIGHT; i++) {
|
||||
base = Image->ImageDesc.Width * (y + i) + x;
|
||||
|
||||
for (cp = legend; *cp; cp++)
|
||||
for (j = 0; j < GIF_FONT_WIDTH; j++) {
|
||||
if (GifAsciiTable8x8[(short)(*cp)][i] & (1 << (GIF_FONT_WIDTH - j)))
|
||||
Image->RasterBits[base] = color;
|
||||
base++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
GifDrawBox(SavedImage *Image,
|
||||
const int x, const int y,
|
||||
const int w, const int d,
|
||||
const int color)
|
||||
{
|
||||
int j, base = Image->ImageDesc.Width * y + x;
|
||||
|
||||
for (j = 0; j < w; j++)
|
||||
Image->RasterBits[base + j] =
|
||||
Image->RasterBits[base + (d * Image->ImageDesc.Width) + j] = color;
|
||||
|
||||
for (j = 0; j < d; j++)
|
||||
Image->RasterBits[base + j * Image->ImageDesc.Width] =
|
||||
Image->RasterBits[base + j * Image->ImageDesc.Width + w] = color;
|
||||
}
|
||||
|
||||
void
|
||||
GifDrawRectangle(SavedImage *Image,
|
||||
const int x, const int y,
|
||||
const int w, const int d,
|
||||
const int color)
|
||||
{
|
||||
unsigned char *bp = Image->RasterBits + Image->ImageDesc.Width * y + x;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < d; i++)
|
||||
memset(bp + (i * Image->ImageDesc.Width), color, (size_t)w);
|
||||
}
|
||||
|
||||
void
|
||||
GifDrawBoxedText8x8(SavedImage *Image,
|
||||
const int x, const int y,
|
||||
const char *legend,
|
||||
const int border,
|
||||
const int bg, const int fg)
|
||||
{
|
||||
int i, j = 0, LineCount = 0, TextWidth = 0;
|
||||
const char *cp;
|
||||
|
||||
/* compute size of text to box */
|
||||
for (cp = legend; *cp; cp++)
|
||||
if (*cp == '\r') {
|
||||
if (j > TextWidth)
|
||||
TextWidth = j;
|
||||
j = 0;
|
||||
LineCount++;
|
||||
} else if (*cp != '\t')
|
||||
++j;
|
||||
LineCount++; /* count last line */
|
||||
if (j > TextWidth) /* last line might be longer than any previous */
|
||||
TextWidth = j;
|
||||
|
||||
/* fill the box */
|
||||
GifDrawRectangle(Image, x + 1, y + 1,
|
||||
border + TextWidth * GIF_FONT_WIDTH + border - 1,
|
||||
border + LineCount * GIF_FONT_HEIGHT + border - 1, bg);
|
||||
|
||||
/* draw the text */
|
||||
i = 0;
|
||||
cp = strtok((char *)legend, "\r\n");
|
||||
do {
|
||||
int leadspace = 0;
|
||||
|
||||
if (cp[0] == '\t')
|
||||
leadspace = (TextWidth - strlen(++cp)) / 2;
|
||||
|
||||
GifDrawText8x8(Image, x + border + (leadspace * GIF_FONT_WIDTH),
|
||||
y + border + (GIF_FONT_HEIGHT * i++), cp, fg);
|
||||
cp = strtok((char *)NULL, "\r\n");
|
||||
} while (cp);
|
||||
|
||||
/* outline the box */
|
||||
GifDrawBox(Image, x, y, border + TextWidth * GIF_FONT_WIDTH + border,
|
||||
border + LineCount * GIF_FONT_HEIGHT + border, fg);
|
||||
}
|
||||
|
||||
/* end */
|
134
third_party/giflib/lib/gif_hash.c
vendored
134
third_party/giflib/lib/gif_hash.c
vendored
@ -1,134 +0,0 @@
|
||||
/*****************************************************************************
|
||||
|
||||
gif_hash.c -- module to support the following operations:
|
||||
|
||||
1. InitHashTable - initialize hash table.
|
||||
2. ClearHashTable - clear the hash table to an empty state.
|
||||
2. InsertHashTable - insert one item into data structure.
|
||||
3. ExistsHashTable - test if item exists in data structure.
|
||||
|
||||
This module is used to hash the GIF codes during encoding.
|
||||
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "gif_lib.h"
|
||||
#include "gif_hash.h"
|
||||
#include "gif_lib_private.h"
|
||||
|
||||
/* #define DEBUG_HIT_RATE Debug number of misses per hash Insert/Exists. */
|
||||
|
||||
#ifdef DEBUG_HIT_RATE
|
||||
static long NumberOfTests = 0,
|
||||
NumberOfMisses = 0;
|
||||
#endif /* DEBUG_HIT_RATE */
|
||||
|
||||
static int KeyItem(uint32_t Item);
|
||||
|
||||
/******************************************************************************
|
||||
Initialize HashTable - allocate the memory needed and clear it. *
|
||||
******************************************************************************/
|
||||
GifHashTableType *_InitHashTable(void)
|
||||
{
|
||||
GifHashTableType *HashTable;
|
||||
|
||||
if ((HashTable = (GifHashTableType *) malloc(sizeof(GifHashTableType)))
|
||||
== NULL)
|
||||
return NULL;
|
||||
|
||||
_ClearHashTable(HashTable);
|
||||
|
||||
return HashTable;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Routine to clear the HashTable to an empty state. *
|
||||
This part is a little machine depended. Use the commented part otherwise. *
|
||||
******************************************************************************/
|
||||
void _ClearHashTable(GifHashTableType *HashTable)
|
||||
{
|
||||
memset(HashTable -> HTable, 0xFF, HT_SIZE * sizeof(uint32_t));
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Routine to insert a new Item into the HashTable. The data is assumed to be *
|
||||
new one. *
|
||||
******************************************************************************/
|
||||
void _InsertHashTable(GifHashTableType *HashTable, uint32_t Key, int Code)
|
||||
{
|
||||
int HKey = KeyItem(Key);
|
||||
uint32_t *HTable = HashTable -> HTable;
|
||||
|
||||
#ifdef DEBUG_HIT_RATE
|
||||
NumberOfTests++;
|
||||
NumberOfMisses++;
|
||||
#endif /* DEBUG_HIT_RATE */
|
||||
|
||||
while (HT_GET_KEY(HTable[HKey]) != 0xFFFFFL) {
|
||||
#ifdef DEBUG_HIT_RATE
|
||||
NumberOfMisses++;
|
||||
#endif /* DEBUG_HIT_RATE */
|
||||
HKey = (HKey + 1) & HT_KEY_MASK;
|
||||
}
|
||||
HTable[HKey] = HT_PUT_KEY(Key) | HT_PUT_CODE(Code);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Routine to test if given Key exists in HashTable and if so returns its code *
|
||||
Returns the Code if key was found, -1 if not. *
|
||||
******************************************************************************/
|
||||
int _ExistsHashTable(GifHashTableType *HashTable, uint32_t Key)
|
||||
{
|
||||
int HKey = KeyItem(Key);
|
||||
uint32_t *HTable = HashTable -> HTable, HTKey;
|
||||
|
||||
#ifdef DEBUG_HIT_RATE
|
||||
NumberOfTests++;
|
||||
NumberOfMisses++;
|
||||
#endif /* DEBUG_HIT_RATE */
|
||||
|
||||
while ((HTKey = HT_GET_KEY(HTable[HKey])) != 0xFFFFFL) {
|
||||
#ifdef DEBUG_HIT_RATE
|
||||
NumberOfMisses++;
|
||||
#endif /* DEBUG_HIT_RATE */
|
||||
if (Key == HTKey) return HT_GET_CODE(HTable[HKey]);
|
||||
HKey = (HKey + 1) & HT_KEY_MASK;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Routine to generate an HKey for the hashtable out of the given unique key. *
|
||||
The given Key is assumed to be 20 bits as follows: lower 8 bits are the *
|
||||
new postfix character, while the upper 12 bits are the prefix code. *
|
||||
Because the average hit ratio is only 2 (2 hash references per entry), *
|
||||
evaluating more complex keys (such as twin prime keys) does not worth it! *
|
||||
******************************************************************************/
|
||||
static int KeyItem(uint32_t Item)
|
||||
{
|
||||
return ((Item >> 12) ^ Item) & HT_KEY_MASK;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_HIT_RATE
|
||||
/******************************************************************************
|
||||
Debugging routine to print the hit ratio - number of times the hash table *
|
||||
was tested per operation. This routine was used to test the KeyItem routine *
|
||||
******************************************************************************/
|
||||
void HashTablePrintHitRatio(void)
|
||||
{
|
||||
printf("Hash Table Hit Ratio is %ld/%ld = %ld%%.\n",
|
||||
NumberOfMisses, NumberOfTests,
|
||||
NumberOfMisses * 100 / NumberOfTests);
|
||||
}
|
||||
#endif /* DEBUG_HIT_RATE */
|
||||
|
||||
/* end */
|
42
third_party/giflib/lib/gif_hash.h
vendored
42
third_party/giflib/lib/gif_hash.h
vendored
@ -1,42 +0,0 @@
|
||||
/******************************************************************************
|
||||
|
||||
gif_hash.h - magfic constants and declarations for GIF LZW
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _GIF_HASH_H_
|
||||
#define _GIF_HASH_H_
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define HT_SIZE 8192 /* 12bits = 4096 or twice as big! */
|
||||
#define HT_KEY_MASK 0x1FFF /* 13bits keys */
|
||||
#define HT_KEY_NUM_BITS 13 /* 13bits keys */
|
||||
#define HT_MAX_KEY 8191 /* 13bits - 1, maximal code possible */
|
||||
#define HT_MAX_CODE 4095 /* Biggest code possible in 12 bits. */
|
||||
|
||||
/* The 32 bits of the long are divided into two parts for the key & code: */
|
||||
/* 1. The code is 12 bits as our compression algorithm is limited to 12bits */
|
||||
/* 2. The key is 12 bits Prefix code + 8 bit new char or 20 bits. */
|
||||
/* The key is the upper 20 bits. The code is the lower 12. */
|
||||
#define HT_GET_KEY(l) (l >> 12)
|
||||
#define HT_GET_CODE(l) (l & 0x0FFF)
|
||||
#define HT_PUT_KEY(l) (l << 12)
|
||||
#define HT_PUT_CODE(l) (l & 0x0FFF)
|
||||
|
||||
typedef struct GifHashTableType {
|
||||
uint32_t HTable[HT_SIZE];
|
||||
} GifHashTableType;
|
||||
|
||||
GifHashTableType *_InitHashTable(void);
|
||||
void _ClearHashTable(GifHashTableType *HashTable);
|
||||
void _InsertHashTable(GifHashTableType *HashTable, uint32_t Key, int Code);
|
||||
int _ExistsHashTable(GifHashTableType *HashTable, uint32_t Key);
|
||||
|
||||
#endif /* _GIF_HASH_H_ */
|
||||
|
||||
/* end */
|
316
third_party/giflib/lib/gif_lib.h
vendored
316
third_party/giflib/lib/gif_lib.h
vendored
@ -1,316 +0,0 @@
|
||||
/******************************************************************************
|
||||
|
||||
gif_lib.h - service library for decoding and encoding GIF images
|
||||
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef _GIF_LIB_H_
|
||||
#define _GIF_LIB_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define GIFLIB_MAJOR 5
|
||||
#define GIFLIB_MINOR 1
|
||||
#define GIFLIB_RELEASE 0
|
||||
|
||||
#define GIF_ERROR 0
|
||||
#define GIF_OK 1
|
||||
|
||||
#include <stddef.h>
|
||||
#ifdef HAVE_STDBOOL_H
|
||||
#include <stdbool.h>
|
||||
#elif !defined __cplusplus
|
||||
#define false 0
|
||||
#define true 1
|
||||
#endif
|
||||
|
||||
typedef int GifBool;
|
||||
|
||||
#define GIF_STAMP "GIFVER" /* First chars in file - GIF stamp. */
|
||||
#define GIF_STAMP_LEN sizeof(GIF_STAMP) - 1
|
||||
#define GIF_VERSION_POS 3 /* Version first character in stamp. */
|
||||
#define GIF87_STAMP "GIF87a" /* First chars in file - GIF stamp. */
|
||||
#define GIF89_STAMP "GIF89a" /* First chars in file - GIF stamp. */
|
||||
|
||||
typedef unsigned char GifPixelType;
|
||||
typedef unsigned char *GifRowType;
|
||||
typedef unsigned char GifByteType;
|
||||
typedef unsigned int GifPrefixType;
|
||||
typedef int GifWord;
|
||||
|
||||
typedef struct GifColorType {
|
||||
GifByteType Red, Green, Blue;
|
||||
} GifColorType;
|
||||
|
||||
typedef struct ColorMapObject {
|
||||
int ColorCount;
|
||||
int BitsPerPixel;
|
||||
GifBool SortFlag;
|
||||
GifColorType *Colors; /* on malloc(3) heap */
|
||||
} ColorMapObject;
|
||||
|
||||
typedef struct GifImageDesc {
|
||||
GifWord Left, Top, Width, Height; /* Current image dimensions. */
|
||||
GifBool Interlace; /* Sequential/Interlaced lines. */
|
||||
ColorMapObject *ColorMap; /* The local color map */
|
||||
} GifImageDesc;
|
||||
|
||||
typedef struct ExtensionBlock {
|
||||
int ByteCount;
|
||||
GifByteType *Bytes; /* on malloc(3) heap */
|
||||
int Function; /* The block function code */
|
||||
#define CONTINUE_EXT_FUNC_CODE 0x00 /* continuation subblock */
|
||||
#define COMMENT_EXT_FUNC_CODE 0xfe /* comment */
|
||||
#define GRAPHICS_EXT_FUNC_CODE 0xf9 /* graphics control (GIF89) */
|
||||
#define PLAINTEXT_EXT_FUNC_CODE 0x01 /* plaintext */
|
||||
#define APPLICATION_EXT_FUNC_CODE 0xff /* application block */
|
||||
} ExtensionBlock;
|
||||
|
||||
typedef struct SavedImage {
|
||||
GifImageDesc ImageDesc;
|
||||
GifByteType *RasterBits; /* on malloc(3) heap */
|
||||
int ExtensionBlockCount; /* Count of extensions before image */
|
||||
ExtensionBlock *ExtensionBlocks; /* Extensions before image */
|
||||
} SavedImage;
|
||||
|
||||
typedef struct GifFileType {
|
||||
GifWord SWidth, SHeight; /* Size of virtual canvas */
|
||||
GifWord SColorResolution; /* How many colors can we generate? */
|
||||
GifWord SBackGroundColor; /* Background color for virtual canvas */
|
||||
GifByteType AspectByte; /* Used to compute pixel aspect ratio */
|
||||
ColorMapObject *SColorMap; /* Global colormap, NULL if nonexistent. */
|
||||
int ImageCount; /* Number of current image (both APIs) */
|
||||
GifImageDesc Image; /* Current image (low-level API) */
|
||||
SavedImage *SavedImages; /* Image sequence (high-level API) */
|
||||
int ExtensionBlockCount; /* Count extensions past last image */
|
||||
ExtensionBlock *ExtensionBlocks; /* Extensions past last image */
|
||||
int Error; /* Last error condition reported */
|
||||
void *UserData; /* hook to attach user data (TVT) */
|
||||
void *Private; /* Don't mess with this! */
|
||||
} GifFileType;
|
||||
|
||||
#define GIF_ASPECT_RATIO(n) ((n)+15.0/64.0)
|
||||
|
||||
typedef enum {
|
||||
UNDEFINED_RECORD_TYPE,
|
||||
SCREEN_DESC_RECORD_TYPE,
|
||||
IMAGE_DESC_RECORD_TYPE, /* Begin with ',' */
|
||||
EXTENSION_RECORD_TYPE, /* Begin with '!' */
|
||||
TERMINATE_RECORD_TYPE /* Begin with ';' */
|
||||
} GifRecordType;
|
||||
|
||||
/* func type to read gif data from arbitrary sources (TVT) */
|
||||
typedef int (*InputFunc) (GifFileType *, GifByteType *, int);
|
||||
|
||||
/* func type to write gif data to arbitrary targets.
|
||||
* Returns count of bytes written. (MRB)
|
||||
*/
|
||||
typedef int (*OutputFunc) (GifFileType *, const GifByteType *, int);
|
||||
|
||||
/******************************************************************************
|
||||
GIF89 structures
|
||||
******************************************************************************/
|
||||
|
||||
typedef struct GraphicsControlBlock {
|
||||
int DisposalMode;
|
||||
#define DISPOSAL_UNSPECIFIED 0 /* No disposal specified. */
|
||||
#define DISPOSE_DO_NOT 1 /* Leave image in place */
|
||||
#define DISPOSE_BACKGROUND 2 /* Set area too background color */
|
||||
#define DISPOSE_PREVIOUS 3 /* Restore to previous content */
|
||||
GifBool UserInputFlag; /* User confirmation required before disposal */
|
||||
int DelayTime; /* pre-display delay in 0.01sec units */
|
||||
int TransparentColor; /* Palette index for transparency, -1 if none */
|
||||
#define NO_TRANSPARENT_COLOR -1
|
||||
} GraphicsControlBlock;
|
||||
|
||||
/******************************************************************************
|
||||
GIF encoding routines
|
||||
******************************************************************************/
|
||||
|
||||
/* Main entry points */
|
||||
GifFileType *EGifOpenFileName(const char *GifFileName,
|
||||
const GifBool GifTestExistence, int *Error);
|
||||
GifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error);
|
||||
GifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error);
|
||||
int EGifSpew(GifFileType * GifFile);
|
||||
const char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */
|
||||
int EGifCloseFile(GifFileType *GifFile, int *ErrorCode);
|
||||
|
||||
#define E_GIF_SUCCEEDED 0
|
||||
#define E_GIF_ERR_OPEN_FAILED 1 /* And EGif possible errors. */
|
||||
#define E_GIF_ERR_WRITE_FAILED 2
|
||||
#define E_GIF_ERR_HAS_SCRN_DSCR 3
|
||||
#define E_GIF_ERR_HAS_IMAG_DSCR 4
|
||||
#define E_GIF_ERR_NO_COLOR_MAP 5
|
||||
#define E_GIF_ERR_DATA_TOO_BIG 6
|
||||
#define E_GIF_ERR_NOT_ENOUGH_MEM 7
|
||||
#define E_GIF_ERR_DISK_IS_FULL 8
|
||||
#define E_GIF_ERR_CLOSE_FAILED 9
|
||||
#define E_GIF_ERR_NOT_WRITEABLE 10
|
||||
|
||||
/* These are legacy. You probably do not want to call them directly */
|
||||
int EGifPutScreenDesc(GifFileType *GifFile,
|
||||
const int GifWidth, const int GifHeight,
|
||||
const int GifColorRes,
|
||||
const int GifBackGround,
|
||||
const ColorMapObject *GifColorMap);
|
||||
int EGifPutImageDesc(GifFileType *GifFile,
|
||||
const int GifLeft, const int GifTop,
|
||||
const int GifWidth, const int GifHeight,
|
||||
const GifBool GifInterlace,
|
||||
const ColorMapObject *GifColorMap);
|
||||
void EGifSetGifVersion(GifFileType *GifFile, const GifBool gif89);
|
||||
int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine,
|
||||
int GifLineLen);
|
||||
int EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel);
|
||||
int EGifPutComment(GifFileType *GifFile, const char *GifComment);
|
||||
int EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode);
|
||||
int EGifPutExtensionBlock(GifFileType *GifFile,
|
||||
const int GifExtLen, const void *GifExtension);
|
||||
int EGifPutExtensionTrailer(GifFileType *GifFile);
|
||||
int EGifPutExtension(GifFileType *GifFile, const int GifExtCode,
|
||||
const int GifExtLen,
|
||||
const void *GifExtension);
|
||||
int EGifPutCode(GifFileType *GifFile, int GifCodeSize,
|
||||
const GifByteType *GifCodeBlock);
|
||||
int EGifPutCodeNext(GifFileType *GifFile,
|
||||
const GifByteType *GifCodeBlock);
|
||||
|
||||
/******************************************************************************
|
||||
GIF decoding routines
|
||||
******************************************************************************/
|
||||
|
||||
/* Main entry points */
|
||||
GifFileType *DGifOpenFileName(const char *GifFileName, int *Error);
|
||||
GifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error);
|
||||
int DGifSlurp(GifFileType * GifFile);
|
||||
GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error); /* new one (TVT) */
|
||||
int DGifCloseFile(GifFileType * GifFile, int *ErrorCode);
|
||||
|
||||
#define D_GIF_SUCCEEDED 0
|
||||
#define D_GIF_ERR_OPEN_FAILED 101 /* And DGif possible errors. */
|
||||
#define D_GIF_ERR_READ_FAILED 102
|
||||
#define D_GIF_ERR_NOT_GIF_FILE 103
|
||||
#define D_GIF_ERR_NO_SCRN_DSCR 104
|
||||
#define D_GIF_ERR_NO_IMAG_DSCR 105
|
||||
#define D_GIF_ERR_NO_COLOR_MAP 106
|
||||
#define D_GIF_ERR_WRONG_RECORD 107
|
||||
#define D_GIF_ERR_DATA_TOO_BIG 108
|
||||
#define D_GIF_ERR_NOT_ENOUGH_MEM 109
|
||||
#define D_GIF_ERR_CLOSE_FAILED 110
|
||||
#define D_GIF_ERR_NOT_READABLE 111
|
||||
#define D_GIF_ERR_IMAGE_DEFECT 112
|
||||
#define D_GIF_ERR_EOF_TOO_SOON 113
|
||||
|
||||
/* These are legacy. You probably do not want to call them directly */
|
||||
int DGifGetScreenDesc(GifFileType *GifFile);
|
||||
int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType);
|
||||
int DGifGetImageDesc(GifFileType *GifFile);
|
||||
int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen);
|
||||
int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel);
|
||||
int DGifGetComment(GifFileType *GifFile, char *GifComment);
|
||||
int DGifGetExtension(GifFileType *GifFile, int *GifExtCode,
|
||||
GifByteType **GifExtension);
|
||||
int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension);
|
||||
int DGifGetCode(GifFileType *GifFile, int *GifCodeSize,
|
||||
GifByteType **GifCodeBlock);
|
||||
int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock);
|
||||
int DGifGetLZCodes(GifFileType *GifFile, int *GifCode);
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Color table quantization (deprecated)
|
||||
******************************************************************************/
|
||||
int GifQuantizeBuffer(unsigned int Width, unsigned int Height,
|
||||
int *ColorMapSize, GifByteType * RedInput,
|
||||
GifByteType * GreenInput, GifByteType * BlueInput,
|
||||
GifByteType * OutputBuffer,
|
||||
GifColorType * OutputColorMap);
|
||||
|
||||
/******************************************************************************
|
||||
Error handling and reporting.
|
||||
******************************************************************************/
|
||||
extern const char *GifErrorString(int ErrorCode); /* new in 2012 - ESR */
|
||||
|
||||
/*****************************************************************************
|
||||
Everything below this point is new after version 1.2, supporting `slurp
|
||||
mode' for doing I/O in two big belts with all the image-bashing in core.
|
||||
******************************************************************************/
|
||||
|
||||
/******************************************************************************
|
||||
Color map handling from gif_alloc.c
|
||||
******************************************************************************/
|
||||
|
||||
extern ColorMapObject *GifMakeMapObject(int ColorCount,
|
||||
const GifColorType *ColorMap);
|
||||
extern void GifFreeMapObject(ColorMapObject *Object);
|
||||
extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1,
|
||||
const ColorMapObject *ColorIn2,
|
||||
GifPixelType ColorTransIn2[]);
|
||||
extern int GifBitSize(int n);
|
||||
|
||||
/******************************************************************************
|
||||
Support for the in-core structures allocation (slurp mode).
|
||||
******************************************************************************/
|
||||
|
||||
extern void GifApplyTranslation(SavedImage *Image, GifPixelType Translation[]);
|
||||
extern int GifAddExtensionBlock(int *ExtensionBlock_Count,
|
||||
ExtensionBlock **ExtensionBlocks,
|
||||
int Function,
|
||||
unsigned int Len, unsigned char ExtData[]);
|
||||
extern void GifFreeExtensions(int *ExtensionBlock_Count,
|
||||
ExtensionBlock **ExtensionBlocks);
|
||||
extern SavedImage *GifMakeSavedImage(GifFileType *GifFile,
|
||||
const SavedImage *CopyFrom);
|
||||
extern void GifFreeSavedImages(GifFileType *GifFile);
|
||||
|
||||
/******************************************************************************
|
||||
5.x functions for GIF89 graphics control blocks
|
||||
******************************************************************************/
|
||||
|
||||
int DGifExtensionToGCB(const size_t GifExtensionLength,
|
||||
const GifByteType *GifExtension,
|
||||
GraphicsControlBlock *GCB);
|
||||
size_t EGifGCBToExtension(const GraphicsControlBlock *GCB,
|
||||
GifByteType *GifExtension);
|
||||
|
||||
int DGifSavedExtensionToGCB(GifFileType *GifFile,
|
||||
int ImageIndex,
|
||||
GraphicsControlBlock *GCB);
|
||||
int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB,
|
||||
GifFileType *GifFile,
|
||||
int ImageIndex);
|
||||
|
||||
/******************************************************************************
|
||||
The library's internal utility font
|
||||
******************************************************************************/
|
||||
|
||||
#define GIF_FONT_WIDTH 8
|
||||
#define GIF_FONT_HEIGHT 8
|
||||
extern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH];
|
||||
|
||||
extern void GifDrawText8x8(SavedImage *Image,
|
||||
const int x, const int y,
|
||||
const char *legend, const int color);
|
||||
|
||||
extern void GifDrawBox(SavedImage *Image,
|
||||
const int x, const int y,
|
||||
const int w, const int d, const int color);
|
||||
|
||||
extern void GifDrawRectangle(SavedImage *Image,
|
||||
const int x, const int y,
|
||||
const int w, const int d, const int color);
|
||||
|
||||
extern void GifDrawBoxedText8x8(SavedImage *Image,
|
||||
const int x, const int y,
|
||||
const char *legend,
|
||||
const int border, const int bg, const int fg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif /* _GIF_LIB_H */
|
||||
|
||||
/* end */
|
59
third_party/giflib/lib/gif_lib_private.h
vendored
59
third_party/giflib/lib/gif_lib_private.h
vendored
@ -1,59 +0,0 @@
|
||||
/****************************************************************************
|
||||
|
||||
gif_lib_private.h - internal giflib routines and structures
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef _GIF_LIB_PRIVATE_H
|
||||
#define _GIF_LIB_PRIVATE_H
|
||||
|
||||
#include "gif_lib.h"
|
||||
#include "gif_hash.h"
|
||||
|
||||
#define EXTENSION_INTRODUCER 0x21
|
||||
#define DESCRIPTOR_INTRODUCER 0x2c
|
||||
#define TERMINATOR_INTRODUCER 0x3b
|
||||
|
||||
#define LZ_MAX_CODE 4095 /* Biggest code possible in 12 bits. */
|
||||
#define LZ_BITS 12
|
||||
|
||||
#define FLUSH_OUTPUT 4096 /* Impossible code, to signal flush. */
|
||||
#define FIRST_CODE 4097 /* Impossible code, to signal first. */
|
||||
#define NO_SUCH_CODE 4098 /* Impossible code, to signal empty. */
|
||||
|
||||
#define FILE_STATE_WRITE 0x01
|
||||
#define FILE_STATE_SCREEN 0x02
|
||||
#define FILE_STATE_IMAGE 0x04
|
||||
#define FILE_STATE_READ 0x08
|
||||
|
||||
#define IS_READABLE(Private) (Private->FileState & FILE_STATE_READ)
|
||||
#define IS_WRITEABLE(Private) (Private->FileState & FILE_STATE_WRITE)
|
||||
|
||||
typedef struct GifFilePrivateType {
|
||||
GifWord FileState, FileHandle, /* Where all this data goes to! */
|
||||
BitsPerPixel, /* Bits per pixel (Codes uses at least this + 1). */
|
||||
ClearCode, /* The CLEAR LZ code. */
|
||||
EOFCode, /* The EOF LZ code. */
|
||||
RunningCode, /* The next code algorithm can generate. */
|
||||
RunningBits, /* The number of bits required to represent RunningCode. */
|
||||
MaxCode1, /* 1 bigger than max. possible code, in RunningBits bits. */
|
||||
LastCode, /* The code before the current code. */
|
||||
CrntCode, /* Current algorithm code. */
|
||||
StackPtr, /* For character stack (see below). */
|
||||
CrntShiftState; /* Number of bits in CrntShiftDWord. */
|
||||
unsigned long CrntShiftDWord; /* For bytes decomposition into codes. */
|
||||
unsigned long PixelCount; /* Number of pixels in image. */
|
||||
FILE *File; /* File as stream. */
|
||||
InputFunc Read; /* function to read gif input (TVT) */
|
||||
OutputFunc Write; /* function to write gif output (MRB) */
|
||||
GifByteType Buf[256]; /* Compressed input is buffered here. */
|
||||
GifByteType Stack[LZ_MAX_CODE]; /* Decoded pixels are stacked here. */
|
||||
GifByteType Suffix[LZ_MAX_CODE + 1]; /* So we can trace the codes. */
|
||||
GifPrefixType Prefix[LZ_MAX_CODE + 1];
|
||||
GifHashTableType *HashTable;
|
||||
GifBool gif89;
|
||||
} GifFilePrivateType;
|
||||
|
||||
#endif /* _GIF_LIB_PRIVATE_H */
|
||||
|
||||
/* end */
|
401
third_party/giflib/lib/gifalloc.c
vendored
401
third_party/giflib/lib/gifalloc.c
vendored
@ -1,401 +0,0 @@
|
||||
/*****************************************************************************
|
||||
|
||||
GIF construction tools
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "gif_lib.h"
|
||||
|
||||
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
|
||||
|
||||
/******************************************************************************
|
||||
Miscellaneous utility functions
|
||||
******************************************************************************/
|
||||
|
||||
/* return smallest bitfield size n will fit in */
|
||||
int
|
||||
GifBitSize(int n)
|
||||
{
|
||||
register int i;
|
||||
|
||||
for (i = 1; i <= 8; i++)
|
||||
if ((1 << i) >= n)
|
||||
break;
|
||||
return (i);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Color map object functions
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* Allocate a color map of given size; initialize with contents of
|
||||
* ColorMap if that pointer is non-NULL.
|
||||
*/
|
||||
ColorMapObject *
|
||||
GifMakeMapObject(int ColorCount, const GifColorType *ColorMap)
|
||||
{
|
||||
ColorMapObject *Object;
|
||||
|
||||
/*** FIXME: Our ColorCount has to be a power of two. Is it necessary to
|
||||
* make the user know that or should we automatically round up instead? */
|
||||
if (ColorCount != (1 << GifBitSize(ColorCount))) {
|
||||
return ((ColorMapObject *) NULL);
|
||||
}
|
||||
|
||||
Object = (ColorMapObject *)malloc(sizeof(ColorMapObject));
|
||||
if (Object == (ColorMapObject *) NULL) {
|
||||
return ((ColorMapObject *) NULL);
|
||||
}
|
||||
|
||||
Object->Colors = (GifColorType *)calloc(ColorCount, sizeof(GifColorType));
|
||||
if (Object->Colors == (GifColorType *) NULL) {
|
||||
free(Object);
|
||||
return ((ColorMapObject *) NULL);
|
||||
}
|
||||
|
||||
Object->ColorCount = ColorCount;
|
||||
Object->BitsPerPixel = GifBitSize(ColorCount);
|
||||
Object->SortFlag = false;
|
||||
|
||||
if (ColorMap != NULL) {
|
||||
memcpy((char *)Object->Colors,
|
||||
(char *)ColorMap, ColorCount * sizeof(GifColorType));
|
||||
}
|
||||
|
||||
return (Object);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
Free a color map object
|
||||
*******************************************************************************/
|
||||
void
|
||||
GifFreeMapObject(ColorMapObject *Object)
|
||||
{
|
||||
if (Object != NULL) {
|
||||
(void)free(Object->Colors);
|
||||
(void)free(Object);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void
|
||||
DumpColorMap(ColorMapObject *Object,
|
||||
FILE * fp)
|
||||
{
|
||||
if (Object != NULL) {
|
||||
int i, j, Len = Object->ColorCount;
|
||||
|
||||
for (i = 0; i < Len; i += 4) {
|
||||
for (j = 0; j < 4 && j < Len; j++) {
|
||||
(void)fprintf(fp, "%3d: %02x %02x %02x ", i + j,
|
||||
Object->Colors[i + j].Red,
|
||||
Object->Colors[i + j].Green,
|
||||
Object->Colors[i + j].Blue);
|
||||
}
|
||||
(void)fprintf(fp, "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*******************************************************************************
|
||||
Compute the union of two given color maps and return it. If result can't
|
||||
fit into 256 colors, NULL is returned, the allocated union otherwise.
|
||||
ColorIn1 is copied as is to ColorUnion, while colors from ColorIn2 are
|
||||
copied iff they didn't exist before. ColorTransIn2 maps the old
|
||||
ColorIn2 into the ColorUnion color map table./
|
||||
*******************************************************************************/
|
||||
ColorMapObject *
|
||||
GifUnionColorMap(const ColorMapObject *ColorIn1,
|
||||
const ColorMapObject *ColorIn2,
|
||||
GifPixelType ColorTransIn2[])
|
||||
{
|
||||
int i, j, CrntSlot, RoundUpTo, NewGifBitSize;
|
||||
ColorMapObject *ColorUnion;
|
||||
|
||||
/*
|
||||
* We don't worry about duplicates within either color map; if
|
||||
* the caller wants to resolve those, he can perform unions
|
||||
* with an empty color map.
|
||||
*/
|
||||
|
||||
/* Allocate table which will hold the result for sure. */
|
||||
ColorUnion = GifMakeMapObject(MAX(ColorIn1->ColorCount,
|
||||
ColorIn2->ColorCount) * 2, NULL);
|
||||
|
||||
if (ColorUnion == NULL)
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Copy ColorIn1 to ColorUnion.
|
||||
*/
|
||||
for (i = 0; i < ColorIn1->ColorCount; i++)
|
||||
ColorUnion->Colors[i] = ColorIn1->Colors[i];
|
||||
CrntSlot = ColorIn1->ColorCount;
|
||||
|
||||
/*
|
||||
* Potentially obnoxious hack:
|
||||
*
|
||||
* Back CrntSlot down past all contiguous {0, 0, 0} slots at the end
|
||||
* of table 1. This is very useful if your display is limited to
|
||||
* 16 colors.
|
||||
*/
|
||||
while (ColorIn1->Colors[CrntSlot - 1].Red == 0
|
||||
&& ColorIn1->Colors[CrntSlot - 1].Green == 0
|
||||
&& ColorIn1->Colors[CrntSlot - 1].Blue == 0)
|
||||
CrntSlot--;
|
||||
|
||||
/* Copy ColorIn2 to ColorUnion (use old colors if they exist): */
|
||||
for (i = 0; i < ColorIn2->ColorCount && CrntSlot <= 256; i++) {
|
||||
/* Let's see if this color already exists: */
|
||||
for (j = 0; j < ColorIn1->ColorCount; j++)
|
||||
if (memcmp (&ColorIn1->Colors[j], &ColorIn2->Colors[i],
|
||||
sizeof(GifColorType)) == 0)
|
||||
break;
|
||||
|
||||
if (j < ColorIn1->ColorCount)
|
||||
ColorTransIn2[i] = j; /* color exists in Color1 */
|
||||
else {
|
||||
/* Color is new - copy it to a new slot: */
|
||||
ColorUnion->Colors[CrntSlot] = ColorIn2->Colors[i];
|
||||
ColorTransIn2[i] = CrntSlot++;
|
||||
}
|
||||
}
|
||||
|
||||
if (CrntSlot > 256) {
|
||||
GifFreeMapObject(ColorUnion);
|
||||
return ((ColorMapObject *) NULL);
|
||||
}
|
||||
|
||||
NewGifBitSize = GifBitSize(CrntSlot);
|
||||
RoundUpTo = (1 << NewGifBitSize);
|
||||
|
||||
if (RoundUpTo != ColorUnion->ColorCount) {
|
||||
register GifColorType *Map = ColorUnion->Colors;
|
||||
|
||||
/*
|
||||
* Zero out slots up to next power of 2.
|
||||
* We know these slots exist because of the way ColorUnion's
|
||||
* start dimension was computed.
|
||||
*/
|
||||
for (j = CrntSlot; j < RoundUpTo; j++)
|
||||
Map[j].Red = Map[j].Green = Map[j].Blue = 0;
|
||||
|
||||
/* perhaps we can shrink the map? */
|
||||
if (RoundUpTo < ColorUnion->ColorCount)
|
||||
ColorUnion->Colors = (GifColorType *)realloc(Map,
|
||||
sizeof(GifColorType) * RoundUpTo);
|
||||
}
|
||||
|
||||
ColorUnion->ColorCount = RoundUpTo;
|
||||
ColorUnion->BitsPerPixel = NewGifBitSize;
|
||||
|
||||
return (ColorUnion);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
Apply a given color translation to the raster bits of an image
|
||||
*******************************************************************************/
|
||||
void
|
||||
GifApplyTranslation(SavedImage *Image, GifPixelType Translation[])
|
||||
{
|
||||
register int i;
|
||||
register int RasterSize = Image->ImageDesc.Height * Image->ImageDesc.Width;
|
||||
|
||||
for (i = 0; i < RasterSize; i++)
|
||||
Image->RasterBits[i] = Translation[Image->RasterBits[i]];
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Extension record functions
|
||||
******************************************************************************/
|
||||
int
|
||||
GifAddExtensionBlock(int *ExtensionBlockCount,
|
||||
ExtensionBlock **ExtensionBlocks,
|
||||
int Function,
|
||||
unsigned int Len,
|
||||
unsigned char ExtData[])
|
||||
{
|
||||
ExtensionBlock *ep;
|
||||
|
||||
if (*ExtensionBlocks == NULL)
|
||||
*ExtensionBlocks=(ExtensionBlock *)malloc(sizeof(ExtensionBlock));
|
||||
else
|
||||
*ExtensionBlocks = (ExtensionBlock *)realloc(*ExtensionBlocks,
|
||||
sizeof(ExtensionBlock) *
|
||||
(*ExtensionBlockCount + 1));
|
||||
|
||||
if (*ExtensionBlocks == NULL)
|
||||
return (GIF_ERROR);
|
||||
|
||||
ep = &(*ExtensionBlocks)[(*ExtensionBlockCount)++];
|
||||
|
||||
ep->Function = Function;
|
||||
ep->ByteCount=Len;
|
||||
ep->Bytes = (GifByteType *)malloc(ep->ByteCount);
|
||||
if (ep->Bytes == NULL)
|
||||
return (GIF_ERROR);
|
||||
|
||||
if (ExtData != NULL) {
|
||||
memcpy(ep->Bytes, ExtData, Len);
|
||||
}
|
||||
|
||||
return (GIF_OK);
|
||||
}
|
||||
|
||||
void
|
||||
GifFreeExtensions(int *ExtensionBlockCount,
|
||||
ExtensionBlock **ExtensionBlocks)
|
||||
{
|
||||
ExtensionBlock *ep;
|
||||
|
||||
if (*ExtensionBlocks == NULL)
|
||||
return;
|
||||
|
||||
for (ep = *ExtensionBlocks;
|
||||
ep < (*ExtensionBlocks + *ExtensionBlockCount);
|
||||
ep++)
|
||||
(void)free((char *)ep->Bytes);
|
||||
(void)free((char *)*ExtensionBlocks);
|
||||
*ExtensionBlocks = NULL;
|
||||
*ExtensionBlockCount = 0;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Image block allocation functions
|
||||
******************************************************************************/
|
||||
|
||||
/* Private Function:
|
||||
* Frees the last image in the GifFile->SavedImages array
|
||||
*/
|
||||
void
|
||||
FreeLastSavedImage(GifFileType *GifFile)
|
||||
{
|
||||
SavedImage *sp;
|
||||
|
||||
if ((GifFile == NULL) || (GifFile->SavedImages == NULL))
|
||||
return;
|
||||
|
||||
/* Remove one SavedImage from the GifFile */
|
||||
GifFile->ImageCount--;
|
||||
sp = &GifFile->SavedImages[GifFile->ImageCount];
|
||||
|
||||
/* Deallocate its Colormap */
|
||||
if (sp->ImageDesc.ColorMap != NULL) {
|
||||
GifFreeMapObject(sp->ImageDesc.ColorMap);
|
||||
sp->ImageDesc.ColorMap = NULL;
|
||||
}
|
||||
|
||||
/* Deallocate the image data */
|
||||
if (sp->RasterBits != NULL)
|
||||
free((char *)sp->RasterBits);
|
||||
|
||||
/* Deallocate any extensions */
|
||||
GifFreeExtensions(&sp->ExtensionBlockCount, &sp->ExtensionBlocks);
|
||||
|
||||
/*** FIXME: We could realloc the GifFile->SavedImages structure but is
|
||||
* there a point to it? Saves some memory but we'd have to do it every
|
||||
* time. If this is used in GifFreeSavedImages then it would be inefficient
|
||||
* (The whole array is going to be deallocated.) If we just use it when
|
||||
* we want to free the last Image it's convenient to do it here.
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
* Append an image block to the SavedImages array
|
||||
*/
|
||||
SavedImage *
|
||||
GifMakeSavedImage(GifFileType *GifFile, const SavedImage *CopyFrom)
|
||||
{
|
||||
if (GifFile->SavedImages == NULL)
|
||||
GifFile->SavedImages = (SavedImage *)malloc(sizeof(SavedImage));
|
||||
else
|
||||
GifFile->SavedImages = (SavedImage *)realloc(GifFile->SavedImages,
|
||||
sizeof(SavedImage) * (GifFile->ImageCount + 1));
|
||||
|
||||
if (GifFile->SavedImages == NULL)
|
||||
return ((SavedImage *)NULL);
|
||||
else {
|
||||
SavedImage *sp = &GifFile->SavedImages[GifFile->ImageCount++];
|
||||
memset((char *)sp, '\0', sizeof(SavedImage));
|
||||
|
||||
if (CopyFrom != NULL) {
|
||||
memcpy((char *)sp, CopyFrom, sizeof(SavedImage));
|
||||
|
||||
/*
|
||||
* Make our own allocated copies of the heap fields in the
|
||||
* copied record. This guards against potential aliasing
|
||||
* problems.
|
||||
*/
|
||||
|
||||
/* first, the local color map */
|
||||
if (sp->ImageDesc.ColorMap != NULL) {
|
||||
sp->ImageDesc.ColorMap = GifMakeMapObject(
|
||||
CopyFrom->ImageDesc.ColorMap->ColorCount,
|
||||
CopyFrom->ImageDesc.ColorMap->Colors);
|
||||
if (sp->ImageDesc.ColorMap == NULL) {
|
||||
FreeLastSavedImage(GifFile);
|
||||
return (SavedImage *)(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/* next, the raster */
|
||||
sp->RasterBits = (unsigned char *)malloc(sizeof(GifPixelType) *
|
||||
CopyFrom->ImageDesc.Height *
|
||||
CopyFrom->ImageDesc.Width);
|
||||
if (sp->RasterBits == NULL) {
|
||||
FreeLastSavedImage(GifFile);
|
||||
return (SavedImage *)(NULL);
|
||||
}
|
||||
memcpy(sp->RasterBits, CopyFrom->RasterBits,
|
||||
sizeof(GifPixelType) * CopyFrom->ImageDesc.Height *
|
||||
CopyFrom->ImageDesc.Width);
|
||||
|
||||
/* finally, the extension blocks */
|
||||
if (sp->ExtensionBlocks != NULL) {
|
||||
sp->ExtensionBlocks = (ExtensionBlock *)malloc(
|
||||
sizeof(ExtensionBlock) *
|
||||
CopyFrom->ExtensionBlockCount);
|
||||
if (sp->ExtensionBlocks == NULL) {
|
||||
FreeLastSavedImage(GifFile);
|
||||
return (SavedImage *)(NULL);
|
||||
}
|
||||
memcpy(sp->ExtensionBlocks, CopyFrom->ExtensionBlocks,
|
||||
sizeof(ExtensionBlock) * CopyFrom->ExtensionBlockCount);
|
||||
}
|
||||
}
|
||||
|
||||
return (sp);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
GifFreeSavedImages(GifFileType *GifFile)
|
||||
{
|
||||
SavedImage *sp;
|
||||
|
||||
if ((GifFile == NULL) || (GifFile->SavedImages == NULL)) {
|
||||
return;
|
||||
}
|
||||
for (sp = GifFile->SavedImages;
|
||||
sp < GifFile->SavedImages + GifFile->ImageCount; sp++) {
|
||||
if (sp->ImageDesc.ColorMap != NULL) {
|
||||
GifFreeMapObject(sp->ImageDesc.ColorMap);
|
||||
sp->ImageDesc.ColorMap = NULL;
|
||||
}
|
||||
|
||||
if (sp->RasterBits != NULL)
|
||||
free((char *)sp->RasterBits);
|
||||
|
||||
GifFreeExtensions(&sp->ExtensionBlockCount, &sp->ExtensionBlocks);
|
||||
}
|
||||
free((char *)GifFile->SavedImages);
|
||||
GifFile->SavedImages = NULL;
|
||||
}
|
||||
|
||||
/* end */
|
330
third_party/giflib/lib/quantize.c
vendored
330
third_party/giflib/lib/quantize.c
vendored
@ -1,330 +0,0 @@
|
||||
/*****************************************************************************
|
||||
|
||||
quantize.c - quantize a high resolution image into lower one
|
||||
|
||||
Based on: "Color Image Quantization for frame buffer Display", by
|
||||
Paul Heckbert SIGGRAPH 1982 page 297-307.
|
||||
|
||||
This doesn't really belong in the core library, was undocumented,
|
||||
and was removed in 4.2. Then it turned out some client apps were
|
||||
actually using it, so it was restored in 5.0.
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "gif_lib.h"
|
||||
#include "gif_lib_private.h"
|
||||
|
||||
#define ABS(x) ((x) > 0 ? (x) : (-(x)))
|
||||
|
||||
#define COLOR_ARRAY_SIZE 32768
|
||||
#define BITS_PER_PRIM_COLOR 5
|
||||
#define MAX_PRIM_COLOR 0x1f
|
||||
|
||||
static int SortRGBAxis;
|
||||
|
||||
typedef struct QuantizedColorType {
|
||||
GifByteType RGB[3];
|
||||
GifByteType NewColorIndex;
|
||||
long Count;
|
||||
struct QuantizedColorType *Pnext;
|
||||
} QuantizedColorType;
|
||||
|
||||
typedef struct NewColorMapType {
|
||||
GifByteType RGBMin[3], RGBWidth[3];
|
||||
unsigned int NumEntries; /* # of QuantizedColorType in linked list below */
|
||||
unsigned long Count; /* Total number of pixels in all the entries */
|
||||
QuantizedColorType *QuantizedColors;
|
||||
} NewColorMapType;
|
||||
|
||||
static int SubdivColorMap(NewColorMapType * NewColorSubdiv,
|
||||
unsigned int ColorMapSize,
|
||||
unsigned int *NewColorMapSize);
|
||||
static int SortCmpRtn(const void *Entry1, const void *Entry2);
|
||||
|
||||
/******************************************************************************
|
||||
Quantize high resolution image into lower one. Input image consists of a
|
||||
2D array for each of the RGB colors with size Width by Height. There is no
|
||||
Color map for the input. Output is a quantized image with 2D array of
|
||||
indexes into the output color map.
|
||||
Note input image can be 24 bits at the most (8 for red/green/blue) and
|
||||
the output has 256 colors at the most (256 entries in the color map.).
|
||||
ColorMapSize specifies size of color map up to 256 and will be updated to
|
||||
real size before returning.
|
||||
Also non of the parameter are allocated by this routine.
|
||||
This function returns GIF_OK if successful, GIF_ERROR otherwise.
|
||||
******************************************************************************/
|
||||
int
|
||||
GifQuantizeBuffer(unsigned int Width,
|
||||
unsigned int Height,
|
||||
int *ColorMapSize,
|
||||
GifByteType * RedInput,
|
||||
GifByteType * GreenInput,
|
||||
GifByteType * BlueInput,
|
||||
GifByteType * OutputBuffer,
|
||||
GifColorType * OutputColorMap) {
|
||||
|
||||
unsigned int Index, NumOfEntries;
|
||||
int i, j, MaxRGBError[3];
|
||||
unsigned int NewColorMapSize;
|
||||
long Red, Green, Blue;
|
||||
NewColorMapType NewColorSubdiv[256];
|
||||
QuantizedColorType *ColorArrayEntries, *QuantizedColor;
|
||||
|
||||
ColorArrayEntries = (QuantizedColorType *)malloc(
|
||||
sizeof(QuantizedColorType) * COLOR_ARRAY_SIZE);
|
||||
if (ColorArrayEntries == NULL) {
|
||||
return GIF_ERROR;
|
||||
}
|
||||
|
||||
for (i = 0; i < COLOR_ARRAY_SIZE; i++) {
|
||||
ColorArrayEntries[i].RGB[0] = i >> (2 * BITS_PER_PRIM_COLOR);
|
||||
ColorArrayEntries[i].RGB[1] = (i >> BITS_PER_PRIM_COLOR) &
|
||||
MAX_PRIM_COLOR;
|
||||
ColorArrayEntries[i].RGB[2] = i & MAX_PRIM_COLOR;
|
||||
ColorArrayEntries[i].Count = 0;
|
||||
}
|
||||
|
||||
/* Sample the colors and their distribution: */
|
||||
for (i = 0; i < (int)(Width * Height); i++) {
|
||||
Index = ((RedInput[i] >> (8 - BITS_PER_PRIM_COLOR)) <<
|
||||
(2 * BITS_PER_PRIM_COLOR)) +
|
||||
((GreenInput[i] >> (8 - BITS_PER_PRIM_COLOR)) <<
|
||||
BITS_PER_PRIM_COLOR) +
|
||||
(BlueInput[i] >> (8 - BITS_PER_PRIM_COLOR));
|
||||
ColorArrayEntries[Index].Count++;
|
||||
}
|
||||
|
||||
/* Put all the colors in the first entry of the color map, and call the
|
||||
* recursive subdivision process. */
|
||||
for (i = 0; i < 256; i++) {
|
||||
NewColorSubdiv[i].QuantizedColors = NULL;
|
||||
NewColorSubdiv[i].Count = NewColorSubdiv[i].NumEntries = 0;
|
||||
for (j = 0; j < 3; j++) {
|
||||
NewColorSubdiv[i].RGBMin[j] = 0;
|
||||
NewColorSubdiv[i].RGBWidth[j] = 255;
|
||||
}
|
||||
}
|
||||
|
||||
/* Find the non empty entries in the color table and chain them: */
|
||||
for (i = 0; i < COLOR_ARRAY_SIZE; i++)
|
||||
if (ColorArrayEntries[i].Count > 0)
|
||||
break;
|
||||
QuantizedColor = NewColorSubdiv[0].QuantizedColors = &ColorArrayEntries[i];
|
||||
NumOfEntries = 1;
|
||||
while (++i < COLOR_ARRAY_SIZE)
|
||||
if (ColorArrayEntries[i].Count > 0) {
|
||||
QuantizedColor->Pnext = &ColorArrayEntries[i];
|
||||
QuantizedColor = &ColorArrayEntries[i];
|
||||
NumOfEntries++;
|
||||
}
|
||||
QuantizedColor->Pnext = NULL;
|
||||
|
||||
NewColorSubdiv[0].NumEntries = NumOfEntries; /* Different sampled colors */
|
||||
NewColorSubdiv[0].Count = ((long)Width) * Height; /* Pixels */
|
||||
NewColorMapSize = 1;
|
||||
if (SubdivColorMap(NewColorSubdiv, *ColorMapSize, &NewColorMapSize) !=
|
||||
GIF_OK) {
|
||||
free((char *)ColorArrayEntries);
|
||||
return GIF_ERROR;
|
||||
}
|
||||
if ((int)NewColorMapSize < *ColorMapSize) {
|
||||
/* And clear rest of color map: */
|
||||
for (i = NewColorMapSize; i < *ColorMapSize; i++)
|
||||
OutputColorMap[i].Red = OutputColorMap[i].Green =
|
||||
OutputColorMap[i].Blue = 0;
|
||||
}
|
||||
|
||||
/* Average the colors in each entry to be the color to be used in the
|
||||
* output color map, and plug it into the output color map itself. */
|
||||
for (i = 0; i < (int)NewColorMapSize; i++) {
|
||||
if ((j = NewColorSubdiv[i].NumEntries) > 0) {
|
||||
QuantizedColor = NewColorSubdiv[i].QuantizedColors;
|
||||
Red = Green = Blue = 0;
|
||||
while (QuantizedColor) {
|
||||
QuantizedColor->NewColorIndex = i;
|
||||
Red += QuantizedColor->RGB[0];
|
||||
Green += QuantizedColor->RGB[1];
|
||||
Blue += QuantizedColor->RGB[2];
|
||||
QuantizedColor = QuantizedColor->Pnext;
|
||||
}
|
||||
OutputColorMap[i].Red = (GifByteType)((Red << (8 - BITS_PER_PRIM_COLOR)) / j);
|
||||
OutputColorMap[i].Green = (GifByteType)((Green << (8 - BITS_PER_PRIM_COLOR)) / j);
|
||||
OutputColorMap[i].Blue = (GifByteType)((Blue << (8 - BITS_PER_PRIM_COLOR)) / j);
|
||||
}
|
||||
}
|
||||
|
||||
/* Finally scan the input buffer again and put the mapped index in the
|
||||
* output buffer. */
|
||||
MaxRGBError[0] = MaxRGBError[1] = MaxRGBError[2] = 0;
|
||||
for (i = 0; i < (int)(Width * Height); i++) {
|
||||
Index = ((RedInput[i] >> (8 - BITS_PER_PRIM_COLOR)) <<
|
||||
(2 * BITS_PER_PRIM_COLOR)) +
|
||||
((GreenInput[i] >> (8 - BITS_PER_PRIM_COLOR)) <<
|
||||
BITS_PER_PRIM_COLOR) +
|
||||
(BlueInput[i] >> (8 - BITS_PER_PRIM_COLOR));
|
||||
Index = ColorArrayEntries[Index].NewColorIndex;
|
||||
OutputBuffer[i] = Index;
|
||||
if (MaxRGBError[0] < ABS(OutputColorMap[Index].Red - RedInput[i]))
|
||||
MaxRGBError[0] = ABS(OutputColorMap[Index].Red - RedInput[i]);
|
||||
if (MaxRGBError[1] < ABS(OutputColorMap[Index].Green - GreenInput[i]))
|
||||
MaxRGBError[1] = ABS(OutputColorMap[Index].Green - GreenInput[i]);
|
||||
if (MaxRGBError[2] < ABS(OutputColorMap[Index].Blue - BlueInput[i]))
|
||||
MaxRGBError[2] = ABS(OutputColorMap[Index].Blue - BlueInput[i]);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr,
|
||||
"Quantization L(0) errors: Red = %d, Green = %d, Blue = %d.\n",
|
||||
MaxRGBError[0], MaxRGBError[1], MaxRGBError[2]);
|
||||
#endif /* DEBUG */
|
||||
|
||||
free((char *)ColorArrayEntries);
|
||||
|
||||
*ColorMapSize = NewColorMapSize;
|
||||
|
||||
return GIF_OK;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
Routine to subdivide the RGB space recursively using median cut in each
|
||||
axes alternatingly until ColorMapSize different cubes exists.
|
||||
The biggest cube in one dimension is subdivide unless it has only one entry.
|
||||
Returns GIF_ERROR if failed, otherwise GIF_OK.
|
||||
*******************************************************************************/
|
||||
static int
|
||||
SubdivColorMap(NewColorMapType * NewColorSubdiv,
|
||||
unsigned int ColorMapSize,
|
||||
unsigned int *NewColorMapSize) {
|
||||
|
||||
int MaxSize;
|
||||
unsigned int i, j, Index = 0, NumEntries, MinColor, MaxColor;
|
||||
long Sum, Count;
|
||||
QuantizedColorType *QuantizedColor, **SortArray;
|
||||
|
||||
while (ColorMapSize > *NewColorMapSize) {
|
||||
/* Find candidate for subdivision: */
|
||||
MaxSize = -1;
|
||||
for (i = 0; i < *NewColorMapSize; i++) {
|
||||
for (j = 0; j < 3; j++) {
|
||||
if ((((int)NewColorSubdiv[i].RGBWidth[j]) > MaxSize) &&
|
||||
(NewColorSubdiv[i].NumEntries > 1)) {
|
||||
MaxSize = NewColorSubdiv[i].RGBWidth[j];
|
||||
Index = i;
|
||||
SortRGBAxis = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (MaxSize == -1)
|
||||
return GIF_OK;
|
||||
|
||||
/* Split the entry Index into two along the axis SortRGBAxis: */
|
||||
|
||||
/* Sort all elements in that entry along the given axis and split at
|
||||
* the median. */
|
||||
SortArray = (QuantizedColorType **)malloc(
|
||||
sizeof(QuantizedColorType *) *
|
||||
NewColorSubdiv[Index].NumEntries);
|
||||
if (SortArray == NULL)
|
||||
return GIF_ERROR;
|
||||
for (j = 0, QuantizedColor = NewColorSubdiv[Index].QuantizedColors;
|
||||
j < NewColorSubdiv[Index].NumEntries && QuantizedColor != NULL;
|
||||
j++, QuantizedColor = QuantizedColor->Pnext)
|
||||
SortArray[j] = QuantizedColor;
|
||||
|
||||
/*
|
||||
* Because qsort isn't stable, this can produce differing
|
||||
* results for the order of tuples depending on platform
|
||||
* details of how qsort() is implemented.
|
||||
*
|
||||
* We mitigate this problem by sorting on all three axes rather
|
||||
* than only the one specied by SortRGBAxis; that way the instability
|
||||
* can only become an issue if there are multiple color indices
|
||||
* referring to identical RGB tuples. Older versions of this
|
||||
* sorted on only the one axis.
|
||||
*/
|
||||
qsort(SortArray, NewColorSubdiv[Index].NumEntries,
|
||||
sizeof(QuantizedColorType *), SortCmpRtn);
|
||||
|
||||
/* Relink the sorted list into one: */
|
||||
for (j = 0; j < NewColorSubdiv[Index].NumEntries - 1; j++)
|
||||
SortArray[j]->Pnext = SortArray[j + 1];
|
||||
SortArray[NewColorSubdiv[Index].NumEntries - 1]->Pnext = NULL;
|
||||
NewColorSubdiv[Index].QuantizedColors = QuantizedColor = SortArray[0];
|
||||
free((char *)SortArray);
|
||||
|
||||
/* Now simply add the Counts until we have half of the Count: */
|
||||
Sum = NewColorSubdiv[Index].Count / 2 - QuantizedColor->Count;
|
||||
NumEntries = 1;
|
||||
Count = QuantizedColor->Count;
|
||||
while (QuantizedColor->Pnext != NULL &&
|
||||
(Sum -= QuantizedColor->Pnext->Count) >= 0 &&
|
||||
QuantizedColor->Pnext->Pnext != NULL) {
|
||||
QuantizedColor = QuantizedColor->Pnext;
|
||||
NumEntries++;
|
||||
Count += QuantizedColor->Count;
|
||||
}
|
||||
/* Save the values of the last color of the first half, and first
|
||||
* of the second half so we can update the Bounding Boxes later.
|
||||
* Also as the colors are quantized and the BBoxes are full 0..255,
|
||||
* they need to be rescaled.
|
||||
*/
|
||||
MaxColor = QuantizedColor->RGB[SortRGBAxis]; /* Max. of first half */
|
||||
/* coverity[var_deref_op] */
|
||||
MinColor = QuantizedColor->Pnext->RGB[SortRGBAxis]; /* of second */
|
||||
MaxColor <<= (8 - BITS_PER_PRIM_COLOR);
|
||||
MinColor <<= (8 - BITS_PER_PRIM_COLOR);
|
||||
|
||||
/* Partition right here: */
|
||||
NewColorSubdiv[*NewColorMapSize].QuantizedColors =
|
||||
QuantizedColor->Pnext;
|
||||
QuantizedColor->Pnext = NULL;
|
||||
NewColorSubdiv[*NewColorMapSize].Count = Count;
|
||||
NewColorSubdiv[Index].Count -= Count;
|
||||
NewColorSubdiv[*NewColorMapSize].NumEntries =
|
||||
NewColorSubdiv[Index].NumEntries - NumEntries;
|
||||
NewColorSubdiv[Index].NumEntries = NumEntries;
|
||||
for (j = 0; j < 3; j++) {
|
||||
NewColorSubdiv[*NewColorMapSize].RGBMin[j] =
|
||||
NewColorSubdiv[Index].RGBMin[j];
|
||||
NewColorSubdiv[*NewColorMapSize].RGBWidth[j] =
|
||||
NewColorSubdiv[Index].RGBWidth[j];
|
||||
}
|
||||
NewColorSubdiv[*NewColorMapSize].RGBWidth[SortRGBAxis] =
|
||||
NewColorSubdiv[*NewColorMapSize].RGBMin[SortRGBAxis] +
|
||||
NewColorSubdiv[*NewColorMapSize].RGBWidth[SortRGBAxis] - MinColor;
|
||||
NewColorSubdiv[*NewColorMapSize].RGBMin[SortRGBAxis] = MinColor;
|
||||
|
||||
NewColorSubdiv[Index].RGBWidth[SortRGBAxis] =
|
||||
MaxColor - NewColorSubdiv[Index].RGBMin[SortRGBAxis];
|
||||
|
||||
(*NewColorMapSize)++;
|
||||
}
|
||||
|
||||
return GIF_OK;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Routine called by qsort to compare two entries.
|
||||
*****************************************************************************/
|
||||
|
||||
static int
|
||||
SortCmpRtn(const void *Entry1,
|
||||
const void *Entry2) {
|
||||
QuantizedColorType *entry1 = (*((QuantizedColorType **) Entry1));
|
||||
QuantizedColorType *entry2 = (*((QuantizedColorType **) Entry2));
|
||||
|
||||
/* sort on all axes of the color space! */
|
||||
int hash1 = entry1->RGB[SortRGBAxis] * 256 * 256
|
||||
+ entry1->RGB[(SortRGBAxis+1) % 3] * 256
|
||||
+ entry1->RGB[(SortRGBAxis+2) % 3];
|
||||
int hash2 = entry2->RGB[SortRGBAxis] * 256 * 256
|
||||
+ entry2->RGB[(SortRGBAxis+1) % 3] * 256
|
||||
+ entry2->RGB[(SortRGBAxis+2) % 3];
|
||||
|
||||
return hash1 - hash2;
|
||||
}
|
||||
|
||||
/* end */
|
Loading…
x
Reference in New Issue
Block a user