1 // SPDX-License-Identifier: 0BSD 2 3 /////////////////////////////////////////////////////////////////////////////// 4 // 5 /// \file filter_common.h 6 /// \brief Filter-specific stuff common for both encoder and decoder 7 // 8 // Author: Lasse Collin 9 // 10 /////////////////////////////////////////////////////////////////////////////// 11 12 #ifndef LZMA_FILTER_COMMON_H 13 #define LZMA_FILTER_COMMON_H 14 15 #include "common.h" 16 17 18 /// Both lzma_filter_encoder and lzma_filter_decoder begin with these members. 19 typedef struct { 20 /// Filter ID 21 lzma_vli id; 22 23 /// Initializes the filter encoder and calls lzma_next_filter_init() 24 /// for filters + 1. 25 lzma_init_function init; 26 27 /// Calculates memory usage of the encoder. If the options are 28 /// invalid, UINT64_MAX is returned. 29 uint64_t (*memusage)(const void *options); 30 31 } lzma_filter_coder; 32 33 34 typedef const lzma_filter_coder *(*lzma_filter_find)(lzma_vli id); 35 36 37 extern lzma_ret lzma_validate_chain(const lzma_filter *filters, size_t *count); 38 39 40 extern lzma_ret lzma_raw_coder_init( 41 lzma_next_coder *next, const lzma_allocator *allocator, 42 const lzma_filter *filters, 43 lzma_filter_find coder_find, bool is_encoder); 44 45 46 extern uint64_t lzma_raw_coder_memusage(lzma_filter_find coder_find, 47 const lzma_filter *filters); 48 49 50 #endif 51