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);
/**