lzma_properties_encode(const lzma_filter *filter, uint8_t *props) { const lzma_filter_encoder *const fe = encoder_find(filter->id); if (fe == NULL) return LZMA_PROG_ERROR; if (fe->props_encode == NULL) return LZMA_OK; return fe->props_encode(filter->options, props); }
lzma_properties_size(uint32_t *size, const lzma_filter *filter) { const lzma_filter_encoder *const fe = encoder_find(filter->id); if (fe == NULL) { // Unknown filter - if the Filter ID is a proper VLI, // return LZMA_OPTIONS_ERROR instead of LZMA_PROG_ERROR, // because it's possible that we just don't have support // compiled in for the requested filter. return filter->id <= LZMA_VLI_MAX ? LZMA_OPTIONS_ERROR : LZMA_PROG_ERROR; } if (fe->props_size_get == NULL) { // No props_size_get() function, use props_size_fixed. *size = fe->props_size_fixed; return LZMA_OK; } return fe->props_size_get(size, filter->options); }
lzma_chunk_size(const lzma_filter *filters) { lzma_vli max = 0; for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { const lzma_filter_encoder *const fe = encoder_find(filters[i].id); if (fe->chunk_size != NULL) { const lzma_vli size = fe->chunk_size(filters[i].options); if (size == LZMA_VLI_UNKNOWN) return LZMA_VLI_UNKNOWN; if (size > max) max = size; } } return max; }
extern uint64_t lzma_mt_block_size(const lzma_filter *filters) { uint64_t max = 0; for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { const lzma_filter_encoder *const fe = encoder_find(filters[i].id); if (fe->block_size != NULL) { const uint64_t size = fe->block_size(filters[i].options); if (size == 0) return 0; if (size > max) max = size; } } return max; }
lzma_filter_encoder_is_supported(lzma_vli id) { return encoder_find(id) != NULL; }