]> wimlib.net Git - wimlib/blobdiff - include/wimlib.h
Merge LZX compressor updates
[wimlib] / include / wimlib.h
index 7e89f4a7676076027da8c4a87fdba6f54bd3fff3..40192fe414e78d6bcf76159478050fc45383f662 100644 (file)
@@ -1501,12 +1501,7 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour
  * already implied for wimlib_overwrite().  */
 #define WIMLIB_WRITE_FLAG_STREAMS_OK                   0x00000400
 
-/** Use the slow LZX compression algorithm (rather than the default fast LZX
- * compression algorithm) to try to achieve a higher compression ratio.  Only
- * has an effect if the WIM uses LZX compression; not to be confused with "fast"
- * (XPRESS) compression.  This can be combined with
- * ::WIMLIB_WRITE_FLAG_RECOMPRESS.  */
-#define WIMLIB_WRITE_FLAG_COMPRESS_SLOW                        0x00000800
+#define WIMLIB_WRITE_FLAG_RESERVED                     0x00000800
 
 /** @} */
 /** @ingroup G_general
@@ -1692,11 +1687,9 @@ struct wimlib_lzx_params {
 
                        uint32_t slow_reserved1 : 31;
 
-                       /** This is the maximum match length to return from the
-                        * binary tree match-finder.  Any match reaching this
-                        * limit is still extended as far as possible.  Must be
-                        * at least 3 and no more than 257.  Suggested value:
-                        * 32.  */
+                       /** Matches with length (in bytes) longer than this
+                        * value are immediately taken without spending time on
+                        * minimum-cost measurements.  Suggested value: 32.  */
                        uint32_t num_fast_bytes;
 
                        /** Number of passes to compute a match/literal sequence
@@ -1704,18 +1697,26 @@ struct wimlib_lzx_params {
                         * 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: 3.  */
+                        * Suggested value: 2.  */
                        uint32_t num_optim_passes;
 
                        /** The number of times to attempt to recursively split
                         * each LZX block.  Up to (2**(num_split_passes)
                         * sub-blocks can be created for a given input.  This
                         * parameter can be 0, in which case the full input is
-                        * always output as one block.  Suggested value: 3.
+                        * always output as one block.  Suggested value: 0.
                         */
                        uint32_t num_split_passes;
 
-                       uint32_t slow_reserved2[4];
+                       /** Maximum depth to search for matches at each
+                        * position.  Suggested value: 50.  */
+                       uint32_t max_search_depth;
+
+                       /** Maximum number of potentially good matches to
+                        * consider for each position.  Suggested value: 3.  */
+                       uint32_t max_matches_per_pos;
+
+                       uint32_t slow_reserved2[2];
 
                        /** Assumed cost of a main symbol with zero frequency.
                         * Must be at least 1 and no more than 16.  Suggested
@@ -2374,6 +2375,8 @@ wimlib_extract_image_from_pipe(int pipe_fd,
  * Extracts the XML data of a WIM file to a file stream.  Every WIM file
  * includes a string of XML that describes the images contained in the WIM.
  *
+ * See wimlib_get_xml_data() to read the XML data into memory instead.
+ *
  * @param wim
  *     Pointer to the ::WIMStruct for a WIM file, which does not necessarily
  *     have to be standalone (e.g. it could be part of a split WIM).
@@ -2498,6 +2501,36 @@ wimlib_get_image_name(const WIMStruct *wim, int image);
 extern int
 wimlib_get_wim_info(WIMStruct *wim, struct wimlib_wim_info *info);
 
+/**
+ * @ingroup G_wim_information
+ *
+ * Read the XML data of a WIM file into an in-memory buffer.  Every WIM file
+ * includes a string of XML that describes the images contained in the WIM.
+ *
+ * See wimlib_extract_xml_data() to extract the XML data to a file stream
+ * instead.
+ *
+ * @param wim
+ *     Pointer to the ::WIMStruct for a WIM file, which does not necessarily
+ *     have to be standalone (e.g. it could be part of a split WIM).
+ * @param buf_ret
+ *     On success, a pointer to an allocated buffer containing the raw UTF16-LE
+ *     XML data is written to this location.
+ * @param bufsize_ret
+ *     The size of the XML data in bytes is written to this location.
+ *
+ * @return 0 on success; nonzero on error.
+ * @retval ::WIMLIB_ERR_INVALID_PARAM
+ *     @p wim is not a ::WIMStruct that was created by wimlib_open_wim(), or
+ *     @p buf_ret or @p bufsize_ret was @c NULL.
+ * @retval ::WIMLIB_ERR_NOMEM
+ * @retval ::WIMLIB_ERR_READ
+ * @retval ::WIMLIB_ERR_UNEXPECTED_END_OF_FILE
+ *     Failed to read the XML data from the WIM.
+ */
+extern int
+wimlib_get_xml_data(WIMStruct *wim, void **buf_ret, size_t *bufsize_ret);
+
 /**
  * @ingroup G_general
  *
@@ -2710,7 +2743,8 @@ wimlib_join(const wimlib_tchar * const *swms,
  * format and therefore requires (@p chunk_size <= 32768).
  */
 extern unsigned
