00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef SPEEX_JITTER_H
00037 #define SPEEX_JITTER_H
00038
00044 #include "speex.h"
00045 #include "speex_bits.h"
00046
00047 #ifdef __cplusplus
00048 extern "C" {
00049 #endif
00050
00052 struct JitterBuffer_;
00053
00055 typedef struct JitterBuffer_ JitterBuffer;
00056
00058 typedef struct _JitterBufferPacket JitterBufferPacket;
00059
00061 struct _JitterBufferPacket {
00062 char *data;
00063 spx_uint32_t len;
00064 spx_uint32_t timestamp;
00065 spx_uint32_t span;
00066 };
00067
00069 #define JITTER_BUFFER_OK 0
00070
00071 #define JITTER_BUFFER_MISSING 1
00072
00073 #define JITTER_BUFFER_INCOMPLETE 2
00074
00075 #define JITTER_BUFFER_INTERNAL_ERROR -1
00076
00077 #define JITTER_BUFFER_BAD_ARGUMENT -2
00078
00079
00081 #define JITTER_BUFFER_SET_MARGIN 0
00082
00083 #define JITTER_BUFFER_GET_MARGIN 1
00084
00086 #define JITTER_BUFFER_GET_AVALIABLE_COUNT 3
00087
00088 #define JITTER_BUFFER_ADJUST_INTERPOLATE -1
00089 #define JITTER_BUFFER_ADJUST_OK 0
00090 #define JITTER_BUFFER_ADJUST_DROP 1
00091
00097 JitterBuffer *jitter_buffer_init(int tick);
00098
00103 void jitter_buffer_reset(JitterBuffer *jitter);
00104
00109 void jitter_buffer_destroy(JitterBuffer *jitter);
00110
00116 void jitter_buffer_put(JitterBuffer *jitter, const JitterBufferPacket *packet);
00117
00124 int jitter_buffer_get(JitterBuffer *jitter, JitterBufferPacket *packet, spx_int32_t *start_offset);
00125
00130 int jitter_buffer_get_pointer_timestamp(JitterBuffer *jitter);
00131
00136 void jitter_buffer_tick(JitterBuffer *jitter);
00137
00145 int jitter_buffer_ctl(JitterBuffer *jitter, int request, void *ptr);
00146
00147 int jitter_buffer_update_delay(JitterBuffer *jitter, JitterBufferPacket *packet, spx_int32_t *start_offset);
00148
00149
00150
00159 typedef struct SpeexJitter {
00160 SpeexBits current_packet;
00161 int valid_bits;
00162 JitterBuffer *packets;
00163 void *dec;
00164 spx_int32_t frame_size;
00165 } SpeexJitter;
00166
00173 void speex_jitter_init(SpeexJitter *jitter, void *decoder, int sampling_rate);
00174
00176 void speex_jitter_destroy(SpeexJitter *jitter);
00177
00179 void speex_jitter_put(SpeexJitter *jitter, char *packet, int len, int timestamp);
00180
00182 void speex_jitter_get(SpeexJitter *jitter, spx_int16_t *out, int *start_offset);
00183
00185 int speex_jitter_get_pointer_timestamp(SpeexJitter *jitter);
00186
00187 #ifdef __cplusplus
00188 }
00189 #endif
00190
00191
00192 #endif