comparison spandsp-0.0.6pre17/src/spandsp/private/v42bis.h @ 4:26cd8f1ef0b1

import spandsp-0.0.6pre17
author Peter Meerwald <pmeerw@cosy.sbg.ac.at>
date Fri, 25 Jun 2010 15:50:58 +0200
parents
children
comparison
equal deleted inserted replaced
3:c6c5a16ce2f2 4:26cd8f1ef0b1
1 /*
2 * SpanDSP - a series of DSP components for telephony
3 *
4 * private/v42bis.h
5 *
6 * Written by Steve Underwood <steveu@coppice.org>
7 *
8 * Copyright (C) 2005 Steve Underwood
9 *
10 * All rights reserved.
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU Lesser General Public License version 2.1,
14 * as published by the Free Software Foundation.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Lesser General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 *
25 * $Id: v42bis.h,v 1.1 2008/11/15 14:43:08 steveu Exp $
26 */
27
28 #if !defined(_SPANDSP_PRIVATE_V42BIS_H_)
29 #define _SPANDSP_PRIVATE_V42BIS_H_
30
31 /*!
32 V.42bis dictionary node.
33 */
34 typedef struct
35 {
36 /*! \brief The prior code for each defined code. */
37 uint16_t parent_code;
38 /*! \brief The number of leaf nodes this node has */
39 int16_t leaves;
40 /*! \brief This leaf octet for each defined code. */
41 uint8_t node_octet;
42 /*! \brief Bit map of the children which exist */
43 uint32_t children[8];
44 } v42bis_dict_node_t;
45
46 /*!
47 V.42bis compression. This defines the working state for a single instance
48 of V.42bis compression.
49 */
50 typedef struct
51 {
52 /*! \brief Compression mode. */
53 int compression_mode;
54 /*! \brief Callback function to handle received frames. */
55 v42bis_frame_handler_t handler;
56 /*! \brief An opaque pointer passed in calls to frame_handler. */
57 void *user_data;
58 /*! \brief The maximum frame length allowed */
59 int max_len;
60
61 uint32_t string_code;
62 uint32_t latest_code;
63 int string_length;
64 uint32_t output_bit_buffer;
65 int output_bit_count;
66 int output_octet_count;
67 uint8_t output_buf[1024];
68 v42bis_dict_node_t dict[V42BIS_MAX_CODEWORDS];
69 /*! \brief TRUE if we are in transparent (i.e. uncompressable) mode */
70 int transparent;
71 int change_transparency;
72 /*! \brief IIR filter state, used in assessing compressibility. */
73 int compressibility_filter;
74 int compressibility_persistence;
75
76 /*! \brief Next empty dictionary entry */
77 uint32_t v42bis_parm_c1;
78 /*! \brief Current codeword size */
79 int v42bis_parm_c2;
80 /*! \brief Threshold for codeword size change */
81 uint32_t v42bis_parm_c3;
82
83 /*! \brief Mark that this is the first octet/code to be processed */
84 int first;
85 uint8_t escape_code;
86 } v42bis_compress_state_t;
87
88 /*!
89 V.42bis decompression. This defines the working state for a single instance
90 of V.42bis decompression.
91 */
92 typedef struct
93 {
94 /*! \brief Callback function to handle decompressed data. */
95 v42bis_data_handler_t handler;
96 /*! \brief An opaque pointer passed in calls to data_handler. */
97 void *user_data;
98 /*! \brief The maximum decompressed data block length allowed */
99 int max_len;
100
101 uint32_t old_code;
102 uint32_t last_old_code;
103 uint32_t input_bit_buffer;
104 int input_bit_count;
105 int octet;
106 int last_length;
107 int output_octet_count;
108 uint8_t output_buf[1024];
109 v42bis_dict_node_t dict[V42BIS_MAX_CODEWORDS];
110 /*! \brief TRUE if we are in transparent (i.e. uncompressable) mode */
111 int transparent;
112
113 int last_extra_octet;
114
115 /*! \brief Next empty dictionary entry */
116 uint32_t v42bis_parm_c1;
117 /*! \brief Current codeword size */
118 int v42bis_parm_c2;
119 /*! \brief Threshold for codeword size change */
120 uint32_t v42bis_parm_c3;
121
122 /*! \brief Mark that this is the first octet/code to be processed */
123 int first;
124 uint8_t escape_code;
125 int escaped;
126 } v42bis_decompress_state_t;
127
128 /*!
129 V.42bis compression/decompression descriptor. This defines the working state for a
130 single instance of V.42bis compress/decompression.
131 */
132 struct v42bis_state_s
133 {
134 /*! \brief V.42bis data compression directions. */
135 int v42bis_parm_p0;
136
137 /*! \brief Compression state. */
138 v42bis_compress_state_t compress;
139 /*! \brief Decompression state. */
140 v42bis_decompress_state_t decompress;
141
142 /*! \brief Maximum codeword size (bits) */
143 int v42bis_parm_n1;
144 /*! \brief Total number of codewords */
145 uint32_t v42bis_parm_n2;
146 /*! \brief Maximum string length */
147 int v42bis_parm_n7;
148 };
149
150 #endif
151 /*- End of file ------------------------------------------------------------*/

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.