-wimlib_lzx_compress(const void *chunk, unsigned chunk_size, void *out);
+wimlib_lzx_compress(const void *chunk, unsigned chunk_size, void *out)
+                       _wimlib_deprecated;
 
 /**
  * @ingroup G_compression
@@ -2732,8 +2766,7 @@ wimlib_lzx_compress2(const void *chunk, unsigned chunk_size, void *out,
  * purpose.
  *
  * @param params
- *     Compression parameters to use, or @c NULL to use the default algorithm
- *     and parameters.
+ *     Compression parameters to use, or @c NULL to use the default parameters.
  *
  * @param ctx_ret
  *     A pointer to either @c NULL or an existing ::wimlib_lzx_context.  If
@@ -2753,15 +2786,6 @@ extern int
 wimlib_lzx_alloc_context(const struct wimlib_lzx_params *params,
                         struct wimlib_lzx_context **ctx_pp);
 
-/**
- * @ingroup G_compression
- *
- * Free the specified LZX compression context, allocated with
- * wimlib_lzx_alloc_context().
- */
-extern void
-wimlib_lzx_free_context(struct wimlib_lzx_context *ctx);
-
 /**
  * @ingroup G_compression
  *
@@ -2793,6 +2817,44 @@ extern int
 wimlib_lzx_decompress(const void *compressed_data, unsigned compressed_len,
                      void *uncompressed_data, unsigned uncompressed_len);
 
+/**
+ * @ingroup G_compression
+ *
+ * Free the specified LZX compression context, allocated with
+ * wimlib_lzx_alloc_context().
+ */
+extern void
+wimlib_lzx_free_context(struct wimlib_lzx_context *ctx);
+
+/**
+ * @ingroup G_compression
+ *
+ * Set the global default LZX compression parameters.
+ *
+ * @param params
+ *     The LZX compression parameters to set.  These default parameters will be
+ *     used by any calls to wimlib_lzx_alloc_context() with @c NULL LZX
+ *     parameters specified, as well as by any future compression performed by
+ *     the library itself.  Passing @p NULL here resets the default LZX
+ *     parameters to their original value.
+ *
+ * @return 0 on success; nonzero on error.
+ *
+ * @retval ::WIMLIB_ERR_INVALID_PARAM
+ *     The compression parameters were invalid.
+ */
+extern int
+wimlib_lzx_set_default_params(const struct wimlib_lzx_params *params);
+
+/**
+ * @ingroup G_compression
+ *
+ * Free the specified LZX compression context, allocated with
+ * wimlib_lzx_alloc_context().
+ */
+extern void
+wimlib_lzx_free_context(struct wimlib_lzx_context *ctx);
+
 
 /**
  * @ingroup G_mounting_wim_images