~ubuntu-branches/ubuntu/trusty/sflphone/trusty

« back to all changes in this revision

Viewing changes to daemon/libs/pjproject-2.1.0/third_party/speex/include/speex/speex_bits.h

  • Committer: Package Import Robot
  • Author(s): Mark Purcell
  • Date: 2014-01-28 18:23:36 UTC
  • mfrom: (4.3.4 sid)
  • Revision ID: package-import@ubuntu.com-20140128182336-jrsv0k9u6cawc068
Tags: 1.3.0-1
* New upstream release 
  - Fixes "New Upstream Release" (Closes: #735846)
  - Fixes "Ringtone does not stop" (Closes: #727164)
  - Fixes "[sflphone-kde] crash on startup" (Closes: #718178)
  - Fixes "sflphone GUI crashes when call is hung up" (Closes: #736583)
* Build-Depends: ensure GnuTLS 2.6
  - libucommon-dev (>= 6.0.7-1.1), libccrtp-dev (>= 2.0.6-3)
  - Fixes "FTBFS Build-Depends libgnutls{26,28}-dev" (Closes: #722040)
* Fix "boost 1.49 is going away" unversioned Build-Depends: (Closes: #736746)
* Add Build-Depends: libsndfile-dev, nepomuk-core-dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright (C) 2002 Jean-Marc Valin */
 
2
/**
 
3
   @file speex_bits.h
 
4
   @brief Handles bit packing/unpacking
 
5
*/
 
6
/*
 
7
   Redistribution and use in source and binary forms, with or without
 
8
   modification, are permitted provided that the following conditions
 
9
   are met:
 
10
   
 
11
   - Redistributions of source code must retain the above copyright
 
12
   notice, this list of conditions and the following disclaimer.
 
13
   
 
14
   - Redistributions in binary form must reproduce the above copyright
 
15
   notice, this list of conditions and the following disclaimer in the
 
16
   documentation and/or other materials provided with the distribution.
 
17
   
 
18
   - Neither the name of the Xiph.org Foundation nor the names of its
 
19
   contributors may be used to endorse or promote products derived from
 
20
   this software without specific prior written permission.
 
21
   
 
22
   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
23
   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
24
   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
25
   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
 
26
   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 
27
   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 
28
   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 
29
   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 
30
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 
31
   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 
32
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
33
 
 
34
*/
 
35
 
 
36
#ifndef BITS_H
 
37
#define BITS_H
 
38
/** @defgroup SpeexBits SpeexBits: Bit-stream manipulations
 
39
 *  This is the structure that holds the bit-stream when encoding or decoding
 
40
 * with Speex. It allows some manipulations as well.
 
41
 *  @{
 
42
 */
 
43
 
 
44
#ifdef __cplusplus
 
45
extern "C" {
 
46
#endif
 
47
 
 
48
/** Bit-packing data structure representing (part of) a bit-stream. */
 
49
typedef struct SpeexBits {
 
50
   char *chars;   /**< "raw" data */
 
51
   int   nbBits;  /**< Total number of bits stored in the stream*/
 
52
   int   charPtr; /**< Position of the byte "cursor" */
 
53
   int   bitPtr;  /**< Position of the bit "cursor" within the current char */
 
54
   int   owner;   /**< Does the struct "own" the "raw" buffer (member "chars") */
 
55
   int   overflow;/**< Set to one if we try to read past the valid data */
 
56
   int   buf_size;/**< Allocated size for buffer */
 
57
   int   reserved1; /**< Reserved for future use */
 
58
   void *reserved2; /**< Reserved for future use */
 
59
} SpeexBits;
 
60
 
 
61
/** Initializes and allocates resources for a SpeexBits struct */
 
62
void speex_bits_init(SpeexBits *bits);
 
63
 
 
64
/** Initializes SpeexBits struct using a pre-allocated buffer*/
 
65
void speex_bits_init_buffer(SpeexBits *bits, void *buff, int buf_size);
 
66
 
 
67
/** Sets the bits in a SpeexBits struct to use data from an existing buffer (for decoding without copying data) */
 
68
void speex_bits_set_bit_buffer(SpeexBits *bits, void *buff, int buf_size);
 
69
 
 
70
/** Frees all resources associated to a SpeexBits struct. Right now this does nothing since no resources are allocated, but this could change in the future.*/
 
71
void speex_bits_destroy(SpeexBits *bits);
 
72
 
 
73
/** Resets bits to initial value (just after initialization, erasing content)*/
 
74
void speex_bits_reset(SpeexBits *bits);
 
75
 
 
76
/** Rewind the bit-stream to the beginning (ready for read) without erasing the content */
 
77
void speex_bits_rewind(SpeexBits *bits);
 
78
 
 
79
/** Initializes the bit-stream from the data in an area of memory */
 
80
void speex_bits_read_from(SpeexBits *bits, char *bytes, int len);
 
81
 
 
82
/** Append bytes to the bit-stream
 
83
 * 
 
84
 * @param bits Bit-stream to operate on
 
85
 * @param bytes pointer to the bytes what will be appended
 
86
 * @param len Number of bytes of append
 
87
 */
 
88
void speex_bits_read_whole_bytes(SpeexBits *bits, char *bytes, int len);
 
89
 
 
90
/** Write the content of a bit-stream to an area of memory
 
91
 * 
 
92
 * @param bits Bit-stream to operate on
 
93
 * @param bytes Memory location where to write the bits
 
94
 * @param max_len Maximum number of bytes to write (i.e. size of the "bytes" buffer)
 
95
 * @return Number of bytes written to the "bytes" buffer
 
96
*/
 
97
int speex_bits_write(SpeexBits *bits, char *bytes, int max_len);
 
98
 
 
99
/** Like speex_bits_write, but writes only the complete bytes in the stream. Also removes the written bytes from the stream */
 
100
int speex_bits_write_whole_bytes(SpeexBits *bits, char *bytes, int max_len);
 
101
 
 
102
/** Append bits to the bit-stream
 
103
 * @param bits Bit-stream to operate on
 
104
 * @param data Value to append as integer
 
105
 * @param nbBits number of bits to consider in "data"
 
106
 */
 
107
void speex_bits_pack(SpeexBits *bits, int data, int nbBits);
 
108
 
 
109
/** Interpret the next bits in the bit-stream as a signed integer
 
110
 *
 
111
 * @param bits Bit-stream to operate on
 
112
 * @param nbBits Number of bits to interpret
 
113
 * @return A signed integer represented by the bits read
 
114
 */
 
115
int speex_bits_unpack_signed(SpeexBits *bits, int nbBits);
 
116
 
 
117
/** Interpret the next bits in the bit-stream as an unsigned integer
 
118
 *
 
119
 * @param bits Bit-stream to operate on
 
120
 * @param nbBits Number of bits to interpret
 
121
 * @return An unsigned integer represented by the bits read
 
122
 */
 
123
unsigned int speex_bits_unpack_unsigned(SpeexBits *bits, int nbBits);
 
124
 
 
125
/** Returns the number of bytes in the bit-stream, including the last one even if it is not "full"
 
126
 *
 
127
 * @param bits Bit-stream to operate on
 
128
 * @return Number of bytes in the stream
 
129
 */
 
130
int speex_bits_nbytes(SpeexBits *bits);
 
131
 
 
132
/** Same as speex_bits_unpack_unsigned, but without modifying the cursor position 
 
133
 * 
 
134
 * @param bits Bit-stream to operate on
 
135
 * @param nbBits Number of bits to look for
 
136
 * @return Value of the bits peeked, interpreted as unsigned
 
137
 */
 
138
unsigned int speex_bits_peek_unsigned(SpeexBits *bits, int nbBits);
 
139
 
 
140
/** Get the value of the next bit in the stream, without modifying the
 
141
 * "cursor" position 
 
142
 * 
 
143
 * @param bits Bit-stream to operate on
 
144
 * @return Value of the bit peeked (one bit only)
 
145
 */
 
146
int speex_bits_peek(SpeexBits *bits);
 
147
 
 
148
/** Advances the position of the "bit cursor" in the stream 
 
149
 *
 
150
 * @param bits Bit-stream to operate on
 
151
 * @param n Number of bits to advance
 
152
 */
 
153
void speex_bits_advance(SpeexBits *bits, int n);
 
154
 
 
155
/** Returns the number of bits remaining to be read in a stream
 
156
 *
 
157
 * @param bits Bit-stream to operate on
 
158
 * @return Number of bits that can still be read from the stream
 
159
 */
 
160
int speex_bits_remaining(SpeexBits *bits);
 
161
 
 
162
/** Insert a terminator so that the data can be sent as a packet while auto-detecting 
 
163
 * the number of frames in each packet 
 
164
 *
 
165
 * @param bits Bit-stream to operate on
 
166
 */
 
167
void speex_bits_insert_terminator(SpeexBits *bits);
 
168
 
 
169
#ifdef __cplusplus
 
170
}
 
171
#endif
 
172
 
 
173
/* @} */
 
174
#endif