diff options
Diffstat (limited to 'apps/codecs/libspeex/speex/speex_jitter.h')
-rw-r--r-- | apps/codecs/libspeex/speex/speex_jitter.h | 68 |
1 files changed, 28 insertions, 40 deletions
diff --git a/apps/codecs/libspeex/speex/speex_jitter.h b/apps/codecs/libspeex/speex/speex_jitter.h index 3f3a43c240..7c948d474e 100644 --- a/apps/codecs/libspeex/speex/speex_jitter.h +++ b/apps/codecs/libspeex/speex/speex_jitter.h | |||
@@ -41,8 +41,7 @@ | |||
41 | * @{ | 41 | * @{ |
42 | */ | 42 | */ |
43 | 43 | ||
44 | #include "speex.h" | 44 | #include "speex_types.h" |
45 | #include "speex_bits.h" | ||
46 | 45 | ||
47 | #ifdef __cplusplus | 46 | #ifdef __cplusplus |
48 | extern "C" { | 47 | extern "C" { |
@@ -63,6 +62,7 @@ struct _JitterBufferPacket { | |||
63 | spx_uint32_t len; /**< Length of the packet in bytes */ | 62 | spx_uint32_t len; /**< Length of the packet in bytes */ |
64 | spx_uint32_t timestamp; /**< Timestamp for the packet */ | 63 | spx_uint32_t timestamp; /**< Timestamp for the packet */ |
65 | spx_uint32_t span; /**< Time covered by the packet (same units as timestamp) */ | 64 | spx_uint32_t span; /**< Time covered by the packet (same units as timestamp) */ |
65 | spx_uint32_t user_data; /**< Put whatever data you like here (it's ignored by the jitter buffer) */ | ||
66 | }; | 66 | }; |
67 | 67 | ||
68 | /** Packet has been retrieved */ | 68 | /** Packet has been retrieved */ |
@@ -82,11 +82,21 @@ struct _JitterBufferPacket { | |||
82 | /** Get minimum amount of extra buffering required (margin) */ | 82 | /** Get minimum amount of extra buffering required (margin) */ |
83 | #define JITTER_BUFFER_GET_MARGIN 1 | 83 | #define JITTER_BUFFER_GET_MARGIN 1 |
84 | /* JITTER_BUFFER_SET_AVAILABLE_COUNT wouldn't make sense */ | 84 | /* JITTER_BUFFER_SET_AVAILABLE_COUNT wouldn't make sense */ |
85 | |||
85 | /** Get the amount of available packets currently buffered */ | 86 | /** Get the amount of available packets currently buffered */ |
86 | #define JITTER_BUFFER_GET_AVAILABLE_COUNT 3 | 87 | #define JITTER_BUFFER_GET_AVAILABLE_COUNT 3 |
87 | /** Included because of an early misspelling (will remove in next release) */ | 88 | /** Included because of an early misspelling (will remove in next release) */ |
88 | #define JITTER_BUFFER_GET_AVALIABLE_COUNT 3 | 89 | #define JITTER_BUFFER_GET_AVALIABLE_COUNT 3 |
89 | 90 | ||
91 | /** */ | ||
92 | #define JITTER_BUFFER_SET_DESTROY_CALLBACK 4 | ||
93 | /** */ | ||
94 | #define JITTER_BUFFER_GET_DESTROY_CALLBACK 5 | ||
95 | |||
96 | /** */ | ||
97 | #define JITTER_BUFFER_SET_DELAY_STEP 6 | ||
98 | /** */ | ||
99 | #define JITTER_BUFFER_GET_DELAY_STEP 7 | ||
90 | 100 | ||
91 | 101 | ||
92 | #define JITTER_BUFFER_ADJUST_INTERPOLATE -1 | 102 | #define JITTER_BUFFER_ADJUST_INTERPOLATE -1 |
@@ -123,9 +133,18 @@ void jitter_buffer_put(JitterBuffer *jitter, const JitterBufferPacket *packet); | |||
123 | * | 133 | * |
124 | * @param jitter Jitter buffer state | 134 | * @param jitter Jitter buffer state |
125 | * @param packet Returned packet | 135 | * @param packet Returned packet |
136 | * @param desired_span Number of samples (or units) we wish to get from the buffer (no guarantee) | ||
126 | * @param current_timestamp Timestamp for the returned packet | 137 | * @param current_timestamp Timestamp for the returned packet |
127 | */ | 138 | */ |
128 | int jitter_buffer_get(JitterBuffer *jitter, JitterBufferPacket *packet, spx_int32_t *start_offset); | 139 | int jitter_buffer_get(JitterBuffer *jitter, JitterBufferPacket *packet, spx_int32_t desired_span, spx_int32_t *start_offset); |
140 | |||
141 | /** Used right after jitter_buffer_get() to obtain another packet that would have the same timestamp. | ||
142 | * This is mainly useful for media where a single "frame" can be split into several packets. | ||
143 | * | ||
144 | * @param jitter Jitter buffer state | ||
145 | * @param packet Returned packet | ||
146 | */ | ||
147 | int jitter_buffer_get_another(JitterBuffer *jitter, JitterBufferPacket *packet); | ||
129 | 148 | ||
130 | /** Get pointer timestamp of jitter buffer | 149 | /** Get pointer timestamp of jitter buffer |
131 | * | 150 | * |
@@ -139,6 +158,12 @@ int jitter_buffer_get_pointer_timestamp(JitterBuffer *jitter); | |||
139 | */ | 158 | */ |
140 | void jitter_buffer_tick(JitterBuffer *jitter); | 159 | void jitter_buffer_tick(JitterBuffer *jitter); |
141 | 160 | ||
161 | /** Telling the jitter buffer about the remaining data in the application buffer | ||
162 | * @param jitter Jitter buffer state | ||
163 | * @param rem Amount of data buffered by the application (timestamp units) | ||
164 | */ | ||
165 | void jitter_buffer_remaining_span(JitterBuffer *jitter, spx_uint32_t rem); | ||
166 | |||
142 | /** Used like the ioctl function to control the jitter buffer parameters | 167 | /** Used like the ioctl function to control the jitter buffer parameters |
143 | * | 168 | * |
144 | * @param jitter Jitter buffer state | 169 | * @param jitter Jitter buffer state |
@@ -152,45 +177,8 @@ int jitter_buffer_update_delay(JitterBuffer *jitter, JitterBufferPacket *packet, | |||
152 | 177 | ||
153 | /* @} */ | 178 | /* @} */ |
154 | 179 | ||
155 | /** @defgroup SpeexJitter SpeexJitter: Adaptive jitter buffer specifically for Speex | ||
156 | * This is the jitter buffer that reorders UDP/RTP packets and adjusts the buffer size | ||
157 | * to maintain good quality and low latency. This is a simplified version that works only | ||
158 | * with Speex, but is much easier to use. | ||
159 | * @{ | ||
160 | */ | ||
161 | |||
162 | /** Speex jitter-buffer state. Never use it directly! */ | ||
163 | typedef struct SpeexJitter { | ||
164 | SpeexBits current_packet; /**< Current Speex packet */ | ||
165 | int valid_bits; /**< True if Speex bits are valid */ | ||
166 | JitterBuffer *packets; /**< Generic jitter buffer state */ | ||
167 | void *dec; /**< Pointer to Speex decoder */ | ||
168 | spx_int32_t frame_size; /**< Frame size of Speex decoder */ | ||
169 | } SpeexJitter; | ||
170 | |||
171 | /** Initialise jitter buffer | ||
172 | * | ||
173 | * @param jitter State of the Speex jitter buffer | ||
174 | * @param decoder Speex decoder to call | ||
175 | * @param sampling_rate Sampling rate used by the decoder | ||
176 | */ | ||
177 | void speex_jitter_init(SpeexJitter *jitter, void *decoder, int sampling_rate); | ||
178 | |||
179 | /** Destroy jitter buffer */ | ||
180 | void speex_jitter_destroy(SpeexJitter *jitter); | ||
181 | |||
182 | /** Put one packet into the jitter buffer */ | ||
183 | void speex_jitter_put(SpeexJitter *jitter, char *packet, int len, int timestamp); | ||
184 | |||
185 | /** Get one packet from the jitter buffer */ | ||
186 | void speex_jitter_get(SpeexJitter *jitter, spx_int16_t *out, int *start_offset); | ||
187 | |||
188 | /** Get pointer timestamp of jitter buffer */ | ||
189 | int speex_jitter_get_pointer_timestamp(SpeexJitter *jitter); | ||
190 | |||
191 | #ifdef __cplusplus | 180 | #ifdef __cplusplus |
192 | } | 181 | } |
193 | #endif | 182 | #endif |
194 | 183 | ||
195 | /* @} */ | ||
196 | #endif | 184 | #endif |