diff options
Diffstat (limited to 'third_party/libwebp/webp/decode.h')
-rw-r--r-- | third_party/libwebp/webp/decode.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/third_party/libwebp/webp/decode.h b/third_party/libwebp/webp/decode.h new file mode 100644 index 0000000..6ecaa00 --- /dev/null +++ b/third_party/libwebp/webp/decode.h @@ -0,0 +1,111 @@ +// Copyright 2010 Google Inc. +// +// This code is licensed under the same terms as WebM: +// Software License Agreement: http://www.webmproject.org/license/software/ +// Additional IP Rights Grant: http://www.webmproject.org/license/additional/ +// ----------------------------------------------------------------------------- +// +// Main decoding functions for WEBP images. +// +// Author: Skal (pascal.massimino@gmail.com) + +#ifndef WEBP_DECODE_WEBP_DECODE_H_ +#define WEBP_DECODE_WEBP_DECODE_H_ + +#ifndef _MSC_VER +#include <inttypes.h> +#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; +#define inline __forceinline +#endif + + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +// Retrieve basic header information: width, height. +// This function will also validate the header and return 0 in +// case of formatting error. +// Pointers *width/*height can be passed NULL if deemed irrelevant. +int WebPGetInfo(const uint8_t* data, uint32_t data_size, + int *width, int *height); + +// Decodes WEBP images pointed to by *data and returns RGB samples, along +// with the dimensions in *width and *height. +// The returned pointer should be deleted calling free(). +// Returns NULL in case of error. +uint8_t* WebPDecodeRGB(const uint8_t* data, uint32_t data_size, + int *width, int *height); + +// Same as WebPDecodeRGB, but returning RGBA data. +uint8_t* WebPDecodeRGBA(const uint8_t* data, uint32_t data_size, + int *width, int *height); + +// This variant decode to BGR instead of RGB. +uint8_t* WebPDecodeBGR(const uint8_t* data, uint32_t data_size, + int *width, int *height); +// This variant decodes to BGRA instead of RGBA. +uint8_t* WebPDecodeBGRA(const uint8_t* data, uint32_t data_size, + int *width, int *height); + +// Decode WEBP images stored in *data in 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 +uint8_t* WebPDecodeYUV(const uint8_t* data, uint32_t data_size, + int *width, int *height, uint8_t** u, uint8_t** v, + int *stride, int* uv_stride); + +// These three 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. +uint8_t* WebPDecodeRGBInto(const uint8_t* data, uint32_t data_size, + uint8_t* output_buffer, int output_buffer_size, + int output_stride); +uint8_t* WebPDecodeRGBAInto(const uint8_t* data, uint32_t data_size, + uint8_t* output_buffer, int output_buffer_size, + int output_stride); +// BGR variants +uint8_t* WebPDecodeBGRInto(const uint8_t* data, uint32_t data_size, + uint8_t* output_buffer, int output_buffer_size, + int output_stride); +uint8_t* WebPDecodeBGRAInto(const uint8_t* data, uint32_t data_size, + uint8_t* output_buffer, int 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). +uint8_t* WebPDecodeYUVInto(const uint8_t* data, uint32_t data_size, + uint8_t* luma, int luma_size, int luma_stride, + uint8_t* u, int u_size, int u_stride, + uint8_t* v, int v_size, int v_stride); + +//----------------------------------------------------------------------------- + +#if defined(__cplusplus) || defined(c_plusplus) +} // extern "C" +#endif + +#endif // WEBP_DECODE_WEBP_DECODE_H_ |