1/**
2 * \file        lzma/delta.h
3 * \brief       Delta filter
4 * \note        Never include this file directly. Use <lzma.h> instead.
5 */
6
7/*
8 * Author: Lasse Collin
9 *
10 * This file has been put into the public domain.
11 * You can do whatever you want with this file.
12 */
13
14#ifndef LZMA_H_INTERNAL
15#	error Never include this file directly. Use <lzma.h> instead.
16#endif
17
18
19/**
20 * \brief       Filter ID
21 *
22 * Filter ID of the Delta filter. This is used as lzma_filter.id.
23 */
24#define LZMA_FILTER_DELTA       LZMA_VLI_C(0x03)
25
26
27/**
28 * \brief       Type of the delta calculation
29 *
30 * Currently only byte-wise delta is supported. Other possible types could
31 * be, for example, delta of 16/32/64-bit little/big endian integers, but
32 * these are not currently planned since byte-wise delta is almost as good.
33 */
34typedef enum {
35	LZMA_DELTA_TYPE_BYTE
36} lzma_delta_type;
37
38
39/**
40 * \brief       Options for the Delta filter
41 *
42 * These options are needed by both encoder and decoder.
43 */
44typedef struct {
45	/** For now, this must always be LZMA_DELTA_TYPE_BYTE. */
46	lzma_delta_type type;
47
48	/**
49	 * \brief       Delta distance
50	 *
51	 * With the only currently supported type, LZMA_DELTA_TYPE_BYTE,
52	 * the distance is as bytes.
53	 *
54	 * Examples:
55	 *  - 16-bit stereo audio: distance = 4 bytes
56	 *  - 24-bit RGB image data: distance = 3 bytes
57	 */
58	uint32_t dist;
59
60	/**
61	 * \brief       Minimum value for lzma_options_delta.dist.
62	 */
63#	define LZMA_DELTA_DIST_MIN 1
64
65	/**
66	 * \brief       Maximum value for lzma_options_delta.dist.
67	 */
68#	define LZMA_DELTA_DIST_MAX 256
69
70	/*
71	 * Reserved space to allow possible future extensions without
72	 * breaking the ABI. You should not touch these, because the names
73	 * of these variables may change. These are and will never be used
74	 * when type is LZMA_DELTA_TYPE_BYTE, so it is safe to leave these
75	 * uninitialized.
76	 */
77
78	/** \private     Reserved member. */
79	uint32_t reserved_int1;
80
81	/** \private     Reserved member. */
82	uint32_t reserved_int2;
83
84	/** \private     Reserved member. */
85	uint32_t reserved_int3;
86
87	/** \private     Reserved member. */
88	uint32_t reserved_int4;
89
90	/** \private     Reserved member. */
91	void *reserved_ptr1;
92
93	/** \private     Reserved member. */
94	void *reserved_ptr2;
95
96} lzma_options_delta;
97