view release on metacpan or search on metacpan
src/Source/LibWebP/src/utils/bit_writer.h
src/Source/LibWebP/src/utils/color_cache.h
src/Source/LibWebP/src/utils/endian_inl.h
src/Source/LibWebP/src/utils/filters.h
src/Source/LibWebP/src/utils/huffman.h
src/Source/LibWebP/src/utils/huffman_encode.h
src/Source/LibWebP/src/utils/quant_levels.h
src/Source/LibWebP/src/utils/quant_levels_dec.h
src/Source/LibWebP/src/utils/random.h
src/Source/LibWebP/src/utils/rescaler.h
src/Source/LibWebP/src/utils/thread.h
src/Source/LibWebP/src/utils/utils.bit_reader.c
src/Source/LibWebP/src/utils/utils.bit_writer.c
src/Source/LibWebP/src/utils/utils.color_cache.c
src/Source/LibWebP/src/utils/utils.filters.c
src/Source/LibWebP/src/utils/utils.h
src/Source/LibWebP/src/utils/utils.huffman.c
src/Source/LibWebP/src/utils/utils.huffman_encode.c
src/Source/LibWebP/src/utils/utils.quant_levels.c
src/Source/LibWebP/src/utils/utils.quant_levels_dec.c
src/Source/LibWebP/src/utils/utils.random.c
src/Source/LibWebP/src/utils/utils.rescaler.c
src/Source/LibWebP/src/utils/utils.thread.c
src/Source/LibWebP/src/utils/utils.utils.c
src/Source/LibWebP/src/webp/decode.h
src/Source/LibWebP/src/webp/demux.h
src/Source/LibWebP/src/webp/encode.h
src/Source/LibWebP/src/webp/format_constants.h
src/Source/LibWebP/src/webp/mux.h
src/Source/LibWebP/src/webp/mux_types.h
src/Source/LibWebP/src/webp/types.h
src/Source/MapIntrospector.h
src/Source/Metadata/Exif.cpp
src/Makefile.srcs view on Meta::CPAN
VER_MAJOR = 3
VER_MINOR = 17.0
SRCS = ./Source/FreeImage/BitmapAccess.cpp ./Source/FreeImage/ColorLookup.cpp ./Source/FreeImage/FreeImage.cpp ./Source/FreeImage/FreeImageC.c ./Source/FreeImage/FreeImageIO.cpp ./Source/FreeImage/GetType.cpp ./Source/FreeImage/MemoryIO.cpp ./Source/...
INCLS = ./Examples/OpenGL/TextureManager/TextureManager.h ./Examples/Plugin/PluginCradle.h ./Examples/Generic/FIIO_Mem.h ./Source/MapIntrospector.h ./Source/FreeImage - Copie.h ./Source/CacheFile.h ./Source/LibTIFF/tiffconf.vc.h ./Source/LibTIFF/tif_...
INCLUDE = -I. -ISource -ISource/Metadata -ISource/FreeImageToolkit -ISource/LibJPEG -ISource/LibPNG -ISource/LibTIFF4 -ISource/ZLib -ISource/LibOpenJPEG -ISource/OpenEXR -ISource/OpenEXR/Half -ISource/OpenEXR/Iex -ISource/OpenEXR/IlmImf -ISource/Open...
src/README.iphone view on Meta::CPAN
Makefile for iPhone
found on the web, see
http://robertcarlsen.net/2009/03/16/openframeworks-iphone-586
http://robertcarlsen.net/2009/03/25/openframeworks-iphone-libs-593
http://4u.jeffcrouse.info/of/
See also :
Makefile for XCode 4.6 and iOS SDK 6.1
http://sourceforge.net/p/freeimage/discussion/36109/thread/1f345192/
Building the FreeImage lib for PIE and armv7
http://forum.openframeworks.cc/t/building-the-freeimage-lib-for-pie-and-armv7/13714
-----------------------------------------------------------------------------
Run "make -f Makefile.iphone".
This should build both the iPhone and iPhone Simulator libraries into the "Dist" folder.
src/Source/FreeImage/Plugin.cpp view on Meta::CPAN
// =====================================================================
// Plugin System Initialization
// =====================================================================
void DLL_CALLCONV
FreeImage_Initialise(BOOL load_local_plugins_only) {
if (s_plugin_reference_count++ == 0) {
/*
Note: initialize all singletons here
in order to avoid race conditions with multi-threading
*/
// initialise the TagLib singleton
TagLib& s = TagLib::instance();
// internal plugin initialization
s_plugins = new(std::nothrow) PluginList;
if (s_plugins) {
src/Source/FreeImage/PluginPCX.cpp view on Meta::CPAN
contains a pointer to a pre-allocated Plugin structure
wherein pointers to the available plugin functions
has to be stored. The second parameter (int format_id) is an identification
number that the plugin may use to show plugin specific warning messages
or other information to the user. The plugin number
is generated by FreeImage and can differ everytime the plugin is
initialised.
If you want to create your own plugin you have to take some
rules into account. Plugin functions have to be compiled
__stdcall using the multithreaded c runtime libraries. Throwing
exceptions in plugin functions is allowed, as long as those exceptions
are being caught inside the same plugin. It is forbidden for a plugin
function to directly call FreeImage functions or to allocate memory
and pass it to the main DLL. Exception to this rule is the special file data
block that may be allocated the Open function. Allocating a FIBITMAP inside a
plugin can be using the function allocate_proc in the FreeImage structure,
which will allocate the memory using the DLL's c runtime library.
*/
void DLL_CALLCONV
src/Source/FreeImage/PluginWebP.cpp view on Meta::CPAN
throw FI_MSG_ERROR_DIB_MEMORY;
}
if(header_only) {
WebPFreeDecBuffer(output_buffer);
return dib;
}
// --- Set decoding options ---
// use multi-threaded decoding
decoder_config.options.use_threads = 1;
// set output color space
output_buffer->colorspace = bitstream->has_alpha ? MODE_BGRA : MODE_BGR;
// ---
// decode the input stream, taking 'config' into account.
webp_status = WebPDecode(data, data_size, &decoder_config);
if(webp_status != VP8_STATUS_OK) {
throw FI_MSG_ERROR_PARSING;
src/Source/LibJPEG/libjpeg.txt view on Meta::CPAN
Some applications need to use the JPEG library as an incremental memory-to-
memory filter: when the compressed data buffer is filled or emptied, they want
control to return to the outer loop, rather than expecting that the buffer can
be emptied or reloaded within the data source/destination manager subroutine.
The library supports this need by providing an "I/O suspension" mode, which we
describe in this section.
The I/O suspension mode is not a panacea: nothing is guaranteed about the
maximum amount of time spent in any one call to the library, so it will not
eliminate response-time problems in single-threaded applications. If you
need guaranteed response time, we suggest you "bite the bullet" and implement
a real multi-tasking capability.
To use I/O suspension, cooperation is needed between the calling application
and the data source or destination manager; you will always need a custom
source/destination manager. (Please read the previous section if you haven't
already.) The basic idea is that the empty_output_buffer() or
fill_input_buffer() routine is a no-op, merely returning FALSE to indicate
that it has done nothing. Upon seeing this, the JPEG library suspends
operation and returns to its caller. The surrounding application is
src/Source/LibJPEG/libjpeg.txt view on Meta::CPAN
being displayed. This has two benefits:
* You can limit buildup of unprocessed data in your input buffer.
* You can eliminate extra display passes by paying attention to the
state of the library's input processing.
The first of these benefits only requires interspersing calls to
jpeg_consume_input() with your display operations and any other processing
you may be doing. To avoid wasting cycles due to backtracking, it's best to
call jpeg_consume_input() only after a hundred or so new bytes have arrived.
This is discussed further under "I/O suspension", above. (Note: the JPEG
library currently is not thread-safe. You must not call jpeg_consume_input()
from one thread of control if a different library routine is working on the
same JPEG object in another thread.)
When input arrives fast enough that more than one new scan is available
before you start a new output pass, you may as well skip the output pass
corresponding to the completed scan. This occurs for free if you pass
cinfo.input_scan_number as the target scan number to jpeg_start_output().
The input_scan_number field is simply the index of the scan currently being
consumed by the input processor. You can ensure that this is up-to-date by
emptying the input buffer just before calling jpeg_start_output(): call
jpeg_consume_input() repeatedly until it returns JPEG_SUSPENDED or
JPEG_REACHED_EOI.
src/Source/LibJXR/common/include/wmspecstrings_strict.h view on Meta::CPAN
*************************************************************************/
#define __possibly_notnulltermiated __allowed(on_parameter_or_return)
/*************************************************************************
* Advanced macros
*
* __volatile
* The __volatile annotation identifies a global variable or
* structure field that:
* 1) is not declared volatile;
* 2) is accessed concurrently by multiple threads.
*
* The __deref_volatile annotation identifies a global variable
* or structure field that stores a pointer to some data that:
* 1) is not declared volatile;
* 2) is accessed concurrently by multiple threads.
*
* Prefast uses these annotations to find patterns of code that
* may result in unexpected re-fetching of the global variable
* into a local variable.
*
* We also provide two complimentary annotations __nonvolatile
* and __deref_nonvolatile that could be used to suppress Prefast
*
* re-fetching warnings on variables that are known either:
* 1) not to be in danger of being re-fetched or,
src/Source/LibPNG/CHANGES view on Meta::CPAN
Use png_malloc instead of png_zalloc to allocate palette in pngset.c
Updated makefile.ibmc
Added some typecasts to eliminate gcc 3.0 warnings. Changed prototypes
of png_write_oFFS width and height from png_uint_32 to png_int_32.
Updated example.c
Revised prototypes for png_debug_malloc and png_debug_free in pngtest.c
Version 1.2.0beta5 [August 8, 2001]
Revised contrib/gregbook
Revised makefile.gcmmx
Revised pnggccrd.c to conditionally compile some thread-unsafe code only
when PNG_THREAD_UNSAFE_OK is defined.
Added tests to prevent pngwutil.c from writing a bKGD or tRNS chunk with
value exceeding 2^bit_depth-1
Revised makefile.sgi and makefile.sggcc
Replaced calls to fprintf(stderr,...) with png_warning() in pnggccrd.c
Removed restriction that do_invert_mono only operate on 1-bit opaque files
Version 1.2.0 [September 1, 2001]
Changed a png_warning() to png_debug() in pnggccrd.c
Fixed contrib/gregbook/rpng-x.c, rpng2-x.c to avoid crash with XFreeGC().
src/Source/LibPNG/INSTALL view on Meta::CPAN
After you have built libpng, the definitions that were recorded in
pnglibconf.h are available to your application (pnglibconf.h is included
in png.h and gets installed alongside png.h and pngconf.h in your
$PREFIX/include directory). Do not edit pnglibconf.h after you have built
libpng, because than the settings would not accurately reflect the settings
that were used to build libpng.
XV. Configuring libpng for multiprocessing
Libpng uses setjmp()/longjmp() for error handling. Unfortunately setjmp()
is known to be not thread-safe on some platforms and we don't know of
any platform where it is guaranteed to be thread-safe. Therefore, if
your application is going to be using multiple threads, you should
configure libpng with PNG_NO_SETJMP in your pngusr.dfa file, with
-DPNG_NO_SETJMP on your compile line, or with
#undef PNG_SETJMP_SUPPORTED
in your pnglibconf.h or pngusr.h.
XVI. Other sources of information about libpng:
Further information can be found in the README and libpng-manual.txt
src/Source/LibPNG/libpng-manual.txt view on Meta::CPAN
Libpng uses zlib for its compression and decompression of PNG files.
Further information about zlib, and the latest version of zlib, can
be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
The zlib compression utility is a general purpose utility that is
useful for more than PNG files, and can be used without libpng.
See the documentation delivered with zlib for more details.
You can usually find the source files for the zlib utility wherever you
find the libpng source files.
Libpng is thread safe, provided the threads are using different
instances of the structures. Each thread should have its own
png_struct and png_info instances, and thus its own image.
Libpng does not protect itself against two threads using the
same instance of a structure.
II. Structures
There are two main structures that are important to libpng, png_struct
and png_info. Both are internal structures that are no longer exposed
in the libpng interface (as of libpng 1.5.0).
The png_info structure is designed to provide information about the
PNG file. At one time, the fields of png_info were intended to be
src/Source/LibPNG/libpng-manual.txt view on Meta::CPAN
were added to the library.
We implemented support for I/O states by adding png_ptr member io_state
and functions png_get_io_chunk_name() and png_get_io_state() in pngget.c
We added PNG_TRANSFORM_GRAY_TO_RGB to the available high-level
input transforms.
Checking for and reporting of errors in the IHDR chunk is more thorough.
Support for global arrays was removed, to improve thread safety.
Some obsolete/deprecated macros and functions have been removed.
Typecasted NULL definitions such as
#define png_voidp_NULL (png_voidp)NULL
were eliminated. If you used these in your application, just use
NULL instead.
The png_struct and info_struct members "trans" and "trans_values" were
changed to "trans_alpha" and "trans_color", respectively.
src/Source/LibPNG/libpng.3 view on Meta::CPAN
Libpng uses zlib for its compression and decompression of PNG files.
Further information about zlib, and the latest version of zlib, can
be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
The zlib compression utility is a general purpose utility that is
useful for more than PNG files, and can be used without libpng.
See the documentation delivered with zlib for more details.
You can usually find the source files for the zlib utility wherever you
find the libpng source files.
Libpng is thread safe, provided the threads are using different
instances of the structures. Each thread should have its own
png_struct and png_info instances, and thus its own image.
Libpng does not protect itself against two threads using the
same instance of a structure.
.SH II. Structures
There are two main structures that are important to libpng, png_struct
and png_info. Both are internal structures that are no longer exposed
in the libpng interface (as of libpng 1.5.0).
The png_info structure is designed to provide information about the
PNG file. At one time, the fields of png_info were intended to be
src/Source/LibPNG/libpng.3 view on Meta::CPAN
were added to the library.
We implemented support for I/O states by adding png_ptr member io_state
and functions png_get_io_chunk_name() and png_get_io_state() in pngget.c
We added PNG_TRANSFORM_GRAY_TO_RGB to the available high-level
input transforms.
Checking for and reporting of errors in the IHDR chunk is more thorough.
Support for global arrays was removed, to improve thread safety.
Some obsolete/deprecated macros and functions have been removed.
Typecasted NULL definitions such as
#define png_voidp_NULL (png_voidp)NULL
were eliminated. If you used these in your application, just use
NULL instead.
The png_struct and info_struct members "trans" and "trans_values" were
changed to "trans_alpha" and "trans_color", respectively.
src/Source/LibPNG/pngerror.c view on Meta::CPAN
#ifdef PNG_SETJMP_SUPPORTED
if (png_ptr != NULL && png_ptr->longjmp_fn != NULL &&
png_ptr->jmp_buf_ptr != NULL)
png_ptr->longjmp_fn(*png_ptr->jmp_buf_ptr, val);
#else
PNG_UNUSED(png_ptr)
PNG_UNUSED(val)
#endif
/* If control reaches this point, png_longjmp() must not return. The only
* choice is to terminate the whole process (or maybe the thread); to do
* this the ANSI-C abort() function is used unless a different method is
* implemented by overriding the default configuration setting for
* PNG_ABORT().
*/
PNG_ABORT();
}
#ifdef PNG_WARNINGS_SUPPORTED
/* This function is called when there is a warning, but the library thinks
* it can continue anyway. Replacement functions don't have to do anything
src/Source/LibRawLite/Changelog.txt view on Meta::CPAN
2011-01-15 Alex Tutubalin <lexa@lexa.ru>
* Fallback to old huffman decoder for Sony files with unspecified
data length (Sony A100)
* Fixed incomplete data fields reset in LibRaw::recycle()
* LibRaw 0.13.0-Beta3
2011-01-13 Alex Tutubalin <lexa@lexa.ru>
* Better parsing of unknown command-line params in dcraw_emu sample
* Brigtness table in ahd_demosaic is calculated in reversed order
to prevent possible (very unlikely) multithreaded app problem.
* New exposure correction code based on linear-cubic root combination.
New working correction range is from 0.25 (-2 stops) to 8 (+3 stops)
* LibRaw 0.13.0-Beta2
2011-01-10 Alex Tutubalin <lexa@lexa.ru>
* Fixed file extension in half_mt.c sample
2011-01-10 Alex Tutubalin <lexa@lexa.ru>
* Three patches provided by Jacques Desmis:
- Exposure correction before demosaic (demosaic pack GPL3)
src/Source/LibRawLite/Changelog.txt view on Meta::CPAN
* Current implementation of dcraw_emu sample allows only selection
of demosaic method (via -q) options. All other parameters change
will be implemented later.
* LibRaw 0.12-alpha1
2010-11-11 Alex Tutubalin <lexa@lexa.ru>
* Imported 0.11(2) version changes:
+ Fixed dcraw_emu command line processing code
+ OpenMP is completely disabled on MacOS X if compiled with -pthread
due to well-known MacOS problem.
+ dcraw 9.05 (1.439) imported, many new cameras supported:
Canon: G12, SX120, 60D,
Hasselblad H4D, Nokia X2, Olympus E-5,
Nikon: D3100, D7000, P7000,
Panasonic: FZ40, FZ100, LX5,
Pentax: K-r, K-5, 645D,
Samsung GX20, WB2000
* LibRaw 0.12-alpha0
src/Source/LibRawLite/Changelog.txt view on Meta::CPAN
* simple_dcraw sample simplified: no mmap code
* LibRaw 0.11-Beta5
2010-10-08 Alex Tutubalin <lexa@lexa.ru>
* Fixed bug in exception handling in OpenMP sections in
AHD interpolation code.
* LibRaw_datastreams are now C++ iostreams based instead of old
plain FILE* calls.
LibRaw::open_file() in multithreaded programs are WAY faster
on many OSes (Linux, Windows, MacOSX) because of no extra locks.
* all client code should be recompiled due to internals change.
* LibRaw 0.11-Beta4
2010-10-01 Alex Tutubalin <lexa@lexa.ru>
* Fixed bug in LibRaw::dcraw_process() code: for half_size
processing, params.four_color_rgb was set to 1 internally
src/Source/LibRawLite/Changelog.txt view on Meta::CPAN
extraction when called before metadata analysis.
Thanks to Albert Astalis Cid.
* LibRaw 0.6.4 Release
2008-12-11 Alex Tutubalin <lexa@lexa.ru>
* Imported new edition of dcraw 8.89 (version 1.409)
* Nikon NEF decoding changed
* LibRaw 0.6.3 Release
2008-12-03 Alex Tutubalin <lexa@lexa.ru>
* fixed bug in Panasonic .RW2 processing (only for thread-safe version,
single-threaded version was not affected)
* All client code should be recompiled
* LibRaw 0.6.2 Release
2008-12-03 Alex Tutubalin <lexa@lexa.ru>
* Imported dcraw 8.89 (version 1.407)
* New cameras:
Canon G10 & 5D Mk2, Leaf AFi 7, Leica D-LUX4, Panasonic FX150 & G1,
Fujifilm IS Pro,
* Changed camera support (color conversion tables):
Canon 50D, Nikon D90 & P6000, Panasonic LX3 & FZ28, Sony A900
src/Source/LibRawLite/Changelog.txt view on Meta::CPAN
Camera RGB->XYZ conversion.
* All client code should be recompiled
* LibRaw 0.6.1 Release
2008-09-18 Alex Tutubalin <lexa@lexa.ru>
* dcraw 8.88 imported:
- new cameras (Canon 50D, Sony A900, Nikon D90 & P6000,
Panasonic LX3 FZ28)
- new method of black point subtraction for Canon cameras,
preliminary banding supression.
* Stack memory usage lowered (some thread data moved to dynamic
memory)
* some patches for MSVC compatibility
* LibRaw 0.6.0 Release
2008-09-16 Alex Tutubalin <lexa@lexa.ru>
* Enum definitions changed to make gcc -pedantic happy
* Compiler/preprocessor flags does not affects LibRaw class field set
(i.e. structure for thread local storage is always allocated)
* Default library compilation mode (i.e. sources imported in another
project) is thread-safe
2008-09-14 Alex Tutubalin <lexa@lexa.ru>
* OpenMP support for most CPU consuming steps of processing:
ahd_interpolation. wavelet_denoise
10-30% speed-up of full processing pipe on 2-core CPU
OpenMP supported only on gcc (Linux/FreeBSD and Mac OS X)
* LibRaw 0.6.0-Beta-1
2008-09-10 Alex Tutubalin <lexa@lexa.ru>
src/Source/LibRawLite/dcraw/dcraw.c view on Meta::CPAN
#if !defined(uchar)
#define uchar unsigned char
#endif
#if !defined(ushort)
#define ushort unsigned short
#endif
/*
All global variables are defined here, and all functions that
access them are prefixed with "CLASS". Note that a thread-safe
C++ class cannot have non-const static local variables.
*/
FILE *ifp, *ofp;
short order;
const char *ifname;
char *meta_data, xtrans[6][6], xtrans_abs[6][6];
char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64],software[64];
float flash_used, canon_ev, iso_speed, shutter, aperture, focal_len;
time_t timestamp;
off_t strip_offset, data_offset;
src/Source/LibRawLite/dcraw/dcraw.c view on Meta::CPAN
homo = (char (*)[TS][2]) (buffer + 24*TS*TS);
#ifdef LIBRAW_LIBRARY_BUILD
#ifdef LIBRAW_USE_OPENMP
#pragma omp for schedule(dynamic)
#endif
#endif
for (top=2; top < height-5; top += TS-6){
#ifdef LIBRAW_LIBRARY_BUILD
#ifdef LIBRAW_USE_OPENMP
if(0== omp_get_thread_num())
#endif
if(callbacks.progress_cb) {
int rr = (*callbacks.progress_cb)(callbacks.progresscb_data,LIBRAW_PROGRESS_INTERPOLATE,top-2,height-7);
if(rr)
terminate_flag = 1;
}
#endif
for (left=2; !terminate_flag && (left < width-5); left += TS-6) {
ahd_interpolate_green_h_and_v(top, left, rgb);
ahd_interpolate_r_and_b_and_convert_to_cielab(top, left, rgb, lab);
src/Source/LibRawLite/internal/dcraw_common.cpp view on Meta::CPAN
homo = (char (*)[TS][2]) (buffer + 24*TS*TS);
#ifdef LIBRAW_LIBRARY_BUILD
#ifdef LIBRAW_USE_OPENMP
#pragma omp for schedule(dynamic)
#endif
#endif
for (top=2; top < height-5; top += TS-6){
#ifdef LIBRAW_LIBRARY_BUILD
#ifdef LIBRAW_USE_OPENMP
if(0== omp_get_thread_num())
#endif
if(callbacks.progress_cb) {
int rr = (*callbacks.progress_cb)(callbacks.progresscb_data,LIBRAW_PROGRESS_INTERPOLATE,top-2,height-7);
if(rr)
terminate_flag = 1;
}
#endif
for (left=2; !terminate_flag && (left < width-5); left += TS-6) {
ahd_interpolate_green_h_and_v(top, left, rgb);
ahd_interpolate_r_and_b_and_convert_to_cielab(top, left, rgb, lab);
src/Source/LibTIFF4/ChangeLog view on Meta::CPAN
previously set this field to some other value and the hook was
initialized accordingly. As per bug
http://bugzilla.maptools.org/show_bug.cgi?id=2035
2010-07-01 Andrey Kiselev <dron@ak4719.spb.edu>
* tools/tiffgt.c: Properly check the raster buffer allocations for
integer overflows. As per bug
http://bugzilla.maptools.org/show_bug.cgi?id=2108
* m4/acinclude.m4: Update GL/GLU/GLUt/Pthread macros from the
upstream.
* libtiff/{tif_aux.c, tif_strip.c, tif_tile.c, tiffiop.h}: Move
multiply_32() and multiply_64() functions into tif_aux.c file and
rename them into _TIFFMultiply32() and _TIFFMultiply64() respectively.
2010-06-30 Andrey Kiselev <dron@ak4719.spb.edu>
* tools/tiff2pdf.c: Better generation of ID field in
t2p_write_pdf_trailer(). Get rid of GCC aliasing warnings.
src/Source/LibTIFF4/tif_config.h.in view on Meta::CPAN
/* Define to 1 if you have the <OpenGL/glu.h> header file. */
#undef HAVE_OPENGL_GLU_H
/* Define to 1 if you have the <OpenGL/gl.h> header file. */
#undef HAVE_OPENGL_GL_H
/* Define to 1 if you have the `pow' function. */
#undef HAVE_POW
/* Define if you have POSIX threads libraries and header files. */
#undef HAVE_PTHREAD
/* Define to 1 if you have the <search.h> header file. */
#undef HAVE_SEARCH_H
/* Define to 1 if you have the `setmode' function. */
#undef HAVE_SETMODE
/* Define to 1 if you have the `sqrt' function. */
#undef HAVE_SQRT
src/Source/LibWebP/ChangeLog view on Meta::CPAN
b8984f3 gif2webp: fix compile with giflib 5.1.0
222f9b1 gif2webp: simplify giflib version checking
d2cc61b Extend MakeARGB32() to accept Alpha channel.
4595b62 Merge "use explicit size of kErrorMessages[] arrays"
157de01 Merge "Actuate memory stats for PRINT_MEMORY_INFO"
fbda2f4 JPEG decoder: delay conversion to YUV to WebPEncode() call
0b747b1 use explicit size of kErrorMessages[] arrays
3398d81 Actuate memory stats for PRINT_MEMORY_INFO
6f3202b Merge "move WebPPictureInit to picture.c"
6c347bb move WebPPictureInit to picture.c
fb3acf1 fix configure message for multi-thread
40b086f configure: check for _beginthreadex
1549d62 reorder the YUVA->ARGB and ARGB->YUVA functions correctly
c6461bf Merge "extract colorspace code from picture.c into picture_csp.c"
736f2a1 extract colorspace code from picture.c into picture_csp.c
645daa0 Merge "configure: check for -Wformat-security"
abafed8 configure: check for -Wformat-security
fbadb48 split monolithic picture.c into picture_{tools,psnr,rescale}.c
c76f07e dec_neon/TransformAC3: initialize vector w/vcreate
bb4fc05 gif2webp: Allow single-frame animations
46fd44c thread: remove harmless race on status_ in End()
5a1a726 Merge "configure: check for __builtin_bswapXX()"
6781423 configure: check for __builtin_bswapXX()
6450c48 configure: fix iOS builds
6422e68 VP8LFillBitWindow: enable fast path for 32-bit builds
4f7f52b VP8LFillBitWindow: respect WEBP_FORCE_ALIGNED
e458bad endian_inl.h: implement htoleXX with BSwapXX
f2664d1 endian_inl.h: add BSwap16
6fbf534 Merge "configure: add --enable-aligned"
dc0f479 configure: add --enable-aligned
9cc69e2 Merge "configure: support WIC + OpenGL under mingw64"
src/Source/LibWebP/ChangeLog view on Meta::CPAN
824eab1 fix (uncompiled) typo
1f3e5f1 remove unused 'shift' argument and QFIX2 define
8e86705 Merge "VP8LoadNewBytes: use __builtin_bswap32 if available"
1b6a263 Merge "Fix handling of weird GIF with canvas dimension 0x0"
1da3d46 VP8LoadNewBytes: use __builtin_bswap32 if available
1582e40 Fix handling of weird GIF with canvas dimension 0x0
b8811da Merge "rename interface -> winterface"
db8b8b5 Fix logic in the GIF LOOP-detection parsing
25aaddc rename interface -> winterface
5584d9d make WebPSetWorkerInterface() check its arguments
a9ef7ef Merge "cosmetics: update thread.h comments"
c6af999 Merge "dust up the help message"
0a8b886 dust up the help message
a9cf319 cosmetics: update thread.h comments
27bfeee QuantizeBlock SSE2 Optimization:
2bc0dc3 Merge "webpmux: warn when odd frame offsets are used"
3114ebe Merge changes Id8edd3c1,Id418eb96,Ide05e3be
c072663 webpmux: warn when odd frame offsets are used
c5c6b40 Merge "add alpha dithering for lossy"
d514678 examples/Android.mk: add cwebp
ca0fa7c Android.mk: move dwebp to examples/Android.mk
73d8fca Android.mk: add ENABLE_SHARED flag
6e93317 muxread: fix out of bounds read
8b0f6a4 Makefile.vc: fix CFLAGS assignment w/HAVE_AVX2=1
bbe32df add alpha dithering for lossy
7902076 Merge "make error-code reporting consistent upon malloc failure"
77bf441 make error-code reporting consistent upon malloc failure
7a93c00 **/Makefile.am: remove unused AM_CPPFLAGS
24e3080 Add an interface abstraction to the WebP worker thread implementation
d6cd635 Merge "fix orig_rect==NULL case"
2bfd1ff fix orig_rect==NULL case
059e21c Merge "configure: move config.h to src/webp/config.h"
f05fe00 properly report back encoding error code in WebPFrameCacheAddFrame()
32b3137 configure: move config.h to src/webp/config.h
90090d9 Merge changes I7c675e51,I84f7d785
ae7661b makefiles: define WEBP_HAVE_AVX2 when appropriate
69fce2e remove the special casing for res->first in VP8SetResidualCoeffs
6e61a3a configure: test for -msse2
b9d2efc rename upsampling_mips32.c to yuv_mips32.c
src/Source/LibWebP/ChangeLog view on Meta::CPAN
dd438c9 MIPS: MIPS32r1: Optimization of some simple point-sampling functions. PATCH [6/6]
5352091 Added support for calling sampling functions via pointers.
d16c697 MIPS: MIPS32r1: Optimization of filter functions. PATCH [5/6]
04336fc MIPS: MIPS32r1: Optimization of function TransformOne. PATCH [4/6]
92d8fc7 MIPS: MIPS32r1: Optimization of function WebPRescalerImportRow. PATCH [3/6]
bbc23ff parse one row of intra modes altogether
a2f608f Merge "MIPS: MIPS32r1: Optimization of function WebPRescalerExportRow. [2/6]"
8823085 MIPS: MIPS32r1: Optimization of function WebPRescalerExportRow. [2/6]
c5a5b02 decode mt+incremental: fix segfault in debug builds
9882b2f always use fast-analysis for all methods.
000adac Merge "autoconf: update ax_pthread.m4"
2d2fc37 update .gitignore
5bf4255 Merge "Make it possible to avoid automagic dependencies"
c1cb193 disable NEON for arm64 platform
73a304e Make it possible to avoid automagic dependencies
4d493f8 MIPS: MIPS32r1: Decoder bit reader function optimized. PATCH [1/6]
c741183 make WebPCleanupTransparentArea work with argb picture
5da1855 add a decoding option to flip image vertically
00c3c4e Merge "add man/vwebp.1"
2c6bb42 add man/vwebp.1
ea59a8e Merge "Merge tag 'v0.4.0'"
7574bed fix comments related to array sizes
0b5a90f dwebp.1: fix option formatting
effcb0f Merge tag 'v0.4.0'
7c76255 autoconf: update ax_pthread.m4
fff2a11 make -short work with -print_ssim, -print_psnr, etc.
68e7901 update ChangeLog (tag: v0.4.0-rc1, tag: v0.4.0, origin/0.4.0, 0.4.0)
256e433 update NEWS description with new general features
2962534 Merge "gif2webp: don't use C99 %zu" into 0.4.0
3b9f9dd gif2webp: don't use C99 %zu
b5b2e3c cwebp: fix metadata output w/lossy+alpha
ad26df1 makefile.unix: clean up libgif2webp_util.a
c3b4557 update Changelog
ca84112 Merge "bump version to 0.4.0" into 0.4.0
8c524db bump version to 0.4.0
src/Source/LibWebP/ChangeLog view on Meta::CPAN
f7fc4bc dec/webp.c: don't wait for data before reporting w/h
66a32af Merge "NEON speed up"
26d842e NEON speed up
f307f98 Merge "webpmux: let -- stop parameter parsing"
fe051da Merge "README: add a section on gif2webp"
6fd2bd6 Merge "manpage pedantry"
4af1900 README: add a section on gif2webp
6f36ade manpage pedantry
f9016cb README: update dwebp options
b4fa0a4 webpmux: let -- stop parameter parsing
a9a20ac gif2webp: Add a multi-threaded encode option
495bef4 fix bug in TrellisQuantize
605a712 simplify __cplusplus ifdef
33109f9 Merge "drop: ifdef __cplusplus checks from C files"
7f9de0b Merge changes I994a5587,I8467bb71,I13b50688,I1e2c9c7b
5459030 gif2webp: let -- stop parameter parsing
a4b0aa0 vwebp: let -- stop parameter parsing
98af68f cwebp: let -- stop parameter parsing
a33831e dwebp: let -- stop parameter parsing
3630124 add some checks on error paths
ce4c713 Merge "autoconf: add --disable-wic"
src/Source/LibWebP/ChangeLog view on Meta::CPAN
ac0bf95 small clean-up in ExpandMatrix()
1939607 rename libwebp.i -> libwebp.swig
43148b6 filtering: precompute ilimit and hev_threshold
18f992e simplify f_inner calculation a little
241d11f add missing const
86c0031 add a 'format' field to WebPBitstreamFeatures
dde91fd Demux: Correct the extended format validation
5d6c5bd add entry for '-resize' option in cwebp's man
7c098d1 Use some gamma-curve range compression when computing U/V average
0b2b050 Use deterministic random-dithering during RGB->YUV conversion
8a2fa09 Add a second multi-thread method
7d6f2da Merge "up to 20% faster multi-threaded decoding"
266f63e Merge "libwebp.jar: build w/Java 1.6 for Android compat"
0532149 up to 20% faster multi-threaded decoding
38efdc2 Simplify the gif2webp tool: move the optimization details to util
de89951 libwebp.jar: build w/Java 1.6 for Android compat
cb22155 Decode a full row of bitstream before reconstructing
dca8a4d Merge "NEON/simple loopfilter: avoid q4-q7 registers"
9e84d90 Merge "NEON/TransformWHT: avoid q4-q7 registers"
fc10249 NEON/simple loopfilter: avoid q4-q7 registers
2f09d63 NEON/TransformWHT: avoid q4-q7 registers
77585a2 Merge "use a macrofunc for setting NzCoeffs bits"
d155507 Merge "use HINT_GRAPH as image_hint for gif source"
9c56164 Merge "only print GIF_DISPOSE_WARNING once"
src/Source/LibWebP/ChangeLog view on Meta::CPAN
80b54e1 allow search with token buffer loop and fix PARTITION0 problem
b7d4e04 add VP8EstimateTokenSize()
10fddf5 enc/quant.c: silence a warning
399cd45 Merge "fix compile error on ARM/gcc"
9f24519 encoder: misc rate-related fixes
c663bb2 Merge "simplify VP8IteratorSaveBoundary() arg passing"
fa46b31 Demux.h: Correct a method name reference
f8398c9 fix compile error on ARM/gcc
f691f0e simplify VP8IteratorSaveBoundary() arg passing
42542be up to 6% faster encoding with clang compiler
93402f0 multi-threaded segment analysis
7e2d659 Merge "remove the PACK() bit-packing tricks"
c13fecf remove the PACK() bit-packing tricks
2fd091c Merge "use NULL for lf_stats_ testing, not bool"
b11c9d6 dwebp: use default dct_method
4bb8465 Merge "(de)mux.h: wrap pseudo-code in /* */"
cfb56b1 make -pass option work with token buffers
5416aab (de)mux.h: wrap pseudo-code in /* */
35dba33 use NULL for lf_stats_ testing, not bool
733a7fa enc->Iterator memory cleanup
e81fac8 Add support for "no blend" in webpmux binary
src/Source/LibWebP/ChangeLog view on Meta::CPAN
a2f5f73 Merge "Support for "Do not blend" in mux and demux libraries"
e081f2f Pack code & extra_bits to Struct (VP8LPrefixCode).
6284854 Support for "Do not blend" in mux and demux libraries
f486aaa Merge "slightly faster ParseIntraMode"
d171863 slightly faster ParseIntraMode
3ceca8a bit_reader.h: cosmetics
69257f7 Create LUT for PrefixEncode.
988b708 add WebPWorkerExecute() for convenient bypass
06e2498 Merge "VP8EncIterator clean-up"
de4d4ad VP8EncIterator clean-up
7bbe952 Merge "cosmetics: thread.c: drop a redundant comment"
da41148 cosmetics: thread.c: drop a redundant comment
feb4b6e thread.h: #ifdef when checking WEBP_USE_THREAD
8924a3a thread.c: drop WebPWorker prefix from static funcs
1aed8f2 Merge "fix indent"
4038ed1 fix indent
1693fd9 Demux: A new state WEBP_DEMUX_PARSE_ERROR
8dcae8b fix rescaling-with-alpha inaccuracy
11249ab Merge changes I9b4dc36c,I4e0eef4d
52508a1 Mux: support parsing unknown chunks within a frame/fragment.
05db057 WebPMuxSetChunk: remove unused variable
8ba1bf6 Stricter check for presence of alpha when writing lossless images
a03c351 Demux: WebPIterator now also denotes if the frame has alpha.
6df743a Decoder: handle fragments case correctly too.
src/Source/LibWebP/ChangeLog view on Meta::CPAN
bc03980 Merge "autoconf: normalize experimental define" into 0.3.0
d1e21b1 Remove 'status: experimental' from container spec
7681bb9 webpmux binary: tiny style fix
a3dd3d0 avoid installing example_util.h
252320e demux: disable fragment parsing
537bde0 autoconf: normalize experimental define
5e338e0 Merge changes I33e8a613,I8e8a7b44 into 0.3.0
d9d0ea1 Merge changes If21e3ec7,I991fc30b into 0.3.0
627f5ca automake: add reference to libwebp for mux/demux
eef73d0 don't consolidate proba stats too often
05ec4cc libwebp{,decoder}.pc: add pthread flags
1bfcf5b add libwebpmux.pc
26ca843 add libwebpdemux.pc
69e2590 Merge "Tune Lossless compression for lower qualities."
0478b5d Tune Lossless compression for lower qualities.
39f7586 add a mention of parallel alpha encoding in the NEWS
5a21d96 Merge "1.5x-2x faster encoding for method 3 and up"
9bfbdd1 1.5x-2x faster encoding for method 3 and up
27dc741 Correct frame options order in README.mux
be2fd17 Mux: fix a scenario with bad ANMF/FRGM size
19eb012 Merge "Demux: Add option to get frame count using GetI()"
src/Source/LibWebP/ChangeLog view on Meta::CPAN
847b492 Merge "vwebp: use magenta for 'i'nfo display"
25ea46b Merge "vwebp: add keyboard shortcuts to help output"
bea7cca vwebp: use magenta for 'i'nfo display
8fab161 webpmux: correct -frame param order in help output
03cc23d vwebp: add keyboard shortcuts to help output
068eba8 Demux: Add option to get frame count using GetI()
988b8f5 WebPGetFeatures() out of if condition for clarity.
6933d91 Merge "gif2webp: Be lenient about background color index."
4d0f7c5 Merge "WebPGetFeatures() behavior change:"
fdeeb01 gif2webp: Be lenient about background color index.
ad25032 Merge "multi-threaded alpha encoding for lossy"
4e32d3e Merge "fix compilation of token.c"
f817930 multi-threaded alpha encoding for lossy
8805035 fix compilation of token.c
fc81621 code using the actual values for num_parts_, not the ones from config
7265535 Merge "move the config check from .c to .h"
dd9e76f move the config check from .c to .h
956b217 WebPGetFeatures() behavior change:
df02e4c WebPDemuxGetI behavior change:
633c004 Merge "rebalance method tools (-m) for methods [0..4]"
58ca6f6 rebalance method tools (-m) for methods [0..4]
7648c3c Merge "describe rd-opt levels introduce VP8RDLevel enum"
67fb100 Merge "autoconf: enable silent-rules by default"
src/Source/LibWebP/ChangeLog view on Meta::CPAN
f0b5def bump versions
4c42a61 update AUTHORS
6431a1c doc: remove non-finalized chunk references
8130c4c Merge "build: remove libwebpmux from default targets/config"
23b4443 Merge "configure: broaden test for libpng-config"
85bff2c Merge "doc: correct lossless prefix coding table & code"
05108f6 Merge "More spec/code matching in mux:"
6808e69 More spec/code matching in mux:
bd2b46f Merge "doc/webp-container-spec: light cosmetics"
20ead32 doc/webp-container-spec: light cosmetics
1d40a8b configure: add pthread detection
b5e9067 fix some int <-> size_t mix for buffer sizes
e41a759 build: remove libwebpmux from default targets/config
0fc2baa configure: broaden test for libpng-config
45b8272 Merge "restore authorship to lossless bitstream doc"
06ba059 restore authorship to lossless bitstream doc
44a09a3 add missing description of the alpha filtering methods
63db87d Merge "vwebp: add checkboard background for alpha display"
a73b897 vwebp: add checkboard background for alpha display
939158c Merge "vwebp: fix info display"
b35c07d vwebp: fix info display
src/Source/LibWebP/ChangeLog view on Meta::CPAN
c9e037a makefile.unix: add simple dist target
87d58ce makefile.unix: rule maintenance
d477de7 mend
fac15ec Update NEWS & README for next release V0.1.3
6215595 Merge "add a -partition_limit option to limit the number of bits used by intra4x4"
3814b76 Merge "reorganize chunk-parsing code"
900286e add a -partition_limit option to limit the number of bits used by intra4x4
cd12b4b add the missing cost for I4/I16 mode selection
dfcc213 reorganize chunk-parsing code
3cf2030 initialize pointers to function within VP8DspInit()
d21b479 Merge "windows: add decode threading support"
473ae95 fix hang on thread creation failure
fccca42 windows: add decode threading support
a31f843 Use the exact PNG_INCLUDES/PNG_LIBS when testing for -lpng
ad9b45f Merge "Makefile.vc: rule maintenance"
565a2ca Makefile.vc: rule maintenance
2d0da68 makefile.unix: disable Wvla by default
fc7815d multi-thread decoding: ~25-30% faster
acd8ba4 io->teardown() was not always called upon error
c85527b Merge "Makefile.vc: add DLL configs"
e1e9be3 cosmetics: spelling/grammar in README and lib headers
b4d0ef8 Makefile.vc: add DLL configs
998754a remove unused nb_i4_ and nb_i16_ fields.
9f01ce3 rename WebPDecBuffer::memory -> private_memory
fb5d659 fix an overflow bug in LUT calculation
d646d5c swig: add WebPDecodeARGB
78aeed4 add missing WebPDecodeARGBInto() and switch ARGB4444 to RGBA4444 as was intended
cd7c529 explicitly mark library functions as extern
src/Source/LibWebP/LibWebP.2005.vcproj view on Meta::CPAN
</File>
<File
RelativePath=".\src\utils\utils.random.c"
>
</File>
<File
RelativePath=".\src\utils\utils.rescaler.c"
>
</File>
<File
RelativePath=".\src\utils\utils.thread.c"
>
</File>
<File
RelativePath=".\src\utils\utils.utils.c"
>
</File>
</Filter>
<Filter
Name="mux"
>
src/Source/LibWebP/LibWebP.2005.vcproj view on Meta::CPAN
</File>
<File
RelativePath=".\src\utils\random.h"
>
</File>
<File
RelativePath=".\src\utils\rescaler.h"
>
</File>
<File
RelativePath=".\src\utils\thread.h"
>
</File>
<File
RelativePath=".\src\utils\utils.h"
>
</File>
</Filter>
<Filter
Name="mux"
>
src/Source/LibWebP/LibWebP.2008.vcproj view on Meta::CPAN
</File>
<File
RelativePath=".\src\utils\utils.random.c"
>
</File>
<File
RelativePath=".\src\utils\utils.rescaler.c"
>
</File>
<File
RelativePath=".\src\utils\utils.thread.c"
>
</File>
<File
RelativePath=".\src\utils\utils.utils.c"
>
</File>
</Filter>
<Filter
Name="mux"
>
src/Source/LibWebP/LibWebP.2008.vcproj view on Meta::CPAN
</File>
<File
RelativePath=".\src\utils\random.h"
>
</File>
<File
RelativePath=".\src\utils\rescaler.h"
>
</File>
<File
RelativePath=".\src\utils\thread.h"
>
</File>
<File
RelativePath=".\src\utils\utils.h"
>
</File>
</Filter>
<Filter
Name="mux"
>
src/Source/LibWebP/LibWebP.2013.vcxproj view on Meta::CPAN
<ClInclude Include="src\utils\bit_writer.h" />
<ClInclude Include="src\utils\color_cache.h" />
<ClInclude Include="src\utils\endian_inl.h" />
<ClInclude Include="src\utils\filters.h" />
<ClInclude Include="src\utils\huffman.h" />
<ClInclude Include="src\utils\huffman_encode.h" />
<ClInclude Include="src\utils\quant_levels.h" />
<ClInclude Include="src\utils\quant_levels_dec.h" />
<ClInclude Include="src\utils\random.h" />
<ClInclude Include="src\utils\rescaler.h" />
<ClInclude Include="src\utils\thread.h" />
<ClInclude Include="src\utils\utils.h" />
<ClInclude Include="src\mux\muxi.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\dec\dec.alpha.c" />
<ClCompile Include="src\dec\dec.buffer.c" />
<ClCompile Include="src\dec\dec.frame.c" />
<ClCompile Include="src\dec\dec.idec.c" />
<ClCompile Include="src\dec\dec.io.c" />
<ClCompile Include="src\dec\dec.quant.c" />
src/Source/LibWebP/LibWebP.2013.vcxproj view on Meta::CPAN
<ClCompile Include="src\utils\utils.bit_reader.c" />
<ClCompile Include="src\utils\utils.bit_writer.c" />
<ClCompile Include="src\utils\utils.color_cache.c" />
<ClCompile Include="src\utils\utils.filters.c" />
<ClCompile Include="src\utils\utils.huffman.c" />
<ClCompile Include="src\utils\utils.huffman_encode.c" />
<ClCompile Include="src\utils\utils.quant_levels.c" />
<ClCompile Include="src\utils\utils.quant_levels_dec.c" />
<ClCompile Include="src\utils\utils.random.c" />
<ClCompile Include="src\utils\utils.rescaler.c" />
<ClCompile Include="src\utils\utils.thread.c" />
<ClCompile Include="src\utils\utils.utils.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
src/Source/LibWebP/LibWebP.2013.vcxproj.filters view on Meta::CPAN
</ClInclude>
<ClInclude Include="src\utils\quant_levels_dec.h">
<Filter>Header Files\utils</Filter>
</ClInclude>
<ClInclude Include="src\utils\random.h">
<Filter>Header Files\utils</Filter>
</ClInclude>
<ClInclude Include="src\utils\rescaler.h">
<Filter>Header Files\utils</Filter>
</ClInclude>
<ClInclude Include="src\utils\thread.h">
<Filter>Header Files\utils</Filter>
</ClInclude>
<ClInclude Include="src\utils\utils.h">
<Filter>Header Files\utils</Filter>
</ClInclude>
<ClInclude Include="src\mux\muxi.h">
<Filter>Header Files\mux</Filter>
</ClInclude>
<ClInclude Include="src\dsp\mips_macro.h">
<Filter>Header Files\dsp</Filter>
src/Source/LibWebP/LibWebP.2013.vcxproj.filters view on Meta::CPAN
</ClCompile>
<ClCompile Include="src\utils\utils.quant_levels_dec.c">
<Filter>Source Files\utils</Filter>
</ClCompile>
<ClCompile Include="src\utils\utils.random.c">
<Filter>Source Files\utils</Filter>
</ClCompile>
<ClCompile Include="src\utils\utils.rescaler.c">
<Filter>Source Files\utils</Filter>
</ClCompile>
<ClCompile Include="src\utils\utils.thread.c">
<Filter>Source Files\utils</Filter>
</ClCompile>
<ClCompile Include="src\utils\utils.utils.c">
<Filter>Source Files\utils</Filter>
</ClCompile>
</ItemGroup>
</Project>
src/Source/LibWebP/NEWS view on Meta::CPAN
- ~10% faster lossless decode
- ~5-10% faster lossless encode (-m 3/4)
* dwebp/vwebp can read from stdin
* cwebp/gif2webp can write to stdout
* cwebp can read webp files; useful if storing sources as webp lossless
- 12/19/13: version 0.4.0
* improved gif2webp tool
* numerous fixes, compression improvement and speed-up
* dither option added to decoder (dwebp -dither 50 ...)
* improved multi-threaded modes (-mt option)
* improved filtering strength determination
* New function: WebPMuxGetCanvasSize
* BMP and TIFF format output added to 'dwebp'
* Significant memory reduction for decoding lossy images with alpha.
* Intertwined decoding of RGB and alpha for a shorter
time-to-first-decoded-pixel.
* WebPIterator has a new member 'has_alpha' denoting whether the frame
contains transparency.
* Container spec amended with new 'blending method' for animation.
src/Source/LibWebP/NEWS view on Meta::CPAN
* Deprecated function WebPINew() has been removed.
* Decode function signatures have changed to consistently use size_t over
int/uint32_t.
* decode_vp8.h is no longer installed system-wide.
* cwebp will encode the alpha channel if present.
- 9/19/11: version 0.1.3
* Advanced decoding APIs.
* On-the-fly cropping and rescaling of images.
* SSE2 instructions for decoding performance optimizations on x86 based platforms.
* Support Multi-threaded decoding.
* 40% improvement in Decoding performance.
* Add support for RGB565, RGBA4444 & ARGB image colorspace.
* Better handling of large picture encoding.
- 3/25/11: version 0.1.2
* Incremental decoding: picture can be decoded byte-by-byte if needs be.
* lot of bug-fixes, consolidation and stabilization
- 2/23/11: initial release of version 0.1, with the new encoder
- 9/30/10: initial release version with only the lightweight decoder
src/Source/LibWebP/README view on Meta::CPAN
-sns <int> ............. spatial noise shaping (0:off, 100:max)
-f <int> ............... filter strength (0=off..100)
-sharpness <int> ....... filter sharpness (0:most .. 7:least sharp)
-strong ................ use strong filter instead of simple (default)
-nostrong .............. use simple filter instead of strong
-partition_limit <int> . limit quality to fit the 512k limit on
the first partition (0=no degradation ... 100=full)
-pass <int> ............ analysis pass number (1..10)
-crop <x> <y> <w> <h> .. crop picture with the given rectangle
-resize <w> <h> ........ resize picture (after any cropping)
-mt .................... use multi-threading if available
-low_memory ............ reduce memory usage (slower encoding)
-map <int> ............. print map of extra info
-print_psnr ............ prints averaged PSNR distortion
-print_ssim ............ prints averaged SSIM distortion
-print_lsim ............ prints local-similarity distortion
-d <file.pgm> .......... dump the compressed output (PGM file)
-alpha_method <int> .... transparency-compression method (0..1)
-alpha_filter <string> . predictive filtering for alpha plane,
one of: none, fast (default) or best
-alpha_cleanup ......... clean RGB values in transparent area
src/Source/LibWebP/README view on Meta::CPAN
file with IMC4 layout
-yuv ......... save the raw YUV samples in flat layout
Other options are:
-version .... print version number and exit
-nofancy ..... don't use the fancy YUV420 upscaler
-nofilter .... disable in-loop filtering
-nodither .... disable dithering
-dither <d> .. dithering strength (in 0..100)
-alpha_dither use alpha-plane dithering if needed
-mt .......... use multi-threading
-crop <x> <y> <w> <h> ... crop output with the given rectangle
-scale <w> <h> .......... scale the output (*after* any cropping)
-flip ........ flip the output vertically
-alpha ....... only save the alpha plane
-incremental . use incremental decoding (useful for tests)
-h ....... this help message
-v ....... verbose (e.g. print encoding/decoding times)
-noasm ....... disable all assembly optimizations
Visualization tool:
src/Source/LibWebP/README view on Meta::CPAN
Usage: vwebp in_file [options]
Decodes the WebP image file and visualize it using OpenGL
Options are:
-version .... print version number and exit
-noicc ....... don't use the icc profile if present
-nofancy ..... don't use the fancy YUV420 upscaler
-nofilter .... disable in-loop filtering
-dither <int> dithering strength (0..100), default=50
-noalphadither disable alpha plane dithering
-mt .......... use multi-threading
-info ........ print info
-h ....... this help message
Keyboard shortcuts:
'c' ................ toggle use of color profile
'i' ................ overlay file information
'q' / 'Q' / ESC .... quit
Building:
---------
src/Source/LibWebP/README view on Meta::CPAN
-mixed ................. for each frame in the image, pick lossy
or lossless compression heuristically
-q <float> ............. quality factor (0:small..100:big)
-m <int> ............... compression method (0=fast, 6=slowest)
-kmin <int> ............ min distance between key frames
-kmax <int> ............ max distance between key frames
-f <int> ............... filter strength (0=off..100)
-metadata <string> ..... comma separated list of metadata to
copy from the input to the output if present
Valid values: all, none, icc, xmp (default)
-mt .................... use multi-threading if available
-version ............... print version number and exit
-v ..................... verbose
-quiet ................. don't print anything
Building:
---------
With the libgif development files installed, gif2webp can be built using
makefile.unix:
$ make -f makefile.unix examples/gif2webp
src/Source/LibWebP/src/dec/dec.frame.c view on Meta::CPAN
// Filtering
// kFilterExtraRows[] = How many extra lines are needed on the MB boundary
// for caching, given a filtering level.
// Simple filter: up to 2 luma samples are read and 1 is written.
// Complex filter: up to 4 luma samples are read and 3 are written. Same for
// U/V, so it's 8 samples total (because of the 2x upsampling).
static const uint8_t kFilterExtraRows[3] = { 0, 2, 8 };
static void DoFilter(const VP8Decoder* const dec, int mb_x, int mb_y) {
const VP8ThreadContext* const ctx = &dec->thread_ctx_;
const int cache_id = ctx->id_;
const int y_bps = dec->cache_y_stride_;
const VP8FInfo* const f_info = ctx->f_info_ + mb_x;
uint8_t* const y_dst = dec->cache_y_ + cache_id * 16 * y_bps + mb_x * 16;
const int ilevel = f_info->f_ilevel_;
const int limit = f_info->f_limit_;
if (limit == 0) {
return;
}
assert(limit >= 3);
src/Source/LibWebP/src/dec/dec.frame.c view on Meta::CPAN
if (f_info->f_inner_) {
VP8VFilter16i(y_dst, y_bps, limit, ilevel, hev_thresh);
VP8VFilter8i(u_dst, v_dst, uv_bps, limit, ilevel, hev_thresh);
}
}
}
// Filter the decoded macroblock row (if needed)
static void FilterRow(const VP8Decoder* const dec) {
int mb_x;
const int mb_y = dec->thread_ctx_.mb_y_;
assert(dec->thread_ctx_.filter_row_);
for (mb_x = dec->tl_mb_x_; mb_x < dec->br_mb_x_; ++mb_x) {
DoFilter(dec, mb_x, mb_y);
}
}
//------------------------------------------------------------------------------
// Precompute the filtering strength for each segment and each i4x4/i16x16 mode.
static void PrecomputeFilterStrengths(VP8Decoder* const dec) {
if (dec->filter_type_ > 0) {
src/Source/LibWebP/src/dec/dec.frame.c view on Meta::CPAN
dst[i] = (v < 0) ? 0 : (v > 255) ? 255u : (uint8_t)v;
}
dst += bps;
}
}
static void DitherRow(VP8Decoder* const dec) {
int mb_x;
assert(dec->dither_);
for (mb_x = dec->tl_mb_x_; mb_x < dec->br_mb_x_; ++mb_x) {
const VP8ThreadContext* const ctx = &dec->thread_ctx_;
const VP8MBData* const data = ctx->mb_data_ + mb_x;
const int cache_id = ctx->id_;
const int uv_bps = dec->cache_uv_stride_;
if (data->dither_ >= MIN_DITHER_AMP) {
uint8_t* const u_dst = dec->cache_u_ + cache_id * 8 * uv_bps + mb_x * 8;
uint8_t* const v_dst = dec->cache_v_ + cache_id * 8 * uv_bps + mb_x * 8;
Dither8x8(&dec->dithering_rg_, u_dst, uv_bps, data->dither_);
Dither8x8(&dec->dithering_rg_, v_dst, uv_bps, data->dither_);
}
}
src/Source/LibWebP/src/dec/dec.frame.c view on Meta::CPAN
// cache area. This doesn't hold for the very bottom row of the uncropped
// picture of course.
// * we must clip the remaining pixels against the cropping area. The VP8Io
// struct must have the following fields set correctly before calling put():
#define MACROBLOCK_VPOS(mb_y) ((mb_y) * 16) // vertical position of a MB
// Finalize and transmit a complete row. Return false in case of user-abort.
static int FinishRow(VP8Decoder* const dec, VP8Io* const io) {
int ok = 1;
const VP8ThreadContext* const ctx = &dec->thread_ctx_;
const int cache_id = ctx->id_;
const int extra_y_rows = kFilterExtraRows[dec->filter_type_];
const int ysize = extra_y_rows * dec->cache_y_stride_;
const int uvsize = (extra_y_rows / 2) * dec->cache_uv_stride_;
const int y_offset = cache_id * 16 * dec->cache_y_stride_;
const int uv_offset = cache_id * 8 * dec->cache_uv_stride_;
uint8_t* const ydst = dec->cache_y_ - ysize + y_offset;
uint8_t* const udst = dec->cache_u_ - uvsize + uv_offset;
uint8_t* const vdst = dec->cache_v_ - uvsize + uv_offset;
const int mb_y = ctx->mb_y_;
src/Source/LibWebP/src/dec/dec.frame.c view on Meta::CPAN
return ok;
}
#undef MACROBLOCK_VPOS
//------------------------------------------------------------------------------
int VP8ProcessRow(VP8Decoder* const dec, VP8Io* const io) {
int ok = 1;
VP8ThreadContext* const ctx = &dec->thread_ctx_;
const int filter_row =
(dec->filter_type_ > 0) &&
(dec->mb_y_ >= dec->tl_mb_y_) && (dec->mb_y_ <= dec->br_mb_y_);
if (dec->mt_method_ == 0) {
// ctx->id_ and ctx->f_info_ are already set
ctx->mb_y_ = dec->mb_y_;
ctx->filter_row_ = filter_row;
ReconstructRow(dec, ctx);
ok = FinishRow(dec, io);
} else {
src/Source/LibWebP/src/dec/dec.frame.c view on Meta::CPAN
if (ok) { // spawn a new deblocking/output job
ctx->io_ = *io;
ctx->id_ = dec->cache_id_;
ctx->mb_y_ = dec->mb_y_;
ctx->filter_row_ = filter_row;
if (dec->mt_method_ == 2) { // swap macroblock data
VP8MBData* const tmp = ctx->mb_data_;
ctx->mb_data_ = dec->mb_data_;
dec->mb_data_ = tmp;
} else {
// perform reconstruction directly in main thread
ReconstructRow(dec, ctx);
}
if (filter_row) { // swap filter info
VP8FInfo* const tmp = ctx->f_info_;
ctx->f_info_ = dec->f_info_;
dec->f_info_ = tmp;
}
// (reconstruct)+filter in parallel
WebPGetWorkerInterface()->Launch(worker);
if (++dec->cache_id_ == dec->num_caches_) {
src/Source/LibWebP/src/dec/dec.frame.c view on Meta::CPAN
ok = WebPGetWorkerInterface()->Sync(&dec->worker_);
}
if (io->teardown != NULL) {
io->teardown(io);
}
return ok;
}
//------------------------------------------------------------------------------
// For multi-threaded decoding we need to use 3 rows of 16 pixels as delay line.
//
// Reason is: the deblocking filter cannot deblock the bottom horizontal edges
// immediately, and needs to wait for first few rows of the next macroblock to
// be decoded. Hence, deblocking is lagging behind by 4 or 8 pixels (depending
// on strength).
// With two threads, the vertical positions of the rows being decoded are:
// Decode: [ 0..15][16..31][32..47][48..63][64..79][...
// Deblock: [ 0..11][12..27][28..43][44..59][...
// If we use two threads and two caches of 16 pixels, the sequence would be:
// Decode: [ 0..15][16..31][ 0..15!!][16..31][ 0..15][...
// Deblock: [ 0..11][12..27!!][-4..11][12..27][...
// The problem occurs during row [12..15!!] that both the decoding and
// deblocking threads are writing simultaneously.
// With 3 cache lines, one get a safe write pattern:
// Decode: [ 0..15][16..31][32..47][ 0..15][16..31][32..47][0..
// Deblock: [ 0..11][12..27][28..43][-4..11][12..27][28...
// Note that multi-threaded output _without_ deblocking can make use of two
// cache lines of 16 pixels only, since there's no lagging behind. The decoding
// and output process have non-concurrent writing:
// Decode: [ 0..15][16..31][ 0..15][16..31][...
// io->put: [ 0..15][16..31][ 0..15][...
#define MT_CACHE_LINES 3
#define ST_CACHE_LINES 1 // 1 cache row only for single-threaded case
// Initialize multi/single-thread worker
static int InitThreadContext(VP8Decoder* const dec) {
dec->cache_id_ = 0;
if (dec->mt_method_ > 0) {
WebPWorker* const worker = &dec->worker_;
if (!WebPGetWorkerInterface()->Reset(worker)) {
return VP8SetError(dec, VP8_STATUS_OUT_OF_MEMORY,
"thread initialization failed.");
}
worker->data1 = dec;
worker->data2 = (void*)&dec->thread_ctx_.io_;
worker->hook = (WebPWorkerHook)FinishRow;
dec->num_caches_ =
(dec->filter_type_ > 0) ? MT_CACHE_LINES : MT_CACHE_LINES - 1;
} else {
dec->num_caches_ = ST_CACHE_LINES;
}
return 1;
}
int VP8GetThreadMethod(const WebPDecoderOptions* const options,
const WebPHeaderStructure* const headers,
int width, int height) {
if (options == NULL || options->use_threads == 0) {
return 0;
}
(void)headers;
(void)width;
(void)height;
assert(headers == NULL || !headers->is_lossless);
#if defined(WEBP_USE_THREAD)
if (width < MIN_WIDTH_FOR_THREADS) return 0;
// TODO(skal): tune the heuristic further
#if 0
src/Source/LibWebP/src/dec/dec.frame.c view on Meta::CPAN
mem += intra_pred_mode_size;
dec->yuv_t_ = (VP8TopSamples*)mem;
mem += top_size;
dec->mb_info_ = ((VP8MB*)mem) + 1;
mem += mb_info_size;
dec->f_info_ = f_info_size ? (VP8FInfo*)mem : NULL;
mem += f_info_size;
dec->thread_ctx_.id_ = 0;
dec->thread_ctx_.f_info_ = dec->f_info_;
if (dec->mt_method_ > 0) {
// secondary cache line. The deblocking process need to make use of the
// filtering strength from previous macroblock row, while the new ones
// are being decoded in parallel. We'll just swap the pointers.
dec->thread_ctx_.f_info_ += mb_w;
}
mem = (uint8_t*)DO_ALIGN(mem);
assert((yuv_size & ALIGN_CST) == 0);
dec->yuv_b_ = (uint8_t*)mem;
mem += yuv_size;
dec->mb_data_ = (VP8MBData*)mem;
dec->thread_ctx_.mb_data_ = (VP8MBData*)mem;
if (dec->mt_method_ == 2) {
dec->thread_ctx_.mb_data_ += mb_w;
}
mem += mb_data_size;
dec->cache_y_stride_ = 16 * mb_w;
dec->cache_uv_stride_ = 8 * mb_w;
{
const int extra_rows = kFilterExtraRows[dec->filter_type_];
const int extra_y = extra_rows * dec->cache_y_stride_;
const int extra_uv = (extra_rows / 2) * dec->cache_uv_stride_;
dec->cache_y_ = ((uint8_t*)mem) + extra_y;
src/Source/LibWebP/src/dec/dec.idec.c view on Meta::CPAN
assert(idec->mem_.start_ <= idec->mem_.end_);
}
}
VP8InitScanline(dec); // Prepare for next scanline
// Reconstruct, filter and emit the row.
if (!VP8ProcessRow(dec, io)) {
return IDecError(idec, VP8_STATUS_USER_ABORT);
}
}
// Synchronize the thread and check for errors.
if (!VP8ExitCritical(dec, io)) {
return IDecError(idec, VP8_STATUS_USER_ABORT);
}
dec->ready_ = 0;
return FinishDecoding(idec);
}
static VP8StatusCode ErrorStatusLossless(WebPIDecoder* const idec,
VP8StatusCode status) {
if (status == VP8_STATUS_SUSPENDED || status == VP8_STATUS_NOT_ENOUGH_DATA) {
src/Source/LibWebP/src/dec/dec.idec.c view on Meta::CPAN
idec->params_.options = &config->options;
}
return idec;
}
void WebPIDelete(WebPIDecoder* idec) {
if (idec == NULL) return;
if (idec->dec_ != NULL) {
if (!idec->is_lossless_) {
if (idec->state_ == STATE_VP8_DATA) {
// Synchronize the thread, clean-up and check for errors.
VP8ExitCritical((VP8Decoder*)idec->dec_, &idec->io_);
}
VP8Delete((VP8Decoder*)idec->dec_);
} else {
VP8LDelete((VP8LDecoder*)idec->dec_);
}
}
ClearMemBuffer(&idec->mem_);
WebPFreeDecBuffer(&idec->output_);
WebPSafeFree(idec);
src/Source/LibWebP/src/dec/vp8i.h view on Meta::CPAN
//
// Author: Skal (pascal.massimino@gmail.com)
#ifndef WEBP_DEC_VP8I_H_
#define WEBP_DEC_VP8I_H_
#include <string.h> // for memcpy()
#include "./vp8li.h"
#include "../utils/bit_reader.h"
#include "../utils/random.h"
#include "../utils/thread.h"
#include "../dsp/dsp.h"
#ifdef __cplusplus
extern "C" {
#endif
//------------------------------------------------------------------------------
// Various defines and enums
// version numbers
src/Source/LibWebP/src/dec/vp8i.h view on Meta::CPAN
// '.' = unused
// 'y' = y-samples 'u' = u-samples 'v' = u-samples
// '|' = left sample, '-' = top sample, '+' = top-left sample
// 't' = extra top-right sample for 4x4 modes
#define YUV_SIZE (BPS * 17 + BPS * 9)
#define Y_SIZE (BPS * 17)
#define Y_OFF (BPS * 1 + 8)
#define U_OFF (Y_OFF + BPS * 16 + BPS)
#define V_OFF (U_OFF + 16)
// minimal width under which lossy multi-threading is always disabled
#define MIN_WIDTH_FOR_THREADS 512
//------------------------------------------------------------------------------
// Headers
typedef struct {
uint8_t key_frame_;
uint8_t profile_;
uint8_t show_;
uint32_t partition_length_;
src/Source/LibWebP/src/dec/vp8i.h view on Meta::CPAN
VP8BitReader br_;
// headers
VP8FrameHeader frm_hdr_;
VP8PictureHeader pic_hdr_;
VP8FilterHeader filter_hdr_;
VP8SegmentHeader segment_hdr_;
// Worker
WebPWorker worker_;
int mt_method_; // multi-thread method: 0=off, 1=[parse+recon][filter]
// 2=[parse][recon+filter]
int cache_id_; // current cache row
int num_caches_; // number of cached rows of 16 pixels (1, 2 or 3)
VP8ThreadContext thread_ctx_; // Thread context
// dimension, in macroblock units.
int mb_w_, mb_h_;
// Macroblock to process/filter, depending on cropping and filter_type.
int tl_mb_x_, tl_mb_y_; // top-left MB that must be in-loop filtered
int br_mb_x_, br_mb_y_; // last bottom-right MB that must be decoded
// number of partitions.
int num_parts_;
src/Source/LibWebP/src/dec/vp8i.h view on Meta::CPAN
// in frame.c
int VP8InitFrame(VP8Decoder* const dec, VP8Io* io);
// Call io->setup() and finish setting up scan parameters.
// After this call returns, one must always call VP8ExitCritical() with the
// same parameters. Both functions should be used in pair. Returns VP8_STATUS_OK
// if ok, otherwise sets and returns the error status on *dec.
VP8StatusCode VP8EnterCritical(VP8Decoder* const dec, VP8Io* const io);
// Must always be called in pair with VP8EnterCritical().
// Returns false in case of error.
int VP8ExitCritical(VP8Decoder* const dec, VP8Io* const io);
// Return the multi-threading method to use (0=off), depending
// on options and bitstream size. Only for lossy decoding.
int VP8GetThreadMethod(const WebPDecoderOptions* const options,
const WebPHeaderStructure* const headers,
int width, int height);
// Initialize dithering post-process if needed.
void VP8InitDithering(const WebPDecoderOptions* const options,
VP8Decoder* const dec);
// Process the last decoded row (filtering + output).
int VP8ProcessRow(VP8Decoder* const dec, VP8Io* const io);
// To be called at the start of a new scanline, to initialize predictors.
src/Source/LibWebP/src/dsp/dsp.dec_clip_tables.c view on Meta::CPAN
#else
// uninitialized tables
static uint8_t abs0[255 + 255 + 1];
static int8_t sclip1[1020 + 1020 + 1];
static int8_t sclip2[112 + 112 + 1];
static uint8_t clip1[255 + 511 + 1];
// We declare this variable 'volatile' to prevent instruction reordering
// and make sure it's set to true _last_ (so as to be thread-safe)
static volatile int tables_ok = 0;
#endif
const int8_t* const VP8ksclip1 = &sclip1[1020];
const int8_t* const VP8ksclip2 = &sclip2[112];
const uint8_t* const VP8kclip1 = &clip1[255];
const uint8_t* const VP8kabs0 = &abs0[255];
WEBP_TSAN_IGNORE_FUNCTION void VP8InitClipTables(void) {
src/Source/LibWebP/src/dsp/dsp.enc.c view on Meta::CPAN
}
VP8LSetHistogramData(distribution, histo);
}
//------------------------------------------------------------------------------
// run-time tables (~4k)
static uint8_t clip1[255 + 510 + 1]; // clips [-255,510] to [0,255]
// We declare this variable 'volatile' to prevent instruction reordering
// and make sure it's set to true _last_ (so as to be thread-safe)
static volatile int tables_ok = 0;
static WEBP_TSAN_IGNORE_FUNCTION void InitTables(void) {
if (!tables_ok) {
int i;
for (i = -255; i <= 255 + 255; ++i) {
clip1[255 + i] = clip_8b(i);
}
tables_ok = 1;
}