diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/README b/WebPConverter/libwebp-0.4.1-linux-x86-64/README new file mode 100644 index 0000000..8ef46cb --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/README @@ -0,0 +1,482 @@ + __ __ ____ ____ ____ + / \\/ \/ _ \/ _ )/ _ \ + \ / __/ _ \ __/ + \__\__/\____/\_____/__/ ____ ___ + / _/ / \ \ / _ \/ _/ + / \_/ / / \ \ __/ \__ + \____/____/\_____/_____/____/v0.4.1 + +Description: +============ + +WebP codec: library to encode and decode images in WebP format. This package +contains the library that can be used in other programs to add WebP support, +as well as the command line tools 'cwebp' and 'dwebp'. + +See http://developers.google.com/speed/webp + +Latest sources are available from http://www.webmproject.org/code/ + +It is released under the same license as the WebM project. +See http://www.webmproject.org/license/software/ or the +file "COPYING" file for details. An additional intellectual +property rights grant can be found in the file PATENTS. + +Files: +====== +cwebp : encoding tool +dwebp : decoding tool +gif2webp : gif conversion tool +vwebp : webp visualization tool +lib/ : static libraries +include/webp : headers + +Encoding tool: +============== + +The package contains tools for encoding (cwebp) and decoding (dwebp) images. + +The easiest use should look like: + cwebp input.png -q 80 -o output.webp +which will convert the input file to a WebP file using a quality factor of 80 +on a 0->100 scale (0 being the lowest quality, 100 being the best. Default +value is 75). +You might want to try the -lossless flag too, which will compress the source +(in RGBA format) without any loss. The -q quality parameter will in this case +control the amount of processing time spent trying to make the output file as +small as possible. + +A longer list of options is available using the -longhelp command line flag: + +> cwebp -longhelp +Usage: + cwebp [-preset <...>] [options] in_file [-o out_file] + +If input size (-s) for an image is not specified, it is +assumed to be a PNG, JPEG, TIFF or WebP file. + +Options: + -h / -help ............ short help + -H / -longhelp ........ long help + -q ............. quality factor (0:small..100:big) + -alpha_q ......... transparency-compression quality (0..100) + -preset ....... preset setting, one of: + default, photo, picture, + drawing, icon, text + -preset must come first, as it overwrites other parameters + + -m ............... compression method (0=fast, 6=slowest) + -segments ........ number of segments to use (1..4) + -size ............ target size (in bytes) + -psnr .......... target PSNR (in dB. typically: 42) + + -s ......... input size (width x height) for YUV + -sns ............. spatial noise shaping (0:off, 100:max) + -f ............... filter strength (0=off..100) + -sharpness ....... filter sharpness (0:most .. 7:least sharp) + -strong ................ use strong filter instead of simple (default) + -nostrong .............. use simple filter instead of strong + -partition_limit . limit quality to fit the 512k limit on + the first partition (0=no degradation ... 100=full) + -pass ............ analysis pass number (1..10) + -crop .. crop picture with the given rectangle + -resize ........ resize picture (after any cropping) + -mt .................... use multi-threading if available + -low_memory ............ reduce memory usage (slower encoding) + -map ............. print map of extra info + -print_psnr ............ prints averaged PSNR distortion + -print_ssim ............ prints averaged SSIM distortion + -print_lsim ............ prints local-similarity distortion + -d .......... dump the compressed output (PGM file) + -alpha_method .... transparency-compression method (0..1) + -alpha_filter . predictive filtering for alpha plane, + one of: none, fast (default) or best + -alpha_cleanup ......... clean RGB values in transparent area + -blend_alpha ..... blend colors against background color + expressed as RGB values written in + hexadecimal, e.g. 0xc0e0d0 for red=0xc0 + green=0xe0 and blue=0xd0 + -noalpha ............... discard any transparency information + -lossless .............. encode image losslessly + -hint ......... specify image characteristics hint, + one of: photo, picture or graph + + -metadata ..... comma separated list of metadata to + copy from the input to the output if present. + Valid values: all, none (default), exif, icc, xmp + + -short ................. condense printed message + -quiet ................. don't print anything + -version ............... print version number and exit + -noasm ................. disable all assembly optimizations + -v ..................... verbose, e.g. print encoding/decoding times + -progress .............. report encoding progress + +Experimental Options: + -jpeg_like ............. roughly match expected JPEG size + -af .................... auto-adjust filter strength + -pre ............. pre-processing filter + +The main options you might want to try in order to further tune the +visual quality are: + -preset + -sns + -f + -m + +Namely: + * 'preset' will set up a default encoding configuration targeting a + particular type of input. It should appear first in the list of options, + so that subsequent options can take effect on top of this preset. + Default value is 'default'. + * 'sns' will progressively turn on (when going from 0 to 100) some additional + visual optimizations (like: segmentation map re-enforcement). This option + will balance the bit allocation differently. It tries to take bits from the + "easy" parts of the picture and use them in the "difficult" ones instead. + Usually, raising the sns value (at fixed -q value) leads to larger files, + but with better quality. + Typical value is around '75'. + * 'f' option directly links to the filtering strength used by the codec's + in-loop processing. The higher the value, the smoother the + highly-compressed area will look. This is particularly useful when aiming + at very small files. Typical values are around 20-30. Note that using the + option -strong/-nostrong will change the type of filtering. Use "-f 0" to + turn filtering off. + * 'm' controls the trade-off between encoding speed and quality. Default is 4. + You can try -m 5 or -m 6 to explore more (time-consuming) encoding + possibilities. A lower value will result in faster encoding at the expense + of quality. + +Decoding tool: +============== + +The sample decoding program dwebp will take +a .webp file and decode it to a PNG image file (amongst other formats). +This is simply to demonstrate the use of the API. You can verify the +file test.webp decodes to exactly the same as test_ref.ppm by using: + + ./dwebp test.webp -ppm -o test.ppm + diff test.ppm test_ref.ppm + +The full list of options is available using -h: + +> dwebp -h +Usage: dwebp in_file [options] [-o out_file] + +Decodes the WebP image file to PNG format [Default] +Use following options to convert into alternate image formats: + -pam ......... save the raw RGBA samples as a color PAM + -ppm ......... save the raw RGB samples as a color PPM + -bmp ......... save as uncompressed BMP format + -tiff ........ save as uncompressed TIFF format + -pgm ......... save the raw YUV samples as a grayscale PGM + 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 .. dithering strength (in 0..100) + -mt .......... use multi-threading + -crop ... crop output with the given rectangle + -scale .......... scale the output (*after* any cropping) + -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: +=================== + +There's a little self-serve visualization tool called 'vwebp' under the +examples/ directory. It uses OpenGL to open a simple drawing window and show +a decoded WebP file. It's not yet integrated in the automake build system, but +you can try to manually compile it using the recommendations below. + +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 dithering strength (0..100), default=50 + -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 + +Animated GIF conversion: +======================== +Animated GIF files can be converted to WebP files with animation using the +gif2webp utility available under examples/. The files can then be viewed using +vwebp. + +Usage: + gif2webp [options] gif_file -o webp_file +Options: + -h / -help ............ this help + -lossy ................. encode image using lossy compression + -mixed ................. for each frame in the image, pick lossy + or lossless compression heuristically + -q ............. quality factor (0:small..100:big) + -m ............... compression method (0=fast, 6=slowest) + -kmin ............ min distance between key frames + -kmax ............ max distance between key frames + -f ............... filter strength (0=off..100) + -metadata ..... 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 + +Encoding API: +============= + +The main encoding functions are available in the header webp/encode.h +The ready-to-use ones are: +size_t WebPEncodeRGB(const uint8_t* rgb, int width, int height, int stride, + float quality_factor, uint8_t** output); +size_t WebPEncodeBGR(const uint8_t* bgr, int width, int height, int stride, + float quality_factor, uint8_t** output); +size_t WebPEncodeRGBA(const uint8_t* rgba, int width, int height, int stride, + float quality_factor, uint8_t** output); +size_t WebPEncodeBGRA(const uint8_t* bgra, int width, int height, int stride, + float quality_factor, uint8_t** output); + +They will convert raw RGB samples to a WebP data. The only control supplied +is the quality factor. + +There are some variants for using the lossless format: + +size_t WebPEncodeLosslessRGB(const uint8_t* rgb, int width, int height, + int stride, uint8_t** output); +size_t WebPEncodeLosslessBGR(const uint8_t* bgr, int width, int height, + int stride, uint8_t** output); +size_t WebPEncodeLosslessRGBA(const uint8_t* rgba, int width, int height, + int stride, uint8_t** output); +size_t WebPEncodeLosslessBGRA(const uint8_t* bgra, int width, int height, + int stride, uint8_t** output); + +Of course in this case, no quality factor is needed since the compression +occurs without loss of the input values, at the expense of larger output sizes. + +Advanced encoding API: +---------------------- + +A more advanced API is based on the WebPConfig and WebPPicture structures. + +WebPConfig contains the encoding settings and is not tied to a particular +picture. +WebPPicture contains input data, on which some WebPConfig will be used for +compression. +The encoding flow looks like: + +-------------------------------------- BEGIN PSEUDO EXAMPLE + +#include + + // Setup a config, starting form a preset and tuning some additional + // parameters + WebPConfig config; + if (!WebPConfigPreset(&config, WEBP_PRESET_PHOTO, quality_factor)) + return 0; // version error + } + // ... additional tuning + config.sns_strength = 90; + config.filter_sharpness = 6; + config_error = WebPValidateConfig(&config); // not mandatory, but useful + + // Setup the input data + WebPPicture pic; + if (!WebPPictureInit(&pic)) { + return 0; // version error + } + pic.width = width; + pic.height = height; + // allocated picture of dimension width x height + if (!WebPPictureAllocate(&pic)) { + return 0; // memory error + } + // at this point, 'pic' has been initialized as a container, + // and can receive the Y/U/V samples. + // Alternatively, one could use ready-made import functions like + // WebPPictureImportRGB(), which will take care of memory allocation. + // In any case, past this point, one will have to call + // WebPPictureFree(&pic) to reclaim memory. + + // Set up a byte-output write method. WebPMemoryWriter, for instance. + WebPMemoryWriter wrt; + WebPMemoryWriterInit(&wrt); // initialize 'wrt' + + pic.writer = MyFileWriter; + pic.custom_ptr = my_opaque_structure_to_make_MyFileWriter_work; + + // Compress! + int ok = WebPEncode(&config, &pic); // ok = 0 => error occurred! + WebPPictureFree(&pic); // must be called independently of the 'ok' result. + + // output data should have been handled by the writer at that point. + // -> compressed data is the memory buffer described by wrt.mem / wrt.size + + // deallocate the memory used by compressed data + WebPMemoryWriterClear(&wrt); + +-------------------------------------- END PSEUDO EXAMPLE + +Decoding API: +============= + +This is mainly just one function to call: + +#include "webp/decode.h" +uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size, + int* width, int* height); + +Please have a look at the file webp/decode.h for the details. +There are variants for decoding in BGR/RGBA/ARGB/BGRA order, along with +decoding to raw Y'CbCr samples. One can also decode the image directly into a +pre-allocated buffer. + +To detect a WebP file and gather the picture's dimensions, the function: + int WebPGetInfo(const uint8_t* data, size_t data_size, + int* width, int* height); +is supplied. No decoding is involved when using it. + +Incremental decoding API: +========================= + +In the case when data is being progressively transmitted, pictures can still +be incrementally decoded using a slightly more complicated API. Decoder state +is stored into an instance of the WebPIDecoder object. This object can be +created with the purpose of decoding either RGB or Y'CbCr samples. +For instance: + + WebPDecBuffer buffer; + WebPInitDecBuffer(&buffer); + buffer.colorspace = MODE_BGR; + ... + WebPIDecoder* idec = WebPINewDecoder(&buffer); + +As data is made progressively available, this incremental-decoder object +can be used to decode the picture further. There are two (mutually exclusive) +ways to pass freshly arrived data: + +either by appending the fresh bytes: + + WebPIAppend(idec, fresh_data, size_of_fresh_data); + +or by just mentioning the new size of the transmitted data: + + WebPIUpdate(idec, buffer, size_of_transmitted_buffer); + +Note that 'buffer' can be modified between each call to WebPIUpdate, in +particular when the buffer is resized to accommodate larger data. + +These functions will return the decoding status: either VP8_STATUS_SUSPENDED if +decoding is not finished yet or VP8_STATUS_OK when decoding is done. Any other +status is an error condition. + +The 'idec' object must always be released (even upon an error condition) by +calling: WebPDelete(idec). + +To retrieve partially decoded picture samples, one must use the corresponding +method: WebPIDecGetRGB or WebPIDecGetYUVA. +It will return the last displayable pixel row. + +Lastly, note that decoding can also be performed into a pre-allocated pixel +buffer. This buffer must be passed when creating a WebPIDecoder, calling +WebPINewRGB() or WebPINewYUVA(). + +Please have a look at the webp/decode.h header for further details. + +Advanced Decoding API: +====================== + +WebP decoding supports an advanced API which provides on-the-fly cropping and +rescaling, something of great usefulness on memory-constrained environments like +mobile phones. Basically, the memory usage will scale with the output's size, +not the input's, when one only needs a quick preview or a zoomed in portion of +an otherwise too-large picture. Some CPU can be saved too, incidentally. + +-------------------------------------- BEGIN PSEUDO EXAMPLE + // A) Init a configuration object + WebPDecoderConfig config; + CHECK(WebPInitDecoderConfig(&config)); + + // B) optional: retrieve the bitstream's features. + CHECK(WebPGetFeatures(data, data_size, &config.input) == VP8_STATUS_OK); + + // C) Adjust 'config' options, if needed + config.options.no_fancy_upsampling = 1; + config.options.use_scaling = 1; + config.options.scaled_width = scaledWidth(); + config.options.scaled_height = scaledHeight(); + // etc. + + // D) Specify 'config' output options for specifying output colorspace. + // Optionally the external image decode buffer can also be specified. + config.output.colorspace = MODE_BGRA; + // Optionally, the config.output can be pointed to an external buffer as + // well for decoding the image. This externally supplied memory buffer + // should be big enough to store the decoded picture. + config.output.u.RGBA.rgba = (uint8_t*) memory_buffer; + config.output.u.RGBA.stride = scanline_stride; + config.output.u.RGBA.size = total_size_of_the_memory_buffer; + config.output.is_external_memory = 1; + + // E) Decode the WebP image. There are two variants w.r.t decoding image. + // The first one (E.1) decodes the full image and the second one (E.2) is + // used to incrementally decode the image using small input buffers. + // Any one of these steps can be used to decode the WebP image. + + // E.1) Decode full image. + CHECK(WebPDecode(data, data_size, &config) == VP8_STATUS_OK); + + // E.2) Decode image incrementally. + WebPIDecoder* const idec = WebPIDecode(NULL, NULL, &config); + CHECK(idec != NULL); + while (bytes_remaining > 0) { + VP8StatusCode status = WebPIAppend(idec, input, bytes_read); + if (status == VP8_STATUS_OK || status == VP8_STATUS_SUSPENDED) { + bytes_remaining -= bytes_read; + } else { + break; + } + } + WebPIDelete(idec); + + // F) Decoded image is now in config.output (and config.output.u.RGBA). + // It can be saved, displayed or otherwise processed. + + // G) Reclaim memory allocated in config's object. It's safe to call + // this function even if the memory is external and wasn't allocated + // by WebPDecode(). + WebPFreeDecBuffer(&config.output); + +-------------------------------------- END PSEUDO EXAMPLE + +Bugs: +===== + +Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues +Patches welcome! See this page to get started: + http://www.webmproject.org/code/contribute/submitting-patches/ + +Discuss: +======== + +Email: webp-discuss@webmproject.org +Web: http://groups.google.com/a/webmproject.org/group/webp-discuss diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/README.mux b/WebPConverter/libwebp-0.4.1-linux-x86-64/README.mux new file mode 100644 index 0000000..437a751 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/README.mux @@ -0,0 +1,186 @@ + __ __ ____ ____ ____ __ __ _ __ __ + / \\/ \/ _ \/ _ \/ _ \/ \ \/ \___/_ / _\ + \ / __/ _ \ __/ / / (_/ /__ + \__\__/\_____/_____/__/ \__//_/\_____/__/___/v0.2.1 + + +Description: +============ + +WebPMux: set of two libraries 'Mux' and 'Demux' for creation, extraction and +manipulation of an extended format WebP file, which can have features like +color profile, metadata and animation. Reference command-line tools 'webpmux' +and 'vwebp' as well as the WebP container specification +'doc/webp-container-spec.txt' are also provided in this package. + +WebP Mux tool: +============== + +The examples/ directory contains a tool (webpmux) for manipulating WebP +files. The webpmux tool can be used to create an extended format WebP file and +also to extract or strip relevant data from such a file. + +A list of options is available using the -help command line flag: + +> webpmux -help +Usage: webpmux -get GET_OPTIONS INPUT -o OUTPUT + webpmux -set SET_OPTIONS INPUT -o OUTPUT + webpmux -strip STRIP_OPTIONS INPUT -o OUTPUT + webpmux -frame FRAME_OPTIONS [-frame...] [-loop LOOP_COUNT] + [-bgcolor BACKGROUND_COLOR] -o OUTPUT + webpmux -info INPUT + webpmux [-h|-help] + webpmux -version + +GET_OPTIONS: + Extract relevant data: + icc get ICC profile + exif get EXIF metadata + xmp get XMP metadata + frame n get nth frame + +SET_OPTIONS: + Set color profile/metadata: + icc file.icc set ICC profile + exif file.exif set EXIF metadata + xmp file.xmp set XMP metadata + where: 'file.icc' contains the ICC profile to be set, + 'file.exif' contains the EXIF metadata to be set + 'file.xmp' contains the XMP metadata to be set + +STRIP_OPTIONS: + Strip color profile/metadata: + icc strip ICC profile + exif strip EXIF metadata + xmp strip XMP metadata + +FRAME_OPTIONS(i): + Create animation: + file_i +di+[xi+yi[+mi[bi]]] + where: 'file_i' is the i'th animation frame (WebP format), + 'di' is the pause duration before next frame, + 'xi','yi' specify the image offset for this frame, + 'mi' is the dispose method for this frame (0 or 1), + 'bi' is the blending method for this frame (+b or -b) + +LOOP_COUNT: + Number of times to repeat the animation. + Valid range is 0 to 65535 [Default: 0 (infinite)]. + +BACKGROUND_COLOR: + Background color of the canvas. + A,R,G,B + where: 'A', 'R', 'G' and 'B' are integers in the range 0 to 255 specifying + the Alpha, Red, Green and Blue component values respectively + [Default: 255,255,255,255] + +INPUT & OUTPUT are in WebP format. + +Note: The nature of EXIF, XMP and ICC data is not checked and is assumed to be +valid. + +Visualization tool: +=================== + +The examples/ directory also contains a tool (vwebp) for viewing WebP files. +It decodes the image and visualizes it using OpenGL. See the libwebp README +for details on building and running this program. + +Mux API: +======== +The Mux API contains methods for adding data to and reading data from WebP +files. This API currently supports XMP/EXIF metadata, ICC profile and animation. +Other features may be added in subsequent releases. + +Example#1 (pseudo code): Creating a WebPMux object with image data, color +profile and XMP metadata. + + int copy_data = 0; + WebPMux* mux = WebPMuxNew(); + // ... (Prepare image data). + WebPMuxSetImage(mux, &image, copy_data); + // ... (Prepare ICC profile data). + WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data); + // ... (Prepare XMP metadata). + WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data); + // Get data from mux in WebP RIFF format. + WebPMuxAssemble(mux, &output_data); + WebPMuxDelete(mux); + // ... (Consume output_data; e.g. write output_data.bytes to file). + WebPDataClear(&output_data); + + +Example#2 (pseudo code): Get image and color profile data from a WebP file. + + int copy_data = 0; + // ... (Read data from file). + WebPMux* mux = WebPMuxCreate(&data, copy_data); + WebPMuxGetFrame(mux, 1, &image); + // ... (Consume image; e.g. call WebPDecode() to decode the data). + WebPMuxGetChunk(mux, "ICCP", &icc_profile); + // ... (Consume icc_profile). + WebPMuxDelete(mux); + free(data); + + +For a detailed Mux API reference, please refer to the header file +(src/webp/mux.h). + +Demux API: +========== +The Demux API enables extraction of images and extended format data from +WebP files. This API currently supports reading of XMP/EXIF metadata, ICC +profile and animated images. Other features may be added in subsequent +releases. + +Code Example: Demuxing WebP data to extract all the frames, ICC profile +and EXIF/XMP metadata. + + WebPDemuxer* demux = WebPDemux(&webp_data); + uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH); + uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT); + // ... (Get information about the features present in the WebP file). + uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS); + + // ... (Iterate over all frames). + WebPIterator iter; + if (WebPDemuxGetFrame(demux, 1, &iter)) { + do { + // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(), + // ... and get other frame properties like width, height, offsets etc. + // ... see 'struct WebPIterator' below for more info). + } while (WebPDemuxNextFrame(&iter)); + WebPDemuxReleaseIterator(&iter); + } + + // ... (Extract metadata). + WebPChunkIterator chunk_iter; + if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter); + // ... (Consume the ICC profile in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter); + // ... (Consume the EXIF metadata in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter); + // ... (Consume the XMP metadata in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + WebPDemuxDelete(demux); + + +For a detailed Demux API reference, please refer to the header file +(src/webp/demux.h). + + +Bugs: +===== + +Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues +Patches welcome! See this page to get started: + http://www.webmproject.org/code/contribute/submitting-patches/ + +Discuss: +======== + +Email: webp-discuss@webmproject.org +Web: http://groups.google.com/a/webmproject.org/group/webp-discuss diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/cwebp b/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/cwebp new file mode 100755 index 0000000..eb7e223 Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/cwebp differ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/dwebp b/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/dwebp new file mode 100755 index 0000000..4ce551a Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/dwebp differ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/gif2webp b/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/gif2webp new file mode 100755 index 0000000..c5f7486 Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/gif2webp differ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/vwebp b/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/vwebp new file mode 100755 index 0000000..db89707 Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/vwebp differ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/webpmux b/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/webpmux new file mode 100755 index 0000000..8194d2d Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-linux-x86-64/bin/webpmux differ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/cwebp.html b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/cwebp.html new file mode 100644 index 0000000..764b542 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/cwebp.html @@ -0,0 +1,564 @@ + + + + + + + + + +CWEBP + + + + +

CWEBP

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+ADDITIONAL OPTIONS
+BUGS
+EXAMPLES
+AUTHORS
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

cwebp − +compress an image file to a WebP file

+ +

SYNOPSIS + +

+ + +

cwebp +[options] input_file −o +output_file.webp

+ +

DESCRIPTION + +

+ + +

This manual +page documents the cwebp command.

+ +

cwebp +compresses an image using the WebP format. Input format can +be either PNG, JPEG, TIFF, WebP or raw Y’CbCr +samples.

+ +

OPTIONS + +

+ + +

The basic +options are:
+−o
string

+ +

Specify the name of the output +WebP file. If omitted, cwebp will perform compression +but only report statistics. Using "−" as +output name will direct output to ’stdout’.

+ +

−− +string

+ +

Explicitly specify the input +file. This option is useful if the input file starts with an +’−’ for instance. This option must appear +last. Any other options afterward will be +ignored.

+ +

−h, +−help

+ +

A short usage summary.

+ +

−H, +−longhelp

+ +

A summary of all the possible +options.

+ +

−version

+ +

Print the version number (as +major.minor.revision) and exit.

+ +

−q +float

+ +

Specify the compression factor +for RGB channels between 0 and 100. The default is 75.

+ +

−alpha_q +int

+ +

Specify the compression factor +for alpha compression between 0 and 100. Lossless +compression of alpha is achieved using a value of 100, while +the lower values result in a lossy compression. The default +is 100.

+ + + + + + + +
+ + +

−f int

+ + +

Specify the strength of the deblocking filter, between 0 +(no filtering) and 100 (maximum filtering). A value of 0 +will turn off any filtering. Higher value will increase the +strength of the filtering process applied after decoding the +picture. The higher the value the smoother the picture will +appear. Typical values are usually in the range of 20 to +50.

+ +

−preset +string

+ +

Specify a set of pre-defined +parameters to suit a particular type of source material. +Possible values are: default, photo, +picture, drawing, icon, text. +Since −preset overwrites the other +parameters’ values (except the −q one), +this option should preferably appear first in the order of +the arguments.

+ +

−sns +int

+ +

Specify the amplitude of the +spatial noise shaping. Spatial noise shaping (or sns +for short) refers to a general collection of built-in +algorithms used to decide which area of the picture should +use relatively less bits, and where else to better transfer +these bits. The possible range goes from 0 (algorithm is +off) to 100 (the maximal effect). The default value is +80.

+ + + + + + + +
+ + +

−m int

+ + +

Specify the compression method to use. This parameter +controls the trade off between encoding speed and the +compressed file size and quality. Possible values range from +0 to 6. Default value is 4. When higher values are used, the +encoder will spend more time inspecting additional encoding +possibilities and decide on the quality gain. Lower value +can result in faster processing time at the expense of +larger file size and lower compression quality.

+ +

−jpeg_like

+ +

Change the internal parameter +mapping to better match the expected size of JPEG +compression. This flag will generally produce an output file +of similar size to its JPEG equivalent (for the same +−q setting), but with less visual +distortion.

+ + + + + + + +
+ + +

−mt

+ + +

Use multi-threading for encoding, if possible. This +option is only effective when using lossy compression on a +source with a transparency channel.

+ +

−low_memory

+ +

Reduce memory usage of lossy +encoding by saving four times the compressed size +(typically). This will make the encoding slower and the +output slightly different in size and distortion. This flag +is only effective for methods 3 and up, and is off by +default. Note that leaving this flag off will have some side +effects on the bitstream: it forces certain bitstream +features like number of partitions (forced to 1). Note that +a more detailed report of bitstream size is printed by +cwebp when using this option.

+ + + + + + + +
+ + +

−af

+ + +

Turns auto-filter on. This algorithm will spend +additional time optimizing the filtering strength to reach a +well-balanced quality.

+ +

ADDITIONAL OPTIONS + +

+ + +

More advanced +options are:
+−sharpness
int

+ +

Specify the sharpness of the +filtering (if used). Range is 0 (sharpest) to 7 (least +sharp). Default is 0.

+ +

−strong

+ +

Use strong filtering (if +filtering is being used thanks to the −f +option). Strong filtering is on by default.

+ +

−nostrong

+ +

Disable strong filtering (if +filtering is being used thanks to the −f +option) and use simple filtering instead.

+ +

−segments +int

+ +

Change the number of partitions +to use during the segmentation of the sns algorithm. +Segments should be in range 1 to 4. Default value is 4. This +option has no effect for methods 3 and up, unless +−low_memory is used.

+ +

−partition_limit +int

+ +

