/* libbrotlienc Vala bindings * * Bindings for the Brotli compression library (encoder only) * Based on brotli encode.h and types.h */ [CCode (cprefix = "BROTLI_", lower_case_cprefix = "brotli_", cheader_filename = "brotli/encode.h,brotli/types.h")] namespace Brotli { /* Boolean type */ [CCode (cname = "BROTLI_BOOL", has_type_id = false, default_value = "BROTLI_FALSE")] public struct Bool : int { } [CCode (cname = "BROTLI_TRUE")] public const Bool TRUE; [CCode (cname = "BROTLI_FALSE")] public const Bool FALSE; [CCode (cname = "TO_BROTLI_BOOL")] public Bool to_bool(int x); /* Memory allocation callbacks */ [CCode (cname = "brotli_alloc_func", has_target = false)] public delegate void* AllocFunc(void* opaque, size_t size); [CCode (cname = "brotli_free_func", has_target = false)] public delegate void FreeFunc(void* opaque, void* address); /* Constants from encode.h */ [CCode (cname = "BROTLI_MIN_WINDOW_BITS")] public const int MIN_WINDOW_BITS; [CCode (cname = "BROTLI_MAX_WINDOW_BITS")] public const int MAX_WINDOW_BITS; [CCode (cname = "BROTLI_LARGE_MAX_WINDOW_BITS")] public const int LARGE_MAX_WINDOW_BITS; [CCode (cname = "BROTLI_MIN_INPUT_BLOCK_BITS")] public const int MIN_INPUT_BLOCK_BITS; [CCode (cname = "BROTLI_MAX_INPUT_BLOCK_BITS")] public const int MAX_INPUT_BLOCK_BITS; [CCode (cname = "BROTLI_MIN_QUALITY")] public const int MIN_QUALITY; [CCode (cname = "BROTLI_MAX_QUALITY")] public const int MAX_QUALITY; [CCode (cname = "BROTLI_DEFAULT_QUALITY")] public const int DEFAULT_QUALITY; [CCode (cname = "BROTLI_DEFAULT_WINDOW")] public const int DEFAULT_WINDOW; /* Encoder mode */ [CCode (cname = "BrotliEncoderMode", has_type_id = false)] public enum EncoderMode { [CCode (cname = "BROTLI_MODE_GENERIC")] GENERIC, [CCode (cname = "BROTLI_MODE_TEXT")] TEXT, [CCode (cname = "BROTLI_MODE_FONT")] FONT } /* Encoder operation for streaming */ [CCode (cname = "BrotliEncoderOperation", has_type_id = false)] public enum EncoderOperation { [CCode (cname = "BROTLI_OPERATION_PROCESS")] PROCESS, [CCode (cname = "BROTLI_OPERATION_FLUSH")] FLUSH, [CCode (cname = "BROTLI_OPERATION_FINISH")] FINISH, [CCode (cname = "BROTLI_OPERATION_EMIT_METADATA")] EMIT_METADATA } /* Encoder parameters */ [CCode (cname = "BrotliEncoderParameter", has_type_id = false)] public enum EncoderParameter { [CCode (cname = "BROTLI_PARAM_MODE")] MODE, [CCode (cname = "BROTLI_PARAM_QUALITY")] QUALITY, [CCode (cname = "BROTLI_PARAM_LGWIN")] LGWIN, [CCode (cname = "BROTLI_PARAM_LGBLOCK")] LGBLOCK, [CCode (cname = "BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING")] DISABLE_LITERAL_CONTEXT_MODELING, [CCode (cname = "BROTLI_PARAM_SIZE_HINT")] SIZE_HINT, [CCode (cname = "BROTLI_PARAM_LARGE_WINDOW")] LARGE_WINDOW, [CCode (cname = "BROTLI_PARAM_NPOSTFIX")] NPOSTFIX, [CCode (cname = "BROTLI_PARAM_NDIRECT")] NDIRECT, [CCode (cname = "BROTLI_PARAM_STREAM_OFFSET")] STREAM_OFFSET } /* Encoder state - opaque structure */ [CCode (cname = "BrotliEncoderState", free_function = "BrotliEncoderDestroyInstance")] [Compact] public class EncoderState { [CCode (cname = "BrotliEncoderCreateInstance")] public EncoderState(AllocFunc? alloc_func, FreeFunc? free_func, void* opaque); [CCode (cname = "BrotliEncoderSetParameter")] public Bool set_parameter(EncoderParameter param, uint32 value); [CCode (cname = "BrotliEncoderCompressStream")] public Bool compress_stream(EncoderOperation op, ref size_t available_in, ref uint8* next_in, ref size_t available_out, ref uint8* next_out, out size_t total_out); [CCode (cname = "BrotliEncoderIsFinished")] public Bool is_finished(); [CCode (cname = "BrotliEncoderHasMoreOutput")] public Bool has_more_output(); [CCode (cname = "BrotliEncoderTakeOutput")] public unowned uint8* take_output(ref size_t size); } /* Encoder one-shot functions */ [CCode (cname = "BrotliEncoderMaxCompressedSize")] public size_t encoder_max_compressed_size(size_t input_size); [CCode (cname = "BrotliEncoderCompress")] public Bool encoder_compress(int quality, int lgwin, EncoderMode mode, size_t input_size, uint8* input_buffer, ref size_t encoded_size, uint8* encoded_buffer); [CCode (cname = "BrotliEncoderVersion")] public uint32 encoder_version(); }