diff --git a/src/liblzma/api/lzma/easy.h b/src/liblzma/api/lzma/easy.h new file mode 100644 index 00000000..b04c7b4f --- /dev/null +++ b/src/liblzma/api/lzma/easy.h @@ -0,0 +1,174 @@ +/** + * \file lzma/easy.h + * \brief Easy to use encoder initialization + * + * \author Copyright (C) 1999-2006 Igor Pavlov + * \author Copyright (C) 2008 Lasse Collin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief Compression level names for lzma_easy_* functions + * + * At the moment, all the compression levels support LZMA_SYNC_FLUSH. + * In future there may be levels that don't support LZMA_SYNC_FLUSH. + * However, the LZMA_SYNC_FLUSH support won't be removed from the + * existing compression levels. + * + * \note If liblzma is built without encoder support, or with some + * filters disabled, some of the compression levels may be + * unsupported. In that case, the initialization functions + * will return LZMA_HEADER_ERROR. + */ +typedef enum { + LZMA_EASY_COPY, + /**< + * No compression; the data is just wrapped into .lzma + * container. + */ + + LZMA_EASY_LZMA_1, + /**< + * LZMA filter with fast compression (fast in terms of LZMA). + * If you are interested in the exact options used, see + * lzma_preset_lzma[0]. Note that the exact options may + * change between liblzma versions. + * + * At the moment, the command line tool uses these settings + * when `lzma -1' is used. In future, the command line tool + * may default to some more complex way to determine the + * settings used e.g. the type of files being compressed. + * + * LZMA_EASY_LZMA_2 is equivalent to lzma_preset_lzma[1] + * and so on. + */ + + LZMA_EASY_LZMA_2, + LZMA_EASY_LZMA_3, + LZMA_EASY_LZMA_4, + LZMA_EASY_LZMA_5, + LZMA_EASY_LZMA_6, + LZMA_EASY_LZMA_7, + LZMA_EASY_LZMA_8, + LZMA_EASY_LZMA_9, +} lzma_easy_level; + + +/** + * \brief Default compression level for Data Blocks + * + * Data Blocks contain the actual compressed data. It's not straightforward + * to recommend a default level, because in some cases keeping the resource + * usage relatively low is more important that getting the maximum + * compression ratio. + */ +#define LZMA_EASY_DEFAULT LZMA_EASY_LZMA_7 + + +/** + * \brief Default compression level for Metadata Blocks + * + * Metadata Blocks are present only in Multi-Block Streams. Metadata Blocks + * contain the Extra Records (if any) and some book-keeping data that is + * used by decoders. + */ +#define LZMA_EASY_METADATA_DEFAULT LZMA_EASY_LZMA_3 + + +/** + * \brief Calculates rough memory requirements of a compression level + * + * This function is a wrapper for lzma_memory_usage(), which is declared + * in lzma/filter.h. + * + * \return Approximate memory usage of the encoder with the given + * compression level in mebibytes (value * 1024 * 1024 bytes). + * On error (e.g. compression level is not supported), + * UINT32_MAX is returned. + */ +extern uint32_t lzma_easy_memory_usage(lzma_easy_level level); + + +/** + * \brief Initializes Single-Block .lzma Stream encoder + * + * This function is intended for those who just want to use the basic LZMA + * features (that is, most developers out there). Lots of assumptions are + * made, which are correct for most situations or at least good enough. + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param level Compression level to use. This selects a set of + * compression settings from a list of compression + * presets. + * + * \return - LZMA_OK: Initialization succeeded. Use lzma_code() to + * encode your data. + * - LZMA_MEM_ERROR: Memory allocation failed. All memory + * previously allocated for *strm is now freed. + * - LZMA_HEADER_ERROR: The given compression level is not + * supported by this build of liblzma. + * + * If initialization succeeds, use lzma_code() to do the actual encoding. + * Valid values for `action' (the second argument of lzma_code()) are + * LZMA_RUN, LZMA_SYNC_FLUSH, and LZMA_FINISH. In future, there may be + * compression levels that don't support LZMA_SYNC_FLUSH. + */ +extern lzma_ret lzma_easy_encoder_single( + lzma_stream *strm, lzma_easy_level level); + + +/** + * \brief Initializes Multi-Block .lzma Stream encoder + * + * If you want to be able to store Extra Records or want to be able to use + * LZMA_FULL_FLUSH, you need to create a Multi-Block Stream. + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param level Compression level to use for the data being encoded. + * \param metadata_level + * Compression level to use for Metadata Blocks. + * Metadata Blocks contain the Extra Records (if any) + * and some book-keeping data that is used by decoders. + * \param header Pointer to a list of Extra Records to be stored to + * the Header Metadata Block. Set this to NULL to omit + * Header Metadata Block completely. The list must be + * kept available until the encoding has finished. + * \param footer Pointer to a list of Extra Records to be stored to + * the Footer Metadata Block. Set this to NULL if you + * don't want to store any Extra Records (the Footer + * Metadata Block will still be written for other + * reasons.) The list must be kept available until + * the encoding has finished. + * + * \return - LZMA_OK: Initialization succeeded. Use lzma_code() to + * encode your data. + * - LZMA_MEM_ERROR: Memory allocation failed. All memory + * previously allocated for *strm is now freed. + * - LZMA_HEADER_ERROR: The given compression level is not + * supported by this build of liblzma. + * + * If initialization succeeds, use lzma_code() to do the actual encoding. + * Valid values for `action' (the second argument of lzma_code()) are + * LZMA_RUN, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, and LZMA_FINISH. In future, + * there may be compression levels that don't support LZMA_SYNC_FLUSH. + * LZMA_FULL_FLUSH will always work with all compression levels. + */ +extern lzma_ret lzma_easy_encoder_multi(lzma_stream *strm, + lzma_easy_level level, lzma_easy_level metadata_level, + const lzma_extra *header, const lzma_extra *footer);