X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib.h;h=76c79237e42d017238dc4b7a139d9170ad77f899;hb=f03cd53bd986ce7b1c96dfa51cf4fbb2b9de05d5;hp=3335eba969b15366df4f0e99b56fd1fea4c2dc33;hpb=c05c91cb03b23623878ac386d92a51eca322f1f2;p=wimlib diff --git a/include/wimlib.h b/include/wimlib.h index 3335eba9..76c79237 100644 --- a/include/wimlib.h +++ b/include/wimlib.h @@ -458,7 +458,7 @@ enum wimlib_compression_type { /** The XPRESS compression format. This format combines Lempel-Ziv * factorization with Huffman encoding. Compression and decompression * are both fast. This format supports chunk sizes that are powers of 2 - * between 2^12 and 2^26, inclusively. */ + * between 2^12 and 2^16, inclusively. */ WIMLIB_COMPRESSION_TYPE_XPRESS = 1, /** The LZX compression format. This format combines Lempel-Ziv @@ -1964,7 +1964,7 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour * all streams recompressed in solid mode. * * Currently, new solid blocks will, by default, be written using LZMS - * compression with 64 MiB (67108864 byte) chunks. Use + * compression with 32 MiB (33554432 byte) chunks. Use * wimlib_set_output_pack_compression_type() and/or * wimlib_set_output_pack_chunk_size() to change this. This is independent of * the WIM's main compression type and chunk size; you can have a WIM that @@ -2868,8 +2868,9 @@ wimlib_get_compression_type_string(int ctype); * The error code returned by one of wimlib's functions. * * @return - * Pointer to a statically allocated string describing the error code, - * or @c NULL if the error code is not valid. + * Pointer to a statically allocated string describing the error code. If + * the error code is for some reason not recognized by the library, the + * string will be "Unknown error". */ extern const wimlib_tchar * wimlib_get_error_string(enum wimlib_error_code code); @@ -3678,6 +3679,8 @@ wimlib_resolve_image(WIMStruct *wim, const wimlib_tchar *image_name_or_num); /** + * @ingroup G_general + * * Sets the file to which the library will print error and warning messages. * * This version of the function takes a C library FILE * opened for @@ -3695,6 +3698,8 @@ extern int wimlib_set_error_file(FILE *fp); /** + * @ingroup G_general + * * Sets the path to the file to which the library will print error and warning * messages. The library will open this file for appending. * @@ -4279,144 +4284,6 @@ wimlib_write_to_fd(WIMStruct *wim, * @{ */ -/** Header for compression parameters to pass to wimlib_create_compressor() or - * wimlib_set_default_compressor_params(). */ -struct wimlib_compressor_params_header { - /** Size of the parameters, in bytes. */ - uint32_t size; -}; - -/** Header for decompression parameters to pass to wimlib_create_decompressor() - * or wimlib_set_default_decompressor_params() */ -struct wimlib_decompressor_params_header { - /** Size of the parameters, in bytes. */ - uint32_t size; -}; - -/** LZX compression parameters that can optionally be passed to - * wimlib_create_compressor() with the compression type - * ::WIMLIB_COMPRESSION_TYPE_LZX. */ -struct wimlib_lzx_compressor_params { - /** hdr.size Must be set to the size of this structure, in bytes. */ - struct wimlib_compressor_params_header hdr; - - /** Relatively fast LZX compression algorithm with a decent compression - * ratio. */ -#define WIMLIB_LZX_ALGORITHM_FAST 0 - - /** Slower LZX compression algorithm that provides a better compression - * ratio. This is the default. */ -#define WIMLIB_LZX_ALGORITHM_SLOW 1 - - /** Algorithm to use to perform the compression: either - * ::WIMLIB_LZX_ALGORITHM_FAST or ::WIMLIB_LZX_ALGORITHM_SLOW. The - * format is still LZX; this refers to the method the code will use to - * perform LZX-compatible compression. */ - uint32_t algorithm : 3; - - /** If set to 1, the default parameters for the specified algorithm are - * used rather than the ones specified in the following union. */ - uint32_t use_defaults : 1; - - union { - /** Parameters for the fast algorithm. */ - struct wimlib_lzx_fast_params { - uint32_t fast_reserved1[10]; - } fast; - - /** Parameters for the "slow" algorithm. */ - struct wimlib_lzx_slow_params { - /** If set to 1, the compressor can output length 2 - * matches. If set 0, the compressor can only output - * matches of length 3 or greater. Suggested value: 1 - */ - uint32_t use_len2_matches : 1; - - uint32_t slow_reserved1 : 31; - - /** Matches with length (in bytes) greater than or equal - * to this value are immediately taken without spending - * time on minimum-cost measurements. Suggested value: - * 32. */ - uint32_t nice_match_length; - - /** Number of passes to compute a match/literal sequence - * for each LZX block. This is for an iterative - * algorithm that attempts to minimize the cost of the - * match/literal sequence by using a cost model provided - * by the previous iteration. Must be at least 1. - * Suggested value: 2. */ - uint32_t num_optim_passes; - - /** Reserved; set to 0. */ - uint32_t slow_reserved_blocksplit; - - /** Maximum depth to search for matches at each - * position. Suggested value: 50. */ - uint32_t max_search_depth; - - /* Note: max_matches_per_pos has been removed and no - * longer has any effect. */ - - uint32_t slow_reserved2[3]; - - /** Assumed cost of a main symbol with zero frequency. - * Must be at least 1 and no more than 16. Suggested - * value: 15. */ - uint8_t main_nostat_cost; - - /** Assumed cost of a length symbol with zero frequency. - * Must be at least 1 and no more than 16. Suggested - * value: 15. */ - uint8_t len_nostat_cost; - - /** Assumed cost of an aligned symbol with zero - * frequency. Must be at least 1 and no more than 8. - * Suggested value: 7. */ - uint8_t aligned_nostat_cost; - - uint8_t slow_reserved3[5]; - } slow; - } alg_params; -}; - -/** LZMS compression parameters that can optionally be passed to - * wimlib_create_compressor() with the compression type - * ::WIMLIB_COMPRESSION_TYPE_LZMS. */ -struct wimlib_lzms_compressor_params { - /** hdr.size Must be set to the size of this structure, in bytes. */ - struct wimlib_compressor_params_header hdr; - - /** Minimum match length to output. This must be at least 2. Suggested - * value: 2 */ - uint32_t min_match_length; - - /** Maximum match length to output. This must be at least @p - * min_match_length. Suggested value: @p UINT32_MAX. */ - uint32_t max_match_length; - - /** Matches with length (in bytes) greater than or equal to this value - * are immediately taken without spending time on minimum-cost - * measurements. The minimum of @p max_match_length and @p - * nice_match_length may not exceed 65536. Suggested value: 32. */ - uint32_t nice_match_length; - - /** Maximum depth to search for matches at each position. Suggested - * value: 50. */ - uint32_t max_search_depth; - - /* Note: max_matches_per_pos has been removed and no longer has any - * effect. */ - - uint32_t reserved1; - - /** Length of the array for the near-optimal LZ parsing algorithm. This - * must be at least 1. Suggested value: 1024. */ - uint32_t optim_array_length; - - uint64_t reserved2[4]; -}; - /** Opaque compressor handle. */ struct wimlib_compressor; @@ -4424,41 +4291,40 @@ struct wimlib_compressor; struct wimlib_decompressor; /** - * Set the default compression parameters for the specified compression type. - * This will affect both explicit and library-internal calls to + * Set the default compression level for the specified compression type. This + * will affect both explicit and library-internal calls to * wimlib_create_compressor(). * * @param ctype - * Compression type for which to set the default compression parameters. - * @param params - * Compression-type specific parameters. This may be @c NULL, in which - * case the "default default" parameters are restored. + * Compression type for which to set the default compression level, as one + * of the ::wimlib_compression_type constants. Or, if this is the special + * value -1, the default compression levels for all known compression types + * will be set. + * @param compression_level + * The default compression level to set. If 0, the "default default" level + * is restored. Otherwise, a higher value indicates higher compression. + * The values are scaled so that 10 is low compression, 50 is medium + * compression, and 100 is high compression. * * @return 0 on success; nonzero on error. * * @retval ::WIMLIB_ERR_INVALID_COMPRESSION_TYPE - * @p ctype was not a supported compression type. - * @retval ::WIMLIB_ERR_INVALID_PARAM - * @p params were invalid. - * @retval ::WIMLIB_ERR_NOMEM - * Not enough memory to duplicate the parameters (perhaps @c params->size - * was invalid). + * @p ctype was neither a supported compression type nor -1. */ extern int -wimlib_set_default_compressor_params(enum wimlib_compression_type ctype, - const struct wimlib_compressor_params_header *params); +wimlib_set_default_compression_level(int ctype, unsigned int compression_level); /** * Returns the approximate number of bytes needed to allocate a compressor with * wimlib_create_compressor() for the specified compression type, block size, - * and parameters. @p params may be @c NULL, in which case the current default - * parameters for @p ctype are used. Returns 0 if the compression type or - * parameters are invalid. + * and compression level. @p compression_level may be 0, in which case the + * current default compression level for @p ctype is used. Returns 0 if the + * compression type is invalid. */ extern uint64_t wimlib_get_compressor_needed_memory(enum wimlib_compression_type ctype, size_t max_block_size, - const struct wimlib_compressor_params_header *params); + unsigned int compression_level); /** * Allocate a compressor for the specified compression type using the specified @@ -4471,12 +4337,11 @@ wimlib_get_compressor_needed_memory(enum wimlib_compression_type ctype, * Maximum block size to support. The exact meaning and allowed values for * this parameter depend on the compression type, but it at least specifies * the maximum allowed value for @p uncompressed_size to wimlib_compress(). - * @param extra_params - * An optional pointer to extra compressor parameters for the specified - * compression type. For LZX, a pointer to ::wimlib_lzx_compressor_params - * may be specified here. For LZMS, a pointer to - * ::wimlib_lzms_compressor_params may be specified here. If left @c NULL, - * the default parameters are used. + * @param compression_level + * The compression level to use. If 0, the default compression level is + * used. Otherwise, a higher value indicates higher compression. The + * values are scaled so that 10 is low compression, 50 is medium + * compression, and 100 is high compression. * @param compressor_ret * A location into which to return the pointer to the allocated compressor, * which can be used for any number of calls to wimlib_compress() before @@ -4487,14 +4352,14 @@ wimlib_get_compressor_needed_memory(enum wimlib_compression_type ctype, * @retval ::WIMLIB_ERR_INVALID_COMPRESSION_TYPE * @p ctype was not a supported compression type. * @retval ::WIMLIB_ERR_INVALID_PARAM - * The compression parameters were invalid. + * The compressor does not support the specified maximum block size. * @retval ::WIMLIB_ERR_NOMEM * Insufficient memory to allocate the compressor. */ extern int wimlib_create_compressor(enum wimlib_compression_type ctype, size_t max_block_size, - const struct wimlib_compressor_params_header *extra_params, + unsigned int compression_level, struct wimlib_compressor **compressor_ret); /** @@ -4530,29 +4395,6 @@ wimlib_compress(const void *uncompressed_data, size_t uncompressed_size, extern void wimlib_free_compressor(struct wimlib_compressor *compressor); -/** - * Set the default decompression parameters for the specified compression type. - * This will affect both explicit and library-internal calls to - * wimlib_create_decompressor(). - * - * @param ctype - * Compression type for which to set the default decompression parameters. - * @param params - * Compression-type specific parameters. This may be @c NULL, in which - * case the "default default" parameters are restored. - * - * @return 0 on success; nonzero on error. - * - * @retval ::WIMLIB_ERR_INVALID_COMPRESSION_TYPE - * @p ctype was not a supported compression type. - * @retval ::WIMLIB_ERR_NOMEM - * Not enough memory to duplicate the parameters (perhaps @c params->size - * was invalid). - */ -extern int -wimlib_set_default_decompressor_params(enum wimlib_compression_type ctype, - const struct wimlib_decompressor_params_header *params); - /** * Allocate a decompressor for the specified compression type using the * specified parameters. This function is part of wimlib's compression API; it @@ -4565,9 +4407,6 @@ wimlib_set_default_decompressor_params(enum wimlib_compression_type ctype, * this parameter depend on the compression type, but it at least specifies * the maximum allowed value for @p uncompressed_size to * wimlib_decompress(). - * @param extra_params - * An optional pointer to extra decompressor parameters for the specified - * compression type. If @c NULL, the default parameters are used. * @param decompressor_ret * A location into which to return the pointer to the allocated * decompressor, which can be used for any number of calls to @@ -4577,15 +4416,12 @@ wimlib_set_default_decompressor_params(enum wimlib_compression_type ctype, * * @retval ::WIMLIB_ERR_INVALID_COMPRESSION_TYPE * @p ctype was not a supported compression type. - * @retval ::WIMLIB_ERR_INVALID_PARAM - * The decompression parameters were invalid. * @retval ::WIMLIB_ERR_NOMEM * Insufficient memory to allocate the decompressor. */ extern int wimlib_create_decompressor(enum wimlib_compression_type ctype, size_t max_block_size, - const struct wimlib_decompressor_params_header *extra_params, struct wimlib_decompressor **decompressor_ret); /**