spandsp  0.0.6
bitstream.h
Go to the documentation of this file.
1 /*
2  * SpanDSP - a series of DSP components for telephony
3  *
4  * bitstream.h - Bitstream composition and decomposition routines.
5  *
6  * Written by Steve Underwood <steveu@coppice.org>
7  *
8  * Copyright (C) 2006 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 
26 /*! \file */
27 
28 #if !defined(_SPANDSP_BITSTREAM_H_)
29 #define _SPANDSP_BITSTREAM_H_
30 
31 /*! \page bitstream_page Bitstream composition and decomposition
32 \section bitstream_page_sec_1 What does it do?
33 
34 \section bitstream_page_sec_2 How does it work?
35 */
36 
37 /*! Bitstream handler state */
39 
40 #if defined(__cplusplus)
41 extern "C"
42 {
43 #endif
44 
45 /*! \brief Put a chunk of bits into the output buffer.
46  \param s A pointer to the bitstream context.
47  \param c A pointer to the bitstream output buffer.
48  \param value The value to be pushed into the output buffer.
49  \param bits The number of bits of value to be pushed. 1 to 25 bits is valid. */
50 SPAN_DECLARE(void) bitstream_put(bitstream_state_t *s, uint8_t **c, uint32_t value, int bits);
51 
52 /*! \brief Get a chunk of bits from the input buffer.
53  \param s A pointer to the bitstream context.
54  \param c A pointer to the bitstream input buffer.
55  \param bits The number of bits of value to be grabbed. 1 to 25 bits is valid.
56  \return The value retrieved from the input buffer. */
57 SPAN_DECLARE(uint32_t) bitstream_get(bitstream_state_t *s, const uint8_t **c, int bits);
58 
59 /*! \brief Emit any residual bits to the output buffer, without actually flushing them.
60  This is useful for getting the buffer fully up to date, ready for things
61  like CRC calculations, while allowing bitstream_put() to be used to continue
62  the message later.
63  \param s A pointer to the bitstream context.
64  \param c A pointer to the bitstream output buffer. */
65 SPAN_DECLARE(void) bitstream_emit(bitstream_state_t *s, uint8_t **c);
66 
67 /*! \brief Flush any residual bits to the output buffer.
68  \param s A pointer to the bitstream context.
69  \param c A pointer to the bitstream output buffer. */
70 SPAN_DECLARE(void) bitstream_flush(bitstream_state_t *s, uint8_t **c);
71 
72 /*! \brief Initialise a bitstream context.
73  \param s A pointer to the bitstream context.
74  \param lsb_first TRUE if the bit stream is LSB first, else its MSB first.
75  \return A pointer to the bitstream context. */
76 SPAN_DECLARE(bitstream_state_t *) bitstream_init(bitstream_state_t *s, int direction);
77 
78 SPAN_DECLARE(int) bitstream_release(bitstream_state_t *s);
79 
80 SPAN_DECLARE(int) bitstream_free(bitstream_state_t *s);
81 
82 #if defined(__cplusplus)
83 }
84 #endif
85 
86 #endif
87 /*- End of file ------------------------------------------------------------*/
one_bits32
int one_bits32(uint32_t x)
Find the number of set bits in a 32 bit word.
Definition: bit_operations.c:139
bitstream_emit
void bitstream_emit(bitstream_state_t *s, uint8_t **c)
Emit any residual bits to the output buffer, without actually flushing them. This is useful for getti...
Definition: bitstream.c:75
bitstream_flush
void bitstream_flush(bitstream_state_t *s, uint8_t **c)
Flush any residual bits to the output buffer.
Definition: bitstream.c:90
bit_reverse_4bytes
uint32_t bit_reverse_4bytes(uint32_t x)
Bit reverse each of the four bytes in a 32 bit word.
Definition: bit_operations.c:61
bitstream_state_s::bitstream
uint32_t bitstream
Definition: private/bitstream.h:33
bit_reverse32
uint32_t bit_reverse32(uint32_t x)
Bit reverse a 32 bit word.
Definition: bit_operations.c:51
bit_reverse16
uint16_t bit_reverse16(uint16_t x)
Bit reverse a 16 bit word.
Definition: bit_operations.c:42
bitstream_emit
void bitstream_emit(bitstream_state_t *s, uint8_t **c)
Emit any residual bits to the output buffer, without actually flushing them. This is useful for getti...
Definition: bitstream.c:75
bitstream_state_s::lsb_first
int lsb_first
Definition: private/bitstream.h:37
bitstream_get
uint32_t bitstream_get(bitstream_state_t *s, const uint8_t **c, int bits)
Get a chunk of bits from the input buffer.
Definition: bitstream.c:102
bitstream_flush
void bitstream_flush(bitstream_state_t *s, uint8_t **c)
Flush any residual bits to the output buffer.
Definition: bitstream.c:90
bitstream_get
uint32_t bitstream_get(bitstream_state_t *s, const uint8_t **c, int bits)
Get a chunk of bits from the input buffer.
Definition: bitstream.c:102
bitstream.h
bitstream_state_s
Definition: private/bitstream.h:31
bitstream_init
bitstream_state_t * bitstream_init(bitstream_state_t *s, int direction)
Initialise a bitstream context.
Definition: bitstream.c:131
bit_reverse
void bit_reverse(uint8_t to[], const uint8_t from[], int len)
Bit reverse each byte in a buffer.
Definition: bit_operations.c:79
bitstream_init
bitstream_state_t * bitstream_init(bitstream_state_t *s, int lsb_first)
Initialise a bitstream context.
Definition: bitstream.c:131
bitstream_put
void bitstream_put(bitstream_state_t *s, uint8_t **c, uint32_t value, int bits)
Put a chunk of bits into the output buffer.
Definition: bitstream.c:42
bitstream_put
void bitstream_put(bitstream_state_t *s, uint8_t **c, uint32_t value, int bits)
Put a chunk of bits into the output buffer.
Definition: bitstream.c:42
bitstream_state_s::residue
int residue
Definition: private/bitstream.h:35