123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527 |
- #ifndef WEBP_WEBP_ENCODE_H_
- #define WEBP_WEBP_ENCODE_H_
- #include "./types.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define WEBP_ENCODER_ABI_VERSION 0x0209
- typedef struct WebPConfig WebPConfig;
- typedef struct WebPPicture WebPPicture;
- typedef struct WebPAuxStats WebPAuxStats;
- typedef struct WebPMemoryWriter WebPMemoryWriter;
- WEBP_EXTERN(int) WebPGetEncoderVersion(void);
- 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);
- 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);
- WEBP_EXTERN(void) WebPFree(void* ptr);
- typedef enum WebPImageHint {
- WEBP_HINT_DEFAULT = 0,
- WEBP_HINT_PICTURE,
- WEBP_HINT_PHOTO,
- WEBP_HINT_GRAPH,
- WEBP_HINT_LAST
- } WebPImageHint;
- struct WebPConfig {
- int lossless;
- float quality;
- int method;
- WebPImageHint image_hint;
-
- int target_size;
-
- float target_PSNR;
-
- int segments;
- int sns_strength;
- int filter_strength;
- int filter_sharpness;
- int filter_type;
-
- int autofilter;
- int alpha_compression;
-
- int alpha_filtering;
-
- int alpha_quality;
-
- int pass;
- int show_compressed;
-
- int preprocessing;
-
- int partitions;
-
- int partition_limit;
-
-
- int emulate_jpeg_size;
-
-
-
- int thread_level;
- int low_memory;
- int near_lossless;
-
- int exact;
-
-
-
- #ifdef WEBP_EXPERIMENTAL_FEATURES
- int delta_palettization;
- uint32_t pad[2];
- #else
- uint32_t pad[3];
- #endif
- };
- typedef enum WebPPreset {
- WEBP_PRESET_DEFAULT = 0,
- WEBP_PRESET_PICTURE,
- WEBP_PRESET_PHOTO,
- WEBP_PRESET_DRAWING,
- WEBP_PRESET_ICON,
- WEBP_PRESET_TEXT
- } WebPPreset;
- WEBP_EXTERN(int) WebPConfigInitInternal(WebPConfig*, WebPPreset, float, int);
- static WEBP_INLINE int WebPConfigInit(WebPConfig* config) {
- return WebPConfigInitInternal(config, WEBP_PRESET_DEFAULT, 75.f,
- WEBP_ENCODER_ABI_VERSION);
- }
- static WEBP_INLINE int WebPConfigPreset(WebPConfig* config,
- WebPPreset preset, float quality) {
- return WebPConfigInitInternal(config, preset, quality,
- WEBP_ENCODER_ABI_VERSION);
- }
- WEBP_EXTERN(int) WebPConfigLosslessPreset(WebPConfig* config, int level);
- WEBP_EXTERN(int) WebPValidateConfig(const WebPConfig* config);
- struct WebPAuxStats {
- int coded_size;
- float PSNR[5];
- int block_count[3];
- int header_bytes[2];
-
- int residual_bytes[3][4];
-
- int segment_size[4];
- int segment_quant[4];
- int segment_level[4];
- int alpha_data_size;
- int layer_data_size;
-
- uint32_t lossless_features;
-
- int histogram_bits;
- int transform_bits;
- int cache_bits;
- int palette_size;
- int lossless_size;
- int lossless_hdr_size;
- int lossless_data_size;
- uint32_t pad[2];
- };
- typedef int (*WebPWriterFunction)(const uint8_t* data, size_t data_size,
- const WebPPicture* picture);
- struct WebPMemoryWriter {
- uint8_t* mem;
- size_t size;
- size_t max_size;
- uint32_t pad[1];
- };
- WEBP_EXTERN(void) WebPMemoryWriterInit(WebPMemoryWriter* writer);
- WEBP_EXTERN(void) WebPMemoryWriterClear(WebPMemoryWriter* writer);
- WEBP_EXTERN(int) WebPMemoryWrite(const uint8_t* data, size_t data_size,
- const WebPPicture* picture);
- typedef int (*WebPProgressHook)(int percent, const WebPPicture* picture);
- typedef enum WebPEncCSP {
-
- WEBP_YUV420 = 0,
- WEBP_YUV420A = 4,
- WEBP_CSP_UV_MASK = 3,
- WEBP_CSP_ALPHA_BIT = 4
- } WebPEncCSP;
- typedef enum WebPEncodingError {
- VP8_ENC_OK = 0,
- VP8_ENC_ERROR_OUT_OF_MEMORY,
- VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY,
- VP8_ENC_ERROR_NULL_PARAMETER,
- VP8_ENC_ERROR_INVALID_CONFIGURATION,
- VP8_ENC_ERROR_BAD_DIMENSION,
- VP8_ENC_ERROR_PARTITION0_OVERFLOW,
- VP8_ENC_ERROR_PARTITION_OVERFLOW,
- VP8_ENC_ERROR_BAD_WRITE,
- VP8_ENC_ERROR_FILE_TOO_BIG,
- VP8_ENC_ERROR_USER_ABORT,
- VP8_ENC_ERROR_LAST
- } WebPEncodingError;
- #define WEBP_MAX_DIMENSION 16383
- struct WebPPicture {
-
-
-
-
-
-
- int use_argb;
-
- WebPEncCSP colorspace;
- int width, height;
- uint8_t *y, *u, *v;
- int y_stride, uv_stride;
- uint8_t* a;
- int a_stride;
- uint32_t pad1[2];
-
- uint32_t* argb;
- int argb_stride;
- uint32_t pad2[3];
-
-
-
- WebPWriterFunction writer;
- void* custom_ptr;
-
- int extra_info_type;
-
-
-
- uint8_t* extra_info;
-
-
-
-
-
-
- WebPAuxStats* stats;
-
- WebPEncodingError error_code;
-
- WebPProgressHook progress_hook;
- void* user_data;
-
- uint32_t pad3[3];
-
- uint8_t *pad4, *pad5;
- uint32_t pad6[8];
-
-
- void* memory_;
- void* memory_argb_;
- void* pad7[2];
- };
- WEBP_EXTERN(int) WebPPictureInitInternal(WebPPicture*, int);
- static WEBP_INLINE int WebPPictureInit(WebPPicture* picture) {
- return WebPPictureInitInternal(picture, WEBP_ENCODER_ABI_VERSION);
- }
- WEBP_EXTERN(int) WebPPictureAlloc(WebPPicture* picture);
- WEBP_EXTERN(void) WebPPictureFree(WebPPicture* picture);
- WEBP_EXTERN(int) WebPPictureCopy(const WebPPicture* src, WebPPicture* dst);
- WEBP_EXTERN(int) WebPPictureDistortion(
- const WebPPicture* src, const WebPPicture* ref,
- int metric_type,
- float result[5]);
- WEBP_EXTERN(int) WebPPictureCrop(WebPPicture* picture,
- int left, int top, int width, int height);
- WEBP_EXTERN(int) WebPPictureView(const WebPPicture* src,
- int left, int top, int width, int height,
- WebPPicture* dst);
- WEBP_EXTERN(int) WebPPictureIsView(const WebPPicture* picture);
- WEBP_EXTERN(int) WebPPictureRescale(WebPPicture* pic, int width, int height);
- WEBP_EXTERN(int) WebPPictureImportRGB(
- WebPPicture* picture, const uint8_t* rgb, int rgb_stride);
- WEBP_EXTERN(int) WebPPictureImportRGBA(
- WebPPicture* picture, const uint8_t* rgba, int rgba_stride);
- WEBP_EXTERN(int) WebPPictureImportRGBX(
- WebPPicture* picture, const uint8_t* rgbx, int rgbx_stride);
- 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);
- WEBP_EXTERN(int) WebPPictureARGBToYUVA(WebPPicture* picture,
- WebPEncCSP );
- WEBP_EXTERN(int) WebPPictureARGBToYUVADithered(
- WebPPicture* picture, WebPEncCSP colorspace, float dithering);
- WEBP_EXTERN(int) WebPPictureSmartARGBToYUVA(WebPPicture* picture);
- WEBP_EXTERN(int) WebPPictureYUVAToARGB(WebPPicture* picture);
- WEBP_EXTERN(void) WebPCleanupTransparentArea(WebPPicture* picture);
- WEBP_EXTERN(int) WebPPictureHasTransparency(const WebPPicture* picture);
- WEBP_EXTERN(void) WebPBlendAlpha(WebPPicture* pic, uint32_t background_rgb);
- WEBP_EXTERN(int) WebPEncode(const WebPConfig* config, WebPPicture* picture);
- #ifdef __cplusplus
- }
- #endif
- #endif
|