| /* |
| * SpanDSP - a series of DSP components for telephony |
| * |
| * private/v42bis.h |
| * |
| * Written by Steve Underwood <steveu@coppice.org> |
| * |
| * Copyright (C) 2005 Steve Underwood |
| * |
| * All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU Lesser General Public License version 2.1, |
| * as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| */ |
| |
| #if !defined(_SPANDSP_PRIVATE_V42BIS_H_) |
| #define _SPANDSP_PRIVATE_V42BIS_H_ |
| |
| /*! |
| V.42bis dictionary node. |
| Note that 0 is not a valid node to point to (0 is always a control code), so 0 is used |
| as a "no such value" marker in this structure. |
| */ |
| typedef struct |
| { |
| /*! \brief The value of the octet represented by the current dictionary node */ |
| uint8_t node_octet; |
| /*! \brief The parent of this node */ |
| uint16_t parent; |
| /*! \brief The first child of this node */ |
| uint16_t child; |
| /*! \brief The next node at the same depth */ |
| uint16_t next; |
| } v42bis_dict_node_t; |
| |
| /*! |
| V.42bis compression or decompression. This defines the working state for a single instance |
| of V.42bis compression or decompression. |
| */ |
| typedef struct |
| { |
| /*! \brief Compression enabled. */ |
| int v42bis_parm_p0; |
| /*! \brief Compression mode. */ |
| int compression_mode; |
| /*! \brief Callback function to handle output data. */ |
| put_msg_func_t handler; |
| /*! \brief An opaque pointer passed in calls to the data handler. */ |
| void *user_data; |
| /*! \brief The maximum amount to be passed to the data handler. */ |
| int max_output_len; |
| |
| /*! \brief TRUE if we are in transparent (i.e. uncompressable) mode */ |
| int transparent; |
| /*! \brief Next empty dictionary entry */ |
| uint16_t v42bis_parm_c1; |
| /*! \brief Current codeword size */ |
| uint16_t v42bis_parm_c2; |
| /*! \brief Threshold for codeword size change */ |
| uint16_t v42bis_parm_c3; |
| /*! \brief The current update point in the dictionary */ |
| uint16_t update_at; |
| /*! \brief The last entry matched in the dictionary */ |
| uint16_t last_matched; |
| /*! \brief The last entry added to the dictionary */ |
| uint16_t last_added; |
| /*! \brief Total number of codewords in the dictionary */ |
| int v42bis_parm_n2; |
| /*! \brief Maximum permitted string length */ |
| int v42bis_parm_n7; |
| /*! \brief The dictionary */ |
| v42bis_dict_node_t dict[V42BIS_MAX_CODEWORDS]; |
| |
| /*! \brief The octet string in progress */ |
| uint8_t string[V42BIS_MAX_STRING_SIZE]; |
| /*! \brief The current length of the octet string in progress */ |
| int string_length; |
| /*! \brief The amount of the octet string in progress which has already |
| been flushed out of the buffer */ |
| int flushed_length; |
| |
| /*! \brief Compression performance metric */ |
| uint16_t compression_performance; |
| |
| /*! \brief Outgoing bit buffer (compression), or incoming bit buffer (decompression) */ |
| uint32_t bit_buffer; |
| /*! \brief Outgoing bit count (compression), or incoming bit count (decompression) */ |
| int bit_count; |
| |
| /*! \brief The output composition buffer */ |
| uint8_t output_buf[V42BIS_MAX_OUTPUT_LENGTH]; |
| /*! \brief The length of the contents of the output composition buffer */ |
| int output_octet_count; |
| |
| /*! \brief The current value of the escape code */ |
| uint8_t escape_code; |
| /*! \brief TRUE if we just hit an escape code, and are waiting for the following octet */ |
| int escaped; |
| } v42bis_comp_state_t; |
| |
| /*! |
| V.42bis compression/decompression descriptor. This defines the working state for a |
| single instance of V.42bis compress/decompression. |
| */ |
| struct v42bis_state_s |
| { |
| /*! \brief Compression state. */ |
| v42bis_comp_state_t compress; |
| /*! \brief Decompression state. */ |
| v42bis_comp_state_t decompress; |
| |
| /*! \brief Error and flow logging control */ |
| }; |
| |
| #endif |
| /*- End of file ------------------------------------------------------------*/ |