Degrade quality by limiting the +number of bits used by some macroblocks. Range is 0 (no +degradation, the default) to 100 (full degradation). Useful +values are usually around 30-70 for moderately large images. +In the VP8 format, the so-called control partition has a +limit of 512k and is used to store the following +information: whether the macroblock is skipped, which +segment it belongs to, whether it is coded as intra 4x4 or +intra 16x16 mode, and finally the prediction modes to use +for each of the sub-blocks. For a very large image, 512k +only leaves room to few bits per 16x16 macroblock. The +absolute minimum is 4 bits per macroblock. Skip, segment, +and mode information can use up almost all these 4 bits +(although the case is unlikely), which is problematic for +very large images. The partition_limit factor controls how +frequently the most bit-costly mode (intra 4x4) will be +used. This is useful in case the 512k limit is reached and +the following message is displayed: Error code: 6 +(PARTITION0_OVERFLOW: Partition #0 is too big to fit +512k). If using -partition_limit is not enough to +meet the 512k constraint, one should use less segments in +order to save more header bits per macroblock. See the +-segments option.

+ +

−size +int

+ +

Specify a target size (in +bytes) to try and reach for the compressed output. +Compressor will make several pass of partial encoding in +order to get as close as possible to this target.

+ +

−psnr +float

+ +

Specify a target PSNR (in dB) +to try and reach for the compressed output. Compressor will +make several pass of partial encoding in order to get as +close as possible to this target.

+ +

−pass +int

+ +

Set a maximum number of passes +to use during the dichotomy used by options +−size or −psnr. Maximum value is +10.

+ +

−resize width +height

+ +

Resize the source to a +rectangle with size width x height. If either +(but not both) of the width or height +parameters is 0, the value will be calculated preserving the +aspect-ratio.

+ +

−crop +x_position y_position width height

+ +

Crop the source to a rectangle +with top-left corner at coordinates (x_position, +y_position) and size width x height. +This cropping area must be fully contained within the source +rectangle.

+ +

−s width +height

+ +

Specify that the input file +actually consists of raw Y’CbCr samples following the +ITU-R BT.601 recommendation, in 4:2:0 linear format. The +luma plane has size width x height.

+ +

−map +int

+ +

Output additional ASCII-map of +encoding information. Possible map values range from 1 to 6. +This is only meant to help debugging.

+ +

−pre +int

+ +

Specify some pre-processing +steps. Using a value of ’2’ will trigger +quality-dependent pseudo-random dithering during +RGBA->YUVA conversion (lossy compression only).

+ +

−alpha_filter +string

+ +

Specify the predictive +filtering method for the alpha plane. One of +’none’, ’fast’ or +’best’, in increasing complexity and slowness +order. Default is ’fast’. Internally, alpha +filtering is performed using four possible predictions +(none, horizontal, vertical, gradient). The +’best’ mode will try each mode in turn and pick +the one which gives the smaller size. The ’fast’ +mode will just try to form an a-priori guess without testing +all modes.

+ +

−alpha_method +int

+ +

Specify the algorithm used for +alpha compression: 0 or 1. Algorithm 0 denotes no +compression, 1 uses WebP lossless format for compression. +The default is 1.

+ + +

−alpha_cleanup

+ +

Modify unseen RGB values under +fully transparent area, to help compressibility. The default +is off.

+ +

−blend_alpha +int

+ +

This option blends the alpha +channel (if present) with the source using the background +color specified in hexadecimal as 0xrrggbb. The alpha +channel is afterward reset to the opaque value 255.

+ +

−noalpha

+ +

Using this option will discard +the alpha channel.

+ +

−lossless

+ +

Encode the image without any +loss.

+ +

−hint +string

+ +

Specify the hint about input +image type. Possible values are: photo, +picture or graph.

+ +

−metadata +string

+ +

A comma separated list of +metadata to copy from the input to the output if present. +Valid values: all, none, exif, +icc, xmp. The default is none.

+ +

Note: each +input format may not support all combinations.

+ + + + + + + + + + + + +
+ + +

−noasm

+ + +

Disable all assembly optimizations.

+ + +

−v

+ + +

Print extra information (encoding time in +particular).

+ +

−print_psnr

+ +

Compute and report average PSNR +(Peak-Signal-To-Noise ratio).

+ +

−print_ssim

+ +

Compute and report average SSIM +(structural similarity metric, see +http://en.wikipedia.org/wiki/SSIM for additional +details).

+ +

−print_lsim

+ +

Compute and report local +similarity metric (sum of lowest error amongst the +collocated pixel neighbors).

+ +

−progress

+ +

Report encoding progress in +percent.

+ + + + + + + + + + + + +
+ + +

−quiet

+ + +

Do not print anything.

+ + +

−short

+ + +

Only print brief information (output file size and PSNR) +for testing purpose.

+ +

BUGS + +

+ + +

Please report +all bugs to our issue tracker: +http://code.google.com/p/webp/issues
+Patches welcome! See this page to get started: +http://www.webmproject.org/code/contribute/submitting-patches/

+ +

EXAMPLES + +

+ + +

cwebp −q +50 -lossless picture.png −o picture_lossless.webp
+cwebp −q 70 picture_with_alpha.png −o +picture_with_alpha.webp
+cwebp −sns 70 −f 50 −size 60000 +picture.png −o picture.webp
+cwebp −o picture.webp −− +−−−picture.png

+ +

AUTHORS + +

+ + +

cwebp +was written by the WebP team.
+The latest source tree is available at +http://www.webmproject.org/code

+ +

This manual +page was written by Pascal Massimino +<pascal.massimino@gmail.com>, for the Debian project +(and may be used by others).

+ +

SEE ALSO + +

+ + + +

dwebp(1), +gif2webp(1)
+Please refer to http://developers.google.com/speed/webp/ for +additional information.

+
+ + diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/cwebp.txt b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/cwebp.txt new file mode 100644 index 0000000..9f27077 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/cwebp.txt @@ -0,0 +1,284 @@ +CWEBP(1) CWEBP(1) + + + +NAME + cwebp - compress an image file to a WebP file + +SYNOPSIS + cwebp [options] input_file -o output_file.webp + +DESCRIPTION + This manual page documents the cwebp command. + + cwebp compresses an image using the WebP format. Input format can be + either PNG, JPEG, TIFF, WebP or raw Y'CbCr samples. + +OPTIONS + The basic options are: + + -o string + Specify the name of the output WebP file. If omitted, cwebp will + perform compression but only report statistics. Using "-" as + output name will direct output to 'stdout'. + + -- string + Explicitly specify the input file. This option is useful if the + input file starts with an '-' for instance. This option must + appear last. Any other options afterward will be ignored. + + -h, -help + A short usage summary. + + -H, -longhelp + A summary of all the possible options. + + -version + Print the version number (as major.minor.revision) and exit. + + -q float + Specify the compression factor for RGB channels between 0 and + 100. The default is 75. + + -alpha_q int + Specify the compression factor for alpha compression between 0 + and 100. Lossless compression of alpha is achieved using a + value of 100, while the lower values result in a lossy compres‐ + sion. The default is 100. + + -f int Specify the strength of the deblocking filter, between 0 (no + filtering) and 100 (maximum filtering). A value of 0 will turn + off any filtering. Higher value will increase the strength of + the filtering process applied after decoding the picture. The + higher the value the smoother the picture will appear. Typical + values are usually in the range of 20 to 50. + + -preset string + Specify a set of pre-defined parameters to suit a particular + type of source material. Possible values are: default, photo, + picture, drawing, icon, text. Since -preset overwrites the other + parameters' values (except the -q one), this option should + preferably appear first in the order of the arguments. + + -sns int + Specify the amplitude of the spatial noise shaping. Spatial + noise shaping (or sns for short) refers to a general collection + of built-in algorithms used to decide which area of the picture + should use relatively less bits, and where else to better trans‐ + fer these bits. The possible range goes from 0 (algorithm is + off) to 100 (the maximal effect). The default value is 80. + + -m int Specify the compression method to use. This parameter controls + the trade off between encoding speed and the compressed file + size and quality. Possible values range from 0 to 6. Default + value is 4. When higher values are used, the encoder will spend + more time inspecting additional encoding possibilities and + decide on the quality gain. Lower value can result in faster + processing time at the expense of larger file size and lower + compression quality. + + -jpeg_like + Change the internal parameter mapping to better match the + expected size of JPEG compression. This flag will generally pro‐ + duce an output file of similar size to its JPEG equivalent (for + the same -q setting), but with less visual distortion. + + -mt Use multi-threading for encoding, if possible. This option is + only effective when using lossy compression on a source with a + transparency channel. + + -low_memory + Reduce memory usage of lossy encoding by saving four times the + compressed size (typically). This will make the encoding slower + and the output slightly different in size and distortion. This + flag is only effective for methods 3 and up, and is off by + default. Note that leaving this flag off will have some side + effects on the bitstream: it forces certain bitstream features + like number of partitions (forced to 1). Note that a more + detailed report of bitstream size is printed by cwebp when using + this option. + + -af Turns auto-filter on. This algorithm will spend additional time + optimizing the filtering strength to reach a well-balanced qual‐ + ity. + + +ADDITIONAL OPTIONS + More advanced options are: + + -sharpness int + Specify the sharpness of the filtering (if used). Range is 0 + (sharpest) to 7 (least sharp). Default is 0. + + -strong + Use strong filtering (if filtering is being used thanks to the + -f option). Strong filtering is on by default. + + -nostrong + Disable strong filtering (if filtering is being used thanks to + the -f option) and use simple filtering instead. + + -segments int + Change the number of partitions to use during the segmentation + of the sns algorithm. Segments should be in range 1 to 4. + Default value is 4. This option has no effect for methods 3 and + up, unless -low_memory is used. + + -partition_limit int + Degrade quality by limiting the number of bits used by some mac‐ + roblocks. Range is 0 (no degradation, the default) to 100 (full + degradation). Useful values are usually around 30-70 for moder‐ + ately large images. In the VP8 format, the so-called control + partition has a limit of 512k and is used to store the following + information: whether the macroblock is skipped, which segment it + belongs to, whether it is coded as intra 4x4 or intra 16x16 + mode, and finally the prediction modes to use for each of the + sub-blocks. For a very large image, 512k only leaves room to + few bits per 16x16 macroblock. The absolute minimum is 4 bits + per macroblock. Skip, segment, and mode information can use up + almost all these 4 bits (although the case is unlikely), which + is problematic for very large images. The partition_limit factor + controls how frequently the most bit-costly mode (intra 4x4) + will be used. This is useful in case the 512k limit is reached + and the following message is displayed: Error code: 6 (PARTI‐ + TION0_OVERFLOW: Partition #0 is too big to fit 512k). If using + -partition_limit is not enough to meet the 512k constraint, one + should use less segments in order to save more header bits per + macroblock. See the -segments option. + + -size int + Specify a target size (in bytes) to try and reach for the com‐ + pressed output. Compressor will make several pass of partial + encoding in order to get as close as possible to this target. + + -psnr float + Specify a target PSNR (in dB) to try and reach for the com‐ + pressed output. Compressor will make several pass of partial + encoding in order to get as close as possible to this target. + + -pass int + Set a maximum number of passes to use during the dichotomy used + by options -size or -psnr. Maximum value is 10. + + -resize width height + Resize the source to a rectangle with size width x height. If + either (but not both) of the width or height parameters is 0, + the value will be calculated preserving the aspect-ratio. + + -crop x_position y_position width height + Crop the source to a rectangle with top-left corner at coordi‐ + nates (x_position, y_position) and size width x height. This + cropping area must be fully contained within the source rectan‐ + gle. + + -s width height + Specify that the input file actually consists of raw Y'CbCr sam‐ + ples following the ITU-R BT.601 recommendation, in 4:2:0 linear + format. The luma plane has size width x height. + + -map int + Output additional ASCII-map of encoding information. Possible + map values range from 1 to 6. This is only meant to help debug‐ + ging. + + -pre int + Specify some pre-processing steps. Using a value of '2' will + trigger quality-dependent pseudo-random dithering during + RGBA->YUVA conversion (lossy compression only). + + -alpha_filter string + Specify the predictive filtering method for the alpha plane. One + of 'none', 'fast' or 'best', in increasing complexity and slow‐ + ness order. Default is 'fast'. Internally, alpha filtering is + performed using four possible predictions (none, horizontal, + vertical, gradient). The 'best' mode will try each mode in turn + and pick the one which gives the smaller size. The 'fast' mode + will just try to form an a-priori guess without testing all + modes. + + -alpha_method int + Specify the algorithm used for alpha compression: 0 or 1. Algo‐ + rithm 0 denotes no compression, 1 uses WebP lossless format for + compression. The default is 1. + + -alpha_cleanup + Modify unseen RGB values under fully transparent area, to help + compressibility. The default is off. + + -blend_alpha int + This option blends the alpha channel (if present) with the + source using the background color specified in hexadecimal as + 0xrrggbb. The alpha channel is afterward reset to the opaque + value 255. + + -noalpha + Using this option will discard the alpha channel. + + -lossless + Encode the image without any loss. + + -hint string + Specify the hint about input image type. Possible values are: + photo, picture or graph. + + -metadata string + A comma separated list of metadata to copy from the input to the + output if present. Valid values: all, none, exif, icc, xmp. + The default is none. + + Note: each input format may not support all combinations. + + -noasm Disable all assembly optimizations. + + -v Print extra information (encoding time in particular). + + -print_psnr + Compute and report average PSNR (Peak-Signal-To-Noise ratio). + + -print_ssim + Compute and report average SSIM (structural similarity metric, + see http://en.wikipedia.org/wiki/SSIM for additional details). + + -print_lsim + Compute and report local similarity metric (sum of lowest error + amongst the collocated pixel neighbors). + + -progress + Report encoding progress in percent. + + -quiet Do not print anything. + + -short Only print brief information (output file size and PSNR) for + testing purpose. + + +BUGS + Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues + Patches welcome! See this page to get started: http://www.webmpro‐ + ject.org/code/contribute/submitting-patches/ + + +EXAMPLES + cwebp -q 50 -lossless picture.png -o picture_lossless.webp + cwebp -q 70 picture_with_alpha.png -o picture_with_alpha.webp + cwebp -sns 70 -f 50 -size 60000 picture.png -o picture.webp + cwebp -o picture.webp -- ---picture.png + + +AUTHORS + cwebp was written by the WebP team. + The latest source tree is available at http://www.webmproject.org/code + + This manual page was written by Pascal Massimino , for the Debian project (and may be used by others). + + +SEE ALSO + dwebp(1), gif2webp(1) + Please refer to http://developers.google.com/speed/webp/ for additional + information. + + + + July 22, 2014 CWEBP(1) diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/dwebp.html b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/dwebp.html new file mode 100644 index 0000000..572a1eb --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/dwebp.html @@ -0,0 +1,337 @@ + + + + + + + + + +DWEBP + + + + +

DWEBP

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+BUGS
+EXAMPLES
+AUTHORS
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

dwebp − +decompress a WebP file to an image file

+ +

SYNOPSIS + +

+ + +

dwebp +[options] input_file.webp

+ +

DESCRIPTION + +

+ + +

This manual +page documents the dwebp command.

+ +

dwebp +decompresses WebP files into PNG, PAM, PPM or PGM +images.

+ +

OPTIONS + +

+ + +

The basic +options are:

+ + + + + + + + +
+ + +

−h

+ + +

Print usage summary.

+
+ +

−version

+ +

Print the version number (as +major.minor.revision) and exit.

+ +

−o +string

+ +

Specify the name of the output +file (as PNG format by default). Using "-" as +output name will direct output to ’stdout’.

+ +

−− +string

+ +

Explicitly specify the input +file. This option is useful if the input file starts with an +’−’ for instance. This option must appear +last. Any other options afterward will be ignored. If +the input file is "−", the data will be read +from stdin instead of a file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

−bmp

+ + +

Change the output format to uncompressed BMP.

+ + +

−tiff

+ + +

Change the output format to uncompressed TIFF.

+ + +

−pam

+ + +

Change the output format to PAM (retains alpha).

+ + +

−ppm

+ + +

Change the output format to PPM (discards alpha).

+ + +

−pgm

+ + +

Change the output format to PGM. The output consists of +luma/chroma samples instead of RGB, using the IMC4 layout. +This option is mainly for verification and debugging +purposes.

+ + +

−yuv

+ + +

Change the output format to raw YUV. The output consists +of luma/chroma-U/chroma-V samples instead of RGB, saved +sequentially as individual planes. This option is mainly for +verification and debugging purposes.

+ +

−nofancy

+ +

Don’t use the fancy +upscaler for YUV420. This may lead to jaggy edges +(especially the red ones), but should be faster.

+ +

−nofilter

+ +

Don’t use the in-loop +filtering process even if it is required by the bitstream. +This may produce visible blocks on the non-compliant output, +but it will make the decoding faster.

+ +

−dither +strength

+ +

Specify a dithering +strength between 0 and 100. Dithering is a +post-processing effect applied to chroma components in lossy +compression. It helps by smoothing gradients and avoiding +banding artifacts.

+ +

−nodither

+ +

Disable all dithering +(default).

+ + + + + + + + +
+ + +

−mt

+ + +

Use multi-threading for decoding, if possible.

+
+ +

−crop +x_position y_position width height

+ +

Crop the decoded picture to a +rectangle with top-left corner at coordinates +(x_position, y_position) and size width +x height. This cropping area must be fully contained +within the source rectangle. The top-left corner will be +snapped to even coordinates if needed. This option is meant +to reduce the memory needed for cropping large images. Note: +the cropping is applied before any scaling.

+ +

−scale width +height

+ +

Rescale the decoded picture to +dimension width x height. This option is +mostly intended to reducing the memory needed to decode +large images, when only a small version is needed +(thumbnail, preview, etc.). Note: scaling is applied +after cropping.

+ + + + + + + + + + + + +
+ + +

−v

+ + +

Print extra information (decoding time in +particular).

+ + +

−noasm

+ + +

Disable all assembly optimizations.

+ +

BUGS + +

+ + +

Please report +all bugs to our issue tracker: +http://code.google.com/p/webp/issues
+Patches welcome! See this page to get started: +http://www.webmproject.org/code/contribute/submitting-patches/

+ +

EXAMPLES + +

+ + +

dwebp +picture.webp −o output.png
+dwebp picture.webp −ppm −o output.ppm
+dwebp −o output.ppm −− +−−−picture.webp
+cat picture.webp | dwebp −o − −− +− > output.ppm

+ +

AUTHORS + +

+ + +

dwebp +was written by the WebP team.
+The latest source tree is available at +http://www.webmproject.org/code

+ +

This manual +page was written by Pascal Massimino +<pascal.massimino@gmail.com>, for the Debian project +(and may be used by others).

+ +

SEE ALSO + +

+ + + +

cwebp(1), +gif2webp(1), webpmux(1)
+Please refer to http://developers.google.com/speed/webp/ for +additional information.

+ +

Output file +format details
+PAM: http://netpbm.sourceforge.net/doc/pam.html
+PGM: http://netpbm.sourceforge.net/doc/pgm.html
+PPM: http://netpbm.sourceforge.net/doc/ppm.html
+PNG: http://www.libpng.org/pub/png/png-sitemap.html#info

+
+ + diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/dwebp.txt b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/dwebp.txt new file mode 100644 index 0000000..399bea8 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/dwebp.txt @@ -0,0 +1,127 @@ +DWEBP(1) DWEBP(1) + + + +NAME + dwebp - decompress a WebP file to an image file + +SYNOPSIS + dwebp [options] input_file.webp + +DESCRIPTION + This manual page documents the dwebp command. + + dwebp decompresses WebP files into PNG, PAM, PPM or PGM images. + +OPTIONS + The basic options are: + + -h Print usage summary. + + -version + Print the version number (as major.minor.revision) and exit. + + -o string + Specify the name of the output file (as PNG format by default). + Using "-" as output name will direct output to 'stdout'. + + -- string + Explicitly specify the input file. This option is useful if the + input file starts with an '-' for instance. This option must + appear last. Any other options afterward will be ignored. If + the input file is "-", the data will be read from stdin instead + of a file. + + -bmp Change the output format to uncompressed BMP. + + -tiff Change the output format to uncompressed TIFF. + + -pam Change the output format to PAM (retains alpha). + + -ppm Change the output format to PPM (discards alpha). + + -pgm Change the output format to PGM. The output consists of + luma/chroma samples instead of RGB, using the IMC4 layout. This + option is mainly for verification and debugging purposes. + + -yuv Change the output format to raw YUV. The output consists of + luma/chroma-U/chroma-V samples instead of RGB, saved sequen‐ + tially as individual planes. This option is mainly for verifica‐ + tion and debugging purposes. + + -nofancy + Don't use the fancy upscaler for YUV420. This may lead to jaggy + edges (especially the red ones), but should be faster. + + -nofilter + Don't use the in-loop filtering process even if it is required + by the bitstream. This may produce visible blocks on the non- + compliant output, but it will make the decoding faster. + + -dither strength + Specify a dithering strength between 0 and 100. Dithering is a + post-processing effect applied to chroma components in lossy + compression. It helps by smoothing gradients and avoiding band‐ + ing artifacts. + + -nodither + Disable all dithering (default). + + -mt Use multi-threading for decoding, if possible. + + -crop x_position y_position width height + Crop the decoded picture to a rectangle with top-left corner at + coordinates (x_position, y_position) and size width x height. + This cropping area must be fully contained within the source + rectangle. The top-left corner will be snapped to even coordi‐ + nates if needed. This option is meant to reduce the memory + needed for cropping large images. Note: the cropping is applied + before any scaling. + + -scale width height + Rescale the decoded picture to dimension width x height. This + option is mostly intended to reducing the memory needed to + decode large images, when only a small version is needed (thumb‐ + nail, preview, etc.). Note: scaling is applied after cropping. + + -v Print extra information (decoding time in particular). + + -noasm Disable all assembly optimizations. + + +BUGS + Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues + Patches welcome! See this page to get started: http://www.webmpro‐ + ject.org/code/contribute/submitting-patches/ + + +EXAMPLES + dwebp picture.webp -o output.png + dwebp picture.webp -ppm -o output.ppm + dwebp -o output.ppm -- ---picture.webp + cat picture.webp | dwebp -o - -- - > output.ppm + + +AUTHORS + dwebp was written by the WebP team. + The latest source tree is available at http://www.webmproject.org/code + + This manual page was written by Pascal Massimino , for the Debian project (and may be used by others). + + +SEE ALSO + cwebp(1), gif2webp(1), webpmux(1) + Please refer to http://developers.google.com/speed/webp/ for additional + information. + + Output file format details + PAM: http://netpbm.sourceforge.net/doc/pam.html + PGM: http://netpbm.sourceforge.net/doc/pgm.html + PPM: http://netpbm.sourceforge.net/doc/ppm.html + PNG: http://www.libpng.org/pub/png/png-sitemap.html#info + + + + July 22, 2014 DWEBP(1) diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/gif2webp.html b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/gif2webp.html new file mode 100644 index 0000000..85c2c3d --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/gif2webp.html @@ -0,0 +1,299 @@ + + + + + + + + + +GIF2WEBP + + + + +

GIF2WEBP

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+BUGS
+EXAMPLES
+AUTHORS
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

gif2webp +− Convert a GIF image to WebP

+ +

SYNOPSIS + +

+ + + +

gif2webp +[options] input_file.gif −o +output_file.webp

+ +

DESCRIPTION + +

+ + +

This manual +page documents the gif2webp command.

+ + +

gif2webp +converts a GIF image to a WebP image.

+ +

OPTIONS + +

+ + +

The basic +options are:
+−o
string

+ +

Specify the name of the output +WebP file. If omitted, gif2webp will perform +conversion but only report statistics. Using +"−" as output name will direct output to +’stdout’.

+ +

−h, +−help

+ +

Usage information.

+ +

−version

+ +

Print the version number (as +major.minor.revision) and exit.

+ + + + + + + + + + + + +
+ + +

−lossy

+ + +

Encode the image using lossy compression.

+ + +

−mixed

+ + +

Mixed compression mode: optimize compression of the +image by picking either lossy or lossless compression for +each frame heuristically.

+ +

−q +float

+ +

Specify the compression factor +for RGB channels between 0 and 100. The default is 75.
+In case of lossless compression (default), a small factor +enables faster compression speed, but produces a larger +file. Maximum compression is achieved by using a value of +100.
+In case of lossy compression (specified by the −lossy +option), a small factor produces a smaller file with lower +quality. Best quality is achieved by using a value of +100.

+ + + + + + + +
+ + +

−m int

+ + +

Specify the compression method to use. This parameter +controls the trade off between encoding speed and the +compressed file size and quality. Possible values range from +0 to 6. Default value is 4. When higher values are used, the +encoder will spend more time inspecting additional encoding +possibilities and decide on the quality gain. Lower value +can result is faster processing time at the expense of +larger file size and lower compression quality.

+ +

−kmin int +
+−kmax
int

+ +

Specify the minimum and maximum +distance between consecutive key frames (independently +decodable frames) in the output animation. The tool will +insert some key frames into the output animation as needed +so that this criteria is satisfied.
+A ’kmin’ value of 0 will turn off insertion of +key frames. Typical values are in the range 3 to 30. Default +values are kmin = 9, kmax = 17 for lossless compression and +kmin = 3, kmax = 5 for lossy compression.
+These two options are relevant only for animated images with +large number of frames (>50).
+When lower values are used, more frames will be converted to +key frames. This may lead to smaller number of frames +required to decode a frame on average, thereby improving the +decoding performance. But this may lead to slightly bigger +file sizes. Higher values may lead to worse decoding +performance, but smaller file sizes.
+Some restrictions:
+(i) kmin < kmax,
+(ii) kmin >= kmax / 2 + 1 and
+(iii) kmax - kmin <= 30.
+If any of these restrictions are not met, they will be +enforced automatically.

+ +

−metadata +string

+ +

A comma separated list of +metadata to copy from the input to the output if present. +Valid values: all, none, icc, +xmp. The default is xmp.

+ + + + + + + + + + + + + + + + + + + + + + +
+ + +

−f int

+ + +

For lossy encoding only (specified by the −lossy +option). Specify the strength of the deblocking filter, +between 0 (no filtering) and 100 (maximum filtering). A +value of 0 will turn off any filtering. Higher value will +increase the strength of the filtering process applied after +decoding the picture. The higher the value the smoother the +picture will appear. Typical values are usually in the range +of 20 to 50.

+ + +

−mt

+ + +

Use multi-threading for encoding, if possible. This +option is only effective when using lossy compression.

+ + +

−v

+ + +

Print extra information.

+ + +

−quiet

+ + +

Do not print anything.

+ +

BUGS + +

+ + +

Please report +all bugs to our issue tracker: +http://code.google.com/p/webp/issues
+Patches welcome! See this page to get started: +http://www.webmproject.org/code/contribute/submitting-patches/

+ +

EXAMPLES + +

+ + +

gif2webp +picture.gif −o picture.webp
+gif2webp −q 70 picture.gif −o picture.webp
+gif2webp −lossy −m 3 picture.gif −o +picture_lossy.webp
+gif2webp −lossy −f 50 picture.gif −o +picture.webp
+gif2webp −q 70 −o picture.webp −− +−−−picture.gif

+ +

AUTHORS + +

+ + + +

gif2webp +was written by the WebP team.
+The latest source tree is available at +http://www.webmproject.org/code

+ +

This manual +page was written by Urvang Joshi <urvang@google.com>, +for the Debian project (and may be used by others).

+ +

SEE ALSO + +

+ + + +

cwebp(1), +dwebp(1), webpmux(1)
+Please refer to http://developers.google.com/speed/webp/ for +additional information.

+
+ + diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/gif2webp.txt b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/gif2webp.txt new file mode 100644 index 0000000..d1ab9ac --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/gif2webp.txt @@ -0,0 +1,132 @@ +GIF2WEBP(1) GIF2WEBP(1) + + + +NAME + gif2webp - Convert a GIF image to WebP + +SYNOPSIS + gif2webp [options] input_file.gif -o output_file.webp + +DESCRIPTION + This manual page documents the gif2webp command. + + gif2webp converts a GIF image to a WebP image. + +OPTIONS + The basic options are: + + -o string + Specify the name of the output WebP file. If omitted, gif2webp + will perform conversion but only report statistics. Using "-" + as output name will direct output to 'stdout'. + + -h, -help + Usage information. + + -version + Print the version number (as major.minor.revision) and exit. + + -lossy Encode the image using lossy compression. + + -mixed Mixed compression mode: optimize compression of the image by + picking either lossy or lossless compression for each frame + heuristically. + + -q float + Specify the compression factor for RGB channels between 0 and + 100. The default is 75. + In case of lossless compression (default), a small factor + enables faster compression speed, but produces a larger file. + Maximum compression is achieved by using a value of 100. + In case of lossy compression (specified by the -lossy option), a + small factor produces a smaller file with lower quality. Best + quality is achieved by using a value of 100. + + -m int Specify the compression method to use. This parameter controls + the trade off between encoding speed and the compressed file + size and quality. Possible values range from 0 to 6. Default + value is 4. When higher values are used, the encoder will spend + more time inspecting additional encoding possibilities and + decide on the quality gain. Lower value can result is faster + processing time at the expense of larger file size and lower + compression quality. + + -kmin int + + -kmax int + Specify the minimum and maximum distance between consecutive key + frames (independently decodable frames) in the output animation. + The tool will insert some key frames into the output animation + as needed so that this criteria is satisfied. + A 'kmin' value of 0 will turn off insertion of key frames. Typ‐ + ical values are in the range 3 to 30. Default values are kmin = + 9, kmax = 17 for lossless compression and kmin = 3, kmax = 5 for + lossy compression. + These two options are relevant only for animated images with + large number of frames (>50). + When lower values are used, more frames will be converted to key + frames. This may lead to smaller number of frames required to + decode a frame on average, thereby improving the decoding per‐ + formance. But this may lead to slightly bigger file sizes. + Higher values may lead to worse decoding performance, but + smaller file sizes. + Some restrictions: + (i) kmin < kmax, + (ii) kmin >= kmax / 2 + 1 and + (iii) kmax - kmin <= 30. + If any of these restrictions are not met, they will be enforced + automatically. + + -metadata string + A comma separated list of metadata to copy from the input to the + output if present. Valid values: all, none, icc, xmp. The + default is xmp. + + -f int For lossy encoding only (specified by the -lossy option). Spec‐ + ify the strength of the deblocking filter, between 0 (no filter‐ + ing) and 100 (maximum filtering). A value of 0 will turn off + any filtering. Higher value will increase the strength of the + filtering process applied after decoding the picture. The higher + the value the smoother the picture will appear. Typical values + are usually in the range of 20 to 50. + + -mt Use multi-threading for encoding, if possible. This option is + only effective when using lossy compression. + + -v Print extra information. + + -quiet Do not print anything. + + +BUGS + Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues + Patches welcome! See this page to get started: http://www.webmpro‐ + ject.org/code/contribute/submitting-patches/ + + +EXAMPLES + gif2webp picture.gif -o picture.webp + gif2webp -q 70 picture.gif -o picture.webp + gif2webp -lossy -m 3 picture.gif -o picture_lossy.webp + gif2webp -lossy -f 50 picture.gif -o picture.webp + gif2webp -q 70 -o picture.webp -- ---picture.gif + + +AUTHORS + gif2webp was written by the WebP team. + The latest source tree is available at http://www.webmproject.org/code + + This manual page was written by Urvang Joshi , for + the Debian project (and may be used by others). + + +SEE ALSO + cwebp(1), dwebp(1), webpmux(1) + Please refer to http://developers.google.com/speed/webp/ for additional + information. + + + + March 7, 2014 GIF2WEBP(1) diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/vwebp.html b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/vwebp.html new file mode 100644 index 0000000..dd2444b --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/vwebp.html @@ -0,0 +1,250 @@ + + + + + + + + + +VWEBP + + + + +

VWEBP

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+KEYBOARD SHORTCUTS
+BUGS
+EXAMPLES
+AUTHORS
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

vwebp − +decompress a WebP file and display it in a window

+ +

SYNOPSIS + +

+ + +

vwebp +[options] input_file.webp

+ +

DESCRIPTION + +

+ + +

This manual +page documents the vwebp command.

+ +

vwebp +decompresses a WebP file and displays it in a window using +OpenGL.

+ +

OPTIONS + +

+ + + + + + + + + +
+ + +

−h

+ + +

Print usage summary.

+
+ +

−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 +strength

+ +

Specify a dithering +strength between 0 and 100. Dithering is a +post-processing effect applied to chroma components in lossy +compression. It helps by smoothing gradients and avoiding +banding artifacts. Default: 50.

+ + + + + + + + + + + + +
+ + +

−mt

+ + +

Use multi-threading for decoding, if possible.

+ + +

−info

+ + +

Display image information on top of the decoded +image.

+ +

−− +string

+ +

Explicitly specify the input +file. This option is useful if the input file starts with an +’−’ for instance. This option must appear +last. Any other options afterward will be ignored. If +the input file is "−", the data will be read +from stdin instead of a file.

+ +

KEYBOARD SHORTCUTS + +

+ + + + + + + + + + + + + + + +
+ + +

’c’

+ + +

Toggle use of color profile.

+
+ + +

’i’

+ + +

Overlay file information.

+
+ +

’q’ / +’Q’ / ESC

+ +

Quit.

+ +

BUGS + +

+ + +

Please report +all bugs to our issue tracker: +http://code.google.com/p/webp/issues
+Patches welcome! See this page to get started: +http://www.webmproject.org/code/contribute/submitting-patches/

+ +

EXAMPLES + +

+ + +

vwebp +picture.webp
+vwebp picture.webp -mt -dither 0
+vwebp −− −−−picture.webp

+ +

AUTHORS + +

+ + +

vwebp +was written by the WebP team.
+The latest source tree is available at +http://www.webmproject.org/code

+ +

This manual +page was written for the Debian project (and may be used by +others).

+ +

SEE ALSO + +

+ + + +

dwebp(1) +
+Please refer to http://developers.google.com/speed/webp/ for +additional information.

+
+ + diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/vwebp.txt b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/vwebp.txt new file mode 100644 index 0000000..da079f4 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/vwebp.txt @@ -0,0 +1,88 @@ +VWEBP(1) VWEBP(1) + + + +NAME + vwebp - decompress a WebP file and display it in a window + +SYNOPSIS + vwebp [options] input_file.webp + +DESCRIPTION + This manual page documents the vwebp command. + + vwebp decompresses a WebP file and displays it in a window using + OpenGL. + +OPTIONS + -h Print usage summary. + + -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 strength + Specify a dithering strength between 0 and 100. Dithering is a + post-processing effect applied to chroma components in lossy + compression. It helps by smoothing gradients and avoiding band‐ + ing artifacts. Default: 50. + + -mt Use multi-threading for decoding, if possible. + + -info Display image information on top of the decoded image. + + -- string + Explicitly specify the input file. This option is useful if the + input file starts with an '-' for instance. This option must + appear last. Any other options afterward will be ignored. If + the input file is "-", the data will be read from stdin instead + of a file. + + + + KEYBOARD SHORTCUTS + + 'c' Toggle use of color profile. + + 'i' Overlay file information. + + 'q' / 'Q' / ESC + Quit. + + +BUGS + Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues + Patches welcome! See this page to get started: http://www.webmpro‐ + ject.org/code/contribute/submitting-patches/ + + +EXAMPLES + vwebp picture.webp + vwebp picture.webp -mt -dither 0 + vwebp -- ---picture.webp + + +AUTHORS + vwebp was written by the WebP team. + The latest source tree is available at http://www.webmproject.org/code + + This manual page was written for the Debian project (and may be used by + others). + + +SEE ALSO + dwebp(1) + Please refer to http://developers.google.com/speed/webp/ for additional + information. + + + + July 23, 2014 VWEBP(1) diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/webpmux.html b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/webpmux.html new file mode 100644 index 0000000..cf40f75 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/webpmux.html @@ -0,0 +1,337 @@ + + + + + + + + + +WEBPMUX + + + + +

WEBPMUX

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+BUGS
+EXAMPLES
+AUTHORS
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

webpmux − +command line tool to create WebP Mux/container file.

+ +

SYNOPSIS + +

+ + +

webpmux +−get GET_OPTIONS INPUT −o +OUTPUT
+webpmux −set
SET_OPTIONS INPUT +−o OUTPUT
+webpmux −strip
STRIP_OPTIONS INPUT +−o OUTPUT
+webpmux −frame
FRAME_OPTIONS [ +−frame ... ] [ −loop LOOP_COUNT +]

+ +

[ −bgcolor +BACKGROUND_COLOR ] −o OUTPUT

+ +

webpmux −info +INPUT
+webpmux [−h|−help]
+webpmux −version

+ +

DESCRIPTION + +

+ + +

This manual +page documents the webpmux command.

+ +

webpmux +can be used to create a WebP container file and +extract/strip relevant data from the container file.

+ +

OPTIONS + +

+ + +

GET_OPTIONS +(−get):

+ + + + + + + + + + + + + + + + + + + + +
+ + +

icc

+ + +

Get ICC profile.

+
+ + +

exif

+ + +

Get EXIF metadata.

+
+ + +

xmp

+ + +

Get XMP metadata.

+
+ +

frame n

+ +

Get nth frame.

+ +

SET_OPTIONS +(−set)
+icc
file.icc

+ +

Set ICC profile.

+ +

Where: +’file.icc’ contains the ICC profile to be set. +
+exif
file.exif

+ +

Set EXIF metadata.

+ +

Where: +’file.exif’ contains the EXIF metadata to be +set.
+xmp
file.xmp

+ +

Set XMP metadata.

+ +

Where: +’file.xmp’ contains the XMP metadata to be +set.

+ + +

STRIP_OPTIONS +(−strip)

+ + + + + + + + + + + + + + + + + + + + +
+ + +

icc

+ + +

Strip ICC profile.

+
+ + +

exif

+ + +

Strip EXIF metadata.

+
+ + +

xmp

+ + +

Strip XMP metadata.

+
+ + +

FRAME_OPTIONS +(−frame)
+file_i +di[+xi+yi[+mi[bi]]]

+ +

Where: ’file_i’ is +the i’th frame (WebP format), +’xi’,’yi’ specify the image offset +for this frame, ’di’ is the pause duration +before next frame, ’mi’ is the dispose method +for this frame (0 for NONE or 1 for BACKGROUND) and +’bi’ is the blending method for this frame (+b +for BLEND or -b for NO_BLEND). Argument ’bi’ can +be omitted and will default to +b (BLEND). Also, +’mi’ can be omitted if ’bi’ is +omitted and will default to 0 (NONE). Finally, if +’mi’ and ’bi’ are omitted then +’xi’ and ’yi’ can be omitted and +will default to +0+0.

+ +

−loop n

+ +

Loop the frames n number of +times. 0 indicates the frames should loop forever. Valid +range is 0 to 65535 [Default: 0 (infinite)].

+ +

−bgcolor +A,R,G,B

+ +

Background color of the canvas. +
+where: ’A’, ’R’, ’G’ and +’B’ are integers in the range 0 to 255 +specifying the Alpha, Red, Green and Blue component values +respectively [Default: 255,255,255,255].

+ +

INPUT +
+Input file in WebP format.

+ +

OUTPUT +(−o)
+Output file in WebP format.

+ +

Note: +
+The nature of EXIF, XMP and ICC data is not checked and is +assumed to
+be valid.

+ +

BUGS + +

+ + +

Please report +all bugs to our issue tracker: +http://code.google.com/p/webp/issues
+Patches welcome! See this page to get started: +http://www.webmproject.org/code/contribute/submitting-patches/

+ +

EXAMPLES + +

+ + +

webpmux +−set icc image_profile.icc in.webp −o +icc_container.webp
+webpmux −get icc icc_container.webp −o +image_profile.icc
+webpmux −strip icc icc_container.webp −o +without_icc.webp
+webpmux −set xmp image_metadata.xmp in.webp −o +xmp_container.webp
+webpmux −get xmp xmp_container.webp −o +image_metadata.xmp
+webpmux −strip xmp xmp_container.webp −o +without_xmp.webp
+webpmux −set exif image_metadata.exif in.webp −o +exif_container.webp
+webpmux −get exif exif_container.webp −o +image_metadata.exif
+webpmux −strip exif exif_container.webp −o +without_exif.webp
+webpmux −frame anim_1.webp +100 −frame +anim_2.webp +100+50+50

+ +

−frame anim_2.webp ++100+50+50+1+b −loop 10 −bgcolor +255,255,255,255

+ +

−o +anim_container.webp

+ +

webpmux −get frame 2 +anim_container.webp −o frame_2.webp
+webpmux −set icc image_profile.icc −o +icc_container.webp −− +−−−in.webp
+webpmux −get icc −o image_profile.icc +−− −−−icc_container.webp
+webpmux −strip icc −o without_icc.webp +−− −−−icc_container.webp

+ +

AUTHORS + +

+ + +

webpmux +is written by the WebP team.
+The latest source tree is available at +http://www.webmproject.org/code

+ +

This manual +page was written by Vikas Arora +<vikaas.arora@gmail.com>, for the Debian project (and +may be used by others).

+ +

SEE ALSO + +

+ + + +

cwebp(1), +dwebp(1), gif2webp(1)
+Please refer to http://developers.google.com/speed/webp/ for +additional information.

+
+ + diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/webpmux.txt b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/webpmux.txt new file mode 100644 index 0000000..4935565 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/doc/webpmux.txt @@ -0,0 +1,141 @@ +WEBPMUX(1) WEBPMUX(1) + + + +NAME + webpmux - command line tool to create WebP Mux/container file. + +SYNOPSIS + webpmux -get GET_OPTIONS INPUT -o OUTPUT + webpmux -set SET_OPTIONS INPUT -o OUTPUT + webpmux -strip STRIP_OPTIONS INPUT -o OUTPUT + webpmux -frame FRAME_OPTIONS [ -frame ... ] [ -loop LOOP_COUNT ] + [ -bgcolor BACKGROUND_COLOR ] -o OUTPUT + webpmux -info INPUT + webpmux [-h|-help] + webpmux -version + +DESCRIPTION + This manual page documents the webpmux command. + + webpmux can be used to create a WebP container file and extract/strip + relevant data from the container file. + +OPTIONS + GET_OPTIONS (-get): + icc Get ICC profile. + + exif Get EXIF metadata. + + xmp Get XMP metadata. + + frame n + Get nth frame. + + + SET_OPTIONS (-set) + icc file.icc + Set ICC profile. + + Where: 'file.icc' contains the ICC profile to be set. + + exif file.exif + Set EXIF metadata. + + Where: 'file.exif' contains the EXIF metadata to be set. + + xmp file.xmp + Set XMP metadata. + + Where: 'file.xmp' contains the XMP metadata to be set. + + + STRIP_OPTIONS (-strip) + icc Strip ICC profile. + + exif Strip EXIF metadata. + + xmp Strip XMP metadata. + + + FRAME_OPTIONS (-frame) + file_i +di[+xi+yi[+mi[bi]]] + Where: 'file_i' is the i'th frame (WebP format), 'xi','yi' spec‐ + ify the image offset for this frame, 'di' is the pause duration + before next frame, 'mi' is the dispose method for this frame (0 + for NONE or 1 for BACKGROUND) and 'bi' is the blending method + for this frame (+b for BLEND or -b for NO_BLEND). Argument 'bi' + can be omitted and will default to +b (BLEND). Also, 'mi' can + be omitted if 'bi' is omitted and will default to 0 (NONE). + Finally, if 'mi' and 'bi' are omitted then 'xi' and 'yi' can be + omitted and will default to +0+0. + + -loop n + Loop the frames n number of times. 0 indicates the frames should + loop forever. Valid range is 0 to 65535 [Default: 0 (infi‐ + nite)]. + + -bgcolor A,R,G,B + Background color of the canvas. + where: 'A', 'R', 'G' and 'B' are integers in the range 0 to 255 + specifying the Alpha, Red, Green and Blue component values + respectively [Default: 255,255,255,255]. + + + INPUT + Input file in WebP format. + + + OUTPUT (-o) + Output file in WebP format. + + + Note: + The nature of EXIF, XMP and ICC data is not checked and is assumed to + be valid. + + +BUGS + Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues + Patches welcome! See this page to get started: http://www.webmpro‐ + ject.org/code/contribute/submitting-patches/ + + +EXAMPLES + webpmux -set icc image_profile.icc in.webp -o icc_container.webp + webpmux -get icc icc_container.webp -o image_profile.icc + webpmux -strip icc icc_container.webp -o without_icc.webp + webpmux -set xmp image_metadata.xmp in.webp -o xmp_container.webp + webpmux -get xmp xmp_container.webp -o image_metadata.xmp + webpmux -strip xmp xmp_container.webp -o without_xmp.webp + webpmux -set exif image_metadata.exif in.webp -o exif_container.webp + webpmux -get exif exif_container.webp -o image_metadata.exif + webpmux -strip exif exif_container.webp -o without_exif.webp + webpmux -frame anim_1.webp +100 -frame anim_2.webp +100+50+50 + -frame anim_2.webp +100+50+50+1+b -loop 10 -bgcolor + 255,255,255,255 + -o anim_container.webp + webpmux -get frame 2 anim_container.webp -o frame_2.webp + webpmux -set icc image_profile.icc -o icc_container.webp -- + ---in.webp + webpmux -get icc -o image_profile.icc -- ---icc_container.webp + webpmux -strip icc -o without_icc.webp -- ---icc_container.webp + + +AUTHORS + webpmux is written by the WebP team. + The latest source tree is available at http://www.webmproject.org/code + + This manual page was written by Vikas Arora , + for the Debian project (and may be used by others). + + +SEE ALSO + cwebp(1), dwebp(1), gif2webp(1) + Please refer to http://developers.google.com/speed/webp/ for additional + information. + + + + December 17, 2013 WEBPMUX(1) diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/decode.h b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/decode.h new file mode 100644 index 0000000..36c27c3 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/decode.h @@ -0,0 +1,499 @@ +// Copyright 2010 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// Main decoding functions for WebP images. +// +// Author: Skal (pascal.massimino@gmail.com) + +#ifndef WEBP_WEBP_DECODE_H_ +#define WEBP_WEBP_DECODE_H_ + +#include "./types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define WEBP_DECODER_ABI_VERSION 0x0203 // MAJOR(8b) + MINOR(8b) + +// Note: forward declaring enumerations is not allowed in (strict) C and C++, +// the types are left here for reference. +// typedef enum VP8StatusCode VP8StatusCode; +// typedef enum WEBP_CSP_MODE WEBP_CSP_MODE; +typedef struct WebPRGBABuffer WebPRGBABuffer; +typedef struct WebPYUVABuffer WebPYUVABuffer; +typedef struct WebPDecBuffer WebPDecBuffer; +typedef struct WebPIDecoder WebPIDecoder; +typedef struct WebPBitstreamFeatures WebPBitstreamFeatures; +typedef struct WebPDecoderOptions WebPDecoderOptions; +typedef struct WebPDecoderConfig WebPDecoderConfig; + +// Return the decoder's version number, packed in hexadecimal using 8bits for +// each of major/minor/revision. E.g: v2.5.7 is 0x020507. +WEBP_EXTERN(int) WebPGetDecoderVersion(void); + +// Retrieve basic header information: width, height. +// This function will also validate the header and return 0 in +// case of formatting error. +// Pointers 'width' and 'height' can be passed NULL if deemed irrelevant. +WEBP_EXTERN(int) WebPGetInfo(const uint8_t* data, size_t data_size, + int* width, int* height); + +// Decodes WebP images pointed to by 'data' and returns RGBA samples, along +// with the dimensions in *width and *height. The ordering of samples in +// memory is R, G, B, A, R, G, B, A... in scan order (endian-independent). +// The returned pointer should be deleted calling free(). +// Returns NULL in case of error. +WEBP_EXTERN(uint8_t*) WebPDecodeRGBA(const uint8_t* data, size_t data_size, + int* width, int* height); + +// Same as WebPDecodeRGBA, but returning A, R, G, B, A, R, G, B... ordered data. +WEBP_EXTERN(uint8_t*) WebPDecodeARGB(const uint8_t* data, size_t data_size, + int* width, int* height); + +// Same as WebPDecodeRGBA, but returning B, G, R, A, B, G, R, A... ordered data. +WEBP_EXTERN(uint8_t*) WebPDecodeBGRA(const uint8_t* data, size_t data_size, + int* width, int* height); + +// Same as WebPDecodeRGBA, but returning R, G, B, R, G, B... ordered data. +// If the bitstream contains transparency, it is ignored. +WEBP_EXTERN(uint8_t*) WebPDecodeRGB(const uint8_t* data, size_t data_size, + int* width, int* height); + +// Same as WebPDecodeRGB, but returning B, G, R, B, G, R... ordered data. +WEBP_EXTERN(uint8_t*) WebPDecodeBGR(const uint8_t* data, size_t data_size, + int* width, int* height); + + +// Decode WebP images pointed to by 'data' to Y'UV format(*). The pointer +// returned is the Y samples buffer. Upon return, *u and *v will point to +// the U and V chroma data. These U and V buffers need NOT be free()'d, +// unlike the returned Y luma one. The dimension of the U and V planes +// are both (*width + 1) / 2 and (*height + 1)/ 2. +// Upon return, the Y buffer has a stride returned as '*stride', while U and V +// have a common stride returned as '*uv_stride'. +// Return NULL in case of error. +// (*) Also named Y'CbCr. See: http://en.wikipedia.org/wiki/YCbCr +WEBP_EXTERN(uint8_t*) WebPDecodeYUV(const uint8_t* data, size_t data_size, + int* width, int* height, + uint8_t** u, uint8_t** v, + int* stride, int* uv_stride); + +// These five functions are variants of the above ones, that decode the image +// directly into a pre-allocated buffer 'output_buffer'. The maximum storage +// available in this buffer is indicated by 'output_buffer_size'. If this +// storage is not sufficient (or an error occurred), NULL is returned. +// Otherwise, output_buffer is returned, for convenience. +// The parameter 'output_stride' specifies the distance (in bytes) +// between scanlines. Hence, output_buffer_size is expected to be at least +// output_stride x picture-height. +WEBP_EXTERN(uint8_t*) WebPDecodeRGBAInto( + const uint8_t* data, size_t data_size, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); +WEBP_EXTERN(uint8_t*) WebPDecodeARGBInto( + const uint8_t* data, size_t data_size, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); +WEBP_EXTERN(uint8_t*) WebPDecodeBGRAInto( + const uint8_t* data, size_t data_size, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); + +// RGB and BGR variants. Here too the transparency information, if present, +// will be dropped and ignored. +WEBP_EXTERN(uint8_t*) WebPDecodeRGBInto( + const uint8_t* data, size_t data_size, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); +WEBP_EXTERN(uint8_t*) WebPDecodeBGRInto( + const uint8_t* data, size_t data_size, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); + +// WebPDecodeYUVInto() is a variant of WebPDecodeYUV() that operates directly +// into pre-allocated luma/chroma plane buffers. This function requires the +// strides to be passed: one for the luma plane and one for each of the +// chroma ones. The size of each plane buffer is passed as 'luma_size', +// 'u_size' and 'v_size' respectively. +// Pointer to the luma plane ('*luma') is returned or NULL if an error occurred +// during decoding (or because some buffers were found to be too small). +WEBP_EXTERN(uint8_t*) WebPDecodeYUVInto( + const uint8_t* data, size_t data_size, + uint8_t* luma, size_t luma_size, int luma_stride, + uint8_t* u, size_t u_size, int u_stride, + uint8_t* v, size_t v_size, int v_stride); + +//------------------------------------------------------------------------------ +// Output colorspaces and buffer + +// Colorspaces +// Note: the naming describes the byte-ordering of packed samples in memory. +// For instance, MODE_BGRA relates to samples ordered as B,G,R,A,B,G,R,A,... +// Non-capital names (e.g.:MODE_Argb) relates to pre-multiplied RGB channels. +// RGBA-4444 and RGB-565 colorspaces are represented by following byte-order: +// RGBA-4444: [r3 r2 r1 r0 g3 g2 g1 g0], [b3 b2 b1 b0 a3 a2 a1 a0], ... +// RGB-565: [r4 r3 r2 r1 r0 g5 g4 g3], [g2 g1 g0 b4 b3 b2 b1 b0], ... +// In the case WEBP_SWAP_16BITS_CSP is defined, the bytes are swapped for +// these two modes: +// RGBA-4444: [b3 b2 b1 b0 a3 a2 a1 a0], [r3 r2 r1 r0 g3 g2 g1 g0], ... +// RGB-565: [g2 g1 g0 b4 b3 b2 b1 b0], [r4 r3 r2 r1 r0 g5 g4 g3], ... + +typedef enum WEBP_CSP_MODE { + MODE_RGB = 0, MODE_RGBA = 1, + MODE_BGR = 2, MODE_BGRA = 3, + MODE_ARGB = 4, MODE_RGBA_4444 = 5, + MODE_RGB_565 = 6, + // RGB-premultiplied transparent modes (alpha value is preserved) + MODE_rgbA = 7, + MODE_bgrA = 8, + MODE_Argb = 9, + MODE_rgbA_4444 = 10, + // YUV modes must come after RGB ones. + MODE_YUV = 11, MODE_YUVA = 12, // yuv 4:2:0 + MODE_LAST = 13 +} WEBP_CSP_MODE; + +// Some useful macros: +static WEBP_INLINE int WebPIsPremultipliedMode(WEBP_CSP_MODE mode) { + return (mode == MODE_rgbA || mode == MODE_bgrA || mode == MODE_Argb || + mode == MODE_rgbA_4444); +} + +static WEBP_INLINE int WebPIsAlphaMode(WEBP_CSP_MODE mode) { + return (mode == MODE_RGBA || mode == MODE_BGRA || mode == MODE_ARGB || + mode == MODE_RGBA_4444 || mode == MODE_YUVA || + WebPIsPremultipliedMode(mode)); +} + +static WEBP_INLINE int WebPIsRGBMode(WEBP_CSP_MODE mode) { + return (mode < MODE_YUV); +} + +//------------------------------------------------------------------------------ +// WebPDecBuffer: Generic structure for describing the output sample buffer. + +struct WebPRGBABuffer { // view as RGBA + uint8_t* rgba; // pointer to RGBA samples + int stride; // stride in bytes from one scanline to the next. + size_t size; // total size of the *rgba buffer. +}; + +struct WebPYUVABuffer { // view as YUVA + uint8_t* y, *u, *v, *a; // pointer to luma, chroma U/V, alpha samples + int y_stride; // luma stride + int u_stride, v_stride; // chroma strides + int a_stride; // alpha stride + size_t y_size; // luma plane size + size_t u_size, v_size; // chroma planes size + size_t a_size; // alpha-plane size +}; + +// Output buffer +struct WebPDecBuffer { + WEBP_CSP_MODE colorspace; // Colorspace. + int width, height; // Dimensions. + int is_external_memory; // If true, 'internal_memory' pointer is not used. + union { + WebPRGBABuffer RGBA; + WebPYUVABuffer YUVA; + } u; // Nameless union of buffer parameters. + uint32_t pad[4]; // padding for later use + + uint8_t* private_memory; // Internally allocated memory (only when + // is_external_memory is false). Should not be used + // externally, but accessed via the buffer union. +}; + +// Internal, version-checked, entry point +WEBP_EXTERN(int) WebPInitDecBufferInternal(WebPDecBuffer*, int); + +// Initialize the structure as empty. Must be called before any other use. +// Returns false in case of version mismatch +static WEBP_INLINE int WebPInitDecBuffer(WebPDecBuffer* buffer) { + return WebPInitDecBufferInternal(buffer, WEBP_DECODER_ABI_VERSION); +} + +// Free any memory associated with the buffer. Must always be called last. +// Note: doesn't free the 'buffer' structure itself. +WEBP_EXTERN(void) WebPFreeDecBuffer(WebPDecBuffer* buffer); + +//------------------------------------------------------------------------------ +// Enumeration of the status codes + +typedef enum VP8StatusCode { + VP8_STATUS_OK = 0, + VP8_STATUS_OUT_OF_MEMORY, + VP8_STATUS_INVALID_PARAM, + VP8_STATUS_BITSTREAM_ERROR, + VP8_STATUS_UNSUPPORTED_FEATURE, + VP8_STATUS_SUSPENDED, + VP8_STATUS_USER_ABORT, + VP8_STATUS_NOT_ENOUGH_DATA +} VP8StatusCode; + +//------------------------------------------------------------------------------ +// Incremental decoding +// +// This API allows streamlined decoding of partial data. +// Picture can be incrementally decoded as data become available thanks to the +// WebPIDecoder object. This object can be left in a SUSPENDED state if the +// picture is only partially decoded, pending additional input. +// Code example: +// +// WebPInitDecBuffer(&buffer); +// buffer.colorspace = mode; +// ... +// WebPIDecoder* idec = WebPINewDecoder(&buffer); +// while (has_more_data) { +// // ... (get additional data) +// status = WebPIAppend(idec, new_data, new_data_size); +// if (status != VP8_STATUS_SUSPENDED || +// break; +// } +// +// // The above call decodes the current available buffer. +// // Part of the image can now be refreshed by calling to +// // WebPIDecGetRGB()/WebPIDecGetYUVA() etc. +// } +// WebPIDelete(idec); + +// Creates a new incremental decoder with the supplied buffer parameter. +// This output_buffer can be passed NULL, in which case a default output buffer +// is used (with MODE_RGB). Otherwise, an internal reference to 'output_buffer' +// is kept, which means that the lifespan of 'output_buffer' must be larger than +// that of the returned WebPIDecoder object. +// The supplied 'output_buffer' content MUST NOT be changed between calls to +// WebPIAppend() or WebPIUpdate() unless 'output_buffer.is_external_memory' is +// set to 1. In such a case, it is allowed to modify the pointers, size and +// stride of output_buffer.u.RGBA or output_buffer.u.YUVA, provided they remain +// within valid bounds. +// All other fields of WebPDecBuffer MUST remain constant between calls. +// Returns NULL if the allocation failed. +WEBP_EXTERN(WebPIDecoder*) WebPINewDecoder(WebPDecBuffer* output_buffer); + +// This function allocates and initializes an incremental-decoder object, which +// will output the RGB/A samples specified by 'csp' into a preallocated +// buffer 'output_buffer'. The size of this buffer is at least +// 'output_buffer_size' and the stride (distance in bytes between two scanlines) +// is specified by 'output_stride'. +// Additionally, output_buffer can be passed NULL in which case the output +// buffer will be allocated automatically when the decoding starts. The +// colorspace 'csp' is taken into account for allocating this buffer. All other +// parameters are ignored. +// Returns NULL if the allocation failed, or if some parameters are invalid. +WEBP_EXTERN(WebPIDecoder*) WebPINewRGB( + WEBP_CSP_MODE csp, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); + +// This function allocates and initializes an incremental-decoder object, which +// will output the raw luma/chroma samples into a preallocated planes if +// supplied. The luma plane is specified by its pointer 'luma', its size +// 'luma_size' and its stride 'luma_stride'. Similarly, the chroma-u plane +// is specified by the 'u', 'u_size' and 'u_stride' parameters, and the chroma-v +// plane by 'v' and 'v_size'. And same for the alpha-plane. The 'a' pointer +// can be pass NULL in case one is not interested in the transparency plane. +// Conversely, 'luma' can be passed NULL if no preallocated planes are supplied. +// In this case, the output buffer will be automatically allocated (using +// MODE_YUVA) when decoding starts. All parameters are then ignored. +// Returns NULL if the allocation failed or if a parameter is invalid. +WEBP_EXTERN(WebPIDecoder*) WebPINewYUVA( + uint8_t* luma, size_t luma_size, int luma_stride, + uint8_t* u, size_t u_size, int u_stride, + uint8_t* v, size_t v_size, int v_stride, + uint8_t* a, size_t a_size, int a_stride); + +// Deprecated version of the above, without the alpha plane. +// Kept for backward compatibility. +WEBP_EXTERN(WebPIDecoder*) WebPINewYUV( + uint8_t* luma, size_t luma_size, int luma_stride, + uint8_t* u, size_t u_size, int u_stride, + uint8_t* v, size_t v_size, int v_stride); + +// Deletes the WebPIDecoder object and associated memory. Must always be called +// if WebPINewDecoder, WebPINewRGB or WebPINewYUV succeeded. +WEBP_EXTERN(void) WebPIDelete(WebPIDecoder* idec); + +// Copies and decodes the next available data. Returns VP8_STATUS_OK when +// the image is successfully decoded. Returns VP8_STATUS_SUSPENDED when more +// data is expected. Returns error in other cases. +WEBP_EXTERN(VP8StatusCode) WebPIAppend( + WebPIDecoder* idec, const uint8_t* data, size_t data_size); + +// A variant of the above function to be used when data buffer contains +// partial data from the beginning. In this case data buffer is not copied +// to the internal memory. +// Note that the value of the 'data' pointer can change between calls to +// WebPIUpdate, for instance when the data buffer is resized to fit larger data. +WEBP_EXTERN(VP8StatusCode) WebPIUpdate( + WebPIDecoder* idec, const uint8_t* data, size_t data_size); + +// Returns the RGB/A image decoded so far. Returns NULL if output params +// are not initialized yet. The RGB/A output type corresponds to the colorspace +// specified during call to WebPINewDecoder() or WebPINewRGB(). +// *last_y is the index of last decoded row in raster scan order. Some pointers +// (*last_y, *width etc.) can be NULL if corresponding information is not +// needed. +WEBP_EXTERN(uint8_t*) WebPIDecGetRGB( + const WebPIDecoder* idec, int* last_y, + int* width, int* height, int* stride); + +// Same as above function to get a YUVA image. Returns pointer to the luma +// plane or NULL in case of error. If there is no alpha information +// the alpha pointer '*a' will be returned NULL. +WEBP_EXTERN(uint8_t*) WebPIDecGetYUVA( + const WebPIDecoder* idec, int* last_y, + uint8_t** u, uint8_t** v, uint8_t** a, + int* width, int* height, int* stride, int* uv_stride, int* a_stride); + +// Deprecated alpha-less version of WebPIDecGetYUVA(): it will ignore the +// alpha information (if present). Kept for backward compatibility. +static WEBP_INLINE uint8_t* WebPIDecGetYUV( + const WebPIDecoder* idec, int* last_y, uint8_t** u, uint8_t** v, + int* width, int* height, int* stride, int* uv_stride) { + return WebPIDecGetYUVA(idec, last_y, u, v, NULL, width, height, + stride, uv_stride, NULL); +} + +// Generic call to retrieve information about the displayable area. +// If non NULL, the left/right/width/height pointers are filled with the visible +// rectangular area so far. +// Returns NULL in case the incremental decoder object is in an invalid state. +// Otherwise returns the pointer to the internal representation. This structure +// is read-only, tied to WebPIDecoder's lifespan and should not be modified. +WEBP_EXTERN(const WebPDecBuffer*) WebPIDecodedArea( + const WebPIDecoder* idec, int* left, int* top, int* width, int* height); + +//------------------------------------------------------------------------------ +// Advanced decoding parametrization +// +// Code sample for using the advanced decoding API +/* + // A) Init a configuration object + WebPDecoderConfig config; + CHECK(WebPInitDecoderConfig(&config)); + + // B) optional: retrieve the bitstream's features. + CHECK(WebPGetFeatures(data, data_size, &config.input) == VP8_STATUS_OK); + + // C) Adjust 'config', if needed + config.no_fancy_upsampling = 1; + config.output.colorspace = MODE_BGRA; + // etc. + + // Note that you can also make config.output point to an externally + // supplied memory buffer, provided it's big enough to store the decoded + // picture. Otherwise, config.output will just be used to allocate memory + // and store the decoded picture. + + // D) Decode! + CHECK(WebPDecode(data, data_size, &config) == VP8_STATUS_OK); + + // E) Decoded image is now in config.output (and config.output.u.RGBA) + + // F) Reclaim memory allocated in config's object. It's safe to call + // this function even if the memory is external and wasn't allocated + // by WebPDecode(). + WebPFreeDecBuffer(&config.output); +*/ + +// Features gathered from the bitstream +struct WebPBitstreamFeatures { + int width; // Width in pixels, as read from the bitstream. + int height; // Height in pixels, as read from the bitstream. + int has_alpha; // True if the bitstream contains an alpha channel. + int has_animation; // True if the bitstream is an animation. + int format; // 0 = undefined (/mixed), 1 = lossy, 2 = lossless + + // Unused for now: + int no_incremental_decoding; // if true, using incremental decoding is not + // recommended. + int rotate; // TODO(later) + int uv_sampling; // should be 0 for now. TODO(later) + uint32_t pad[2]; // padding for later use +}; + +// Internal, version-checked, entry point +WEBP_EXTERN(VP8StatusCode) WebPGetFeaturesInternal( + const uint8_t*, size_t, WebPBitstreamFeatures*, int); + +// Retrieve features from the bitstream. The *features structure is filled +// with information gathered from the bitstream. +// Returns VP8_STATUS_OK when the features are successfully retrieved. Returns +// VP8_STATUS_NOT_ENOUGH_DATA when more data is needed to retrieve the +// features from headers. Returns error in other cases. +static WEBP_INLINE VP8StatusCode WebPGetFeatures( + const uint8_t* data, size_t data_size, + WebPBitstreamFeatures* features) { + return WebPGetFeaturesInternal(data, data_size, features, + WEBP_DECODER_ABI_VERSION); +} + +// Decoding options +struct WebPDecoderOptions { + int bypass_filtering; // if true, skip the in-loop filtering + int no_fancy_upsampling; // if true, use faster pointwise upsampler + int use_cropping; // if true, cropping is applied _first_ + int crop_left, crop_top; // top-left position for cropping. + // Will be snapped to even values. + int crop_width, crop_height; // dimension of the cropping area + int use_scaling; // if true, scaling is applied _afterward_ + int scaled_width, scaled_height; // final resolution + int use_threads; // if true, use multi-threaded decoding + int dithering_strength; // dithering strength (0=Off, 100=full) +#if WEBP_DECODER_ABI_VERSION > 0x0203 + int flip; // flip output vertically + int alpha_dithering_strength; // alpha dithering strength in [0..100] +#endif + + // Unused for now: + int force_rotation; // forced rotation (to be applied _last_) + int no_enhancement; // if true, discard enhancement layer +#if WEBP_DECODER_ABI_VERSION > 0x0203 + uint32_t pad[3]; // padding for later use +#else + uint32_t pad[5]; // padding for later use +#endif +}; + +// Main object storing the configuration for advanced decoding. +struct WebPDecoderConfig { + WebPBitstreamFeatures input; // Immutable bitstream features (optional) + WebPDecBuffer output; // Output buffer (can point to external mem) + WebPDecoderOptions options; // Decoding options +}; + +// Internal, version-checked, entry point +WEBP_EXTERN(int) WebPInitDecoderConfigInternal(WebPDecoderConfig*, int); + +// Initialize the configuration as empty. This function must always be +// called first, unless WebPGetFeatures() is to be called. +// Returns false in case of mismatched version. +static WEBP_INLINE int WebPInitDecoderConfig(WebPDecoderConfig* config) { + return WebPInitDecoderConfigInternal(config, WEBP_DECODER_ABI_VERSION); +} + +// Instantiate a new incremental decoder object with the requested +// configuration. The bitstream can be passed using 'data' and 'data_size' +// parameter, in which case the features will be parsed and stored into +// config->input. Otherwise, 'data' can be NULL and no parsing will occur. +// Note that 'config' can be NULL too, in which case a default configuration +// is used. +// The return WebPIDecoder object must always be deleted calling WebPIDelete(). +// Returns NULL in case of error (and config->status will then reflect +// the error condition). +WEBP_EXTERN(WebPIDecoder*) WebPIDecode(const uint8_t* data, size_t data_size, + WebPDecoderConfig* config); + +// Non-incremental version. This version decodes the full data at once, taking +// 'config' into account. Returns decoding status (which should be VP8_STATUS_OK +// if the decoding was successful). +WEBP_EXTERN(VP8StatusCode) WebPDecode(const uint8_t* data, size_t data_size, + WebPDecoderConfig* config); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* WEBP_WEBP_DECODE_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/demux.h b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/demux.h new file mode 100644 index 0000000..2da3239 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/demux.h @@ -0,0 +1,224 @@ +// Copyright 2012 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// Demux API. +// Enables extraction of image and extended format data from WebP files. + +// Code Example: Demuxing WebP data to extract all the frames, ICC profile +// and EXIF/XMP metadata. +/* + WebPDemuxer* demux = WebPDemux(&webp_data); + + uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH); + uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT); + // ... (Get information about the features present in the WebP file). + uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS); + + // ... (Iterate over all frames). + WebPIterator iter; + if (WebPDemuxGetFrame(demux, 1, &iter)) { + do { + // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(), + // ... and get other frame properties like width, height, offsets etc. + // ... see 'struct WebPIterator' below for more info). + } while (WebPDemuxNextFrame(&iter)); + WebPDemuxReleaseIterator(&iter); + } + + // ... (Extract metadata). + WebPChunkIterator chunk_iter; + if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter); + // ... (Consume the ICC profile in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter); + // ... (Consume the EXIF metadata in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter); + // ... (Consume the XMP metadata in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + WebPDemuxDelete(demux); +*/ + +#ifndef WEBP_WEBP_DEMUX_H_ +#define WEBP_WEBP_DEMUX_H_ + +#include "./mux_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define WEBP_DEMUX_ABI_VERSION 0x0101 // MAJOR(8b) + MINOR(8b) + +// Note: forward declaring enumerations is not allowed in (strict) C and C++, +// the types are left here for reference. +// typedef enum WebPDemuxState WebPDemuxState; +// typedef enum WebPFormatFeature WebPFormatFeature; +typedef struct WebPDemuxer WebPDemuxer; +typedef struct WebPIterator WebPIterator; +typedef struct WebPChunkIterator WebPChunkIterator; + +//------------------------------------------------------------------------------ + +// Returns the version number of the demux library, packed in hexadecimal using +// 8bits for each of major/minor/revision. E.g: v2.5.7 is 0x020507. +WEBP_EXTERN(int) WebPGetDemuxVersion(void); + +//------------------------------------------------------------------------------ +// Life of a Demux object + +typedef enum WebPDemuxState { + WEBP_DEMUX_PARSE_ERROR = -1, // An error occurred while parsing. + WEBP_DEMUX_PARSING_HEADER = 0, // Not enough data to parse full header. + WEBP_DEMUX_PARSED_HEADER = 1, // Header parsing complete, + // data may be available. + WEBP_DEMUX_DONE = 2 // Entire file has been parsed. +} WebPDemuxState; + +// Internal, version-checked, entry point +WEBP_EXTERN(WebPDemuxer*) WebPDemuxInternal( + const WebPData*, int, WebPDemuxState*, int); + +// Parses the full WebP file given by 'data'. +// Returns a WebPDemuxer object on successful parse, NULL otherwise. +static WEBP_INLINE WebPDemuxer* WebPDemux(const WebPData* data) { + return WebPDemuxInternal(data, 0, NULL, WEBP_DEMUX_ABI_VERSION); +} + +// Parses the possibly incomplete WebP file given by 'data'. +// If 'state' is non-NULL it will be set to indicate the status of the demuxer. +// Returns NULL in case of error or if there isn't enough data to start parsing; +// and a WebPDemuxer object on successful parse. +// Note that WebPDemuxer keeps internal pointers to 'data' memory segment. +// If this data is volatile, the demuxer object should be deleted (by calling +// WebPDemuxDelete()) and WebPDemuxPartial() called again on the new data. +// This is usually an inexpensive operation. +static WEBP_INLINE WebPDemuxer* WebPDemuxPartial( + const WebPData* data, WebPDemuxState* state) { + return WebPDemuxInternal(data, 1, state, WEBP_DEMUX_ABI_VERSION); +} + +// Frees memory associated with 'dmux'. +WEBP_EXTERN(void) WebPDemuxDelete(WebPDemuxer* dmux); + +//------------------------------------------------------------------------------ +// Data/information extraction. + +typedef enum WebPFormatFeature { + WEBP_FF_FORMAT_FLAGS, // Extended format flags present in the 'VP8X' chunk. + WEBP_FF_CANVAS_WIDTH, + WEBP_FF_CANVAS_HEIGHT, + WEBP_FF_LOOP_COUNT, + WEBP_FF_BACKGROUND_COLOR, + WEBP_FF_FRAME_COUNT // Number of frames present in the demux object. + // In case of a partial demux, this is the number of + // frames seen so far, with the last frame possibly + // being partial. +} WebPFormatFeature; + +// Get the 'feature' value from the 'dmux'. +// NOTE: values are only valid if WebPDemux() was used or WebPDemuxPartial() +// returned a state > WEBP_DEMUX_PARSING_HEADER. +WEBP_EXTERN(uint32_t) WebPDemuxGetI( + const WebPDemuxer* dmux, WebPFormatFeature feature); + +//------------------------------------------------------------------------------ +// Frame iteration. + +struct WebPIterator { + int frame_num; + int num_frames; // equivalent to WEBP_FF_FRAME_COUNT. + int fragment_num; + int num_fragments; + int x_offset, y_offset; // offset relative to the canvas. + int width, height; // dimensions of this frame or fragment. + int duration; // display duration in milliseconds. + WebPMuxAnimDispose dispose_method; // dispose method for the frame. + int complete; // true if 'fragment' contains a full frame. partial images + // may still be decoded with the WebP incremental decoder. + WebPData fragment; // The frame or fragment given by 'frame_num' and + // 'fragment_num'. + int has_alpha; // True if the frame or fragment contains transparency. + WebPMuxAnimBlend blend_method; // Blend operation for the frame. + + uint32_t pad[2]; // padding for later use. + void* private_; // for internal use only. +}; + +// Retrieves frame 'frame_number' from 'dmux'. +// 'iter->fragment' points to the first fragment on return from this function. +// Individual fragments may be extracted using WebPDemuxSelectFragment(). +// Setting 'frame_number' equal to 0 will return the last frame of the image. +// Returns false if 'dmux' is NULL or frame 'frame_number' is not present. +// Call WebPDemuxReleaseIterator() when use of the iterator is complete. +// NOTE: 'dmux' must persist for the lifetime of 'iter'. +WEBP_EXTERN(int) WebPDemuxGetFrame( + const WebPDemuxer* dmux, int frame_number, WebPIterator* iter); + +// Sets 'iter->fragment' to point to the next ('iter->frame_num' + 1) or +// previous ('iter->frame_num' - 1) frame. These functions do not loop. +// Returns true on success, false otherwise. +WEBP_EXTERN(int) WebPDemuxNextFrame(WebPIterator* iter); +WEBP_EXTERN(int) WebPDemuxPrevFrame(WebPIterator* iter); + +// Sets 'iter->fragment' to reflect fragment number 'fragment_num'. +// Returns true if fragment 'fragment_num' is present, false otherwise. +WEBP_EXTERN(int) WebPDemuxSelectFragment(WebPIterator* iter, int fragment_num); + +// Releases any memory associated with 'iter'. +// Must be called before any subsequent calls to WebPDemuxGetChunk() on the same +// iter. Also, must be called before destroying the associated WebPDemuxer with +// WebPDemuxDelete(). +WEBP_EXTERN(void) WebPDemuxReleaseIterator(WebPIterator* iter); + +//------------------------------------------------------------------------------ +// Chunk iteration. + +struct WebPChunkIterator { + // The current and total number of chunks with the fourcc given to + // WebPDemuxGetChunk(). + int chunk_num; + int num_chunks; + WebPData chunk; // The payload of the chunk. + + uint32_t pad[6]; // padding for later use + void* private_; +}; + +// Retrieves the 'chunk_number' instance of the chunk with id 'fourcc' from +// 'dmux'. +// 'fourcc' is a character array containing the fourcc of the chunk to return, +// e.g., "ICCP", "XMP ", "EXIF", etc. +// Setting 'chunk_number' equal to 0 will return the last chunk in a set. +// Returns true if the chunk is found, false otherwise. Image related chunk +// payloads are accessed through WebPDemuxGetFrame() and related functions. +// Call WebPDemuxReleaseChunkIterator() when use of the iterator is complete. +// NOTE: 'dmux' must persist for the lifetime of the iterator. +WEBP_EXTERN(int) WebPDemuxGetChunk(const WebPDemuxer* dmux, + const char fourcc[4], int chunk_number, + WebPChunkIterator* iter); + +// Sets 'iter->chunk' to point to the next ('iter->chunk_num' + 1) or previous +// ('iter->chunk_num' - 1) chunk. These functions do not loop. +// Returns true on success, false otherwise. +WEBP_EXTERN(int) WebPDemuxNextChunk(WebPChunkIterator* iter); +WEBP_EXTERN(int) WebPDemuxPrevChunk(WebPChunkIterator* iter); + +// Releases any memory associated with 'iter'. +// Must be called before destroying the associated WebPDemuxer with +// WebPDemuxDelete(). +WEBP_EXTERN(void) WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter); + +//------------------------------------------------------------------------------ + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* WEBP_WEBP_DEMUX_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/encode.h b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/encode.h new file mode 100644 index 0000000..dd60056 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/encode.h @@ -0,0 +1,508 @@ +// Copyright 2011 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// WebP encoder: main interface +// +// Author: Skal (pascal.massimino@gmail.com) + +#ifndef WEBP_WEBP_ENCODE_H_ +#define WEBP_WEBP_ENCODE_H_ + +#include "./types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define WEBP_ENCODER_ABI_VERSION 0x0202 // MAJOR(8b) + MINOR(8b) + +// Note: forward declaring enumerations is not allowed in (strict) C and C++, +// the types are left here for reference. +// typedef enum WebPImageHint WebPImageHint; +// typedef enum WebPEncCSP WebPEncCSP; +// typedef enum WebPPreset WebPPreset; +// typedef enum WebPEncodingError WebPEncodingError; +typedef struct WebPConfig WebPConfig; +typedef struct WebPPicture WebPPicture; // main structure for I/O +typedef struct WebPAuxStats WebPAuxStats; +typedef struct WebPMemoryWriter WebPMemoryWriter; + +// Return the encoder's version number, packed in hexadecimal using 8bits for +// each of major/minor/revision. E.g: v2.5.7 is 0x020507. +WEBP_EXTERN(int) WebPGetEncoderVersion(void); + +//------------------------------------------------------------------------------ +// One-stop-shop call! No questions asked: + +// Returns the size of the compressed data (pointed to by *output), or 0 if +// an error occurred. The compressed data must be released by the caller +// using the call 'free(*output)'. +// These functions compress using the lossy format, and the quality_factor +// can go from 0 (smaller output, lower quality) to 100 (best quality, +// larger output). +WEBP_EXTERN(size_t) WebPEncodeRGB(const uint8_t* rgb, + int width, int height, int stride, + float quality_factor, uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeBGR(const uint8_t* bgr, + int width, int height, int stride, + float quality_factor, uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeRGBA(const uint8_t* rgba, + int width, int height, int stride, + float quality_factor, uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeBGRA(const uint8_t* bgra, + int width, int height, int stride, + float quality_factor, uint8_t** output); + +// These functions are the equivalent of the above, but compressing in a +// lossless manner. Files are usually larger than lossy format, but will +// not suffer any compression loss. +WEBP_EXTERN(size_t) WebPEncodeLosslessRGB(const uint8_t* rgb, + int width, int height, int stride, + uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeLosslessBGR(const uint8_t* bgr, + int width, int height, int stride, + uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeLosslessRGBA(const uint8_t* rgba, + int width, int height, int stride, + uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeLosslessBGRA(const uint8_t* bgra, + int width, int height, int stride, + uint8_t** output); + +//------------------------------------------------------------------------------ +// Coding parameters + +// Image characteristics hint for the underlying encoder. +typedef enum WebPImageHint { + WEBP_HINT_DEFAULT = 0, // default preset. + WEBP_HINT_PICTURE, // digital picture, like portrait, inner shot + WEBP_HINT_PHOTO, // outdoor photograph, with natural lighting + WEBP_HINT_GRAPH, // Discrete tone image (graph, map-tile etc). + WEBP_HINT_LAST +} WebPImageHint; + +// Compression parameters. +struct WebPConfig { + int lossless; // Lossless encoding (0=lossy(default), 1=lossless). + float quality; // between 0 (smallest file) and 100 (biggest) + int method; // quality/speed trade-off (0=fast, 6=slower-better) + + WebPImageHint image_hint; // Hint for image type (lossless only for now). + + // Parameters related to lossy compression only: + int target_size; // if non-zero, set the desired target size in bytes. + // Takes precedence over the 'compression' parameter. + float target_PSNR; // if non-zero, specifies the minimal distortion to + // try to achieve. Takes precedence over target_size. + int segments; // maximum number of segments to use, in [1..4] + int sns_strength; // Spatial Noise Shaping. 0=off, 100=maximum. + int filter_strength; // range: [0 = off .. 100 = strongest] + int filter_sharpness; // range: [0 = off .. 7 = least sharp] + int filter_type; // filtering type: 0 = simple, 1 = strong (only used + // if filter_strength > 0 or autofilter > 0) + int autofilter; // Auto adjust filter's strength [0 = off, 1 = on] + int alpha_compression; // Algorithm for encoding the alpha plane (0 = none, + // 1 = compressed with WebP lossless). Default is 1. + int alpha_filtering; // Predictive filtering method for alpha plane. + // 0: none, 1: fast, 2: best. Default if 1. + int alpha_quality; // Between 0 (smallest size) and 100 (lossless). + // Default is 100. + int pass; // number of entropy-analysis passes (in [1..10]). + + int show_compressed; // if true, export the compressed picture back. + // In-loop filtering is not applied. + int preprocessing; // preprocessing filter: + // 0=none, 1=segment-smooth, 2=pseudo-random dithering + int partitions; // log2(number of token partitions) in [0..3]. Default + // is set to 0 for easier progressive decoding. + int partition_limit; // quality degradation allowed to fit the 512k limit + // on prediction modes coding (0: no degradation, + // 100: maximum possible degradation). + int emulate_jpeg_size; // If true, compression parameters will be remapped + // to better match the expected output size from + // JPEG compression. Generally, the output size will + // be similar but the degradation will be lower. + int thread_level; // If non-zero, try and use multi-threaded encoding. + int low_memory; // If set, reduce memory usage (but increase CPU use). + + uint32_t pad[5]; // padding for later use +}; + +// Enumerate some predefined settings for WebPConfig, depending on the type +// of source picture. These presets are used when calling WebPConfigPreset(). +typedef enum WebPPreset { + WEBP_PRESET_DEFAULT = 0, // default preset. + WEBP_PRESET_PICTURE, // digital picture, like portrait, inner shot + WEBP_PRESET_PHOTO, // outdoor photograph, with natural lighting + WEBP_PRESET_DRAWING, // hand or line drawing, with high-contrast details + WEBP_PRESET_ICON, // small-sized colorful images + WEBP_PRESET_TEXT // text-like +} WebPPreset; + +// Internal, version-checked, entry point +WEBP_EXTERN(int) WebPConfigInitInternal(WebPConfig*, WebPPreset, float, int); + +// Should always be called, to initialize a fresh WebPConfig structure before +// modification. Returns false in case of version mismatch. WebPConfigInit() +// must have succeeded before using the 'config' object. +// Note that the default values are lossless=0 and quality=75. +static WEBP_INLINE int WebPConfigInit(WebPConfig* config) { + return WebPConfigInitInternal(config, WEBP_PRESET_DEFAULT, 75.f, + WEBP_ENCODER_ABI_VERSION); +} + +// This function will initialize the configuration according to a predefined +// set of parameters (referred to by 'preset') and a given quality factor. +// This function can be called as a replacement to WebPConfigInit(). Will +// return false in case of error. +static WEBP_INLINE int WebPConfigPreset(WebPConfig* config, + WebPPreset preset, float quality) { + return WebPConfigInitInternal(config, preset, quality, + WEBP_ENCODER_ABI_VERSION); +} + +#if WEBP_ENCODER_ABI_VERSION > 0x0202 +// Activate the lossless compression mode with the desired efficiency level +// between 0 (fastest, lowest compression) and 9 (slower, best compression). +// A good default level is '6', providing a fair tradeoff between compression +// speed and final compressed size. +// This function will overwrite several fields from config: 'method', 'quality' +// and 'lossless'. Returns false in case of parameter error. +WEBP_EXTERN(int) WebPConfigLosslessPreset(WebPConfig* config, int level); +#endif + +// Returns true if 'config' is non-NULL and all configuration parameters are +// within their valid ranges. +WEBP_EXTERN(int) WebPValidateConfig(const WebPConfig* config); + +//------------------------------------------------------------------------------ +// Input / Output +// Structure for storing auxiliary statistics (mostly for lossy encoding). + +struct WebPAuxStats { + int coded_size; // final size + + float PSNR[5]; // peak-signal-to-noise ratio for Y/U/V/All/Alpha + int block_count[3]; // number of intra4/intra16/skipped macroblocks + int header_bytes[2]; // approximate number of bytes spent for header + // and mode-partition #0 + int residual_bytes[3][4]; // approximate number of bytes spent for + // DC/AC/uv coefficients for each (0..3) segments. + int segment_size[4]; // number of macroblocks in each segments + int segment_quant[4]; // quantizer values for each segments + int segment_level[4]; // filtering strength for each segments [0..63] + + int alpha_data_size; // size of the transparency data + int layer_data_size; // size of the enhancement layer data + + // lossless encoder statistics + uint32_t lossless_features; // bit0:predictor bit1:cross-color transform + // bit2:subtract-green bit3:color indexing + int histogram_bits; // number of precision bits of histogram + int transform_bits; // precision bits for transform + int cache_bits; // number of bits for color cache lookup + int palette_size; // number of color in palette, if used + int lossless_size; // final lossless size + + uint32_t pad[4]; // padding for later use +}; + +// Signature for output function. Should return true if writing was successful. +// data/data_size is the segment of data to write, and 'picture' is for +// reference (and so one can make use of picture->custom_ptr). +typedef int (*WebPWriterFunction)(const uint8_t* data, size_t data_size, + const WebPPicture* picture); + +// WebPMemoryWrite: a special WebPWriterFunction that writes to memory using +// the following WebPMemoryWriter object (to be set as a custom_ptr). +struct WebPMemoryWriter { + uint8_t* mem; // final buffer (of size 'max_size', larger than 'size'). + size_t size; // final size + size_t max_size; // total capacity + uint32_t pad[1]; // padding for later use +}; + +// The following must be called first before any use. +WEBP_EXTERN(void) WebPMemoryWriterInit(WebPMemoryWriter* writer); + +#if WEBP_ENCODER_ABI_VERSION > 0x0202 +// The following must be called to deallocate writer->mem memory. The 'writer' +// object itself is not deallocated. +WEBP_EXTERN(void) WebPMemoryWriterClear(WebPMemoryWriter* writer); +#endif +// The custom writer to be used with WebPMemoryWriter as custom_ptr. Upon +// completion, writer.mem and writer.size will hold the coded data. +#if WEBP_ENCODER_ABI_VERSION > 0x0202 +// writer.mem must be freed by calling WebPMemoryWriterClear. +#else +// writer.mem must be freed by calling 'free(writer.mem)'. +#endif +WEBP_EXTERN(int) WebPMemoryWrite(const uint8_t* data, size_t data_size, + const WebPPicture* picture); + +// Progress hook, called from time to time to report progress. It can return +// false to request an abort of the encoding process, or true otherwise if +// everything is OK. +typedef int (*WebPProgressHook)(int percent, const WebPPicture* picture); + +// Color spaces. +typedef enum WebPEncCSP { + // chroma sampling + WEBP_YUV420 = 0, // 4:2:0 + WEBP_YUV420A = 4, // alpha channel variant + WEBP_CSP_UV_MASK = 3, // bit-mask to get the UV sampling factors + WEBP_CSP_ALPHA_BIT = 4 // bit that is set if alpha is present +} WebPEncCSP; + +// Encoding error conditions. +typedef enum WebPEncodingError { + VP8_ENC_OK = 0, + VP8_ENC_ERROR_OUT_OF_MEMORY, // memory error allocating objects + VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY, // memory error while flushing bits + VP8_ENC_ERROR_NULL_PARAMETER, // a pointer parameter is NULL + VP8_ENC_ERROR_INVALID_CONFIGURATION, // configuration is invalid + VP8_ENC_ERROR_BAD_DIMENSION, // picture has invalid width/height + VP8_ENC_ERROR_PARTITION0_OVERFLOW, // partition is bigger than 512k + VP8_ENC_ERROR_PARTITION_OVERFLOW, // partition is bigger than 16M + VP8_ENC_ERROR_BAD_WRITE, // error while flushing bytes + VP8_ENC_ERROR_FILE_TOO_BIG, // file is bigger than 4G + VP8_ENC_ERROR_USER_ABORT, // abort request by user + VP8_ENC_ERROR_LAST // list terminator. always last. +} WebPEncodingError; + +// maximum width/height allowed (inclusive), in pixels +#define WEBP_MAX_DIMENSION 16383 + +// Main exchange structure (input samples, output bytes, statistics) +struct WebPPicture { + // INPUT + ////////////// + // Main flag for encoder selecting between ARGB or YUV input. + // It is recommended to use ARGB input (*argb, argb_stride) for lossless + // compression, and YUV input (*y, *u, *v, etc.) for lossy compression + // since these are the respective native colorspace for these formats. + int use_argb; + + // YUV input (mostly used for input to lossy compression) + WebPEncCSP colorspace; // colorspace: should be YUV420 for now (=Y'CbCr). + int width, height; // dimensions (less or equal to WEBP_MAX_DIMENSION) + uint8_t *y, *u, *v; // pointers to luma/chroma planes. + int y_stride, uv_stride; // luma/chroma strides. + uint8_t* a; // pointer to the alpha plane + int a_stride; // stride of the alpha plane + uint32_t pad1[2]; // padding for later use + + // ARGB input (mostly used for input to lossless compression) + uint32_t* argb; // Pointer to argb (32 bit) plane. + int argb_stride; // This is stride in pixels units, not bytes. + uint32_t pad2[3]; // padding for later use + + // OUTPUT + /////////////// + // Byte-emission hook, to store compressed bytes as they are ready. + WebPWriterFunction writer; // can be NULL + void* custom_ptr; // can be used by the writer. + + // map for extra information (only for lossy compression mode) + int extra_info_type; // 1: intra type, 2: segment, 3: quant + // 4: intra-16 prediction mode, + // 5: chroma prediction mode, + // 6: bit cost, 7: distortion + uint8_t* extra_info; // if not NULL, points to an array of size + // ((width + 15) / 16) * ((height + 15) / 16) that + // will be filled with a macroblock map, depending + // on extra_info_type. + + // STATS AND REPORTS + /////////////////////////// + // Pointer to side statistics (updated only if not NULL) + WebPAuxStats* stats; + + // Error code for the latest error encountered during encoding + WebPEncodingError error_code; + + // If not NULL, report progress during encoding. + WebPProgressHook progress_hook; + + void* user_data; // this field is free to be set to any value and + // used during callbacks (like progress-report e.g.). + + uint32_t pad3[3]; // padding for later use + + // Unused for now + uint8_t *pad4, *pad5; + uint32_t pad6[8]; // padding for later use + + // PRIVATE FIELDS + //////////////////// + void* memory_; // row chunk of memory for yuva planes + void* memory_argb_; // and for argb too. + void* pad7[2]; // padding for later use +}; + +// Internal, version-checked, entry point +WEBP_EXTERN(int) WebPPictureInitInternal(WebPPicture*, int); + +// Should always be called, to initialize the structure. Returns false in case +// of version mismatch. WebPPictureInit() must have succeeded before using the +// 'picture' object. +// Note that, by default, use_argb is false and colorspace is WEBP_YUV420. +static WEBP_INLINE int WebPPictureInit(WebPPicture* picture) { + return WebPPictureInitInternal(picture, WEBP_ENCODER_ABI_VERSION); +} + +//------------------------------------------------------------------------------ +// WebPPicture utils + +// Convenience allocation / deallocation based on picture->width/height: +// Allocate y/u/v buffers as per colorspace/width/height specification. +// Note! This function will free the previous buffer if needed. +// Returns false in case of memory error. +WEBP_EXTERN(int) WebPPictureAlloc(WebPPicture* picture); + +// Release the memory allocated by WebPPictureAlloc() or WebPPictureImport*(). +// Note that this function does _not_ free the memory used by the 'picture' +// object itself. +// Besides memory (which is reclaimed) all other fields of 'picture' are +// preserved. +WEBP_EXTERN(void) WebPPictureFree(WebPPicture* picture); + +// Copy the pixels of *src into *dst, using WebPPictureAlloc. Upon return, *dst +// will fully own the copied pixels (this is not a view). The 'dst' picture need +// not be initialized as its content is overwritten. +// Returns false in case of memory allocation error. +WEBP_EXTERN(int) WebPPictureCopy(const WebPPicture* src, WebPPicture* dst); + +// Compute PSNR, SSIM or LSIM distortion metric between two pictures. +// Result is in dB, stores in result[] in the Y/U/V/Alpha/All order. +// Returns false in case of error (src and ref don't have same dimension, ...) +// Warning: this function is rather CPU-intensive. +WEBP_EXTERN(int) WebPPictureDistortion( + const WebPPicture* src, const WebPPicture* ref, + int metric_type, // 0 = PSNR, 1 = SSIM, 2 = LSIM + float result[5]); + +// self-crops a picture to the rectangle defined by top/left/width/height. +// Returns false in case of memory allocation error, or if the rectangle is +// outside of the source picture. +// The rectangle for the view is defined by the top-left corner pixel +// coordinates (left, top) as well as its width and height. This rectangle +// must be fully be comprised inside the 'src' source picture. If the source +// picture uses the YUV420 colorspace, the top and left coordinates will be +// snapped to even values. +WEBP_EXTERN(int) WebPPictureCrop(WebPPicture* picture, + int left, int top, int width, int height); + +// Extracts a view from 'src' picture into 'dst'. The rectangle for the view +// is defined by the top-left corner pixel coordinates (left, top) as well +// as its width and height. This rectangle must be fully be comprised inside +// the 'src' source picture. If the source picture uses the YUV420 colorspace, +// the top and left coordinates will be snapped to even values. +// Picture 'src' must out-live 'dst' picture. Self-extraction of view is allowed +// ('src' equal to 'dst') as a mean of fast-cropping (but note that doing so, +// the original dimension will be lost). Picture 'dst' need not be initialized +// with WebPPictureInit() if it is different from 'src', since its content will +// be overwritten. +// Returns false in case of memory allocation error or invalid parameters. +WEBP_EXTERN(int) WebPPictureView(const WebPPicture* src, + int left, int top, int width, int height, + WebPPicture* dst); + +// Returns true if the 'picture' is actually a view and therefore does +// not own the memory for pixels. +WEBP_EXTERN(int) WebPPictureIsView(const WebPPicture* picture); + +// Rescale a picture to new dimension width x height. +// Now gamma correction is applied. +// Returns false in case of error (invalid parameter or insufficient memory). +WEBP_EXTERN(int) WebPPictureRescale(WebPPicture* pic, int width, int height); + +// Colorspace conversion function to import RGB samples. +// Previous buffer will be free'd, if any. +// *rgb buffer should have a size of at least height * rgb_stride. +// Returns false in case of memory error. +WEBP_EXTERN(int) WebPPictureImportRGB( + WebPPicture* picture, const uint8_t* rgb, int rgb_stride); +// Same, but for RGBA buffer. +WEBP_EXTERN(int) WebPPictureImportRGBA( + WebPPicture* picture, const uint8_t* rgba, int rgba_stride); +// Same, but for RGBA buffer. Imports the RGB direct from the 32-bit format +// input buffer ignoring the alpha channel. Avoids needing to copy the data +// to a temporary 24-bit RGB buffer to import the RGB only. +WEBP_EXTERN(int) WebPPictureImportRGBX( + WebPPicture* picture, const uint8_t* rgbx, int rgbx_stride); + +// Variants of the above, but taking BGR(A|X) input. +WEBP_EXTERN(int) WebPPictureImportBGR( + WebPPicture* picture, const uint8_t* bgr, int bgr_stride); +WEBP_EXTERN(int) WebPPictureImportBGRA( + WebPPicture* picture, const uint8_t* bgra, int bgra_stride); +WEBP_EXTERN(int) WebPPictureImportBGRX( + WebPPicture* picture, const uint8_t* bgrx, int bgrx_stride); + +// Converts picture->argb data to the YUVA format specified by 'colorspace'. +// Upon return, picture->use_argb is set to false. The presence of real +// non-opaque transparent values is detected, and 'colorspace' will be +// adjusted accordingly. Note that this method is lossy. +// Returns false in case of error. +WEBP_EXTERN(int) WebPPictureARGBToYUVA(WebPPicture* picture, + WebPEncCSP colorspace); + +// Same as WebPPictureARGBToYUVA(), but the conversion is done using +// pseudo-random dithering with a strength 'dithering' between +// 0.0 (no dithering) and 1.0 (maximum dithering). This is useful +// for photographic picture. +WEBP_EXTERN(int) WebPPictureARGBToYUVADithered( + WebPPicture* picture, WebPEncCSP colorspace, float dithering); + +// Converts picture->yuv to picture->argb and sets picture->use_argb to true. +// The input format must be YUV_420 or YUV_420A. +// Note that the use of this method is discouraged if one has access to the +// raw ARGB samples, since using YUV420 is comparatively lossy. Also, the +// conversion from YUV420 to ARGB incurs a small loss too. +// Returns false in case of error. +WEBP_EXTERN(int) WebPPictureYUVAToARGB(WebPPicture* picture); + +// Helper function: given a width x height plane of RGBA or YUV(A) samples +// clean-up the YUV or RGB samples under fully transparent area, to help +// compressibility (no guarantee, though). +WEBP_EXTERN(void) WebPCleanupTransparentArea(WebPPicture* picture); + +// Scan the picture 'picture' for the presence of non fully opaque alpha values. +// Returns true in such case. Otherwise returns false (indicating that the +// alpha plane can be ignored altogether e.g.). +WEBP_EXTERN(int) WebPPictureHasTransparency(const WebPPicture* picture); + +// Remove the transparency information (if present) by blending the color with +// the background color 'background_rgb' (specified as 24bit RGB triplet). +// After this call, all alpha values are reset to 0xff. +WEBP_EXTERN(void) WebPBlendAlpha(WebPPicture* pic, uint32_t background_rgb); + +//------------------------------------------------------------------------------ +// Main call + +// Main encoding call, after config and picture have been initialized. +// 'picture' must be less than 16384x16384 in dimension (cf WEBP_MAX_DIMENSION), +// and the 'config' object must be a valid one. +// Returns false in case of error, true otherwise. +// In case of error, picture->error_code is updated accordingly. +// 'picture' can hold the source samples in both YUV(A) or ARGB input, depending +// on the value of 'picture->use_argb'. It is highly recommended to use +// the former for lossy encoding, and the latter for lossless encoding +// (when config.lossless is true). Automatic conversion from one format to +// another is provided but they both incur some loss. +WEBP_EXTERN(int) WebPEncode(const WebPConfig* config, WebPPicture* picture); + +//------------------------------------------------------------------------------ + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* WEBP_WEBP_ENCODE_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/mux.h b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/mux.h new file mode 100644 index 0000000..1ae03b3 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/mux.h @@ -0,0 +1,399 @@ +// Copyright 2011 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// RIFF container manipulation for WebP images. +// +// Authors: Urvang (urvang@google.com) +// Vikas (vikasa@google.com) + +// This API allows manipulation of WebP container images containing features +// like color profile, metadata, animation and fragmented images. +// +// Code Example#1: Create a WebPMux object with image data, color profile and +// XMP metadata. +/* + int copy_data = 0; + WebPMux* mux = WebPMuxNew(); + // ... (Prepare image data). + WebPMuxSetImage(mux, &image, copy_data); + // ... (Prepare ICCP color profile data). + WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data); + // ... (Prepare XMP metadata). + WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data); + // Get data from mux in WebP RIFF format. + WebPMuxAssemble(mux, &output_data); + WebPMuxDelete(mux); + // ... (Consume output_data; e.g. write output_data.bytes to file). + WebPDataClear(&output_data); +*/ + +// Code Example#2: Get image and color profile data from a WebP file. +/* + int copy_data = 0; + // ... (Read data from file). + WebPMux* mux = WebPMuxCreate(&data, copy_data); + WebPMuxGetFrame(mux, 1, &image); + // ... (Consume image; e.g. call WebPDecode() to decode the data). + WebPMuxGetChunk(mux, "ICCP", &icc_profile); + // ... (Consume icc_data). + WebPMuxDelete(mux); + free(data); +*/ + +#ifndef WEBP_WEBP_MUX_H_ +#define WEBP_WEBP_MUX_H_ + +#include "./mux_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define WEBP_MUX_ABI_VERSION 0x0101 // MAJOR(8b) + MINOR(8b) + +// Note: forward declaring enumerations is not allowed in (strict) C and C++, +// the types are left here for reference. +// typedef enum WebPMuxError WebPMuxError; +// typedef enum WebPChunkId WebPChunkId; +typedef struct WebPMux WebPMux; // main opaque object. +typedef struct WebPMuxFrameInfo WebPMuxFrameInfo; +typedef struct WebPMuxAnimParams WebPMuxAnimParams; + +// Error codes +typedef enum WebPMuxError { + WEBP_MUX_OK = 1, + WEBP_MUX_NOT_FOUND = 0, + WEBP_MUX_INVALID_ARGUMENT = -1, + WEBP_MUX_BAD_DATA = -2, + WEBP_MUX_MEMORY_ERROR = -3, + WEBP_MUX_NOT_ENOUGH_DATA = -4 +} WebPMuxError; + +// IDs for different types of chunks. +typedef enum WebPChunkId { + WEBP_CHUNK_VP8X, // VP8X + WEBP_CHUNK_ICCP, // ICCP + WEBP_CHUNK_ANIM, // ANIM + WEBP_CHUNK_ANMF, // ANMF + WEBP_CHUNK_FRGM, // FRGM + WEBP_CHUNK_ALPHA, // ALPH + WEBP_CHUNK_IMAGE, // VP8/VP8L + WEBP_CHUNK_EXIF, // EXIF + WEBP_CHUNK_XMP, // XMP + WEBP_CHUNK_UNKNOWN, // Other chunks. + WEBP_CHUNK_NIL +} WebPChunkId; + +//------------------------------------------------------------------------------ + +// Returns the version number of the mux library, packed in hexadecimal using +// 8bits for each of major/minor/revision. E.g: v2.5.7 is 0x020507. +WEBP_EXTERN(int) WebPGetMuxVersion(void); + +//------------------------------------------------------------------------------ +// Life of a Mux object + +// Internal, version-checked, entry point +WEBP_EXTERN(WebPMux*) WebPNewInternal(int); + +// Creates an empty mux object. +// Returns: +// A pointer to the newly created empty mux object. +// Or NULL in case of memory error. +static WEBP_INLINE WebPMux* WebPMuxNew(void) { + return WebPNewInternal(WEBP_MUX_ABI_VERSION); +} + +// Deletes the mux object. +// Parameters: +// mux - (in/out) object to be deleted +WEBP_EXTERN(void) WebPMuxDelete(WebPMux* mux); + +//------------------------------------------------------------------------------ +// Mux creation. + +// Internal, version-checked, entry point +WEBP_EXTERN(WebPMux*) WebPMuxCreateInternal(const WebPData*, int, int); + +// Creates a mux object from raw data given in WebP RIFF format. +// Parameters: +// bitstream - (in) the bitstream data in WebP RIFF format +// copy_data - (in) value 1 indicates given data WILL be copied to the mux +// object and value 0 indicates data will NOT be copied. +// Returns: +// A pointer to the mux object created from given data - on success. +// NULL - In case of invalid data or memory error. +static WEBP_INLINE WebPMux* WebPMuxCreate(const WebPData* bitstream, + int copy_data) { + return WebPMuxCreateInternal(bitstream, copy_data, WEBP_MUX_ABI_VERSION); +} + +//------------------------------------------------------------------------------ +// Non-image chunks. + +// Note: Only non-image related chunks should be managed through chunk APIs. +// (Image related chunks are: "ANMF", "FRGM", "VP8 ", "VP8L" and "ALPH"). +// To add, get and delete images, use WebPMuxSetImage(), WebPMuxPushFrame(), +// WebPMuxGetFrame() and WebPMuxDeleteFrame(). + +// Adds a chunk with id 'fourcc' and data 'chunk_data' in the mux object. +// Any existing chunk(s) with the same id will be removed. +// Parameters: +// mux - (in/out) object to which the chunk is to be added +// fourcc - (in) a character array containing the fourcc of the given chunk; +// e.g., "ICCP", "XMP ", "EXIF" etc. +// chunk_data - (in) the chunk data to be added +// copy_data - (in) value 1 indicates given data WILL be copied to the mux +// object and value 0 indicates data will NOT be copied. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux, fourcc or chunk_data is NULL +// or if fourcc corresponds to an image chunk. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxSetChunk( + WebPMux* mux, const char fourcc[4], const WebPData* chunk_data, + int copy_data); + +// Gets a reference to the data of the chunk with id 'fourcc' in the mux object. +// The caller should NOT free the returned data. +// Parameters: +// mux - (in) object from which the chunk data is to be fetched +// fourcc - (in) a character array containing the fourcc of the chunk; +// e.g., "ICCP", "XMP ", "EXIF" etc. +// chunk_data - (out) returned chunk data +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux, fourcc or chunk_data is NULL +// or if fourcc corresponds to an image chunk. +// WEBP_MUX_NOT_FOUND - If mux does not contain a chunk with the given id. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxGetChunk( + const WebPMux* mux, const char fourcc[4], WebPData* chunk_data); + +// Deletes the chunk with the given 'fourcc' from the mux object. +// Parameters: +// mux - (in/out) object from which the chunk is to be deleted +// fourcc - (in) a character array containing the fourcc of the chunk; +// e.g., "ICCP", "XMP ", "EXIF" etc. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or fourcc is NULL +// or if fourcc corresponds to an image chunk. +// WEBP_MUX_NOT_FOUND - If mux does not contain a chunk with the given fourcc. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxDeleteChunk( + WebPMux* mux, const char fourcc[4]); + +//------------------------------------------------------------------------------ +// Images. + +// Encapsulates data about a single frame/fragment. +struct WebPMuxFrameInfo { + WebPData bitstream; // image data: can be a raw VP8/VP8L bitstream + // or a single-image WebP file. + int x_offset; // x-offset of the frame. + int y_offset; // y-offset of the frame. + int duration; // duration of the frame (in milliseconds). + + WebPChunkId id; // frame type: should be one of WEBP_CHUNK_ANMF, + // WEBP_CHUNK_FRGM or WEBP_CHUNK_IMAGE + WebPMuxAnimDispose dispose_method; // Disposal method for the frame. + WebPMuxAnimBlend blend_method; // Blend operation for the frame. + uint32_t pad[1]; // padding for later use +}; + +// Sets the (non-animated and non-fragmented) image in the mux object. +// Note: Any existing images (including frames/fragments) will be removed. +// Parameters: +// mux - (in/out) object in which the image is to be set +// bitstream - (in) can be a raw VP8/VP8L bitstream or a single-image +// WebP file (non-animated and non-fragmented) +// copy_data - (in) value 1 indicates given data WILL be copied to the mux +// object and value 0 indicates data will NOT be copied. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL or bitstream is NULL. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxSetImage( + WebPMux* mux, const WebPData* bitstream, int copy_data); + +// Adds a frame at the end of the mux object. +// Notes: (1) frame.id should be one of WEBP_CHUNK_ANMF or WEBP_CHUNK_FRGM +// (2) For setting a non-animated non-fragmented image, use +// WebPMuxSetImage() instead. +// (3) Type of frame being pushed must be same as the frames in mux. +// (4) As WebP only supports even offsets, any odd offset will be snapped +// to an even location using: offset &= ~1 +// Parameters: +// mux - (in/out) object to which the frame is to be added +// frame - (in) frame data. +// copy_data - (in) value 1 indicates given data WILL be copied to the mux +// object and value 0 indicates data will NOT be copied. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or frame is NULL +// or if content of 'frame' is invalid. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxPushFrame( + WebPMux* mux, const WebPMuxFrameInfo* frame, int copy_data); + +// Gets the nth frame from the mux object. +// The content of 'frame->bitstream' is allocated using malloc(), and NOT +// owned by the 'mux' object. It MUST be deallocated by the caller by calling +// WebPDataClear(). +// nth=0 has a special meaning - last position. +// Parameters: +// mux - (in) object from which the info is to be fetched +// nth - (in) index of the frame in the mux object +// frame - (out) data of the returned frame +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or frame is NULL. +// WEBP_MUX_NOT_FOUND - if there are less than nth frames in the mux object. +// WEBP_MUX_BAD_DATA - if nth frame chunk in mux is invalid. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxGetFrame( + const WebPMux* mux, uint32_t nth, WebPMuxFrameInfo* frame); + +// Deletes a frame from the mux object. +// nth=0 has a special meaning - last position. +// Parameters: +// mux - (in/out) object from which a frame is to be deleted +// nth - (in) The position from which the frame is to be deleted +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL. +// WEBP_MUX_NOT_FOUND - If there are less than nth frames in the mux object +// before deletion. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth); + +//------------------------------------------------------------------------------ +// Animation. + +// Animation parameters. +struct WebPMuxAnimParams { + uint32_t bgcolor; // Background color of the canvas stored (in MSB order) as: + // Bits 00 to 07: Alpha. + // Bits 08 to 15: Red. + // Bits 16 to 23: Green. + // Bits 24 to 31: Blue. + int loop_count; // Number of times to repeat the animation [0 = infinite]. +}; + +// Sets the animation parameters in the mux object. Any existing ANIM chunks +// will be removed. +// Parameters: +// mux - (in/out) object in which ANIM chunk is to be set/added +// params - (in) animation parameters. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or params is NULL. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxSetAnimationParams( + WebPMux* mux, const WebPMuxAnimParams* params); + +// Gets the animation parameters from the mux object. +// Parameters: +// mux - (in) object from which the animation parameters to be fetched +// params - (out) animation parameters extracted from the ANIM chunk +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or params is NULL. +// WEBP_MUX_NOT_FOUND - if ANIM chunk is not present in mux object. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxGetAnimationParams( + const WebPMux* mux, WebPMuxAnimParams* params); + +//------------------------------------------------------------------------------ +// Misc Utilities. + +#if WEBP_MUX_ABI_VERSION > 0x0101 +// Sets the canvas size for the mux object. The width and height can be +// specified explicitly or left as zero (0, 0). +// * When width and height are specified explicitly, then this frame bound is +// enforced during subsequent calls to WebPMuxAssemble() and an error is +// reported if any animated frame does not completely fit within the canvas. +// * When unspecified (0, 0), the constructed canvas will get the frame bounds +// from the bounding-box over all frames after calling WebPMuxAssemble(). +// Parameters: +// mux - (in) object to which the canvas size is to be set +// width - (in) canvas width +// height - (in) canvas height +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL; or +// width or height are invalid or out of bounds +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxSetCanvasSize(WebPMux* mux, + int width, int height); +#endif + +// Gets the canvas size from the mux object. +// Note: This method assumes that the VP8X chunk, if present, is up-to-date. +// That is, the mux object hasn't been modified since the last call to +// WebPMuxAssemble() or WebPMuxCreate(). +// Parameters: +// mux - (in) object from which the canvas size is to be fetched +// width - (out) canvas width +// height - (out) canvas height +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux, width or height is NULL. +// WEBP_MUX_BAD_DATA - if VP8X/VP8/VP8L chunk or canvas size is invalid. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxGetCanvasSize(const WebPMux* mux, + int* width, int* height); + +// Gets the feature flags from the mux object. +// Note: This method assumes that the VP8X chunk, if present, is up-to-date. +// That is, the mux object hasn't been modified since the last call to +// WebPMuxAssemble() or WebPMuxCreate(). +// Parameters: +// mux - (in) object from which the features are to be fetched +// flags - (out) the flags specifying which features are present in the +// mux object. This will be an OR of various flag values. +// Enum 'WebPFeatureFlags' can be used to test individual flag values. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or flags is NULL. +// WEBP_MUX_BAD_DATA - if VP8X/VP8/VP8L chunk or canvas size is invalid. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxGetFeatures(const WebPMux* mux, + uint32_t* flags); + +// Gets number of chunks with the given 'id' in the mux object. +// Parameters: +// mux - (in) object from which the info is to be fetched +// id - (in) chunk id specifying the type of chunk +// num_elements - (out) number of chunks with the given chunk id +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux, or num_elements is NULL. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxNumChunks(const WebPMux* mux, + WebPChunkId id, int* num_elements); + +// Assembles all chunks in WebP RIFF format and returns in 'assembled_data'. +// This function also validates the mux object. +// Note: The content of 'assembled_data' will be ignored and overwritten. +// Also, the content of 'assembled_data' is allocated using malloc(), and NOT +// owned by the 'mux' object. It MUST be deallocated by the caller by calling +// WebPDataClear(). It's always safe to call WebPDataClear() upon return, +// even in case of error. +// Parameters: +// mux - (in/out) object whose chunks are to be assembled +// assembled_data - (out) assembled WebP data +// Returns: +// WEBP_MUX_BAD_DATA - if mux object is invalid. +// WEBP_MUX_INVALID_ARGUMENT - if mux or assembled_data is NULL. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxAssemble(WebPMux* mux, + WebPData* assembled_data); + +//------------------------------------------------------------------------------ + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* WEBP_WEBP_MUX_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/mux_types.h b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/mux_types.h new file mode 100644 index 0000000..c94043a --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/mux_types.h @@ -0,0 +1,97 @@ +// Copyright 2012 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// Data-types common to the mux and demux libraries. +// +// Author: Urvang (urvang@google.com) + +#ifndef WEBP_WEBP_MUX_TYPES_H_ +#define WEBP_WEBP_MUX_TYPES_H_ + +#include // free() +#include // memset() +#include "./types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Note: forward declaring enumerations is not allowed in (strict) C and C++, +// the types are left here for reference. +// typedef enum WebPFeatureFlags WebPFeatureFlags; +// typedef enum WebPMuxAnimDispose WebPMuxAnimDispose; +// typedef enum WebPMuxAnimBlend WebPMuxAnimBlend; +typedef struct WebPData WebPData; + +// VP8X Feature Flags. +typedef enum WebPFeatureFlags { + FRAGMENTS_FLAG = 0x00000001, + ANIMATION_FLAG = 0x00000002, + XMP_FLAG = 0x00000004, + EXIF_FLAG = 0x00000008, + ALPHA_FLAG = 0x00000010, + ICCP_FLAG = 0x00000020 +} WebPFeatureFlags; + +// Dispose method (animation only). Indicates how the area used by the current +// frame is to be treated before rendering the next frame on the canvas. +typedef enum WebPMuxAnimDispose { + WEBP_MUX_DISPOSE_NONE, // Do not dispose. + WEBP_MUX_DISPOSE_BACKGROUND // Dispose to background color. +} WebPMuxAnimDispose; + +// Blend operation (animation only). Indicates how transparent pixels of the +// current frame are blended with those of the previous canvas. +typedef enum WebPMuxAnimBlend { + WEBP_MUX_BLEND, // Blend. + WEBP_MUX_NO_BLEND // Do not blend. +} WebPMuxAnimBlend; + +// Data type used to describe 'raw' data, e.g., chunk data +// (ICC profile, metadata) and WebP compressed image data. +struct WebPData { + const uint8_t* bytes; + size_t size; +}; + +// Initializes the contents of the 'webp_data' object with default values. +static WEBP_INLINE void WebPDataInit(WebPData* webp_data) { + if (webp_data != NULL) { + memset(webp_data, 0, sizeof(*webp_data)); + } +} + +// Clears the contents of the 'webp_data' object by calling free(). Does not +// deallocate the object itself. +static WEBP_INLINE void WebPDataClear(WebPData* webp_data) { + if (webp_data != NULL) { + free((void*)webp_data->bytes); + WebPDataInit(webp_data); + } +} + +// Allocates necessary storage for 'dst' and copies the contents of 'src'. +// Returns true on success. +static WEBP_INLINE int WebPDataCopy(const WebPData* src, WebPData* dst) { + if (src == NULL || dst == NULL) return 0; + WebPDataInit(dst); + if (src->bytes != NULL && src->size != 0) { + dst->bytes = (uint8_t*)malloc(src->size); + if (dst->bytes == NULL) return 0; + memcpy((void*)dst->bytes, src->bytes, src->size); + dst->size = src->size; + } + return 1; +} + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* WEBP_WEBP_MUX_TYPES_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/types.h b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/types.h new file mode 100644 index 0000000..568d1f2 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-linux-x86-64/include/webp/types.h @@ -0,0 +1,47 @@ +// Copyright 2010 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// Common types +// +// Author: Skal (pascal.massimino@gmail.com) + +#ifndef WEBP_WEBP_TYPES_H_ +#define WEBP_WEBP_TYPES_H_ + +#include // for size_t + +#ifndef _MSC_VER +#include +#ifdef __STRICT_ANSI__ +#define WEBP_INLINE +#else /* __STRICT_ANSI__ */ +#define WEBP_INLINE inline +#endif +#else +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +typedef unsigned long long int uint64_t; +typedef long long int int64_t; +#define WEBP_INLINE __forceinline +#endif /* _MSC_VER */ + +#ifndef WEBP_EXTERN +// This explicitly marks library functions and allows for changing the +// signature for e.g., Windows DLL builds. +#define WEBP_EXTERN(type) extern type +#endif /* WEBP_EXTERN */ + +// Macro to check ABI compatibility (same major revision number) +#define WEBP_ABI_IS_INCOMPATIBLE(a, b) (((a) >> 8) != ((b) >> 8)) + +#endif /* WEBP_WEBP_TYPES_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/lib/libwebp.a b/WebPConverter/libwebp-0.4.1-linux-x86-64/lib/libwebp.a new file mode 100644 index 0000000..fde6dbe Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-linux-x86-64/lib/libwebp.a differ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/lib/libwebpdemux.a b/WebPConverter/libwebp-0.4.1-linux-x86-64/lib/libwebpdemux.a new file mode 100644 index 0000000..ffeacde Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-linux-x86-64/lib/libwebpdemux.a differ diff --git a/WebPConverter/libwebp-0.4.1-linux-x86-64/lib/libwebpmux.a b/WebPConverter/libwebp-0.4.1-linux-x86-64/lib/libwebpmux.a new file mode 100644 index 0000000..f012eb4 Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-linux-x86-64/lib/libwebpmux.a differ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/README b/WebPConverter/libwebp-0.4.1-mac-10.8/README new file mode 100644 index 0000000..8ef46cb --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/README @@ -0,0 +1,482 @@ + __ __ ____ ____ ____ + / \\/ \/ _ \/ _ )/ _ \ + \ / __/ _ \ __/ + \__\__/\____/\_____/__/ ____ ___ + / _/ / \ \ / _ \/ _/ + / \_/ / / \ \ __/ \__ + \____/____/\_____/_____/____/v0.4.1 + +Description: +============ + +WebP codec: library to encode and decode images in WebP format. This package +contains the library that can be used in other programs to add WebP support, +as well as the command line tools 'cwebp' and 'dwebp'. + +See http://developers.google.com/speed/webp + +Latest sources are available from http://www.webmproject.org/code/ + +It is released under the same license as the WebM project. +See http://www.webmproject.org/license/software/ or the +file "COPYING" file for details. An additional intellectual +property rights grant can be found in the file PATENTS. + +Files: +====== +cwebp : encoding tool +dwebp : decoding tool +gif2webp : gif conversion tool +vwebp : webp visualization tool +lib/ : static libraries +include/webp : headers + +Encoding tool: +============== + +The package contains tools for encoding (cwebp) and decoding (dwebp) images. + +The easiest use should look like: + cwebp input.png -q 80 -o output.webp +which will convert the input file to a WebP file using a quality factor of 80 +on a 0->100 scale (0 being the lowest quality, 100 being the best. Default +value is 75). +You might want to try the -lossless flag too, which will compress the source +(in RGBA format) without any loss. The -q quality parameter will in this case +control the amount of processing time spent trying to make the output file as +small as possible. + +A longer list of options is available using the -longhelp command line flag: + +> cwebp -longhelp +Usage: + cwebp [-preset <...>] [options] in_file [-o out_file] + +If input size (-s) for an image is not specified, it is +assumed to be a PNG, JPEG, TIFF or WebP file. + +Options: + -h / -help ............ short help + -H / -longhelp ........ long help + -q ............. quality factor (0:small..100:big) + -alpha_q ......... transparency-compression quality (0..100) + -preset ....... preset setting, one of: + default, photo, picture, + drawing, icon, text + -preset must come first, as it overwrites other parameters + + -m ............... compression method (0=fast, 6=slowest) + -segments ........ number of segments to use (1..4) + -size ............ target size (in bytes) + -psnr .......... target PSNR (in dB. typically: 42) + + -s ......... input size (width x height) for YUV + -sns ............. spatial noise shaping (0:off, 100:max) + -f ............... filter strength (0=off..100) + -sharpness ....... filter sharpness (0:most .. 7:least sharp) + -strong ................ use strong filter instead of simple (default) + -nostrong .............. use simple filter instead of strong + -partition_limit . limit quality to fit the 512k limit on + the first partition (0=no degradation ... 100=full) + -pass ............ analysis pass number (1..10) + -crop .. crop picture with the given rectangle + -resize ........ resize picture (after any cropping) + -mt .................... use multi-threading if available + -low_memory ............ reduce memory usage (slower encoding) + -map ............. print map of extra info + -print_psnr ............ prints averaged PSNR distortion + -print_ssim ............ prints averaged SSIM distortion + -print_lsim ............ prints local-similarity distortion + -d .......... dump the compressed output (PGM file) + -alpha_method .... transparency-compression method (0..1) + -alpha_filter . predictive filtering for alpha plane, + one of: none, fast (default) or best + -alpha_cleanup ......... clean RGB values in transparent area + -blend_alpha ..... blend colors against background color + expressed as RGB values written in + hexadecimal, e.g. 0xc0e0d0 for red=0xc0 + green=0xe0 and blue=0xd0 + -noalpha ............... discard any transparency information + -lossless .............. encode image losslessly + -hint ......... specify image characteristics hint, + one of: photo, picture or graph + + -metadata ..... comma separated list of metadata to + copy from the input to the output if present. + Valid values: all, none (default), exif, icc, xmp + + -short ................. condense printed message + -quiet ................. don't print anything + -version ............... print version number and exit + -noasm ................. disable all assembly optimizations + -v ..................... verbose, e.g. print encoding/decoding times + -progress .............. report encoding progress + +Experimental Options: + -jpeg_like ............. roughly match expected JPEG size + -af .................... auto-adjust filter strength + -pre ............. pre-processing filter + +The main options you might want to try in order to further tune the +visual quality are: + -preset + -sns + -f + -m + +Namely: + * 'preset' will set up a default encoding configuration targeting a + particular type of input. It should appear first in the list of options, + so that subsequent options can take effect on top of this preset. + Default value is 'default'. + * 'sns' will progressively turn on (when going from 0 to 100) some additional + visual optimizations (like: segmentation map re-enforcement). This option + will balance the bit allocation differently. It tries to take bits from the + "easy" parts of the picture and use them in the "difficult" ones instead. + Usually, raising the sns value (at fixed -q value) leads to larger files, + but with better quality. + Typical value is around '75'. + * 'f' option directly links to the filtering strength used by the codec's + in-loop processing. The higher the value, the smoother the + highly-compressed area will look. This is particularly useful when aiming + at very small files. Typical values are around 20-30. Note that using the + option -strong/-nostrong will change the type of filtering. Use "-f 0" to + turn filtering off. + * 'm' controls the trade-off between encoding speed and quality. Default is 4. + You can try -m 5 or -m 6 to explore more (time-consuming) encoding + possibilities. A lower value will result in faster encoding at the expense + of quality. + +Decoding tool: +============== + +The sample decoding program dwebp will take +a .webp file and decode it to a PNG image file (amongst other formats). +This is simply to demonstrate the use of the API. You can verify the +file test.webp decodes to exactly the same as test_ref.ppm by using: + + ./dwebp test.webp -ppm -o test.ppm + diff test.ppm test_ref.ppm + +The full list of options is available using -h: + +> dwebp -h +Usage: dwebp in_file [options] [-o out_file] + +Decodes the WebP image file to PNG format [Default] +Use following options to convert into alternate image formats: + -pam ......... save the raw RGBA samples as a color PAM + -ppm ......... save the raw RGB samples as a color PPM + -bmp ......... save as uncompressed BMP format + -tiff ........ save as uncompressed TIFF format + -pgm ......... save the raw YUV samples as a grayscale PGM + 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 .. dithering strength (in 0..100) + -mt .......... use multi-threading + -crop ... crop output with the given rectangle + -scale .......... scale the output (*after* any cropping) + -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: +=================== + +There's a little self-serve visualization tool called 'vwebp' under the +examples/ directory. It uses OpenGL to open a simple drawing window and show +a decoded WebP file. It's not yet integrated in the automake build system, but +you can try to manually compile it using the recommendations below. + +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 dithering strength (0..100), default=50 + -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 + +Animated GIF conversion: +======================== +Animated GIF files can be converted to WebP files with animation using the +gif2webp utility available under examples/. The files can then be viewed using +vwebp. + +Usage: + gif2webp [options] gif_file -o webp_file +Options: + -h / -help ............ this help + -lossy ................. encode image using lossy compression + -mixed ................. for each frame in the image, pick lossy + or lossless compression heuristically + -q ............. quality factor (0:small..100:big) + -m ............... compression method (0=fast, 6=slowest) + -kmin ............ min distance between key frames + -kmax ............ max distance between key frames + -f ............... filter strength (0=off..100) + -metadata ..... 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 + +Encoding API: +============= + +The main encoding functions are available in the header webp/encode.h +The ready-to-use ones are: +size_t WebPEncodeRGB(const uint8_t* rgb, int width, int height, int stride, + float quality_factor, uint8_t** output); +size_t WebPEncodeBGR(const uint8_t* bgr, int width, int height, int stride, + float quality_factor, uint8_t** output); +size_t WebPEncodeRGBA(const uint8_t* rgba, int width, int height, int stride, + float quality_factor, uint8_t** output); +size_t WebPEncodeBGRA(const uint8_t* bgra, int width, int height, int stride, + float quality_factor, uint8_t** output); + +They will convert raw RGB samples to a WebP data. The only control supplied +is the quality factor. + +There are some variants for using the lossless format: + +size_t WebPEncodeLosslessRGB(const uint8_t* rgb, int width, int height, + int stride, uint8_t** output); +size_t WebPEncodeLosslessBGR(const uint8_t* bgr, int width, int height, + int stride, uint8_t** output); +size_t WebPEncodeLosslessRGBA(const uint8_t* rgba, int width, int height, + int stride, uint8_t** output); +size_t WebPEncodeLosslessBGRA(const uint8_t* bgra, int width, int height, + int stride, uint8_t** output); + +Of course in this case, no quality factor is needed since the compression +occurs without loss of the input values, at the expense of larger output sizes. + +Advanced encoding API: +---------------------- + +A more advanced API is based on the WebPConfig and WebPPicture structures. + +WebPConfig contains the encoding settings and is not tied to a particular +picture. +WebPPicture contains input data, on which some WebPConfig will be used for +compression. +The encoding flow looks like: + +-------------------------------------- BEGIN PSEUDO EXAMPLE + +#include + + // Setup a config, starting form a preset and tuning some additional + // parameters + WebPConfig config; + if (!WebPConfigPreset(&config, WEBP_PRESET_PHOTO, quality_factor)) + return 0; // version error + } + // ... additional tuning + config.sns_strength = 90; + config.filter_sharpness = 6; + config_error = WebPValidateConfig(&config); // not mandatory, but useful + + // Setup the input data + WebPPicture pic; + if (!WebPPictureInit(&pic)) { + return 0; // version error + } + pic.width = width; + pic.height = height; + // allocated picture of dimension width x height + if (!WebPPictureAllocate(&pic)) { + return 0; // memory error + } + // at this point, 'pic' has been initialized as a container, + // and can receive the Y/U/V samples. + // Alternatively, one could use ready-made import functions like + // WebPPictureImportRGB(), which will take care of memory allocation. + // In any case, past this point, one will have to call + // WebPPictureFree(&pic) to reclaim memory. + + // Set up a byte-output write method. WebPMemoryWriter, for instance. + WebPMemoryWriter wrt; + WebPMemoryWriterInit(&wrt); // initialize 'wrt' + + pic.writer = MyFileWriter; + pic.custom_ptr = my_opaque_structure_to_make_MyFileWriter_work; + + // Compress! + int ok = WebPEncode(&config, &pic); // ok = 0 => error occurred! + WebPPictureFree(&pic); // must be called independently of the 'ok' result. + + // output data should have been handled by the writer at that point. + // -> compressed data is the memory buffer described by wrt.mem / wrt.size + + // deallocate the memory used by compressed data + WebPMemoryWriterClear(&wrt); + +-------------------------------------- END PSEUDO EXAMPLE + +Decoding API: +============= + +This is mainly just one function to call: + +#include "webp/decode.h" +uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size, + int* width, int* height); + +Please have a look at the file webp/decode.h for the details. +There are variants for decoding in BGR/RGBA/ARGB/BGRA order, along with +decoding to raw Y'CbCr samples. One can also decode the image directly into a +pre-allocated buffer. + +To detect a WebP file and gather the picture's dimensions, the function: + int WebPGetInfo(const uint8_t* data, size_t data_size, + int* width, int* height); +is supplied. No decoding is involved when using it. + +Incremental decoding API: +========================= + +In the case when data is being progressively transmitted, pictures can still +be incrementally decoded using a slightly more complicated API. Decoder state +is stored into an instance of the WebPIDecoder object. This object can be +created with the purpose of decoding either RGB or Y'CbCr samples. +For instance: + + WebPDecBuffer buffer; + WebPInitDecBuffer(&buffer); + buffer.colorspace = MODE_BGR; + ... + WebPIDecoder* idec = WebPINewDecoder(&buffer); + +As data is made progressively available, this incremental-decoder object +can be used to decode the picture further. There are two (mutually exclusive) +ways to pass freshly arrived data: + +either by appending the fresh bytes: + + WebPIAppend(idec, fresh_data, size_of_fresh_data); + +or by just mentioning the new size of the transmitted data: + + WebPIUpdate(idec, buffer, size_of_transmitted_buffer); + +Note that 'buffer' can be modified between each call to WebPIUpdate, in +particular when the buffer is resized to accommodate larger data. + +These functions will return the decoding status: either VP8_STATUS_SUSPENDED if +decoding is not finished yet or VP8_STATUS_OK when decoding is done. Any other +status is an error condition. + +The 'idec' object must always be released (even upon an error condition) by +calling: WebPDelete(idec). + +To retrieve partially decoded picture samples, one must use the corresponding +method: WebPIDecGetRGB or WebPIDecGetYUVA. +It will return the last displayable pixel row. + +Lastly, note that decoding can also be performed into a pre-allocated pixel +buffer. This buffer must be passed when creating a WebPIDecoder, calling +WebPINewRGB() or WebPINewYUVA(). + +Please have a look at the webp/decode.h header for further details. + +Advanced Decoding API: +====================== + +WebP decoding supports an advanced API which provides on-the-fly cropping and +rescaling, something of great usefulness on memory-constrained environments like +mobile phones. Basically, the memory usage will scale with the output's size, +not the input's, when one only needs a quick preview or a zoomed in portion of +an otherwise too-large picture. Some CPU can be saved too, incidentally. + +-------------------------------------- BEGIN PSEUDO EXAMPLE + // A) Init a configuration object + WebPDecoderConfig config; + CHECK(WebPInitDecoderConfig(&config)); + + // B) optional: retrieve the bitstream's features. + CHECK(WebPGetFeatures(data, data_size, &config.input) == VP8_STATUS_OK); + + // C) Adjust 'config' options, if needed + config.options.no_fancy_upsampling = 1; + config.options.use_scaling = 1; + config.options.scaled_width = scaledWidth(); + config.options.scaled_height = scaledHeight(); + // etc. + + // D) Specify 'config' output options for specifying output colorspace. + // Optionally the external image decode buffer can also be specified. + config.output.colorspace = MODE_BGRA; + // Optionally, the config.output can be pointed to an external buffer as + // well for decoding the image. This externally supplied memory buffer + // should be big enough to store the decoded picture. + config.output.u.RGBA.rgba = (uint8_t*) memory_buffer; + config.output.u.RGBA.stride = scanline_stride; + config.output.u.RGBA.size = total_size_of_the_memory_buffer; + config.output.is_external_memory = 1; + + // E) Decode the WebP image. There are two variants w.r.t decoding image. + // The first one (E.1) decodes the full image and the second one (E.2) is + // used to incrementally decode the image using small input buffers. + // Any one of these steps can be used to decode the WebP image. + + // E.1) Decode full image. + CHECK(WebPDecode(data, data_size, &config) == VP8_STATUS_OK); + + // E.2) Decode image incrementally. + WebPIDecoder* const idec = WebPIDecode(NULL, NULL, &config); + CHECK(idec != NULL); + while (bytes_remaining > 0) { + VP8StatusCode status = WebPIAppend(idec, input, bytes_read); + if (status == VP8_STATUS_OK || status == VP8_STATUS_SUSPENDED) { + bytes_remaining -= bytes_read; + } else { + break; + } + } + WebPIDelete(idec); + + // F) Decoded image is now in config.output (and config.output.u.RGBA). + // It can be saved, displayed or otherwise processed. + + // G) Reclaim memory allocated in config's object. It's safe to call + // this function even if the memory is external and wasn't allocated + // by WebPDecode(). + WebPFreeDecBuffer(&config.output); + +-------------------------------------- END PSEUDO EXAMPLE + +Bugs: +===== + +Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues +Patches welcome! See this page to get started: + http://www.webmproject.org/code/contribute/submitting-patches/ + +Discuss: +======== + +Email: webp-discuss@webmproject.org +Web: http://groups.google.com/a/webmproject.org/group/webp-discuss diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/README.mux b/WebPConverter/libwebp-0.4.1-mac-10.8/README.mux new file mode 100644 index 0000000..437a751 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/README.mux @@ -0,0 +1,186 @@ + __ __ ____ ____ ____ __ __ _ __ __ + / \\/ \/ _ \/ _ \/ _ \/ \ \/ \___/_ / _\ + \ / __/ _ \ __/ / / (_/ /__ + \__\__/\_____/_____/__/ \__//_/\_____/__/___/v0.2.1 + + +Description: +============ + +WebPMux: set of two libraries 'Mux' and 'Demux' for creation, extraction and +manipulation of an extended format WebP file, which can have features like +color profile, metadata and animation. Reference command-line tools 'webpmux' +and 'vwebp' as well as the WebP container specification +'doc/webp-container-spec.txt' are also provided in this package. + +WebP Mux tool: +============== + +The examples/ directory contains a tool (webpmux) for manipulating WebP +files. The webpmux tool can be used to create an extended format WebP file and +also to extract or strip relevant data from such a file. + +A list of options is available using the -help command line flag: + +> webpmux -help +Usage: webpmux -get GET_OPTIONS INPUT -o OUTPUT + webpmux -set SET_OPTIONS INPUT -o OUTPUT + webpmux -strip STRIP_OPTIONS INPUT -o OUTPUT + webpmux -frame FRAME_OPTIONS [-frame...] [-loop LOOP_COUNT] + [-bgcolor BACKGROUND_COLOR] -o OUTPUT + webpmux -info INPUT + webpmux [-h|-help] + webpmux -version + +GET_OPTIONS: + Extract relevant data: + icc get ICC profile + exif get EXIF metadata + xmp get XMP metadata + frame n get nth frame + +SET_OPTIONS: + Set color profile/metadata: + icc file.icc set ICC profile + exif file.exif set EXIF metadata + xmp file.xmp set XMP metadata + where: 'file.icc' contains the ICC profile to be set, + 'file.exif' contains the EXIF metadata to be set + 'file.xmp' contains the XMP metadata to be set + +STRIP_OPTIONS: + Strip color profile/metadata: + icc strip ICC profile + exif strip EXIF metadata + xmp strip XMP metadata + +FRAME_OPTIONS(i): + Create animation: + file_i +di+[xi+yi[+mi[bi]]] + where: 'file_i' is the i'th animation frame (WebP format), + 'di' is the pause duration before next frame, + 'xi','yi' specify the image offset for this frame, + 'mi' is the dispose method for this frame (0 or 1), + 'bi' is the blending method for this frame (+b or -b) + +LOOP_COUNT: + Number of times to repeat the animation. + Valid range is 0 to 65535 [Default: 0 (infinite)]. + +BACKGROUND_COLOR: + Background color of the canvas. + A,R,G,B + where: 'A', 'R', 'G' and 'B' are integers in the range 0 to 255 specifying + the Alpha, Red, Green and Blue component values respectively + [Default: 255,255,255,255] + +INPUT & OUTPUT are in WebP format. + +Note: The nature of EXIF, XMP and ICC data is not checked and is assumed to be +valid. + +Visualization tool: +=================== + +The examples/ directory also contains a tool (vwebp) for viewing WebP files. +It decodes the image and visualizes it using OpenGL. See the libwebp README +for details on building and running this program. + +Mux API: +======== +The Mux API contains methods for adding data to and reading data from WebP +files. This API currently supports XMP/EXIF metadata, ICC profile and animation. +Other features may be added in subsequent releases. + +Example#1 (pseudo code): Creating a WebPMux object with image data, color +profile and XMP metadata. + + int copy_data = 0; + WebPMux* mux = WebPMuxNew(); + // ... (Prepare image data). + WebPMuxSetImage(mux, &image, copy_data); + // ... (Prepare ICC profile data). + WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data); + // ... (Prepare XMP metadata). + WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data); + // Get data from mux in WebP RIFF format. + WebPMuxAssemble(mux, &output_data); + WebPMuxDelete(mux); + // ... (Consume output_data; e.g. write output_data.bytes to file). + WebPDataClear(&output_data); + + +Example#2 (pseudo code): Get image and color profile data from a WebP file. + + int copy_data = 0; + // ... (Read data from file). + WebPMux* mux = WebPMuxCreate(&data, copy_data); + WebPMuxGetFrame(mux, 1, &image); + // ... (Consume image; e.g. call WebPDecode() to decode the data). + WebPMuxGetChunk(mux, "ICCP", &icc_profile); + // ... (Consume icc_profile). + WebPMuxDelete(mux); + free(data); + + +For a detailed Mux API reference, please refer to the header file +(src/webp/mux.h). + +Demux API: +========== +The Demux API enables extraction of images and extended format data from +WebP files. This API currently supports reading of XMP/EXIF metadata, ICC +profile and animated images. Other features may be added in subsequent +releases. + +Code Example: Demuxing WebP data to extract all the frames, ICC profile +and EXIF/XMP metadata. + + WebPDemuxer* demux = WebPDemux(&webp_data); + uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH); + uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT); + // ... (Get information about the features present in the WebP file). + uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS); + + // ... (Iterate over all frames). + WebPIterator iter; + if (WebPDemuxGetFrame(demux, 1, &iter)) { + do { + // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(), + // ... and get other frame properties like width, height, offsets etc. + // ... see 'struct WebPIterator' below for more info). + } while (WebPDemuxNextFrame(&iter)); + WebPDemuxReleaseIterator(&iter); + } + + // ... (Extract metadata). + WebPChunkIterator chunk_iter; + if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter); + // ... (Consume the ICC profile in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter); + // ... (Consume the EXIF metadata in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter); + // ... (Consume the XMP metadata in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + WebPDemuxDelete(demux); + + +For a detailed Demux API reference, please refer to the header file +(src/webp/demux.h). + + +Bugs: +===== + +Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues +Patches welcome! See this page to get started: + http://www.webmproject.org/code/contribute/submitting-patches/ + +Discuss: +======== + +Email: webp-discuss@webmproject.org +Web: http://groups.google.com/a/webmproject.org/group/webp-discuss diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/bin/cwebp b/WebPConverter/libwebp-0.4.1-mac-10.8/bin/cwebp new file mode 100755 index 0000000..c8e8982 Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-mac-10.8/bin/cwebp differ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/bin/dwebp b/WebPConverter/libwebp-0.4.1-mac-10.8/bin/dwebp new file mode 100755 index 0000000..764b165 Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-mac-10.8/bin/dwebp differ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/bin/gif2webp b/WebPConverter/libwebp-0.4.1-mac-10.8/bin/gif2webp new file mode 100755 index 0000000..86b5269 Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-mac-10.8/bin/gif2webp differ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/bin/vwebp b/WebPConverter/libwebp-0.4.1-mac-10.8/bin/vwebp new file mode 100755 index 0000000..05e1b22 Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-mac-10.8/bin/vwebp differ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/bin/webpmux b/WebPConverter/libwebp-0.4.1-mac-10.8/bin/webpmux new file mode 100755 index 0000000..d92a273 Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-mac-10.8/bin/webpmux differ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/doc/cwebp.html b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/cwebp.html new file mode 100644 index 0000000..ecf2d22 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/cwebp.html @@ -0,0 +1,567 @@ + + + + + + + + + +CWEBP + + + + +

CWEBP

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+ADDITIONAL OPTIONS
+BUGS
+EXAMPLES
+AUTHORS
+SEE ALSO
+ +
+ + + +

NAME

+ + +

cwebp − +compress an image file to a WebP file

+ + +

SYNOPSIS

+ + +

cwebp +[options] input_file −o +output_file.webp

+ + +

DESCRIPTION

+ + +

This manual +page documents the cwebp command.

+ +

cwebp +compresses an image using the WebP format. Input format can +be either PNG, JPEG, TIFF, WebP or raw Y’CbCr +samples.

+ + +

OPTIONS

+ + +

The basic +options are:
+−o
string

+ +

Specify the name of the output +WebP file. If omitted, cwebp will perform compression +but only report statistics. Using "−" as +output name will direct output to ’stdout’.

+ +

−− +string

+ +

Explicitly specify the input +file. This option is useful if the input file starts with an +’−’ for instance. This option must appear +last. Any other options afterward will be +ignored.

+ +

−h, +−help

+ +

A short usage summary.

+ +

−H, +−longhelp

+ +

A summary of all the possible +options.

+ +

−version

+ +

Print the version number (as +major.minor.revision) and exit.

+ +

−q +float

+ +

Specify the compression factor +for RGB channels between 0 and 100. The default is 75.

+ +

−alpha_q +int

+ +

Specify the compression factor +for alpha compression between 0 and 100. Lossless +compression of alpha is achieved using a value of 100, while +the lower values result in a lossy compression. The default +is 100.

+ + + + + + + +
+ + +

−f +int

+ + +

Specify the +strength of the deblocking filter, between 0 (no filtering) +and 100 (maximum filtering). A value of 0 will turn off any +filtering. Higher value will increase the strength of the +filtering process applied after decoding the picture. The +higher the value the smoother the picture will appear. +Typical values are usually in the range of 20 to 50.

+ +

−preset +string

+ +

Specify a set of pre-defined +parameters to suit a particular type of source material. +Possible values are: default, photo, +picture, drawing, icon, text. +Since −preset overwrites the other +parameters’ values (except the −q one), +this option should preferably appear first in the order of +the arguments.

+ +

−sns +int

+ +

Specify the amplitude of the +spatial noise shaping. Spatial noise shaping (or sns +for short) refers to a general collection of built-in +algorithms used to decide which area of the picture should +use relatively less bits, and where else to better transfer +these bits. The possible range goes from 0 (algorithm is +off) to 100 (the maximal effect). The default value is +80.

+ + + + + + + +
+ + +

−m +int

+ + +

Specify the +compression method to use. This parameter controls the trade +off between encoding speed and the compressed file size and +quality. Possible values range from 0 to 6. Default value is +4. When higher values are used, the encoder will spend more +time inspecting additional encoding possibilities and decide +on the quality gain. Lower value can result in faster +processing time at the expense of larger file size and lower +compression quality.

+ +

−jpeg_like

+ +

Change the internal parameter +mapping to better match the expected size of JPEG +compression. This flag will generally produce an output file +of similar size to its JPEG equivalent (for the same +−q setting), but with less visual +distortion.

+ + + + + + + +
+ + + +

−mt

+ + +

Use multi-threading +for encoding, if possible. This option is only effective +when using lossy compression on a source with a transparency +channel.

+ +

−low_memory

+ +

Reduce memory usage of lossy +encoding by saving four times the compressed size +(typically). This will make the encoding slower and the +output slightly different in size and distortion. This flag +is only effective for methods 3 and up, and is off by +default. Note that leaving this flag off will have some side +effects on the bitstream: it forces certain bitstream +features like number of partitions (forced to 1). Note that +a more detailed report of bitstream size is printed by +cwebp when using this option.

+ + + + + + + +
+ + + +

−af

+ + +

Turns auto-filter +on. This algorithm will spend additional time optimizing the +filtering strength to reach a well-balanced quality.

+ + +

ADDITIONAL OPTIONS

+ + +

More advanced +options are:
+−sharpness
int

+ +

Specify the sharpness of the +filtering (if used). Range is 0 (sharpest) to 7 (least +sharp). Default is 0.

+ +

−strong

+ +

Use strong filtering (if +filtering is being used thanks to the −f +option). Strong filtering is on by default.

+ +

−nostrong

+ +

Disable strong filtering (if +filtering is being used thanks to the −f +option) and use simple filtering instead.

+ +

−segments +int

+ +

Change the number of partitions +to use during the segmentation of the sns algorithm. +Segments should be in range 1 to 4. Default value is 4. This +option has no effect for methods 3 and up, unless +−low_memory is used.

+ +

−partition_limit +int

+ +

Degrade quality by limiting the +number of bits used by some macroblocks. Range is 0 (no +degradation, the default) to 100 (full degradation). Useful +values are usually around 30-70 for moderately large images. +In the VP8 format, the so-called control partition has a +limit of 512k and is used to store the following +information: whether the macroblock is skipped, which +segment it belongs to, whether it is coded as intra 4x4 or +intra 16x16 mode, and finally the prediction modes to use +for each of the sub-blocks. For a very large image, 512k +only leaves room to few bits per 16x16 macroblock. The +absolute minimum is 4 bits per macroblock. Skip, segment, +and mode information can use up almost all these 4 bits +(although the case is unlikely), which is problematic for +very large images. The partition_limit factor controls how +frequently the most bit-costly mode (intra 4x4) will be +used. This is useful in case the 512k limit is reached and +the following message is displayed: Error code: 6 +(PARTITION0_OVERFLOW: Partition #0 is too big to fit +512k). If using -partition_limit is not enough to +meet the 512k constraint, one should use less segments in +order to save more header bits per macroblock. See the +-segments option.

+ +

−size +int

+ +

Specify a target size (in +bytes) to try and reach for the compressed output. +Compressor will make several pass of partial encoding in +order to get as close as possible to this target.

+ +

−psnr +float

+ +

Specify a target PSNR (in dB) +to try and reach for the compressed output. Compressor will +make several pass of partial encoding in order to get as +close as possible to this target.

+ +

−pass +int

+ +

Set a maximum number of passes +to use during the dichotomy used by options +−size or −psnr. Maximum value is +10.

+ +

−resize width +height

+ +

Resize the source to a +rectangle with size width x height. If either +(but not both) of the width or height +parameters is 0, the value will be calculated preserving the +aspect-ratio.

+ +

−crop +x_position y_position width height

+ +

Crop the source to a rectangle +with top-left corner at coordinates (x_position, +y_position) and size width x height. +This cropping area must be fully contained within the source +rectangle.

+ +

−s width +height

+ +

Specify that the input file +actually consists of raw Y’CbCr samples following the +ITU-R BT.601 recommendation, in 4:2:0 linear format. The +luma plane has size width x height.

+ +

−map +int

+ +

Output additional ASCII-map of +encoding information. Possible map values range from 1 to 6. +This is only meant to help debugging.

+ +

−pre +int

+ +

Specify some pre-processing +steps. Using a value of ’2’ will trigger +quality-dependent pseudo-random dithering during +RGBA->YUVA conversion (lossy compression only).

+ +

−alpha_filter +string

+ +

Specify the predictive +filtering method for the alpha plane. One of +’none’, ’fast’ or +’best’, in increasing complexity and slowness +order. Default is ’fast’. Internally, alpha +filtering is performed using four possible predictions +(none, horizontal, vertical, gradient). The +’best’ mode will try each mode in turn and pick +the one which gives the smaller size. The ’fast’ +mode will just try to form an a-priori guess without testing +all modes.

+ +

−alpha_method +int

+ +

Specify the algorithm used for +alpha compression: 0 or 1. Algorithm 0 denotes no +compression, 1 uses WebP lossless format for compression. +The default is 1.

+ + +

−alpha_cleanup

+ +

Modify unseen RGB values under +fully transparent area, to help compressibility. The default +is off.

+ +

−blend_alpha +int

+ +

This option blends the alpha +channel (if present) with the source using the background +color specified in hexadecimal as 0xrrggbb. The alpha +channel is afterward reset to the opaque value 255.

+ +

−noalpha

+ +

Using this option will discard +the alpha channel.

+ +

−lossless

+ +

Encode the image without any +loss.

+ +

−hint +string

+ +

Specify the hint about input +image type. Possible values are: photo, +picture or graph.

+ +

−metadata +string

+ +

A comma separated list of +metadata to copy from the input to the output if present. +Valid values: all, none, exif, +icc, xmp. The default is none.

+ +

Note: each +input format may not support all combinations.

+ + + + + + + + + + + + +
+ + + +

−noasm

+ + +

Disable all +assembly optimizations.

+ + + +

−v

+ + +

Print extra +information (encoding time in particular).

+ +

−print_psnr

+ +

Compute and report average PSNR +(Peak-Signal-To-Noise ratio).

+ +

−print_ssim

+ +

Compute and report average SSIM +(structural similarity metric, see +http://en.wikipedia.org/wiki/SSIM for additional +details).

+ +

−print_lsim

+ +

Compute and report local +similarity metric (sum of lowest error amongst the +collocated pixel neighbors).

+ +

−progress

+ +

Report encoding progress in +percent.

+ + + + + + + + + + + + +
+ + + +

−quiet

+ + +

Do not print +anything.

+ + + +

−short

+ + +

Only print brief +information (output file size and PSNR) for testing +purpose.

+ + +

BUGS

+ + +

Please report +all bugs to our issue tracker: +http://code.google.com/p/webp/issues
+Patches welcome! See this page to get started: +http://www.webmproject.org/code/contribute/submitting-patches/

+ + +

EXAMPLES

+ + +

cwebp −q +50 -lossless picture.png −o picture_lossless.webp
+cwebp −q 70 picture_with_alpha.png −o +picture_with_alpha.webp
+cwebp −sns 70 −f 50 −size 60000 +picture.png −o picture.webp
+cwebp −o picture.webp −− +−−−picture.png

+ + +

AUTHORS

+ + +

cwebp +was written by the WebP team.
+The latest source tree is available at +http://www.webmproject.org/code

+ +

This manual +page was written by Pascal Massimino +<pascal.massimino@gmail.com>, for the Debian project +(and may be used by others).

+ + +

SEE ALSO

+ + + +

dwebp(1), +gif2webp(1)
+Please refer to http://developers.google.com/speed/webp/ for +additional information.

+
+ + diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/doc/cwebp.txt b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/cwebp.txt new file mode 100644 index 0000000..48d09ac --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/cwebp.txt @@ -0,0 +1,284 @@ +CWEBP(1) CWEBP(1) + + + +NAME + cwebp compress an image file to a WebP file + +SYNOPSIS + cwebp [options] input_file o output_file.webp + +DESCRIPTION + This manual page documents the cwebp command. + + cwebp compresses an image using the WebP format. Input format can be + either PNG, JPEG, TIFF, WebP or raw YCbCr samples. + +OPTIONS + The basic options are: + + o string + Specify the name of the output WebP file. If omitted, cwebp will + perform compression but only report statistics. Using "" as + output name will direct output to stdout. + + string + Explicitly specify the input file. This option is useful if the + input file starts with an for instance. This option must + appear last. Any other options afterward will be ignored. + + h,help + A short usage summary. + + H,longhelp + A summary of all the possible options. + + version + Print the version number (as major.minor.revision) and exit. + + q float + Specify the compression factor for RGB channels between 0 and + 100. The default is 75. + + alpha_q int + Specify the compression factor for alpha compression between 0 + and 100. Lossless compression of alpha is achieved using a + value of 100, while the lower values result in a lossy compres + sion. The default is 100. + + f int Specify the strength of the deblocking filter, between 0 (no + filtering) and 100 (maximum filtering). A value of 0 will turn + off any filtering. Higher value will increase the strength of + the filtering process applied after decoding the picture. The + higher the value the smoother the picture will appear. Typical + values are usually in the range of 20 to 50. + + preset string + Specify a set of predefined parameters to suit a particular + type of source material. Possible values are: default, photo, + picture, drawing, icon, text. Sincepreset overwrites the other + parameters values (except the q one), this option should + preferably appear first in the order of the arguments. + + sns int + Specify the amplitude of the spatial noise shaping. Spatial + noise shaping (or sns for short) refers to a general collection + of builtin algorithms used to decide which area of the picture + should use relatively less bits, and where else to better trans + fer these bits. The possible range goes from 0 (algorithm is + off) to 100 (the maximal effect). The default value is 80. + + m int Specify the compression method to use. This parameter controls + the trade off between encoding speed and the compressed file + size and quality. Possible values range from 0 to 6. Default + value is 4. When higher values are used, the encoder will spend + more time inspecting additional encoding possibilities and + decide on the quality gain. Lower value can result in faster + processing time at the expense of larger file size and lower + compression quality. + + jpeg_like + Change the internal parameter mapping to better match the + expected size of JPEG compression. This flag will generally pro + duce an output file of similar size to its JPEG equivalent (for + the sameq setting), but with less visual distortion. + + mt Use multithreading for encoding, if possible. This option is + only effective when using lossy compression on a source with a + transparency channel. + + low_memory + Reduce memory usage of lossy encoding by saving four times the + compressed size (typically). This will make the encoding slower + and the output slightly different in size and distortion. This + flag is only effective for methods 3 and up, and is off by + default. Note that leaving this flag off will have some side + effects on the bitstream: it forces certain bitstream features + like number of partitions (forced to 1). Note that a more + detailed report of bitstream size is printed by cwebp when using + this option. + + af Turns autofilter on. This algorithm will spend additional time + optimizing the filtering strength to reach a wellbalanced qual + ity. + + +ADDITIONAL OPTIONS + More advanced options are: + + sharpness int + Specify the sharpness of the filtering (if used). Range is 0 + (sharpest) to 7 (least sharp). Default is 0. + + strong + Use strong filtering (if filtering is being used thanks to the + f option). Strong filtering is on by default. + + nostrong + Disable strong filtering (if filtering is being used thanks to + thef option) and use simple filtering instead. + + segments int + Change the number of partitions to use during the segmentation + of the sns algorithm. Segments should be in range 1 to 4. + Default value is 4. This option has no effect for methods 3 and + up, unlesslow_memory is used. + + partition_limit int + Degrade quality by limiting the number of bits used by some mac + roblocks. Range is 0 (no degradation, the default) to 100 (full + degradation). Useful values are usually around 3070 for moder + ately large images. In the VP8 format, the socalled control + partition has a limit of 512k and is used to store the following + information: whether the macroblock is skipped, which segment it + belongs to, whether it is coded as intra 4x4 or intra 16x16 + mode, and finally the prediction modes to use for each of the + subblocks. For a very large image, 512k only leaves room to + few bits per 16x16 macroblock. The absolute minimum is 4 bits + per macroblock. Skip, segment, and mode information can use up + almost all these 4 bits (although the case is unlikely), which + is problematic for very large images. The partition_limit factor + controls how frequently the most bitcostly mode (intra 4x4) + will be used. This is useful in case the 512k limit is reached + and the following message is displayed: Error code: 6 (PARTI_ + TION0_OVERFLOW: Partition #0 is too big to fit 512k). If using + partition_limit is not enough to meet the 512k constraint, one + should use less segments in order to save more header bits per + macroblock. See thesegments option. + + size int + Specify a target size (in bytes) to try and reach for the com + pressed output. Compressor will make several pass of partial + encoding in order to get as close as possible to this target. + + psnr float + Specify a target PSNR (in dB) to try and reach for the com + pressed output. Compressor will make several pass of partial + encoding in order to get as close as possible to this target. + + pass int + Set a maximum number of passes to use during the dichotomy used + by optionssize orpsnr. Maximum value is 10. + + resize width height + Resize the source to a rectangle with size width x height. If + either (but not both) of the width or height parameters is 0, + the value will be calculated preserving the aspectratio. + + crop x_position y_position width height + Crop the source to a rectangle with topleft corner at coordi + nates (x_position, y_position) and size width x height. This + cropping area must be fully contained within the source rectan + gle. + + s width height + Specify that the input file actually consists of raw YCbCr sam + ples following the ITUR BT.601 recommendation, in 4:2:0 linear + format. The luma plane has size width x height. + + map int + Output additional ASCIImap of encoding information. Possible + map values range from 1 to 6. This is only meant to help debug + ging. + + pre int + Specify some preprocessing steps. Using a value of 2 will + trigger qualitydependent pseudorandom dithering during + RGBA>YUVA conversion (lossy compression only). + + alpha_filter string + Specify the predictive filtering method for the alpha plane. One + of none, fast or best, in increasing complexity and slow + ness order. Default is fast. Internally, alpha filtering is + performed using four possible predictions (none, horizontal, + vertical, gradient). The best mode will try each mode in turn + and pick the one which gives the smaller size. The fast mode + will just try to form an apriori guess without testing all + modes. + + alpha_method int + Specify the algorithm used for alpha compression: 0 or 1. Algo + rithm 0 denotes no compression, 1 uses WebP lossless format for + compression. The default is 1. + + alpha_cleanup + Modify unseen RGB values under fully transparent area, to help + compressibility. The default is off. + + blend_alpha int + This option blends the alpha channel (if present) with the + source using the background color specified in hexadecimal as + 0xrrggbb. The alpha channel is afterward reset to the opaque + value 255. + + noalpha + Using this option will discard the alpha channel. + + lossless + Encode the image without any loss. + + hint string + Specify the hint about input image type. Possible values are: + photo, picture or graph. + + metadata string + A comma separated list of metadata to copy from the input to the + output if present. Valid values: all, none, exif, icc, xmp. + The default is none. + + Note: each input format may not support all combinations. + + noasm Disable all assembly optimizations. + + v Print extra information (encoding time in particular). + + print_psnr + Compute and report average PSNR (PeakSignalToNoise ratio). + + print_ssim + Compute and report average SSIM (structural similarity metric, + see http://en.wikipedia.org/wiki/SSIM for additional details). + + print_lsim + Compute and report local similarity metric (sum of lowest error + amongst the collocated pixel neighbors). + + progress + Report encoding progress in percent. + + quiet Do not print anything. + + short Only print brief information (output file size and PSNR) for + testing purpose. + + +BUGS + Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues + Patches welcome! See this page to get started: http://www.webmpro + ject.org/code/contribute/submittingpatches/ + + +EXAMPLES + cwebp q 50 lossless picture.png o picture_lossless.webp + cwebp q 70 picture_with_alpha.png o picture_with_alpha.webp + cwebp sns 70 f 50 size 60000 picture.png o picture.webp + cwebp o picture.webp picture.png + + +AUTHORS + cwebp was written by the WebP team. + The latest source tree is available at http://www.webmproject.org/code + + This manual page was written by Pascal Massimino , for the Debian project (and may be used by others). + + +SEE ALSO + dwebp(1), gif2webp(1) + Please refer to http://developers.google.com/speed/webp/ for additional + information. + + + + July 22, 2014 CWEBP(1) diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/doc/dwebp.html b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/dwebp.html new file mode 100644 index 0000000..d4bd921 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/dwebp.html @@ -0,0 +1,346 @@ + + + + + + + + + +DWEBP + + + + +

DWEBP

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+BUGS
+EXAMPLES
+AUTHORS
+SEE ALSO
+ +
+ + + +

NAME

+ + +

dwebp − +decompress a WebP file to an image file

+ + +

SYNOPSIS

+ + +

dwebp +[options] input_file.webp

+ + +

DESCRIPTION

+ + +

This manual +page documents the dwebp command.

+ +

dwebp +decompresses WebP files into PNG, PAM, PPM or PGM +images.

+ + +

OPTIONS

+ + +

The basic +options are:

+ + + + + + + + +
+ + + +

−h

+ + +

Print usage +summary.

+
+ +

−version

+ +

Print the version number (as +major.minor.revision) and exit.

+ +

−o +string

+ +

Specify the name of the output +file (as PNG format by default). Using "-" as +output name will direct output to ’stdout’.

+ +

−− +string

+ +

Explicitly specify the input +file. This option is useful if the input file starts with an +’−’ for instance. This option must appear +last. Any other options afterward will be ignored. If +the input file is "−", the data will be read +from stdin instead of a file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +

−bmp

+ + +

Change the output +format to uncompressed BMP.

+ + + +

−tiff

+ + +

Change the output +format to uncompressed TIFF.

+ + + +

−pam

+ + +

Change the output +format to PAM (retains alpha).

+ + + +

−ppm

+ + +

Change the output +format to PPM (discards alpha).

+ + + +

−pgm

+ + +

Change the output +format to PGM. The output consists of luma/chroma samples +instead of RGB, using the IMC4 layout. This option is mainly +for verification and debugging purposes.

+ + + +

−yuv

+ + +

Change the output +format to raw YUV. The output consists of +luma/chroma-U/chroma-V samples instead of RGB, saved +sequentially as individual planes. This option is mainly for +verification and debugging purposes.

+ +

−nofancy

+ +

Don’t use the fancy +upscaler for YUV420. This may lead to jaggy edges +(especially the red ones), but should be faster.

+ +

−nofilter

+ +

Don’t use the in-loop +filtering process even if it is required by the bitstream. +This may produce visible blocks on the non-compliant output, +but it will make the decoding faster.

+ +

−dither +strength

+ +

Specify a dithering +strength between 0 and 100. Dithering is a +post-processing effect applied to chroma components in lossy +compression. It helps by smoothing gradients and avoiding +banding artifacts.

+ +

−nodither

+ +

Disable all dithering +(default).

+ + + + + + + + +
+ + + +

−mt

+ + +

Use multi-threading +for decoding, if possible.

+
+ +

−crop +x_position y_position width height

+ +

Crop the decoded picture to a +rectangle with top-left corner at coordinates +(x_position, y_position) and size width +x height. This cropping area must be fully contained +within the source rectangle. The top-left corner will be +snapped to even coordinates if needed. This option is meant +to reduce the memory needed for cropping large images. Note: +the cropping is applied before any scaling.

+ +

−scale width +height

+ +

Rescale the decoded picture to +dimension width x height. This option is +mostly intended to reducing the memory needed to decode +large images, when only a small version is needed +(thumbnail, preview, etc.). Note: scaling is applied +after cropping.

+ + + + + + + + + + + + +
+ + + +

−v

+ + +

Print extra +information (decoding time in particular).

+ + + +

−noasm

+ + +

Disable all +assembly optimizations.

+ + +

BUGS

+ + +

Please report +all bugs to our issue tracker: +http://code.google.com/p/webp/issues
+Patches welcome! See this page to get started: +http://www.webmproject.org/code/contribute/submitting-patches/

+ + +

EXAMPLES

+ + +

dwebp +picture.webp −o output.png
+dwebp picture.webp −ppm −o output.ppm
+dwebp −o output.ppm −− +−−−picture.webp
+cat picture.webp | dwebp −o − −− +− > output.ppm

+ + +

AUTHORS

+ + +

dwebp +was written by the WebP team.
+The latest source tree is available at +http://www.webmproject.org/code

+ +

This manual +page was written by Pascal Massimino +<pascal.massimino@gmail.com>, for the Debian project +(and may be used by others).

+ + +

SEE ALSO

+ + + +

cwebp(1), +gif2webp(1), webpmux(1)
+Please refer to http://developers.google.com/speed/webp/ for +additional information.

+ +

Output file +format details
+PAM: http://netpbm.sourceforge.net/doc/pam.html
+PGM: http://netpbm.sourceforge.net/doc/pgm.html
+PPM: http://netpbm.sourceforge.net/doc/ppm.html
+PNG: http://www.libpng.org/pub/png/png-sitemap.html#info

+
+ + diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/doc/dwebp.txt b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/dwebp.txt new file mode 100644 index 0000000..e728f79 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/dwebp.txt @@ -0,0 +1,127 @@ +DWEBP(1) DWEBP(1) + + + +NAME + dwebp decompress a WebP file to an image file + +SYNOPSIS + dwebp [options] input_file.webp + +DESCRIPTION + This manual page documents the dwebp command. + + dwebp decompresses WebP files into PNG, PAM, PPM or PGM images. + +OPTIONS + The basic options are: + + h Print usage summary. + + version + Print the version number (as major.minor.revision) and exit. + + o string + Specify the name of the output file (as PNG format by default). + Using "" as output name will direct output to stdout. + + string + Explicitly specify the input file. This option is useful if the + input file starts with an for instance. This option must + appear last. Any other options afterward will be ignored. If + the input file is "", the data will be read from stdin instead + of a file. + + bmp Change the output format to uncompressed BMP. + + tiff Change the output format to uncompressed TIFF. + + pam Change the output format to PAM (retains alpha). + + ppm Change the output format to PPM (discards alpha). + + pgm Change the output format to PGM. The output consists of + luma/chroma samples instead of RGB, using the IMC4 layout. This + option is mainly for verification and debugging purposes. + + yuv Change the output format to raw YUV. The output consists of + luma/chromaU/chromaV samples instead of RGB, saved sequen + tially as individual planes. This option is mainly for verifica + tion and debugging purposes. + + nofancy + Dont use the fancy upscaler for YUV420. This may lead to jaggy + edges (especially the red ones), but should be faster. + + nofilter + Dont use the inloop filtering process even if it is required + by the bitstream. This may produce visible blocks on the non + compliant output, but it will make the decoding faster. + + dither strength + Specify a dithering strength between 0 and 100. Dithering is a + postprocessing effect applied to chroma components in lossy + compression. It helps by smoothing gradients and avoiding band + ing artifacts. + + nodither + Disable all dithering (default). + + mt Use multithreading for decoding, if possible. + + crop x_position y_position width height + Crop the decoded picture to a rectangle with topleft corner at + coordinates (x_position, y_position) and size width x height. + This cropping area must be fully contained within the source + rectangle. The topleft corner will be snapped to even coordi + nates if needed. This option is meant to reduce the memory + needed for cropping large images. Note: the cropping is applied + before any scaling. + + scale width height + Rescale the decoded picture to dimension width x height. This + option is mostly intended to reducing the memory needed to + decode large images, when only a small version is needed (thumb + nail, preview, etc.). Note: scaling is applied after cropping. + + v Print extra information (decoding time in particular). + + noasm Disable all assembly optimizations. + + +BUGS + Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues + Patches welcome! See this page to get started: http://www.webmpro + ject.org/code/contribute/submittingpatches/ + + +EXAMPLES + dwebp picture.webp o output.png + dwebp picture.webp ppm o output.ppm + dwebp o output.ppm picture.webp + cat picture.webp | dwebp o > output.ppm + + +AUTHORS + dwebp was written by the WebP team. + The latest source tree is available at http://www.webmproject.org/code + + This manual page was written by Pascal Massimino , for the Debian project (and may be used by others). + + +SEE ALSO + cwebp(1), gif2webp(1), webpmux(1) + Please refer to http://developers.google.com/speed/webp/ for additional + information. + + Output file format details + PAM: http://netpbm.sourceforge.net/doc/pam.html + PGM: http://netpbm.sourceforge.net/doc/pgm.html + PPM: http://netpbm.sourceforge.net/doc/ppm.html + PNG: http://www.libpng.org/pub/png/pngsitemap.html#info + + + + July 22, 2014 DWEBP(1) diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/doc/gif2webp.html b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/gif2webp.html new file mode 100644 index 0000000..38689a6 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/gif2webp.html @@ -0,0 +1,303 @@ + + + + + + + + + +GIF2WEBP + + + + +

GIF2WEBP

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+BUGS
+EXAMPLES
+AUTHORS
+SEE ALSO
+ +
+ + + +

NAME

+ + +

gif2webp +− Convert a GIF image to WebP

+ + +

SYNOPSIS

+ + + +

gif2webp +[options] input_file.gif −o +output_file.webp

+ + +

DESCRIPTION

+ + +

This manual +page documents the gif2webp command.

+ + +

gif2webp +converts a GIF image to a WebP image.

+ + +

OPTIONS

+ + +

The basic +options are:
+−o
string

+ +

Specify the name of the output +WebP file. If omitted, gif2webp will perform +conversion but only report statistics. Using +"−" as output name will direct output to +’stdout’.

+ +

−h, +−help

+ +

Usage information.

+ +

−version

+ +

Print the version number (as +major.minor.revision) and exit.

+ + + + + + + + + + + + +
+ + + +

−lossy

+ + +

Encode the image +using lossy compression.

+ + + +

−mixed

+ + +

Mixed compression +mode: optimize compression of the image by picking either +lossy or lossless compression for each frame +heuristically.

+ +

−q +float

+ +

Specify the compression factor +for RGB channels between 0 and 100. The default is 75.
+In case of lossless compression (default), a small factor +enables faster compression speed, but produces a larger +file. Maximum compression is achieved by using a value of +100.
+In case of lossy compression (specified by the −lossy +option), a small factor produces a smaller file with lower +quality. Best quality is achieved by using a value of +100.

+ + + + + + + +
+ + +

−m +int

+ + +

Specify the +compression method to use. This parameter controls the trade +off between encoding speed and the compressed file size and +quality. Possible values range from 0 to 6. Default value is +4. When higher values are used, the encoder will spend more +time inspecting additional encoding possibilities and decide +on the quality gain. Lower value can result is faster +processing time at the expense of larger file size and lower +compression quality.

+ +

−kmin int +
+−kmax
int

+ +

Specify the minimum and maximum +distance between consecutive key frames (independently +decodable frames) in the output animation. The tool will +insert some key frames into the output animation as needed +so that this criteria is satisfied.
+A ’kmin’ value of 0 will turn off insertion of +key frames. Typical values are in the range 3 to 30. Default +values are kmin = 9, kmax = 17 for lossless compression and +kmin = 3, kmax = 5 for lossy compression.
+These two options are relevant only for animated images with +large number of frames (>50).
+When lower values are used, more frames will be converted to +key frames. This may lead to smaller number of frames +required to decode a frame on average, thereby improving the +decoding performance. But this may lead to slightly bigger +file sizes. Higher values may lead to worse decoding +performance, but smaller file sizes.
+Some restrictions:
+(i) kmin < kmax,
+(ii) kmin >= kmax / 2 + 1 and
+(iii) kmax - kmin <= 30.
+If any of these restrictions are not met, they will be +enforced automatically.

+ +

−metadata +string

+ +

A comma separated list of +metadata to copy from the input to the output if present. +Valid values: all, none, icc, +xmp. The default is xmp.

+ + + + + + + + + + + + + + + + + + + + + + +
+ + +

−f +int

+ + +

For lossy encoding +only (specified by the −lossy option). Specify the +strength of the deblocking filter, between 0 (no filtering) +and 100 (maximum filtering). A value of 0 will turn off any +filtering. Higher value will increase the strength of the +filtering process applied after decoding the picture. The +higher the value the smoother the picture will appear. +Typical values are usually in the range of 20 to 50.

+ + + +

−mt

+ + +

Use multi-threading +for encoding, if possible. This option is only effective +when using lossy compression.

+ + + +

−v

+ + +

Print extra +information.

+ + + +

−quiet

+ + +

Do not print +anything.

+ + +

BUGS

+ + +

Please report +all bugs to our issue tracker: +http://code.google.com/p/webp/issues
+Patches welcome! See this page to get started: +http://www.webmproject.org/code/contribute/submitting-patches/

+ + +

EXAMPLES

+ + +

gif2webp +picture.gif −o picture.webp
+gif2webp −q 70 picture.gif −o picture.webp
+gif2webp −lossy −m 3 picture.gif −o +picture_lossy.webp
+gif2webp −lossy −f 50 picture.gif −o +picture.webp
+gif2webp −q 70 −o picture.webp −− +−−−picture.gif

+ + +

AUTHORS

+ + + +

gif2webp +was written by the WebP team.
+The latest source tree is available at +http://www.webmproject.org/code

+ +

This manual +page was written by Urvang Joshi <urvang@google.com>, +for the Debian project (and may be used by others).

+ + +

SEE ALSO

+ + + +

cwebp(1), +dwebp(1), webpmux(1)
+Please refer to http://developers.google.com/speed/webp/ for +additional information.

+
+ + diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/doc/gif2webp.txt b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/gif2webp.txt new file mode 100644 index 0000000..03fe095 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/gif2webp.txt @@ -0,0 +1,132 @@ +GIF2WEBP(1) GIF2WEBP(1) + + + +NAME + gif2webp Convert a GIF image to WebP + +SYNOPSIS + gif2webp [options] input_file.gif o output_file.webp + +DESCRIPTION + This manual page documents the gif2webp command. + + gif2webp converts a GIF image to a WebP image. + +OPTIONS + The basic options are: + + o string + Specify the name of the output WebP file. If omitted, gif2webp + will perform conversion but only report statistics. Using "" + as output name will direct output to stdout. + + h,help + Usage information. + + version + Print the version number (as major.minor.revision) and exit. + + lossy Encode the image using lossy compression. + + mixed Mixed compression mode: optimize compression of the image by + picking either lossy or lossless compression for each frame + heuristically. + + q float + Specify the compression factor for RGB channels between 0 and + 100. The default is 75. + In case of lossless compression (default), a small factor + enables faster compression speed, but produces a larger file. + Maximum compression is achieved by using a value of 100. + In case of lossy compression (specified by the lossy option), a + small factor produces a smaller file with lower quality. Best + quality is achieved by using a value of 100. + + m int Specify the compression method to use. This parameter controls + the trade off between encoding speed and the compressed file + size and quality. Possible values range from 0 to 6. Default + value is 4. When higher values are used, the encoder will spend + more time inspecting additional encoding possibilities and + decide on the quality gain. Lower value can result is faster + processing time at the expense of larger file size and lower + compression quality. + + kmin int + + kmax int + Specify the minimum and maximum distance between consecutive key + frames (independently decodable frames) in the output animation. + The tool will insert some key frames into the output animation + as needed so that this criteria is satisfied. + A kmin value of 0 will turn off insertion of key frames. Typ + ical values are in the range 3 to 30. Default values are kmin = + 9, kmax = 17 for lossless compression and kmin = 3, kmax = 5 for + lossy compression. + These two options are relevant only for animated images with + large number of frames (>50). + When lower values are used, more frames will be converted to key + frames. This may lead to smaller number of frames required to + decode a frame on average, thereby improving the decoding per + formance. But this may lead to slightly bigger file sizes. + Higher values may lead to worse decoding performance, but + smaller file sizes. + Some restrictions: + (i) kmin < kmax, + (ii) kmin >= kmax / 2 + 1 and + (iii) kmax kmin <= 30. + If any of these restrictions are not met, they will be enforced + automatically. + + metadata string + A comma separated list of metadata to copy from the input to the + output if present. Valid values: all, none, icc, xmp. The + default is xmp. + + f int For lossy encoding only (specified by the lossy option). Spec + ify the strength of the deblocking filter, between 0 (no filter + ing) and 100 (maximum filtering). A value of 0 will turn off + any filtering. Higher value will increase the strength of the + filtering process applied after decoding the picture. The higher + the value the smoother the picture will appear. Typical values + are usually in the range of 20 to 50. + + mt Use multithreading for encoding, if possible. This option is + only effective when using lossy compression. + + v Print extra information. + + quiet Do not print anything. + + +BUGS + Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues + Patches welcome! See this page to get started: http://www.webmpro + ject.org/code/contribute/submittingpatches/ + + +EXAMPLES + gif2webp picture.gif o picture.webp + gif2webp q 70 picture.gif o picture.webp + gif2webp lossy m 3 picture.gif o picture_lossy.webp + gif2webp lossy f 50 picture.gif o picture.webp + gif2webp q 70 o picture.webp picture.gif + + +AUTHORS + gif2webp was written by the WebP team. + The latest source tree is available at http://www.webmproject.org/code + + This manual page was written by Urvang Joshi , for + the Debian project (and may be used by others). + + +SEE ALSO + cwebp(1), dwebp(1), webpmux(1) + Please refer to http://developers.google.com/speed/webp/ for additional + information. + + + + March 7, 2014 GIF2WEBP(1) diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/doc/vwebp.html b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/vwebp.html new file mode 100644 index 0000000..eda9a79 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/vwebp.html @@ -0,0 +1,251 @@ + + + + + + + + + +VWEBP + + + + +

VWEBP

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+KEYBOARD SHORTCUTS
+BUGS
+EXAMPLES
+AUTHORS
+SEE ALSO
+ +
+ + + +

NAME

+ + +

vwebp − +decompress a WebP file and display it in a window

+ + +

SYNOPSIS

+ + +

vwebp +[options] input_file.webp

+ + +

DESCRIPTION

+ + +

This manual +page documents the vwebp command.

+ +

vwebp +decompresses a WebP file and displays it in a window using +OpenGL.

+ + +

OPTIONS

+ + + + + + + + + +
+ + + +

−h

+ + +

Print usage +summary.

+
+ +

−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 +strength

+ +

Specify a dithering +strength between 0 and 100. Dithering is a +post-processing effect applied to chroma components in lossy +compression. It helps by smoothing gradients and avoiding +banding artifacts. Default: 50.

+ + + + + + + + + + + + +
+ + + +

−mt

+ + +

Use multi-threading +for decoding, if possible.

+ + + +

−info

+ + +

Display image +information on top of the decoded image.

+ +

−− +string

+ +

Explicitly specify the input +file. This option is useful if the input file starts with an +’−’ for instance. This option must appear +last. Any other options afterward will be ignored. If +the input file is "−", the data will be read +from stdin instead of a file.

+ + +

KEYBOARD SHORTCUTS

+ + + + + + + + + + + + + + + +
+ + + +

’c’

+ + +

Toggle use of color +profile.

+
+ + + +

’i’

+ + +

Overlay file +information.

+
+ +

’q’ / +’Q’ / ESC

+ +

Quit.

+ + +

BUGS

+ + +

Please report +all bugs to our issue tracker: +http://code.google.com/p/webp/issues
+Patches welcome! See this page to get started: +http://www.webmproject.org/code/contribute/submitting-patches/

+ + +

EXAMPLES

+ + +

vwebp +picture.webp
+vwebp picture.webp -mt -dither 0
+vwebp −− −−−picture.webp

+ + +

AUTHORS

+ + +

vwebp +was written by the WebP team.
+The latest source tree is available at +http://www.webmproject.org/code

+ +

This manual +page was written for the Debian project (and may be used by +others).

+ + +

SEE ALSO

+ + + +

dwebp(1) +
+Please refer to http://developers.google.com/speed/webp/ for +additional information.

+
+ + diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/doc/vwebp.txt b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/vwebp.txt new file mode 100644 index 0000000..f326571 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/vwebp.txt @@ -0,0 +1,88 @@ +VWEBP(1) VWEBP(1) + + + +NAME + vwebp decompress a WebP file and display it in a window + +SYNOPSIS + vwebp [options] input_file.webp + +DESCRIPTION + This manual page documents the vwebp command. + + vwebp decompresses a WebP file and displays it in a window using + OpenGL. + +OPTIONS + h Print usage summary. + + version + Print version number and exit. + + noicc Dont use the ICC profile if present. + + nofancy + Dont use the fancy YUV420 upscaler. + + nofilter + Disable inloop filtering. + + dither strength + Specify a dithering strength between 0 and 100. Dithering is a + postprocessing effect applied to chroma components in lossy + compression. It helps by smoothing gradients and avoiding band + ing artifacts. Default: 50. + + mt Use multithreading for decoding, if possible. + + info Display image information on top of the decoded image. + + string + Explicitly specify the input file. This option is useful if the + input file starts with an for instance. This option must + appear last. Any other options afterward will be ignored. If + the input file is "", the data will be read from stdin instead + of a file. + + + + KEYBOARD SHORTCUTS + + c Toggle use of color profile. + + i Overlay file information. + + q/Q/ ESC + Quit. + + +BUGS + Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues + Patches welcome! See this page to get started: http://www.webmpro + ject.org/code/contribute/submittingpatches/ + + +EXAMPLES + vwebp picture.webp + vwebp picture.webp mt dither 0 + vwebp picture.webp + + +AUTHORS + vwebp was written by the WebP team. + The latest source tree is available at http://www.webmproject.org/code + + This manual page was written for the Debian project (and may be used by + others). + + +SEE ALSO + dwebp(1) + Please refer to http://developers.google.com/speed/webp/ for additional + information. + + + + July 23, 2014 VWEBP(1) diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/doc/webpmux.html b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/webpmux.html new file mode 100644 index 0000000..4138f6e --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/webpmux.html @@ -0,0 +1,332 @@ + + + + + + + + + +WEBPMUX + + + + +

WEBPMUX

+ +NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+BUGS
+EXAMPLES
+AUTHORS
+SEE ALSO
+ +
+ + + +

NAME

+ + +

webpmux − +command line tool to create WebP Mux/container file.

+ + +

SYNOPSIS

+ + +

webpmux +−get GET_OPTIONS INPUT −o +OUTPUT
+webpmux −set
SET_OPTIONS INPUT +−o OUTPUT
+webpmux −strip
STRIP_OPTIONS INPUT +−o OUTPUT
+webpmux −frame
FRAME_OPTIONS [ +−frame ... ] [ −loop LOOP_COUNT +]

+ +

[ −bgcolor +BACKGROUND_COLOR ] −o OUTPUT

+ +

webpmux −info +INPUT
+webpmux [−h|−help]
+webpmux −version

+ + +

DESCRIPTION

+ + +

This manual +page documents the webpmux command.

+ +

webpmux +can be used to create a WebP container file and +extract/strip relevant data from the container file.

+ + +

OPTIONS

+ + +

GET_OPTIONS +(−get):

+ + + + + + + + + + + + + + + + + + + + +
+ + +

icc

+ + +

Get ICC profile.

+
+ + +

exif

+ + +

Get EXIF +metadata.

+
+ + +

xmp

+ + +

Get XMP +metadata.

+
+ +

frame n

+ +

Get nth frame.

+ +

SET_OPTIONS +(−set)
+icc
file.icc

+ +

Set ICC profile.

+ +

Where: +’file.icc’ contains the ICC profile to be set. +
+exif
file.exif

+ +

Set EXIF metadata.

+ +

Where: +’file.exif’ contains the EXIF metadata to be +set.
+xmp
file.xmp

+ +

Set XMP metadata.

+ +

Where: +’file.xmp’ contains the XMP metadata to be +set.

+ + +

STRIP_OPTIONS +(−strip)

+ + + + + + + + + + + + + + + + + + + + +
+ + +

icc

+ + +

Strip ICC profile.

+
+ + +

exif

+ + +

Strip EXIF +metadata.

+
+ + +

xmp

+ + +

Strip XMP +metadata.

+
+ + +

FRAME_OPTIONS +(−frame)
+file_i +di[+xi+yi[+mi[bi]]]

+ +

Where: ’file_i’ is +the i’th frame (WebP format), +’xi’,’yi’ specify the image offset +for this frame, ’di’ is the pause duration +before next frame, ’mi’ is the dispose method +for this frame (0 for NONE or 1 for BACKGROUND) and +’bi’ is the blending method for this frame (+b +for BLEND or -b for NO_BLEND). Argument ’bi’ can +be omitted and will default to +b (BLEND). Also, +’mi’ can be omitted if ’bi’ is +omitted and will default to 0 (NONE). Finally, if +’mi’ and ’bi’ are omitted then +’xi’ and ’yi’ can be omitted and +will default to +0+0.

+ +

−loop n

+ +

Loop the frames n number of +times. 0 indicates the frames should loop forever. Valid +range is 0 to 65535 [Default: 0 (infinite)].

+ +

−bgcolor +A,R,G,B

+ +

Background color of the canvas. +
+where: ’A’, ’R’, ’G’ and +’B’ are integers in the range 0 to 255 +specifying the Alpha, Red, Green and Blue component values +respectively [Default: 255,255,255,255].

+ +

INPUT +
+Input file in WebP format.

+ +

OUTPUT +(−o)
+Output file in WebP format.

+ +

Note: +
+The nature of EXIF, XMP and ICC data is not checked and is +assumed to
+be valid.

+ + +

BUGS

+ + +

Please report +all bugs to our issue tracker: +http://code.google.com/p/webp/issues
+Patches welcome! See this page to get started: +http://www.webmproject.org/code/contribute/submitting-patches/

+ + +

EXAMPLES

+ + +

webpmux +−set icc image_profile.icc in.webp −o +icc_container.webp
+webpmux −get icc icc_container.webp −o +image_profile.icc
+webpmux −strip icc icc_container.webp −o +without_icc.webp
+webpmux −set xmp image_metadata.xmp in.webp −o +xmp_container.webp
+webpmux −get xmp xmp_container.webp −o +image_metadata.xmp
+webpmux −strip xmp xmp_container.webp −o +without_xmp.webp
+webpmux −set exif image_metadata.exif in.webp −o +exif_container.webp
+webpmux −get exif exif_container.webp −o +image_metadata.exif
+webpmux −strip exif exif_container.webp −o +without_exif.webp
+webpmux −frame anim_1.webp +100 −frame +anim_2.webp +100+50+50

+ +

−frame anim_2.webp ++100+50+50+1+b −loop 10 −bgcolor +255,255,255,255

+ +

−o +anim_container.webp

+ +

webpmux −get frame 2 +anim_container.webp −o frame_2.webp
+webpmux −set icc image_profile.icc −o +icc_container.webp −− +−−−in.webp
+webpmux −get icc −o image_profile.icc +−− −−−icc_container.webp
+webpmux −strip icc −o without_icc.webp +−− −−−icc_container.webp

+ + +

AUTHORS

+ + +

webpmux +is written by the WebP team.
+The latest source tree is available at +http://www.webmproject.org/code

+ +

This manual +page was written by Vikas Arora +<vikaas.arora@gmail.com>, for the Debian project (and +may be used by others).

+ + +

SEE ALSO

+ + + +

cwebp(1), +dwebp(1), gif2webp(1)
+Please refer to http://developers.google.com/speed/webp/ for +additional information.

+
+ + diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/doc/webpmux.txt b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/webpmux.txt new file mode 100644 index 0000000..b4895ce --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/doc/webpmux.txt @@ -0,0 +1,141 @@ +WEBPMUX(1) WEBPMUX(1) + + + +NAME + webpmux command line tool to create WebP Mux/container file. + +SYNOPSIS + webpmuxget GET_OPTIONS INPUTo OUTPUT + webpmuxset SET_OPTIONS INPUTo OUTPUT + webpmuxstrip STRIP_OPTIONS INPUTo OUTPUT + webpmuxframe FRAME_OPTIONS [frame ... ] [loop LOOP_COUNT ] + [bgcolor BACKGROUND_COLOR ]o OUTPUT + webpmuxinfo INPUT + webpmux hhelp] + webpmuxversion + +DESCRIPTION + This manual page documents the webpmux command. + + webpmux can be used to create a WebP container file and extract/strip + relevant data from the container file. + +OPTIONS + GET_OPTIONS get): + icc Get ICC profile. + + exif Get EXIF metadata. + + xmp Get XMP metadata. + + frame n + Get nth frame. + + + SET_OPTIONS set) + icc file.icc + Set ICC profile. + + Where: file.icc contains the ICC profile to be set. + + exif file.exif + Set EXIF metadata. + + Where: file.exif contains the EXIF metadata to be set. + + xmp file.xmp + Set XMP metadata. + + Where: file.xmp contains the XMP metadata to be set. + + + STRIP_OPTIONS strip) + icc Strip ICC profile. + + exif Strip EXIF metadata. + + xmp Strip XMP metadata. + + + FRAME_OPTIONS frame) + file_i +di[+xi+yi[+mi[bi]]] + Where: file_i is the ith frame (WebP format), xi,yi spec + ify the image offset for this frame, di is the pause duration + before next frame, mi is the dispose method for this frame (0 + for NONE or 1 for BACKGROUND) and bi is the blending method + for this frame (+b for BLEND or b for NO_BLEND). Argument bi + can be omitted and will default to +b (BLEND). Also, mi can + be omitted if bi is omitted and will default to 0 (NONE). + Finally, if mi and bi are omitted then xi and yi can be + omitted and will default to +0+0. + + loop n + Loop the frames n number of times. 0 indicates the frames should + loop forever. Valid range is 0 to 65535 [Default: 0 (infi + nite)]. + + bgcolor A,R,G,B + Background color of the canvas. + where: A, R, G and B are integers in the range 0 to 255 + specifying the Alpha, Red, Green and Blue component values + respectively [Default: 255,255,255,255]. + + + INPUT + Input file in WebP format. + + + OUTPUT o) + Output file in WebP format. + + + Note: + The nature of EXIF, XMP and ICC data is not checked and is assumed to + be valid. + + +BUGS + Please report all bugs to our issue tracker: + http://code.google.com/p/webp/issues + Patches welcome! See this page to get started: http://www.webmpro + ject.org/code/contribute/submittingpatches/ + + +EXAMPLES + webpmux set icc image_profile.icc in.webp o icc_container.webp + webpmux get icc icc_container.webp o image_profile.icc + webpmux strip icc icc_container.webp o without_icc.webp + webpmux set xmp image_metadata.xmp in.webp o xmp_container.webp + webpmux get xmp xmp_container.webp o image_metadata.xmp + webpmux strip xmp xmp_container.webp o without_xmp.webp + webpmux set exif image_metadata.exif in.webp o exif_container.webp + webpmux get exif exif_container.webp o image_metadata.exif + webpmux strip exif exif_container.webp o without_exif.webp + webpmux frame anim_1.webp +100 frame anim_2.webp +100+50+50 + frame anim_2.webp +100+50+50+1+b loop 10 bgcolor + 255,255,255,255 + o anim_container.webp + webpmux get frame 2 anim_container.webp o frame_2.webp + webpmux set icc image_profile.icc o icc_container.webp + in.webp + webpmux get icc o image_profile.icc icc_container.webp + webpmux strip icc o without_icc.webp icc_container.webp + + +AUTHORS + webpmux is written by the WebP team. + The latest source tree is available at http://www.webmproject.org/code + + This manual page was written by Vikas Arora , + for the Debian project (and may be used by others). + + +SEE ALSO + cwebp(1), dwebp(1), gif2webp(1) + Please refer to http://developers.google.com/speed/webp/ for additional + information. + + + + December 17, 2013 WEBPMUX(1) diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/decode.h b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/decode.h new file mode 100644 index 0000000..36c27c3 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/decode.h @@ -0,0 +1,499 @@ +// Copyright 2010 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// Main decoding functions for WebP images. +// +// Author: Skal (pascal.massimino@gmail.com) + +#ifndef WEBP_WEBP_DECODE_H_ +#define WEBP_WEBP_DECODE_H_ + +#include "./types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define WEBP_DECODER_ABI_VERSION 0x0203 // MAJOR(8b) + MINOR(8b) + +// Note: forward declaring enumerations is not allowed in (strict) C and C++, +// the types are left here for reference. +// typedef enum VP8StatusCode VP8StatusCode; +// typedef enum WEBP_CSP_MODE WEBP_CSP_MODE; +typedef struct WebPRGBABuffer WebPRGBABuffer; +typedef struct WebPYUVABuffer WebPYUVABuffer; +typedef struct WebPDecBuffer WebPDecBuffer; +typedef struct WebPIDecoder WebPIDecoder; +typedef struct WebPBitstreamFeatures WebPBitstreamFeatures; +typedef struct WebPDecoderOptions WebPDecoderOptions; +typedef struct WebPDecoderConfig WebPDecoderConfig; + +// Return the decoder's version number, packed in hexadecimal using 8bits for +// each of major/minor/revision. E.g: v2.5.7 is 0x020507. +WEBP_EXTERN(int) WebPGetDecoderVersion(void); + +// Retrieve basic header information: width, height. +// This function will also validate the header and return 0 in +// case of formatting error. +// Pointers 'width' and 'height' can be passed NULL if deemed irrelevant. +WEBP_EXTERN(int) WebPGetInfo(const uint8_t* data, size_t data_size, + int* width, int* height); + +// Decodes WebP images pointed to by 'data' and returns RGBA samples, along +// with the dimensions in *width and *height. The ordering of samples in +// memory is R, G, B, A, R, G, B, A... in scan order (endian-independent). +// The returned pointer should be deleted calling free(). +// Returns NULL in case of error. +WEBP_EXTERN(uint8_t*) WebPDecodeRGBA(const uint8_t* data, size_t data_size, + int* width, int* height); + +// Same as WebPDecodeRGBA, but returning A, R, G, B, A, R, G, B... ordered data. +WEBP_EXTERN(uint8_t*) WebPDecodeARGB(const uint8_t* data, size_t data_size, + int* width, int* height); + +// Same as WebPDecodeRGBA, but returning B, G, R, A, B, G, R, A... ordered data. +WEBP_EXTERN(uint8_t*) WebPDecodeBGRA(const uint8_t* data, size_t data_size, + int* width, int* height); + +// Same as WebPDecodeRGBA, but returning R, G, B, R, G, B... ordered data. +// If the bitstream contains transparency, it is ignored. +WEBP_EXTERN(uint8_t*) WebPDecodeRGB(const uint8_t* data, size_t data_size, + int* width, int* height); + +// Same as WebPDecodeRGB, but returning B, G, R, B, G, R... ordered data. +WEBP_EXTERN(uint8_t*) WebPDecodeBGR(const uint8_t* data, size_t data_size, + int* width, int* height); + + +// Decode WebP images pointed to by 'data' to Y'UV format(*). The pointer +// returned is the Y samples buffer. Upon return, *u and *v will point to +// the U and V chroma data. These U and V buffers need NOT be free()'d, +// unlike the returned Y luma one. The dimension of the U and V planes +// are both (*width + 1) / 2 and (*height + 1)/ 2. +// Upon return, the Y buffer has a stride returned as '*stride', while U and V +// have a common stride returned as '*uv_stride'. +// Return NULL in case of error. +// (*) Also named Y'CbCr. See: http://en.wikipedia.org/wiki/YCbCr +WEBP_EXTERN(uint8_t*) WebPDecodeYUV(const uint8_t* data, size_t data_size, + int* width, int* height, + uint8_t** u, uint8_t** v, + int* stride, int* uv_stride); + +// These five functions are variants of the above ones, that decode the image +// directly into a pre-allocated buffer 'output_buffer'. The maximum storage +// available in this buffer is indicated by 'output_buffer_size'. If this +// storage is not sufficient (or an error occurred), NULL is returned. +// Otherwise, output_buffer is returned, for convenience. +// The parameter 'output_stride' specifies the distance (in bytes) +// between scanlines. Hence, output_buffer_size is expected to be at least +// output_stride x picture-height. +WEBP_EXTERN(uint8_t*) WebPDecodeRGBAInto( + const uint8_t* data, size_t data_size, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); +WEBP_EXTERN(uint8_t*) WebPDecodeARGBInto( + const uint8_t* data, size_t data_size, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); +WEBP_EXTERN(uint8_t*) WebPDecodeBGRAInto( + const uint8_t* data, size_t data_size, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); + +// RGB and BGR variants. Here too the transparency information, if present, +// will be dropped and ignored. +WEBP_EXTERN(uint8_t*) WebPDecodeRGBInto( + const uint8_t* data, size_t data_size, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); +WEBP_EXTERN(uint8_t*) WebPDecodeBGRInto( + const uint8_t* data, size_t data_size, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); + +// WebPDecodeYUVInto() is a variant of WebPDecodeYUV() that operates directly +// into pre-allocated luma/chroma plane buffers. This function requires the +// strides to be passed: one for the luma plane and one for each of the +// chroma ones. The size of each plane buffer is passed as 'luma_size', +// 'u_size' and 'v_size' respectively. +// Pointer to the luma plane ('*luma') is returned or NULL if an error occurred +// during decoding (or because some buffers were found to be too small). +WEBP_EXTERN(uint8_t*) WebPDecodeYUVInto( + const uint8_t* data, size_t data_size, + uint8_t* luma, size_t luma_size, int luma_stride, + uint8_t* u, size_t u_size, int u_stride, + uint8_t* v, size_t v_size, int v_stride); + +//------------------------------------------------------------------------------ +// Output colorspaces and buffer + +// Colorspaces +// Note: the naming describes the byte-ordering of packed samples in memory. +// For instance, MODE_BGRA relates to samples ordered as B,G,R,A,B,G,R,A,... +// Non-capital names (e.g.:MODE_Argb) relates to pre-multiplied RGB channels. +// RGBA-4444 and RGB-565 colorspaces are represented by following byte-order: +// RGBA-4444: [r3 r2 r1 r0 g3 g2 g1 g0], [b3 b2 b1 b0 a3 a2 a1 a0], ... +// RGB-565: [r4 r3 r2 r1 r0 g5 g4 g3], [g2 g1 g0 b4 b3 b2 b1 b0], ... +// In the case WEBP_SWAP_16BITS_CSP is defined, the bytes are swapped for +// these two modes: +// RGBA-4444: [b3 b2 b1 b0 a3 a2 a1 a0], [r3 r2 r1 r0 g3 g2 g1 g0], ... +// RGB-565: [g2 g1 g0 b4 b3 b2 b1 b0], [r4 r3 r2 r1 r0 g5 g4 g3], ... + +typedef enum WEBP_CSP_MODE { + MODE_RGB = 0, MODE_RGBA = 1, + MODE_BGR = 2, MODE_BGRA = 3, + MODE_ARGB = 4, MODE_RGBA_4444 = 5, + MODE_RGB_565 = 6, + // RGB-premultiplied transparent modes (alpha value is preserved) + MODE_rgbA = 7, + MODE_bgrA = 8, + MODE_Argb = 9, + MODE_rgbA_4444 = 10, + // YUV modes must come after RGB ones. + MODE_YUV = 11, MODE_YUVA = 12, // yuv 4:2:0 + MODE_LAST = 13 +} WEBP_CSP_MODE; + +// Some useful macros: +static WEBP_INLINE int WebPIsPremultipliedMode(WEBP_CSP_MODE mode) { + return (mode == MODE_rgbA || mode == MODE_bgrA || mode == MODE_Argb || + mode == MODE_rgbA_4444); +} + +static WEBP_INLINE int WebPIsAlphaMode(WEBP_CSP_MODE mode) { + return (mode == MODE_RGBA || mode == MODE_BGRA || mode == MODE_ARGB || + mode == MODE_RGBA_4444 || mode == MODE_YUVA || + WebPIsPremultipliedMode(mode)); +} + +static WEBP_INLINE int WebPIsRGBMode(WEBP_CSP_MODE mode) { + return (mode < MODE_YUV); +} + +//------------------------------------------------------------------------------ +// WebPDecBuffer: Generic structure for describing the output sample buffer. + +struct WebPRGBABuffer { // view as RGBA + uint8_t* rgba; // pointer to RGBA samples + int stride; // stride in bytes from one scanline to the next. + size_t size; // total size of the *rgba buffer. +}; + +struct WebPYUVABuffer { // view as YUVA + uint8_t* y, *u, *v, *a; // pointer to luma, chroma U/V, alpha samples + int y_stride; // luma stride + int u_stride, v_stride; // chroma strides + int a_stride; // alpha stride + size_t y_size; // luma plane size + size_t u_size, v_size; // chroma planes size + size_t a_size; // alpha-plane size +}; + +// Output buffer +struct WebPDecBuffer { + WEBP_CSP_MODE colorspace; // Colorspace. + int width, height; // Dimensions. + int is_external_memory; // If true, 'internal_memory' pointer is not used. + union { + WebPRGBABuffer RGBA; + WebPYUVABuffer YUVA; + } u; // Nameless union of buffer parameters. + uint32_t pad[4]; // padding for later use + + uint8_t* private_memory; // Internally allocated memory (only when + // is_external_memory is false). Should not be used + // externally, but accessed via the buffer union. +}; + +// Internal, version-checked, entry point +WEBP_EXTERN(int) WebPInitDecBufferInternal(WebPDecBuffer*, int); + +// Initialize the structure as empty. Must be called before any other use. +// Returns false in case of version mismatch +static WEBP_INLINE int WebPInitDecBuffer(WebPDecBuffer* buffer) { + return WebPInitDecBufferInternal(buffer, WEBP_DECODER_ABI_VERSION); +} + +// Free any memory associated with the buffer. Must always be called last. +// Note: doesn't free the 'buffer' structure itself. +WEBP_EXTERN(void) WebPFreeDecBuffer(WebPDecBuffer* buffer); + +//------------------------------------------------------------------------------ +// Enumeration of the status codes + +typedef enum VP8StatusCode { + VP8_STATUS_OK = 0, + VP8_STATUS_OUT_OF_MEMORY, + VP8_STATUS_INVALID_PARAM, + VP8_STATUS_BITSTREAM_ERROR, + VP8_STATUS_UNSUPPORTED_FEATURE, + VP8_STATUS_SUSPENDED, + VP8_STATUS_USER_ABORT, + VP8_STATUS_NOT_ENOUGH_DATA +} VP8StatusCode; + +//------------------------------------------------------------------------------ +// Incremental decoding +// +// This API allows streamlined decoding of partial data. +// Picture can be incrementally decoded as data become available thanks to the +// WebPIDecoder object. This object can be left in a SUSPENDED state if the +// picture is only partially decoded, pending additional input. +// Code example: +// +// WebPInitDecBuffer(&buffer); +// buffer.colorspace = mode; +// ... +// WebPIDecoder* idec = WebPINewDecoder(&buffer); +// while (has_more_data) { +// // ... (get additional data) +// status = WebPIAppend(idec, new_data, new_data_size); +// if (status != VP8_STATUS_SUSPENDED || +// break; +// } +// +// // The above call decodes the current available buffer. +// // Part of the image can now be refreshed by calling to +// // WebPIDecGetRGB()/WebPIDecGetYUVA() etc. +// } +// WebPIDelete(idec); + +// Creates a new incremental decoder with the supplied buffer parameter. +// This output_buffer can be passed NULL, in which case a default output buffer +// is used (with MODE_RGB). Otherwise, an internal reference to 'output_buffer' +// is kept, which means that the lifespan of 'output_buffer' must be larger than +// that of the returned WebPIDecoder object. +// The supplied 'output_buffer' content MUST NOT be changed between calls to +// WebPIAppend() or WebPIUpdate() unless 'output_buffer.is_external_memory' is +// set to 1. In such a case, it is allowed to modify the pointers, size and +// stride of output_buffer.u.RGBA or output_buffer.u.YUVA, provided they remain +// within valid bounds. +// All other fields of WebPDecBuffer MUST remain constant between calls. +// Returns NULL if the allocation failed. +WEBP_EXTERN(WebPIDecoder*) WebPINewDecoder(WebPDecBuffer* output_buffer); + +// This function allocates and initializes an incremental-decoder object, which +// will output the RGB/A samples specified by 'csp' into a preallocated +// buffer 'output_buffer'. The size of this buffer is at least +// 'output_buffer_size' and the stride (distance in bytes between two scanlines) +// is specified by 'output_stride'. +// Additionally, output_buffer can be passed NULL in which case the output +// buffer will be allocated automatically when the decoding starts. The +// colorspace 'csp' is taken into account for allocating this buffer. All other +// parameters are ignored. +// Returns NULL if the allocation failed, or if some parameters are invalid. +WEBP_EXTERN(WebPIDecoder*) WebPINewRGB( + WEBP_CSP_MODE csp, + uint8_t* output_buffer, size_t output_buffer_size, int output_stride); + +// This function allocates and initializes an incremental-decoder object, which +// will output the raw luma/chroma samples into a preallocated planes if +// supplied. The luma plane is specified by its pointer 'luma', its size +// 'luma_size' and its stride 'luma_stride'. Similarly, the chroma-u plane +// is specified by the 'u', 'u_size' and 'u_stride' parameters, and the chroma-v +// plane by 'v' and 'v_size'. And same for the alpha-plane. The 'a' pointer +// can be pass NULL in case one is not interested in the transparency plane. +// Conversely, 'luma' can be passed NULL if no preallocated planes are supplied. +// In this case, the output buffer will be automatically allocated (using +// MODE_YUVA) when decoding starts. All parameters are then ignored. +// Returns NULL if the allocation failed or if a parameter is invalid. +WEBP_EXTERN(WebPIDecoder*) WebPINewYUVA( + uint8_t* luma, size_t luma_size, int luma_stride, + uint8_t* u, size_t u_size, int u_stride, + uint8_t* v, size_t v_size, int v_stride, + uint8_t* a, size_t a_size, int a_stride); + +// Deprecated version of the above, without the alpha plane. +// Kept for backward compatibility. +WEBP_EXTERN(WebPIDecoder*) WebPINewYUV( + uint8_t* luma, size_t luma_size, int luma_stride, + uint8_t* u, size_t u_size, int u_stride, + uint8_t* v, size_t v_size, int v_stride); + +// Deletes the WebPIDecoder object and associated memory. Must always be called +// if WebPINewDecoder, WebPINewRGB or WebPINewYUV succeeded. +WEBP_EXTERN(void) WebPIDelete(WebPIDecoder* idec); + +// Copies and decodes the next available data. Returns VP8_STATUS_OK when +// the image is successfully decoded. Returns VP8_STATUS_SUSPENDED when more +// data is expected. Returns error in other cases. +WEBP_EXTERN(VP8StatusCode) WebPIAppend( + WebPIDecoder* idec, const uint8_t* data, size_t data_size); + +// A variant of the above function to be used when data buffer contains +// partial data from the beginning. In this case data buffer is not copied +// to the internal memory. +// Note that the value of the 'data' pointer can change between calls to +// WebPIUpdate, for instance when the data buffer is resized to fit larger data. +WEBP_EXTERN(VP8StatusCode) WebPIUpdate( + WebPIDecoder* idec, const uint8_t* data, size_t data_size); + +// Returns the RGB/A image decoded so far. Returns NULL if output params +// are not initialized yet. The RGB/A output type corresponds to the colorspace +// specified during call to WebPINewDecoder() or WebPINewRGB(). +// *last_y is the index of last decoded row in raster scan order. Some pointers +// (*last_y, *width etc.) can be NULL if corresponding information is not +// needed. +WEBP_EXTERN(uint8_t*) WebPIDecGetRGB( + const WebPIDecoder* idec, int* last_y, + int* width, int* height, int* stride); + +// Same as above function to get a YUVA image. Returns pointer to the luma +// plane or NULL in case of error. If there is no alpha information +// the alpha pointer '*a' will be returned NULL. +WEBP_EXTERN(uint8_t*) WebPIDecGetYUVA( + const WebPIDecoder* idec, int* last_y, + uint8_t** u, uint8_t** v, uint8_t** a, + int* width, int* height, int* stride, int* uv_stride, int* a_stride); + +// Deprecated alpha-less version of WebPIDecGetYUVA(): it will ignore the +// alpha information (if present). Kept for backward compatibility. +static WEBP_INLINE uint8_t* WebPIDecGetYUV( + const WebPIDecoder* idec, int* last_y, uint8_t** u, uint8_t** v, + int* width, int* height, int* stride, int* uv_stride) { + return WebPIDecGetYUVA(idec, last_y, u, v, NULL, width, height, + stride, uv_stride, NULL); +} + +// Generic call to retrieve information about the displayable area. +// If non NULL, the left/right/width/height pointers are filled with the visible +// rectangular area so far. +// Returns NULL in case the incremental decoder object is in an invalid state. +// Otherwise returns the pointer to the internal representation. This structure +// is read-only, tied to WebPIDecoder's lifespan and should not be modified. +WEBP_EXTERN(const WebPDecBuffer*) WebPIDecodedArea( + const WebPIDecoder* idec, int* left, int* top, int* width, int* height); + +//------------------------------------------------------------------------------ +// Advanced decoding parametrization +// +// Code sample for using the advanced decoding API +/* + // A) Init a configuration object + WebPDecoderConfig config; + CHECK(WebPInitDecoderConfig(&config)); + + // B) optional: retrieve the bitstream's features. + CHECK(WebPGetFeatures(data, data_size, &config.input) == VP8_STATUS_OK); + + // C) Adjust 'config', if needed + config.no_fancy_upsampling = 1; + config.output.colorspace = MODE_BGRA; + // etc. + + // Note that you can also make config.output point to an externally + // supplied memory buffer, provided it's big enough to store the decoded + // picture. Otherwise, config.output will just be used to allocate memory + // and store the decoded picture. + + // D) Decode! + CHECK(WebPDecode(data, data_size, &config) == VP8_STATUS_OK); + + // E) Decoded image is now in config.output (and config.output.u.RGBA) + + // F) Reclaim memory allocated in config's object. It's safe to call + // this function even if the memory is external and wasn't allocated + // by WebPDecode(). + WebPFreeDecBuffer(&config.output); +*/ + +// Features gathered from the bitstream +struct WebPBitstreamFeatures { + int width; // Width in pixels, as read from the bitstream. + int height; // Height in pixels, as read from the bitstream. + int has_alpha; // True if the bitstream contains an alpha channel. + int has_animation; // True if the bitstream is an animation. + int format; // 0 = undefined (/mixed), 1 = lossy, 2 = lossless + + // Unused for now: + int no_incremental_decoding; // if true, using incremental decoding is not + // recommended. + int rotate; // TODO(later) + int uv_sampling; // should be 0 for now. TODO(later) + uint32_t pad[2]; // padding for later use +}; + +// Internal, version-checked, entry point +WEBP_EXTERN(VP8StatusCode) WebPGetFeaturesInternal( + const uint8_t*, size_t, WebPBitstreamFeatures*, int); + +// Retrieve features from the bitstream. The *features structure is filled +// with information gathered from the bitstream. +// Returns VP8_STATUS_OK when the features are successfully retrieved. Returns +// VP8_STATUS_NOT_ENOUGH_DATA when more data is needed to retrieve the +// features from headers. Returns error in other cases. +static WEBP_INLINE VP8StatusCode WebPGetFeatures( + const uint8_t* data, size_t data_size, + WebPBitstreamFeatures* features) { + return WebPGetFeaturesInternal(data, data_size, features, + WEBP_DECODER_ABI_VERSION); +} + +// Decoding options +struct WebPDecoderOptions { + int bypass_filtering; // if true, skip the in-loop filtering + int no_fancy_upsampling; // if true, use faster pointwise upsampler + int use_cropping; // if true, cropping is applied _first_ + int crop_left, crop_top; // top-left position for cropping. + // Will be snapped to even values. + int crop_width, crop_height; // dimension of the cropping area + int use_scaling; // if true, scaling is applied _afterward_ + int scaled_width, scaled_height; // final resolution + int use_threads; // if true, use multi-threaded decoding + int dithering_strength; // dithering strength (0=Off, 100=full) +#if WEBP_DECODER_ABI_VERSION > 0x0203 + int flip; // flip output vertically + int alpha_dithering_strength; // alpha dithering strength in [0..100] +#endif + + // Unused for now: + int force_rotation; // forced rotation (to be applied _last_) + int no_enhancement; // if true, discard enhancement layer +#if WEBP_DECODER_ABI_VERSION > 0x0203 + uint32_t pad[3]; // padding for later use +#else + uint32_t pad[5]; // padding for later use +#endif +}; + +// Main object storing the configuration for advanced decoding. +struct WebPDecoderConfig { + WebPBitstreamFeatures input; // Immutable bitstream features (optional) + WebPDecBuffer output; // Output buffer (can point to external mem) + WebPDecoderOptions options; // Decoding options +}; + +// Internal, version-checked, entry point +WEBP_EXTERN(int) WebPInitDecoderConfigInternal(WebPDecoderConfig*, int); + +// Initialize the configuration as empty. This function must always be +// called first, unless WebPGetFeatures() is to be called. +// Returns false in case of mismatched version. +static WEBP_INLINE int WebPInitDecoderConfig(WebPDecoderConfig* config) { + return WebPInitDecoderConfigInternal(config, WEBP_DECODER_ABI_VERSION); +} + +// Instantiate a new incremental decoder object with the requested +// configuration. The bitstream can be passed using 'data' and 'data_size' +// parameter, in which case the features will be parsed and stored into +// config->input. Otherwise, 'data' can be NULL and no parsing will occur. +// Note that 'config' can be NULL too, in which case a default configuration +// is used. +// The return WebPIDecoder object must always be deleted calling WebPIDelete(). +// Returns NULL in case of error (and config->status will then reflect +// the error condition). +WEBP_EXTERN(WebPIDecoder*) WebPIDecode(const uint8_t* data, size_t data_size, + WebPDecoderConfig* config); + +// Non-incremental version. This version decodes the full data at once, taking +// 'config' into account. Returns decoding status (which should be VP8_STATUS_OK +// if the decoding was successful). +WEBP_EXTERN(VP8StatusCode) WebPDecode(const uint8_t* data, size_t data_size, + WebPDecoderConfig* config); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* WEBP_WEBP_DECODE_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/demux.h b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/demux.h new file mode 100644 index 0000000..2da3239 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/demux.h @@ -0,0 +1,224 @@ +// Copyright 2012 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// Demux API. +// Enables extraction of image and extended format data from WebP files. + +// Code Example: Demuxing WebP data to extract all the frames, ICC profile +// and EXIF/XMP metadata. +/* + WebPDemuxer* demux = WebPDemux(&webp_data); + + uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH); + uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT); + // ... (Get information about the features present in the WebP file). + uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS); + + // ... (Iterate over all frames). + WebPIterator iter; + if (WebPDemuxGetFrame(demux, 1, &iter)) { + do { + // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(), + // ... and get other frame properties like width, height, offsets etc. + // ... see 'struct WebPIterator' below for more info). + } while (WebPDemuxNextFrame(&iter)); + WebPDemuxReleaseIterator(&iter); + } + + // ... (Extract metadata). + WebPChunkIterator chunk_iter; + if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter); + // ... (Consume the ICC profile in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter); + // ... (Consume the EXIF metadata in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter); + // ... (Consume the XMP metadata in 'chunk_iter.chunk'). + WebPDemuxReleaseChunkIterator(&chunk_iter); + WebPDemuxDelete(demux); +*/ + +#ifndef WEBP_WEBP_DEMUX_H_ +#define WEBP_WEBP_DEMUX_H_ + +#include "./mux_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define WEBP_DEMUX_ABI_VERSION 0x0101 // MAJOR(8b) + MINOR(8b) + +// Note: forward declaring enumerations is not allowed in (strict) C and C++, +// the types are left here for reference. +// typedef enum WebPDemuxState WebPDemuxState; +// typedef enum WebPFormatFeature WebPFormatFeature; +typedef struct WebPDemuxer WebPDemuxer; +typedef struct WebPIterator WebPIterator; +typedef struct WebPChunkIterator WebPChunkIterator; + +//------------------------------------------------------------------------------ + +// Returns the version number of the demux library, packed in hexadecimal using +// 8bits for each of major/minor/revision. E.g: v2.5.7 is 0x020507. +WEBP_EXTERN(int) WebPGetDemuxVersion(void); + +//------------------------------------------------------------------------------ +// Life of a Demux object + +typedef enum WebPDemuxState { + WEBP_DEMUX_PARSE_ERROR = -1, // An error occurred while parsing. + WEBP_DEMUX_PARSING_HEADER = 0, // Not enough data to parse full header. + WEBP_DEMUX_PARSED_HEADER = 1, // Header parsing complete, + // data may be available. + WEBP_DEMUX_DONE = 2 // Entire file has been parsed. +} WebPDemuxState; + +// Internal, version-checked, entry point +WEBP_EXTERN(WebPDemuxer*) WebPDemuxInternal( + const WebPData*, int, WebPDemuxState*, int); + +// Parses the full WebP file given by 'data'. +// Returns a WebPDemuxer object on successful parse, NULL otherwise. +static WEBP_INLINE WebPDemuxer* WebPDemux(const WebPData* data) { + return WebPDemuxInternal(data, 0, NULL, WEBP_DEMUX_ABI_VERSION); +} + +// Parses the possibly incomplete WebP file given by 'data'. +// If 'state' is non-NULL it will be set to indicate the status of the demuxer. +// Returns NULL in case of error or if there isn't enough data to start parsing; +// and a WebPDemuxer object on successful parse. +// Note that WebPDemuxer keeps internal pointers to 'data' memory segment. +// If this data is volatile, the demuxer object should be deleted (by calling +// WebPDemuxDelete()) and WebPDemuxPartial() called again on the new data. +// This is usually an inexpensive operation. +static WEBP_INLINE WebPDemuxer* WebPDemuxPartial( + const WebPData* data, WebPDemuxState* state) { + return WebPDemuxInternal(data, 1, state, WEBP_DEMUX_ABI_VERSION); +} + +// Frees memory associated with 'dmux'. +WEBP_EXTERN(void) WebPDemuxDelete(WebPDemuxer* dmux); + +//------------------------------------------------------------------------------ +// Data/information extraction. + +typedef enum WebPFormatFeature { + WEBP_FF_FORMAT_FLAGS, // Extended format flags present in the 'VP8X' chunk. + WEBP_FF_CANVAS_WIDTH, + WEBP_FF_CANVAS_HEIGHT, + WEBP_FF_LOOP_COUNT, + WEBP_FF_BACKGROUND_COLOR, + WEBP_FF_FRAME_COUNT // Number of frames present in the demux object. + // In case of a partial demux, this is the number of + // frames seen so far, with the last frame possibly + // being partial. +} WebPFormatFeature; + +// Get the 'feature' value from the 'dmux'. +// NOTE: values are only valid if WebPDemux() was used or WebPDemuxPartial() +// returned a state > WEBP_DEMUX_PARSING_HEADER. +WEBP_EXTERN(uint32_t) WebPDemuxGetI( + const WebPDemuxer* dmux, WebPFormatFeature feature); + +//------------------------------------------------------------------------------ +// Frame iteration. + +struct WebPIterator { + int frame_num; + int num_frames; // equivalent to WEBP_FF_FRAME_COUNT. + int fragment_num; + int num_fragments; + int x_offset, y_offset; // offset relative to the canvas. + int width, height; // dimensions of this frame or fragment. + int duration; // display duration in milliseconds. + WebPMuxAnimDispose dispose_method; // dispose method for the frame. + int complete; // true if 'fragment' contains a full frame. partial images + // may still be decoded with the WebP incremental decoder. + WebPData fragment; // The frame or fragment given by 'frame_num' and + // 'fragment_num'. + int has_alpha; // True if the frame or fragment contains transparency. + WebPMuxAnimBlend blend_method; // Blend operation for the frame. + + uint32_t pad[2]; // padding for later use. + void* private_; // for internal use only. +}; + +// Retrieves frame 'frame_number' from 'dmux'. +// 'iter->fragment' points to the first fragment on return from this function. +// Individual fragments may be extracted using WebPDemuxSelectFragment(). +// Setting 'frame_number' equal to 0 will return the last frame of the image. +// Returns false if 'dmux' is NULL or frame 'frame_number' is not present. +// Call WebPDemuxReleaseIterator() when use of the iterator is complete. +// NOTE: 'dmux' must persist for the lifetime of 'iter'. +WEBP_EXTERN(int) WebPDemuxGetFrame( + const WebPDemuxer* dmux, int frame_number, WebPIterator* iter); + +// Sets 'iter->fragment' to point to the next ('iter->frame_num' + 1) or +// previous ('iter->frame_num' - 1) frame. These functions do not loop. +// Returns true on success, false otherwise. +WEBP_EXTERN(int) WebPDemuxNextFrame(WebPIterator* iter); +WEBP_EXTERN(int) WebPDemuxPrevFrame(WebPIterator* iter); + +// Sets 'iter->fragment' to reflect fragment number 'fragment_num'. +// Returns true if fragment 'fragment_num' is present, false otherwise. +WEBP_EXTERN(int) WebPDemuxSelectFragment(WebPIterator* iter, int fragment_num); + +// Releases any memory associated with 'iter'. +// Must be called before any subsequent calls to WebPDemuxGetChunk() on the same +// iter. Also, must be called before destroying the associated WebPDemuxer with +// WebPDemuxDelete(). +WEBP_EXTERN(void) WebPDemuxReleaseIterator(WebPIterator* iter); + +//------------------------------------------------------------------------------ +// Chunk iteration. + +struct WebPChunkIterator { + // The current and total number of chunks with the fourcc given to + // WebPDemuxGetChunk(). + int chunk_num; + int num_chunks; + WebPData chunk; // The payload of the chunk. + + uint32_t pad[6]; // padding for later use + void* private_; +}; + +// Retrieves the 'chunk_number' instance of the chunk with id 'fourcc' from +// 'dmux'. +// 'fourcc' is a character array containing the fourcc of the chunk to return, +// e.g., "ICCP", "XMP ", "EXIF", etc. +// Setting 'chunk_number' equal to 0 will return the last chunk in a set. +// Returns true if the chunk is found, false otherwise. Image related chunk +// payloads are accessed through WebPDemuxGetFrame() and related functions. +// Call WebPDemuxReleaseChunkIterator() when use of the iterator is complete. +// NOTE: 'dmux' must persist for the lifetime of the iterator. +WEBP_EXTERN(int) WebPDemuxGetChunk(const WebPDemuxer* dmux, + const char fourcc[4], int chunk_number, + WebPChunkIterator* iter); + +// Sets 'iter->chunk' to point to the next ('iter->chunk_num' + 1) or previous +// ('iter->chunk_num' - 1) chunk. These functions do not loop. +// Returns true on success, false otherwise. +WEBP_EXTERN(int) WebPDemuxNextChunk(WebPChunkIterator* iter); +WEBP_EXTERN(int) WebPDemuxPrevChunk(WebPChunkIterator* iter); + +// Releases any memory associated with 'iter'. +// Must be called before destroying the associated WebPDemuxer with +// WebPDemuxDelete(). +WEBP_EXTERN(void) WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter); + +//------------------------------------------------------------------------------ + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* WEBP_WEBP_DEMUX_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/encode.h b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/encode.h new file mode 100644 index 0000000..dd60056 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/encode.h @@ -0,0 +1,508 @@ +// Copyright 2011 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// WebP encoder: main interface +// +// Author: Skal (pascal.massimino@gmail.com) + +#ifndef WEBP_WEBP_ENCODE_H_ +#define WEBP_WEBP_ENCODE_H_ + +#include "./types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define WEBP_ENCODER_ABI_VERSION 0x0202 // MAJOR(8b) + MINOR(8b) + +// Note: forward declaring enumerations is not allowed in (strict) C and C++, +// the types are left here for reference. +// typedef enum WebPImageHint WebPImageHint; +// typedef enum WebPEncCSP WebPEncCSP; +// typedef enum WebPPreset WebPPreset; +// typedef enum WebPEncodingError WebPEncodingError; +typedef struct WebPConfig WebPConfig; +typedef struct WebPPicture WebPPicture; // main structure for I/O +typedef struct WebPAuxStats WebPAuxStats; +typedef struct WebPMemoryWriter WebPMemoryWriter; + +// Return the encoder's version number, packed in hexadecimal using 8bits for +// each of major/minor/revision. E.g: v2.5.7 is 0x020507. +WEBP_EXTERN(int) WebPGetEncoderVersion(void); + +//------------------------------------------------------------------------------ +// One-stop-shop call! No questions asked: + +// Returns the size of the compressed data (pointed to by *output), or 0 if +// an error occurred. The compressed data must be released by the caller +// using the call 'free(*output)'. +// These functions compress using the lossy format, and the quality_factor +// can go from 0 (smaller output, lower quality) to 100 (best quality, +// larger output). +WEBP_EXTERN(size_t) WebPEncodeRGB(const uint8_t* rgb, + int width, int height, int stride, + float quality_factor, uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeBGR(const uint8_t* bgr, + int width, int height, int stride, + float quality_factor, uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeRGBA(const uint8_t* rgba, + int width, int height, int stride, + float quality_factor, uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeBGRA(const uint8_t* bgra, + int width, int height, int stride, + float quality_factor, uint8_t** output); + +// These functions are the equivalent of the above, but compressing in a +// lossless manner. Files are usually larger than lossy format, but will +// not suffer any compression loss. +WEBP_EXTERN(size_t) WebPEncodeLosslessRGB(const uint8_t* rgb, + int width, int height, int stride, + uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeLosslessBGR(const uint8_t* bgr, + int width, int height, int stride, + uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeLosslessRGBA(const uint8_t* rgba, + int width, int height, int stride, + uint8_t** output); +WEBP_EXTERN(size_t) WebPEncodeLosslessBGRA(const uint8_t* bgra, + int width, int height, int stride, + uint8_t** output); + +//------------------------------------------------------------------------------ +// Coding parameters + +// Image characteristics hint for the underlying encoder. +typedef enum WebPImageHint { + WEBP_HINT_DEFAULT = 0, // default preset. + WEBP_HINT_PICTURE, // digital picture, like portrait, inner shot + WEBP_HINT_PHOTO, // outdoor photograph, with natural lighting + WEBP_HINT_GRAPH, // Discrete tone image (graph, map-tile etc). + WEBP_HINT_LAST +} WebPImageHint; + +// Compression parameters. +struct WebPConfig { + int lossless; // Lossless encoding (0=lossy(default), 1=lossless). + float quality; // between 0 (smallest file) and 100 (biggest) + int method; // quality/speed trade-off (0=fast, 6=slower-better) + + WebPImageHint image_hint; // Hint for image type (lossless only for now). + + // Parameters related to lossy compression only: + int target_size; // if non-zero, set the desired target size in bytes. + // Takes precedence over the 'compression' parameter. + float target_PSNR; // if non-zero, specifies the minimal distortion to + // try to achieve. Takes precedence over target_size. + int segments; // maximum number of segments to use, in [1..4] + int sns_strength; // Spatial Noise Shaping. 0=off, 100=maximum. + int filter_strength; // range: [0 = off .. 100 = strongest] + int filter_sharpness; // range: [0 = off .. 7 = least sharp] + int filter_type; // filtering type: 0 = simple, 1 = strong (only used + // if filter_strength > 0 or autofilter > 0) + int autofilter; // Auto adjust filter's strength [0 = off, 1 = on] + int alpha_compression; // Algorithm for encoding the alpha plane (0 = none, + // 1 = compressed with WebP lossless). Default is 1. + int alpha_filtering; // Predictive filtering method for alpha plane. + // 0: none, 1: fast, 2: best. Default if 1. + int alpha_quality; // Between 0 (smallest size) and 100 (lossless). + // Default is 100. + int pass; // number of entropy-analysis passes (in [1..10]). + + int show_compressed; // if true, export the compressed picture back. + // In-loop filtering is not applied. + int preprocessing; // preprocessing filter: + // 0=none, 1=segment-smooth, 2=pseudo-random dithering + int partitions; // log2(number of token partitions) in [0..3]. Default + // is set to 0 for easier progressive decoding. + int partition_limit; // quality degradation allowed to fit the 512k limit + // on prediction modes coding (0: no degradation, + // 100: maximum possible degradation). + int emulate_jpeg_size; // If true, compression parameters will be remapped + // to better match the expected output size from + // JPEG compression. Generally, the output size will + // be similar but the degradation will be lower. + int thread_level; // If non-zero, try and use multi-threaded encoding. + int low_memory; // If set, reduce memory usage (but increase CPU use). + + uint32_t pad[5]; // padding for later use +}; + +// Enumerate some predefined settings for WebPConfig, depending on the type +// of source picture. These presets are used when calling WebPConfigPreset(). +typedef enum WebPPreset { + WEBP_PRESET_DEFAULT = 0, // default preset. + WEBP_PRESET_PICTURE, // digital picture, like portrait, inner shot + WEBP_PRESET_PHOTO, // outdoor photograph, with natural lighting + WEBP_PRESET_DRAWING, // hand or line drawing, with high-contrast details + WEBP_PRESET_ICON, // small-sized colorful images + WEBP_PRESET_TEXT // text-like +} WebPPreset; + +// Internal, version-checked, entry point +WEBP_EXTERN(int) WebPConfigInitInternal(WebPConfig*, WebPPreset, float, int); + +// Should always be called, to initialize a fresh WebPConfig structure before +// modification. Returns false in case of version mismatch. WebPConfigInit() +// must have succeeded before using the 'config' object. +// Note that the default values are lossless=0 and quality=75. +static WEBP_INLINE int WebPConfigInit(WebPConfig* config) { + return WebPConfigInitInternal(config, WEBP_PRESET_DEFAULT, 75.f, + WEBP_ENCODER_ABI_VERSION); +} + +// This function will initialize the configuration according to a predefined +// set of parameters (referred to by 'preset') and a given quality factor. +// This function can be called as a replacement to WebPConfigInit(). Will +// return false in case of error. +static WEBP_INLINE int WebPConfigPreset(WebPConfig* config, + WebPPreset preset, float quality) { + return WebPConfigInitInternal(config, preset, quality, + WEBP_ENCODER_ABI_VERSION); +} + +#if WEBP_ENCODER_ABI_VERSION > 0x0202 +// Activate the lossless compression mode with the desired efficiency level +// between 0 (fastest, lowest compression) and 9 (slower, best compression). +// A good default level is '6', providing a fair tradeoff between compression +// speed and final compressed size. +// This function will overwrite several fields from config: 'method', 'quality' +// and 'lossless'. Returns false in case of parameter error. +WEBP_EXTERN(int) WebPConfigLosslessPreset(WebPConfig* config, int level); +#endif + +// Returns true if 'config' is non-NULL and all configuration parameters are +// within their valid ranges. +WEBP_EXTERN(int) WebPValidateConfig(const WebPConfig* config); + +//------------------------------------------------------------------------------ +// Input / Output +// Structure for storing auxiliary statistics (mostly for lossy encoding). + +struct WebPAuxStats { + int coded_size; // final size + + float PSNR[5]; // peak-signal-to-noise ratio for Y/U/V/All/Alpha + int block_count[3]; // number of intra4/intra16/skipped macroblocks + int header_bytes[2]; // approximate number of bytes spent for header + // and mode-partition #0 + int residual_bytes[3][4]; // approximate number of bytes spent for + // DC/AC/uv coefficients for each (0..3) segments. + int segment_size[4]; // number of macroblocks in each segments + int segment_quant[4]; // quantizer values for each segments + int segment_level[4]; // filtering strength for each segments [0..63] + + int alpha_data_size; // size of the transparency data + int layer_data_size; // size of the enhancement layer data + + // lossless encoder statistics + uint32_t lossless_features; // bit0:predictor bit1:cross-color transform + // bit2:subtract-green bit3:color indexing + int histogram_bits; // number of precision bits of histogram + int transform_bits; // precision bits for transform + int cache_bits; // number of bits for color cache lookup + int palette_size; // number of color in palette, if used + int lossless_size; // final lossless size + + uint32_t pad[4]; // padding for later use +}; + +// Signature for output function. Should return true if writing was successful. +// data/data_size is the segment of data to write, and 'picture' is for +// reference (and so one can make use of picture->custom_ptr). +typedef int (*WebPWriterFunction)(const uint8_t* data, size_t data_size, + const WebPPicture* picture); + +// WebPMemoryWrite: a special WebPWriterFunction that writes to memory using +// the following WebPMemoryWriter object (to be set as a custom_ptr). +struct WebPMemoryWriter { + uint8_t* mem; // final buffer (of size 'max_size', larger than 'size'). + size_t size; // final size + size_t max_size; // total capacity + uint32_t pad[1]; // padding for later use +}; + +// The following must be called first before any use. +WEBP_EXTERN(void) WebPMemoryWriterInit(WebPMemoryWriter* writer); + +#if WEBP_ENCODER_ABI_VERSION > 0x0202 +// The following must be called to deallocate writer->mem memory. The 'writer' +// object itself is not deallocated. +WEBP_EXTERN(void) WebPMemoryWriterClear(WebPMemoryWriter* writer); +#endif +// The custom writer to be used with WebPMemoryWriter as custom_ptr. Upon +// completion, writer.mem and writer.size will hold the coded data. +#if WEBP_ENCODER_ABI_VERSION > 0x0202 +// writer.mem must be freed by calling WebPMemoryWriterClear. +#else +// writer.mem must be freed by calling 'free(writer.mem)'. +#endif +WEBP_EXTERN(int) WebPMemoryWrite(const uint8_t* data, size_t data_size, + const WebPPicture* picture); + +// Progress hook, called from time to time to report progress. It can return +// false to request an abort of the encoding process, or true otherwise if +// everything is OK. +typedef int (*WebPProgressHook)(int percent, const WebPPicture* picture); + +// Color spaces. +typedef enum WebPEncCSP { + // chroma sampling + WEBP_YUV420 = 0, // 4:2:0 + WEBP_YUV420A = 4, // alpha channel variant + WEBP_CSP_UV_MASK = 3, // bit-mask to get the UV sampling factors + WEBP_CSP_ALPHA_BIT = 4 // bit that is set if alpha is present +} WebPEncCSP; + +// Encoding error conditions. +typedef enum WebPEncodingError { + VP8_ENC_OK = 0, + VP8_ENC_ERROR_OUT_OF_MEMORY, // memory error allocating objects + VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY, // memory error while flushing bits + VP8_ENC_ERROR_NULL_PARAMETER, // a pointer parameter is NULL + VP8_ENC_ERROR_INVALID_CONFIGURATION, // configuration is invalid + VP8_ENC_ERROR_BAD_DIMENSION, // picture has invalid width/height + VP8_ENC_ERROR_PARTITION0_OVERFLOW, // partition is bigger than 512k + VP8_ENC_ERROR_PARTITION_OVERFLOW, // partition is bigger than 16M + VP8_ENC_ERROR_BAD_WRITE, // error while flushing bytes + VP8_ENC_ERROR_FILE_TOO_BIG, // file is bigger than 4G + VP8_ENC_ERROR_USER_ABORT, // abort request by user + VP8_ENC_ERROR_LAST // list terminator. always last. +} WebPEncodingError; + +// maximum width/height allowed (inclusive), in pixels +#define WEBP_MAX_DIMENSION 16383 + +// Main exchange structure (input samples, output bytes, statistics) +struct WebPPicture { + // INPUT + ////////////// + // Main flag for encoder selecting between ARGB or YUV input. + // It is recommended to use ARGB input (*argb, argb_stride) for lossless + // compression, and YUV input (*y, *u, *v, etc.) for lossy compression + // since these are the respective native colorspace for these formats. + int use_argb; + + // YUV input (mostly used for input to lossy compression) + WebPEncCSP colorspace; // colorspace: should be YUV420 for now (=Y'CbCr). + int width, height; // dimensions (less or equal to WEBP_MAX_DIMENSION) + uint8_t *y, *u, *v; // pointers to luma/chroma planes. + int y_stride, uv_stride; // luma/chroma strides. + uint8_t* a; // pointer to the alpha plane + int a_stride; // stride of the alpha plane + uint32_t pad1[2]; // padding for later use + + // ARGB input (mostly used for input to lossless compression) + uint32_t* argb; // Pointer to argb (32 bit) plane. + int argb_stride; // This is stride in pixels units, not bytes. + uint32_t pad2[3]; // padding for later use + + // OUTPUT + /////////////// + // Byte-emission hook, to store compressed bytes as they are ready. + WebPWriterFunction writer; // can be NULL + void* custom_ptr; // can be used by the writer. + + // map for extra information (only for lossy compression mode) + int extra_info_type; // 1: intra type, 2: segment, 3: quant + // 4: intra-16 prediction mode, + // 5: chroma prediction mode, + // 6: bit cost, 7: distortion + uint8_t* extra_info; // if not NULL, points to an array of size + // ((width + 15) / 16) * ((height + 15) / 16) that + // will be filled with a macroblock map, depending + // on extra_info_type. + + // STATS AND REPORTS + /////////////////////////// + // Pointer to side statistics (updated only if not NULL) + WebPAuxStats* stats; + + // Error code for the latest error encountered during encoding + WebPEncodingError error_code; + + // If not NULL, report progress during encoding. + WebPProgressHook progress_hook; + + void* user_data; // this field is free to be set to any value and + // used during callbacks (like progress-report e.g.). + + uint32_t pad3[3]; // padding for later use + + // Unused for now + uint8_t *pad4, *pad5; + uint32_t pad6[8]; // padding for later use + + // PRIVATE FIELDS + //////////////////// + void* memory_; // row chunk of memory for yuva planes + void* memory_argb_; // and for argb too. + void* pad7[2]; // padding for later use +}; + +// Internal, version-checked, entry point +WEBP_EXTERN(int) WebPPictureInitInternal(WebPPicture*, int); + +// Should always be called, to initialize the structure. Returns false in case +// of version mismatch. WebPPictureInit() must have succeeded before using the +// 'picture' object. +// Note that, by default, use_argb is false and colorspace is WEBP_YUV420. +static WEBP_INLINE int WebPPictureInit(WebPPicture* picture) { + return WebPPictureInitInternal(picture, WEBP_ENCODER_ABI_VERSION); +} + +//------------------------------------------------------------------------------ +// WebPPicture utils + +// Convenience allocation / deallocation based on picture->width/height: +// Allocate y/u/v buffers as per colorspace/width/height specification. +// Note! This function will free the previous buffer if needed. +// Returns false in case of memory error. +WEBP_EXTERN(int) WebPPictureAlloc(WebPPicture* picture); + +// Release the memory allocated by WebPPictureAlloc() or WebPPictureImport*(). +// Note that this function does _not_ free the memory used by the 'picture' +// object itself. +// Besides memory (which is reclaimed) all other fields of 'picture' are +// preserved. +WEBP_EXTERN(void) WebPPictureFree(WebPPicture* picture); + +// Copy the pixels of *src into *dst, using WebPPictureAlloc. Upon return, *dst +// will fully own the copied pixels (this is not a view). The 'dst' picture need +// not be initialized as its content is overwritten. +// Returns false in case of memory allocation error. +WEBP_EXTERN(int) WebPPictureCopy(const WebPPicture* src, WebPPicture* dst); + +// Compute PSNR, SSIM or LSIM distortion metric between two pictures. +// Result is in dB, stores in result[] in the Y/U/V/Alpha/All order. +// Returns false in case of error (src and ref don't have same dimension, ...) +// Warning: this function is rather CPU-intensive. +WEBP_EXTERN(int) WebPPictureDistortion( + const WebPPicture* src, const WebPPicture* ref, + int metric_type, // 0 = PSNR, 1 = SSIM, 2 = LSIM + float result[5]); + +// self-crops a picture to the rectangle defined by top/left/width/height. +// Returns false in case of memory allocation error, or if the rectangle is +// outside of the source picture. +// The rectangle for the view is defined by the top-left corner pixel +// coordinates (left, top) as well as its width and height. This rectangle +// must be fully be comprised inside the 'src' source picture. If the source +// picture uses the YUV420 colorspace, the top and left coordinates will be +// snapped to even values. +WEBP_EXTERN(int) WebPPictureCrop(WebPPicture* picture, + int left, int top, int width, int height); + +// Extracts a view from 'src' picture into 'dst'. The rectangle for the view +// is defined by the top-left corner pixel coordinates (left, top) as well +// as its width and height. This rectangle must be fully be comprised inside +// the 'src' source picture. If the source picture uses the YUV420 colorspace, +// the top and left coordinates will be snapped to even values. +// Picture 'src' must out-live 'dst' picture. Self-extraction of view is allowed +// ('src' equal to 'dst') as a mean of fast-cropping (but note that doing so, +// the original dimension will be lost). Picture 'dst' need not be initialized +// with WebPPictureInit() if it is different from 'src', since its content will +// be overwritten. +// Returns false in case of memory allocation error or invalid parameters. +WEBP_EXTERN(int) WebPPictureView(const WebPPicture* src, + int left, int top, int width, int height, + WebPPicture* dst); + +// Returns true if the 'picture' is actually a view and therefore does +// not own the memory for pixels. +WEBP_EXTERN(int) WebPPictureIsView(const WebPPicture* picture); + +// Rescale a picture to new dimension width x height. +// Now gamma correction is applied. +// Returns false in case of error (invalid parameter or insufficient memory). +WEBP_EXTERN(int) WebPPictureRescale(WebPPicture* pic, int width, int height); + +// Colorspace conversion function to import RGB samples. +// Previous buffer will be free'd, if any. +// *rgb buffer should have a size of at least height * rgb_stride. +// Returns false in case of memory error. +WEBP_EXTERN(int) WebPPictureImportRGB( + WebPPicture* picture, const uint8_t* rgb, int rgb_stride); +// Same, but for RGBA buffer. +WEBP_EXTERN(int) WebPPictureImportRGBA( + WebPPicture* picture, const uint8_t* rgba, int rgba_stride); +// Same, but for RGBA buffer. Imports the RGB direct from the 32-bit format +// input buffer ignoring the alpha channel. Avoids needing to copy the data +// to a temporary 24-bit RGB buffer to import the RGB only. +WEBP_EXTERN(int) WebPPictureImportRGBX( + WebPPicture* picture, const uint8_t* rgbx, int rgbx_stride); + +// Variants of the above, but taking BGR(A|X) input. +WEBP_EXTERN(int) WebPPictureImportBGR( + WebPPicture* picture, const uint8_t* bgr, int bgr_stride); +WEBP_EXTERN(int) WebPPictureImportBGRA( + WebPPicture* picture, const uint8_t* bgra, int bgra_stride); +WEBP_EXTERN(int) WebPPictureImportBGRX( + WebPPicture* picture, const uint8_t* bgrx, int bgrx_stride); + +// Converts picture->argb data to the YUVA format specified by 'colorspace'. +// Upon return, picture->use_argb is set to false. The presence of real +// non-opaque transparent values is detected, and 'colorspace' will be +// adjusted accordingly. Note that this method is lossy. +// Returns false in case of error. +WEBP_EXTERN(int) WebPPictureARGBToYUVA(WebPPicture* picture, + WebPEncCSP colorspace); + +// Same as WebPPictureARGBToYUVA(), but the conversion is done using +// pseudo-random dithering with a strength 'dithering' between +// 0.0 (no dithering) and 1.0 (maximum dithering). This is useful +// for photographic picture. +WEBP_EXTERN(int) WebPPictureARGBToYUVADithered( + WebPPicture* picture, WebPEncCSP colorspace, float dithering); + +// Converts picture->yuv to picture->argb and sets picture->use_argb to true. +// The input format must be YUV_420 or YUV_420A. +// Note that the use of this method is discouraged if one has access to the +// raw ARGB samples, since using YUV420 is comparatively lossy. Also, the +// conversion from YUV420 to ARGB incurs a small loss too. +// Returns false in case of error. +WEBP_EXTERN(int) WebPPictureYUVAToARGB(WebPPicture* picture); + +// Helper function: given a width x height plane of RGBA or YUV(A) samples +// clean-up the YUV or RGB samples under fully transparent area, to help +// compressibility (no guarantee, though). +WEBP_EXTERN(void) WebPCleanupTransparentArea(WebPPicture* picture); + +// Scan the picture 'picture' for the presence of non fully opaque alpha values. +// Returns true in such case. Otherwise returns false (indicating that the +// alpha plane can be ignored altogether e.g.). +WEBP_EXTERN(int) WebPPictureHasTransparency(const WebPPicture* picture); + +// Remove the transparency information (if present) by blending the color with +// the background color 'background_rgb' (specified as 24bit RGB triplet). +// After this call, all alpha values are reset to 0xff. +WEBP_EXTERN(void) WebPBlendAlpha(WebPPicture* pic, uint32_t background_rgb); + +//------------------------------------------------------------------------------ +// Main call + +// Main encoding call, after config and picture have been initialized. +// 'picture' must be less than 16384x16384 in dimension (cf WEBP_MAX_DIMENSION), +// and the 'config' object must be a valid one. +// Returns false in case of error, true otherwise. +// In case of error, picture->error_code is updated accordingly. +// 'picture' can hold the source samples in both YUV(A) or ARGB input, depending +// on the value of 'picture->use_argb'. It is highly recommended to use +// the former for lossy encoding, and the latter for lossless encoding +// (when config.lossless is true). Automatic conversion from one format to +// another is provided but they both incur some loss. +WEBP_EXTERN(int) WebPEncode(const WebPConfig* config, WebPPicture* picture); + +//------------------------------------------------------------------------------ + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* WEBP_WEBP_ENCODE_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/mux.h b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/mux.h new file mode 100644 index 0000000..1ae03b3 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/mux.h @@ -0,0 +1,399 @@ +// Copyright 2011 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// RIFF container manipulation for WebP images. +// +// Authors: Urvang (urvang@google.com) +// Vikas (vikasa@google.com) + +// This API allows manipulation of WebP container images containing features +// like color profile, metadata, animation and fragmented images. +// +// Code Example#1: Create a WebPMux object with image data, color profile and +// XMP metadata. +/* + int copy_data = 0; + WebPMux* mux = WebPMuxNew(); + // ... (Prepare image data). + WebPMuxSetImage(mux, &image, copy_data); + // ... (Prepare ICCP color profile data). + WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data); + // ... (Prepare XMP metadata). + WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data); + // Get data from mux in WebP RIFF format. + WebPMuxAssemble(mux, &output_data); + WebPMuxDelete(mux); + // ... (Consume output_data; e.g. write output_data.bytes to file). + WebPDataClear(&output_data); +*/ + +// Code Example#2: Get image and color profile data from a WebP file. +/* + int copy_data = 0; + // ... (Read data from file). + WebPMux* mux = WebPMuxCreate(&data, copy_data); + WebPMuxGetFrame(mux, 1, &image); + // ... (Consume image; e.g. call WebPDecode() to decode the data). + WebPMuxGetChunk(mux, "ICCP", &icc_profile); + // ... (Consume icc_data). + WebPMuxDelete(mux); + free(data); +*/ + +#ifndef WEBP_WEBP_MUX_H_ +#define WEBP_WEBP_MUX_H_ + +#include "./mux_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define WEBP_MUX_ABI_VERSION 0x0101 // MAJOR(8b) + MINOR(8b) + +// Note: forward declaring enumerations is not allowed in (strict) C and C++, +// the types are left here for reference. +// typedef enum WebPMuxError WebPMuxError; +// typedef enum WebPChunkId WebPChunkId; +typedef struct WebPMux WebPMux; // main opaque object. +typedef struct WebPMuxFrameInfo WebPMuxFrameInfo; +typedef struct WebPMuxAnimParams WebPMuxAnimParams; + +// Error codes +typedef enum WebPMuxError { + WEBP_MUX_OK = 1, + WEBP_MUX_NOT_FOUND = 0, + WEBP_MUX_INVALID_ARGUMENT = -1, + WEBP_MUX_BAD_DATA = -2, + WEBP_MUX_MEMORY_ERROR = -3, + WEBP_MUX_NOT_ENOUGH_DATA = -4 +} WebPMuxError; + +// IDs for different types of chunks. +typedef enum WebPChunkId { + WEBP_CHUNK_VP8X, // VP8X + WEBP_CHUNK_ICCP, // ICCP + WEBP_CHUNK_ANIM, // ANIM + WEBP_CHUNK_ANMF, // ANMF + WEBP_CHUNK_FRGM, // FRGM + WEBP_CHUNK_ALPHA, // ALPH + WEBP_CHUNK_IMAGE, // VP8/VP8L + WEBP_CHUNK_EXIF, // EXIF + WEBP_CHUNK_XMP, // XMP + WEBP_CHUNK_UNKNOWN, // Other chunks. + WEBP_CHUNK_NIL +} WebPChunkId; + +//------------------------------------------------------------------------------ + +// Returns the version number of the mux library, packed in hexadecimal using +// 8bits for each of major/minor/revision. E.g: v2.5.7 is 0x020507. +WEBP_EXTERN(int) WebPGetMuxVersion(void); + +//------------------------------------------------------------------------------ +// Life of a Mux object + +// Internal, version-checked, entry point +WEBP_EXTERN(WebPMux*) WebPNewInternal(int); + +// Creates an empty mux object. +// Returns: +// A pointer to the newly created empty mux object. +// Or NULL in case of memory error. +static WEBP_INLINE WebPMux* WebPMuxNew(void) { + return WebPNewInternal(WEBP_MUX_ABI_VERSION); +} + +// Deletes the mux object. +// Parameters: +// mux - (in/out) object to be deleted +WEBP_EXTERN(void) WebPMuxDelete(WebPMux* mux); + +//------------------------------------------------------------------------------ +// Mux creation. + +// Internal, version-checked, entry point +WEBP_EXTERN(WebPMux*) WebPMuxCreateInternal(const WebPData*, int, int); + +// Creates a mux object from raw data given in WebP RIFF format. +// Parameters: +// bitstream - (in) the bitstream data in WebP RIFF format +// copy_data - (in) value 1 indicates given data WILL be copied to the mux +// object and value 0 indicates data will NOT be copied. +// Returns: +// A pointer to the mux object created from given data - on success. +// NULL - In case of invalid data or memory error. +static WEBP_INLINE WebPMux* WebPMuxCreate(const WebPData* bitstream, + int copy_data) { + return WebPMuxCreateInternal(bitstream, copy_data, WEBP_MUX_ABI_VERSION); +} + +//------------------------------------------------------------------------------ +// Non-image chunks. + +// Note: Only non-image related chunks should be managed through chunk APIs. +// (Image related chunks are: "ANMF", "FRGM", "VP8 ", "VP8L" and "ALPH"). +// To add, get and delete images, use WebPMuxSetImage(), WebPMuxPushFrame(), +// WebPMuxGetFrame() and WebPMuxDeleteFrame(). + +// Adds a chunk with id 'fourcc' and data 'chunk_data' in the mux object. +// Any existing chunk(s) with the same id will be removed. +// Parameters: +// mux - (in/out) object to which the chunk is to be added +// fourcc - (in) a character array containing the fourcc of the given chunk; +// e.g., "ICCP", "XMP ", "EXIF" etc. +// chunk_data - (in) the chunk data to be added +// copy_data - (in) value 1 indicates given data WILL be copied to the mux +// object and value 0 indicates data will NOT be copied. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux, fourcc or chunk_data is NULL +// or if fourcc corresponds to an image chunk. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxSetChunk( + WebPMux* mux, const char fourcc[4], const WebPData* chunk_data, + int copy_data); + +// Gets a reference to the data of the chunk with id 'fourcc' in the mux object. +// The caller should NOT free the returned data. +// Parameters: +// mux - (in) object from which the chunk data is to be fetched +// fourcc - (in) a character array containing the fourcc of the chunk; +// e.g., "ICCP", "XMP ", "EXIF" etc. +// chunk_data - (out) returned chunk data +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux, fourcc or chunk_data is NULL +// or if fourcc corresponds to an image chunk. +// WEBP_MUX_NOT_FOUND - If mux does not contain a chunk with the given id. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxGetChunk( + const WebPMux* mux, const char fourcc[4], WebPData* chunk_data); + +// Deletes the chunk with the given 'fourcc' from the mux object. +// Parameters: +// mux - (in/out) object from which the chunk is to be deleted +// fourcc - (in) a character array containing the fourcc of the chunk; +// e.g., "ICCP", "XMP ", "EXIF" etc. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or fourcc is NULL +// or if fourcc corresponds to an image chunk. +// WEBP_MUX_NOT_FOUND - If mux does not contain a chunk with the given fourcc. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxDeleteChunk( + WebPMux* mux, const char fourcc[4]); + +//------------------------------------------------------------------------------ +// Images. + +// Encapsulates data about a single frame/fragment. +struct WebPMuxFrameInfo { + WebPData bitstream; // image data: can be a raw VP8/VP8L bitstream + // or a single-image WebP file. + int x_offset; // x-offset of the frame. + int y_offset; // y-offset of the frame. + int duration; // duration of the frame (in milliseconds). + + WebPChunkId id; // frame type: should be one of WEBP_CHUNK_ANMF, + // WEBP_CHUNK_FRGM or WEBP_CHUNK_IMAGE + WebPMuxAnimDispose dispose_method; // Disposal method for the frame. + WebPMuxAnimBlend blend_method; // Blend operation for the frame. + uint32_t pad[1]; // padding for later use +}; + +// Sets the (non-animated and non-fragmented) image in the mux object. +// Note: Any existing images (including frames/fragments) will be removed. +// Parameters: +// mux - (in/out) object in which the image is to be set +// bitstream - (in) can be a raw VP8/VP8L bitstream or a single-image +// WebP file (non-animated and non-fragmented) +// copy_data - (in) value 1 indicates given data WILL be copied to the mux +// object and value 0 indicates data will NOT be copied. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL or bitstream is NULL. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxSetImage( + WebPMux* mux, const WebPData* bitstream, int copy_data); + +// Adds a frame at the end of the mux object. +// Notes: (1) frame.id should be one of WEBP_CHUNK_ANMF or WEBP_CHUNK_FRGM +// (2) For setting a non-animated non-fragmented image, use +// WebPMuxSetImage() instead. +// (3) Type of frame being pushed must be same as the frames in mux. +// (4) As WebP only supports even offsets, any odd offset will be snapped +// to an even location using: offset &= ~1 +// Parameters: +// mux - (in/out) object to which the frame is to be added +// frame - (in) frame data. +// copy_data - (in) value 1 indicates given data WILL be copied to the mux +// object and value 0 indicates data will NOT be copied. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or frame is NULL +// or if content of 'frame' is invalid. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxPushFrame( + WebPMux* mux, const WebPMuxFrameInfo* frame, int copy_data); + +// Gets the nth frame from the mux object. +// The content of 'frame->bitstream' is allocated using malloc(), and NOT +// owned by the 'mux' object. It MUST be deallocated by the caller by calling +// WebPDataClear(). +// nth=0 has a special meaning - last position. +// Parameters: +// mux - (in) object from which the info is to be fetched +// nth - (in) index of the frame in the mux object +// frame - (out) data of the returned frame +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or frame is NULL. +// WEBP_MUX_NOT_FOUND - if there are less than nth frames in the mux object. +// WEBP_MUX_BAD_DATA - if nth frame chunk in mux is invalid. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxGetFrame( + const WebPMux* mux, uint32_t nth, WebPMuxFrameInfo* frame); + +// Deletes a frame from the mux object. +// nth=0 has a special meaning - last position. +// Parameters: +// mux - (in/out) object from which a frame is to be deleted +// nth - (in) The position from which the frame is to be deleted +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL. +// WEBP_MUX_NOT_FOUND - If there are less than nth frames in the mux object +// before deletion. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth); + +//------------------------------------------------------------------------------ +// Animation. + +// Animation parameters. +struct WebPMuxAnimParams { + uint32_t bgcolor; // Background color of the canvas stored (in MSB order) as: + // Bits 00 to 07: Alpha. + // Bits 08 to 15: Red. + // Bits 16 to 23: Green. + // Bits 24 to 31: Blue. + int loop_count; // Number of times to repeat the animation [0 = infinite]. +}; + +// Sets the animation parameters in the mux object. Any existing ANIM chunks +// will be removed. +// Parameters: +// mux - (in/out) object in which ANIM chunk is to be set/added +// params - (in) animation parameters. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or params is NULL. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxSetAnimationParams( + WebPMux* mux, const WebPMuxAnimParams* params); + +// Gets the animation parameters from the mux object. +// Parameters: +// mux - (in) object from which the animation parameters to be fetched +// params - (out) animation parameters extracted from the ANIM chunk +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or params is NULL. +// WEBP_MUX_NOT_FOUND - if ANIM chunk is not present in mux object. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxGetAnimationParams( + const WebPMux* mux, WebPMuxAnimParams* params); + +//------------------------------------------------------------------------------ +// Misc Utilities. + +#if WEBP_MUX_ABI_VERSION > 0x0101 +// Sets the canvas size for the mux object. The width and height can be +// specified explicitly or left as zero (0, 0). +// * When width and height are specified explicitly, then this frame bound is +// enforced during subsequent calls to WebPMuxAssemble() and an error is +// reported if any animated frame does not completely fit within the canvas. +// * When unspecified (0, 0), the constructed canvas will get the frame bounds +// from the bounding-box over all frames after calling WebPMuxAssemble(). +// Parameters: +// mux - (in) object to which the canvas size is to be set +// width - (in) canvas width +// height - (in) canvas height +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL; or +// width or height are invalid or out of bounds +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxSetCanvasSize(WebPMux* mux, + int width, int height); +#endif + +// Gets the canvas size from the mux object. +// Note: This method assumes that the VP8X chunk, if present, is up-to-date. +// That is, the mux object hasn't been modified since the last call to +// WebPMuxAssemble() or WebPMuxCreate(). +// Parameters: +// mux - (in) object from which the canvas size is to be fetched +// width - (out) canvas width +// height - (out) canvas height +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux, width or height is NULL. +// WEBP_MUX_BAD_DATA - if VP8X/VP8/VP8L chunk or canvas size is invalid. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxGetCanvasSize(const WebPMux* mux, + int* width, int* height); + +// Gets the feature flags from the mux object. +// Note: This method assumes that the VP8X chunk, if present, is up-to-date. +// That is, the mux object hasn't been modified since the last call to +// WebPMuxAssemble() or WebPMuxCreate(). +// Parameters: +// mux - (in) object from which the features are to be fetched +// flags - (out) the flags specifying which features are present in the +// mux object. This will be an OR of various flag values. +// Enum 'WebPFeatureFlags' can be used to test individual flag values. +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux or flags is NULL. +// WEBP_MUX_BAD_DATA - if VP8X/VP8/VP8L chunk or canvas size is invalid. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxGetFeatures(const WebPMux* mux, + uint32_t* flags); + +// Gets number of chunks with the given 'id' in the mux object. +// Parameters: +// mux - (in) object from which the info is to be fetched +// id - (in) chunk id specifying the type of chunk +// num_elements - (out) number of chunks with the given chunk id +// Returns: +// WEBP_MUX_INVALID_ARGUMENT - if mux, or num_elements is NULL. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxNumChunks(const WebPMux* mux, + WebPChunkId id, int* num_elements); + +// Assembles all chunks in WebP RIFF format and returns in 'assembled_data'. +// This function also validates the mux object. +// Note: The content of 'assembled_data' will be ignored and overwritten. +// Also, the content of 'assembled_data' is allocated using malloc(), and NOT +// owned by the 'mux' object. It MUST be deallocated by the caller by calling +// WebPDataClear(). It's always safe to call WebPDataClear() upon return, +// even in case of error. +// Parameters: +// mux - (in/out) object whose chunks are to be assembled +// assembled_data - (out) assembled WebP data +// Returns: +// WEBP_MUX_BAD_DATA - if mux object is invalid. +// WEBP_MUX_INVALID_ARGUMENT - if mux or assembled_data is NULL. +// WEBP_MUX_MEMORY_ERROR - on memory allocation error. +// WEBP_MUX_OK - on success. +WEBP_EXTERN(WebPMuxError) WebPMuxAssemble(WebPMux* mux, + WebPData* assembled_data); + +//------------------------------------------------------------------------------ + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* WEBP_WEBP_MUX_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/mux_types.h b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/mux_types.h new file mode 100644 index 0000000..c94043a --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/mux_types.h @@ -0,0 +1,97 @@ +// Copyright 2012 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// Data-types common to the mux and demux libraries. +// +// Author: Urvang (urvang@google.com) + +#ifndef WEBP_WEBP_MUX_TYPES_H_ +#define WEBP_WEBP_MUX_TYPES_H_ + +#include // free() +#include // memset() +#include "./types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Note: forward declaring enumerations is not allowed in (strict) C and C++, +// the types are left here for reference. +// typedef enum WebPFeatureFlags WebPFeatureFlags; +// typedef enum WebPMuxAnimDispose WebPMuxAnimDispose; +// typedef enum WebPMuxAnimBlend WebPMuxAnimBlend; +typedef struct WebPData WebPData; + +// VP8X Feature Flags. +typedef enum WebPFeatureFlags { + FRAGMENTS_FLAG = 0x00000001, + ANIMATION_FLAG = 0x00000002, + XMP_FLAG = 0x00000004, + EXIF_FLAG = 0x00000008, + ALPHA_FLAG = 0x00000010, + ICCP_FLAG = 0x00000020 +} WebPFeatureFlags; + +// Dispose method (animation only). Indicates how the area used by the current +// frame is to be treated before rendering the next frame on the canvas. +typedef enum WebPMuxAnimDispose { + WEBP_MUX_DISPOSE_NONE, // Do not dispose. + WEBP_MUX_DISPOSE_BACKGROUND // Dispose to background color. +} WebPMuxAnimDispose; + +// Blend operation (animation only). Indicates how transparent pixels of the +// current frame are blended with those of the previous canvas. +typedef enum WebPMuxAnimBlend { + WEBP_MUX_BLEND, // Blend. + WEBP_MUX_NO_BLEND // Do not blend. +} WebPMuxAnimBlend; + +// Data type used to describe 'raw' data, e.g., chunk data +// (ICC profile, metadata) and WebP compressed image data. +struct WebPData { + const uint8_t* bytes; + size_t size; +}; + +// Initializes the contents of the 'webp_data' object with default values. +static WEBP_INLINE void WebPDataInit(WebPData* webp_data) { + if (webp_data != NULL) { + memset(webp_data, 0, sizeof(*webp_data)); + } +} + +// Clears the contents of the 'webp_data' object by calling free(). Does not +// deallocate the object itself. +static WEBP_INLINE void WebPDataClear(WebPData* webp_data) { + if (webp_data != NULL) { + free((void*)webp_data->bytes); + WebPDataInit(webp_data); + } +} + +// Allocates necessary storage for 'dst' and copies the contents of 'src'. +// Returns true on success. +static WEBP_INLINE int WebPDataCopy(const WebPData* src, WebPData* dst) { + if (src == NULL || dst == NULL) return 0; + WebPDataInit(dst); + if (src->bytes != NULL && src->size != 0) { + dst->bytes = (uint8_t*)malloc(src->size); + if (dst->bytes == NULL) return 0; + memcpy((void*)dst->bytes, src->bytes, src->size); + dst->size = src->size; + } + return 1; +} + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* WEBP_WEBP_MUX_TYPES_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/types.h b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/types.h new file mode 100644 index 0000000..568d1f2 --- /dev/null +++ b/WebPConverter/libwebp-0.4.1-mac-10.8/include/webp/types.h @@ -0,0 +1,47 @@ +// Copyright 2010 Google Inc. All Rights Reserved. +// +// Use of this source code is governed by a BSD-style license +// that can be found in the COPYING file in the root of the source +// tree. An additional intellectual property rights grant can be found +// in the file PATENTS. All contributing project authors may +// be found in the AUTHORS file in the root of the source tree. +// ----------------------------------------------------------------------------- +// +// Common types +// +// Author: Skal (pascal.massimino@gmail.com) + +#ifndef WEBP_WEBP_TYPES_H_ +#define WEBP_WEBP_TYPES_H_ + +#include // for size_t + +#ifndef _MSC_VER +#include +#ifdef __STRICT_ANSI__ +#define WEBP_INLINE +#else /* __STRICT_ANSI__ */ +#define WEBP_INLINE inline +#endif +#else +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed int int32_t; +typedef unsigned int uint32_t; +typedef unsigned long long int uint64_t; +typedef long long int int64_t; +#define WEBP_INLINE __forceinline +#endif /* _MSC_VER */ + +#ifndef WEBP_EXTERN +// This explicitly marks library functions and allows for changing the +// signature for e.g., Windows DLL builds. +#define WEBP_EXTERN(type) extern type +#endif /* WEBP_EXTERN */ + +// Macro to check ABI compatibility (same major revision number) +#define WEBP_ABI_IS_INCOMPATIBLE(a, b) (((a) >> 8) != ((b) >> 8)) + +#endif /* WEBP_WEBP_TYPES_H_ */ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/lib/libwebp.a b/WebPConverter/libwebp-0.4.1-mac-10.8/lib/libwebp.a new file mode 100644 index 0000000..33b7a7b Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-mac-10.8/lib/libwebp.a differ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/lib/libwebpdemux.a b/WebPConverter/libwebp-0.4.1-mac-10.8/lib/libwebpdemux.a new file mode 100644 index 0000000..2af6e2e Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-mac-10.8/lib/libwebpdemux.a differ diff --git a/WebPConverter/libwebp-0.4.1-mac-10.8/lib/libwebpmux.a b/WebPConverter/libwebp-0.4.1-mac-10.8/lib/libwebpmux.a new file mode 100644 index 0000000..4969581 Binary files /dev/null and b/WebPConverter/libwebp-0.4.1-mac-10.8/lib/libwebpmux.a differ diff --git a/src/com/em/miguelbridge/botmatrix/MatrixBot.java b/src/com/em/miguelbridge/botmatrix/MatrixBot.java index df7d640..d1afe8a 100644 --- a/src/com/em/miguelbridge/botmatrix/MatrixBot.java +++ b/src/com/em/miguelbridge/botmatrix/MatrixBot.java @@ -129,9 +129,9 @@ public class MatrixBot { } public synchronized String sendFile(String roomAddress, File file, - String nomeFile, boolean isImage) throws IOException, URISyntaxException, ParseException { + String nomeFile, String type) throws IOException, URISyntaxException, ParseException { String requestUrl; - if (isImage) { + if (type.equals("jpg")) { requestUrl = homeUrl + String.format("media/r0/upload?filename=%s&access_token=%s", file.getName()+".jpg", accessToken); } @@ -140,7 +140,7 @@ public class MatrixBot { nomeFile, accessToken); } - String[] risposta = RequestHandler.postRequestFile(requestUrl, file, isImage); + String[] risposta = RequestHandler.postRequestFile(requestUrl, file, type); JSONObject uriFileObj = (JSONObject) new JSONParser().parse(risposta[1]); String uriFile = (String) uriFileObj.get("content_uri"); @@ -154,7 +154,7 @@ public class MatrixBot { requestUrl = homeUrl + String.format("client/r0/rooms/%s/send/m.room.message?access_token=%s", roomAddress, accessToken); - if (isImage) { + if (type.equals("jpg")) { JSONObject reqParams = new JSONObject(); JSONObject objInfo = new JSONObject(); JSONObject thumb = new JSONObject(); @@ -185,6 +185,37 @@ public class MatrixBot { return risposta[0] + " - " + risposta[1]; } + if (type.equals("png")) { + JSONObject reqParams = new JSONObject(); + JSONObject objInfo = new JSONObject(); + JSONObject thumb = new JSONObject(); + BufferedImage bimg = ImageIO.read(file); + int width = bimg.getWidth(); + int height = bimg.getHeight(); + + thumb.put("mimetype", "image/png"); + thumb.put("h", height); + thumb.put("w", width); + thumb.put("size", file.length()); + + objInfo.put("mimetype", "image/png"); + objInfo.put("size", file.length()); + //objInfo.put("thumbnail_info", thumb); + //objInfo.put("thumbnail_url", uriFile); + objInfo.put("h", height); + objInfo.put("w", width); + //objInfo.put("orientation", 0); + + reqParams.put("info", objInfo); + reqParams.put("msgtype", "m.image"); + reqParams.put("body", file.getName()); + reqParams.put("url", uriFile); + + risposta = RequestHandler.postRequestJSON(requestUrl, reqParams); + + return risposta[0] + " - " + risposta[1]; + } + else { JSONObject reqParams = new JSONObject(); JSONObject objInfo = new JSONObject(); diff --git a/src/com/em/miguelbridge/botmatrix/RequestHandler.java b/src/com/em/miguelbridge/botmatrix/RequestHandler.java index c73e281..f5c5c4d 100644 --- a/src/com/em/miguelbridge/botmatrix/RequestHandler.java +++ b/src/com/em/miguelbridge/botmatrix/RequestHandler.java @@ -69,11 +69,13 @@ public class RequestHandler { return risposta; } - public static String[] postRequestFile(String inUrl, File file, boolean isImage) throws IOException { + public static String[] postRequestFile(String inUrl, File file, String type) throws IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(inUrl); - if (isImage) + if (type.equals("jpg")) httpPost.setHeader("Content-Type", "image/jpeg"); + else if (type.equals("png")) + httpPost.setHeader("Content-Type", "image/png"); else httpPost.setHeader("Content-Type", "text/plain"); diff --git a/src/com/em/miguelbridge/telegrambot/TGBot.java b/src/com/em/miguelbridge/telegrambot/TGBot.java index c913057..c169219 100644 --- a/src/com/em/miguelbridge/telegrambot/TGBot.java +++ b/src/com/em/miguelbridge/telegrambot/TGBot.java @@ -17,6 +17,7 @@ import org.telegram.telegrambots.api.methods.send.*; import org.telegram.telegrambots.api.objects.Document; import org.telegram.telegrambots.api.objects.PhotoSize; import org.telegram.telegrambots.api.objects.Update; +import org.telegram.telegrambots.api.objects.stickers.Sticker; import org.telegram.telegrambots.bots.TelegramLongPollingBot; import org.telegram.telegrambots.exceptions.TelegramApiException; @@ -55,9 +56,15 @@ public class TGBot extends TelegramLongPollingBot { //Testo e mittente String testoMessaggio = update.getMessage().getText(); String chat_id = "" + update.getMessage().getChatId(); - String sender = update.getMessage().getFrom().getFirstName() + " " - + update.getMessage().getFrom().getLastName(); + String sender; String destination; + + if (update.getMessage().getFrom().getLastName() != null) + sender = update.getMessage().getFrom().getFirstName() + " " + + update.getMessage().getFrom().getLastName(); + else + sender = update.getMessage().getFrom().getFirstName(); + try { destination = getDestinationRoom(chat_id); if (destination == null) @@ -69,6 +76,7 @@ public class TGBot extends TelegramLongPollingBot { } } + //Photo else if (update.hasMessage() && update.getMessage().hasPhoto()) { String chat_id = "" + update.getMessage().getChatId(); String sender; @@ -113,13 +121,14 @@ public class TGBot extends TelegramLongPollingBot { if (destination == null) throw new Exception(); matrixBot.sendMessage(sender + " ha inviato una foto:", destination); - matrixBot.sendFile(destination, downloadedFile, null, true); + matrixBot.sendFile(destination, downloadedFile, null, "jpg"); } catch (Exception ex) { cEcho(chat_id, "Errore: questa chat non è collegata a matrix."); ex.printStackTrace(System.err); } } + //Generic file else if (update.hasMessage() && update.getMessage().hasDocument()) { String chat_id = "" + update.getMessage().getChatId(); String sender; @@ -157,12 +166,70 @@ public class TGBot extends TelegramLongPollingBot { if (destination == null) throw new Exception(); matrixBot.sendMessage(sender + " ha inviato un file:", destination); - matrixBot.sendFile(destination, downloadedFile, nomeFile, false); + matrixBot.sendFile(destination, downloadedFile, nomeFile, "file"); } catch (Exception ex) { cEcho(chat_id, "Errore: questa chat non è collegata a matrix."); ex.printStackTrace(System.err); } } + + //Sticker + else if (update.hasMessage()) { + String chat_id = "" + update.getMessage().getChatId(); + String sender = null; + String destination; + String nomeFile = "sticker.png"; + Sticker sticker = null; + File convertedImage = null; + + java.io.File downloadedFile = null; + + try { + if (update.getMessage().getFrom().getLastName() != null) + sender = update.getMessage().getFrom().getFirstName() + " " + + update.getMessage().getFrom().getLastName(); + else + sender = update.getMessage().getFrom().getFirstName(); + + sticker = update.getMessage().getSticker(); + String filePath; + + // We create a GetFile method and set the file_id from the photo + GetFile getFileMethod = new GetFile(); + getFileMethod.setFileId(sticker.getFileId()); + + // We execute the method using AbsSender::execute method. + final org.telegram.telegrambots.api.objects.File file = execute(getFileMethod); + // We now have the file_path + filePath = file.getFilePath(); + // Download the file calling AbsSender::downloadFile method + downloadedFile = downloadFile(filePath); + + if (WebPConverter.convert(downloadedFile.getAbsolutePath(), nomeFile) == 0) { + System.out.println("Done converting"); + convertedImage = new File(nomeFile); + } + else + throw new Exception(); + //System.out.println("Ho scaricato lo sticker"); + } + catch (Exception ex) { + ex.printStackTrace(System.err); + } + + try { + destination = getDestinationRoom(chat_id); + if (destination == null) + throw new Exception(); + matrixBot.sendMessage(sender + " ha inviato uno sticker " + sticker.getEmoji() + ":", destination); + matrixBot.sendFile(destination, convertedImage, nomeFile, "png"); + convertedImage.delete(); + } catch (Exception ex) { + cEcho(chat_id, "Errore: questa chat non è collegata a matrix."); + ex.printStackTrace(System.err); + convertedImage.delete(); + } + } } @Override diff --git a/src/com/em/miguelbridge/telegrambot/WebPConverter.java b/src/com/em/miguelbridge/telegrambot/WebPConverter.java new file mode 100644 index 0000000..cd4c51d --- /dev/null +++ b/src/com/em/miguelbridge/telegrambot/WebPConverter.java @@ -0,0 +1,22 @@ +package com.em.miguelbridge.telegrambot; + +import java.io.IOException; + +public class WebPConverter { + public static int convert(String iPath, String oPath) { + //the "dwebp"'s path + String binPath = "WebPConverter/libwebp-0.4.1-linux-x86-64/bin/dwebp"; + + String[] args = new String[]{binPath, iPath, "-o", oPath}; + + try { + Runtime.getRuntime().exec(args); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(System.err); + return 1; + } + + return 0; + } +} diff --git a/sticker.webp b/sticker.webp new file mode 100644 index 0000000..d0daf87 Binary files /dev/null and b/sticker.webp differ diff --git a/test/test/WebPTest.java b/test/test/WebPTest.java new file mode 100644 index 0000000..8545a8b --- /dev/null +++ b/test/test/WebPTest.java @@ -0,0 +1,15 @@ +package test; + +import com.em.miguelbridge.telegrambot.WebPConverter; + +public class WebPTest { + public static void main(String args[]) { + String iFile = "sticker.webp"; + String oFile = "sticker.png"; + + if (WebPConverter.convert(iFile, oFile) == 0) + System.out.println("Done"); + else + System.err.println("Error"); + } +}